diff --git a/lib/i18n/strings_de.i18n.json b/lib/i18n/de.i18n.json similarity index 100% rename from lib/i18n/strings_de.i18n.json rename to lib/i18n/de.i18n.json diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/en.i18n.json similarity index 100% rename from lib/i18n/strings.i18n.json rename to lib/i18n/en.i18n.json diff --git a/lib/i18n/strings_fr.i18n.json b/lib/i18n/fr.i18n.json similarity index 100% rename from lib/i18n/strings_fr.i18n.json rename to lib/i18n/fr.i18n.json diff --git a/lib/i18n/strings_it.i18n.json b/lib/i18n/it.i18n.json similarity index 100% rename from lib/i18n/strings_it.i18n.json rename to lib/i18n/it.i18n.json diff --git a/lib/i18n/strings_ko.i18n.json b/lib/i18n/ko.i18n.json similarity index 100% rename from lib/i18n/strings_ko.i18n.json rename to lib/i18n/ko.i18n.json diff --git a/lib/i18n/strings_nl.i18n.json b/lib/i18n/nl.i18n.json similarity index 100% rename from lib/i18n/strings_nl.i18n.json rename to lib/i18n/nl.i18n.json diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 287aa10d..f78867ce 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -1,48 +1,183 @@ /// Generated file. Do not edit. /// -/// Original: lib/i18n +/// Source: lib/i18n /// To regenerate, run: `dart run slang` /// /// Locales: 8 /// Strings: 4308 (538 per locale) /// -/// Built on 2026-01-20 at 12:42 UTC +/// Built on 2026-01-20 at 12:49 UTC // coverage:ignore-file -// ignore_for_file: type=lint +// ignore_for_file: type=lint, unused_import +// dart format off import 'package:flutter/widgets.dart'; -import 'package:slang/builder/model/node.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; import 'package:slang_flutter/slang_flutter.dart'; export 'package:slang_flutter/slang_flutter.dart'; -const AppLocale _baseLocale = AppLocale.en; +import 'strings_de.g.dart' deferred as l_de; +import 'strings_fr.g.dart' deferred as l_fr; +import 'strings_it.g.dart' deferred as l_it; +import 'strings_ko.g.dart' deferred as l_ko; +import 'strings_nl.g.dart' deferred as l_nl; +import 'strings_sv.g.dart' deferred as l_sv; +import 'strings_zh.g.dart' deferred as l_zh; +part 'strings_en.g.dart'; -/// Supported locales, see extension methods below. +/// Supported locales. /// /// Usage: /// - LocaleSettings.setLocale(AppLocale.en) // set locale /// - 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), - fr(languageCode: 'fr', build: _StringsFr.build), - it(languageCode: 'it', build: _StringsIt.build), - ko(languageCode: 'ko', build: _StringsKo.build), - nl(languageCode: 'nl', build: _StringsNl.build), - sv(languageCode: 'sv', build: _StringsSv.build), - zh(languageCode: 'zh', build: _StringsZh.build); + en(languageCode: 'en'), + de(languageCode: 'de'), + fr(languageCode: 'fr'), + it(languageCode: 'it'), + ko(languageCode: 'ko'), + nl(languageCode: 'nl'), + sv(languageCode: 'sv'), + zh(languageCode: 'zh'); - const AppLocale({required this.languageCode, this.scriptCode, this.countryCode, required this.build}); // ignore: unused_element + const AppLocale({ + required this.languageCode, + this.scriptCode, // ignore: unused_element, unused_element_parameter + this.countryCode, // ignore: unused_element, unused_element_parameter + }); @override final String languageCode; @override final String? scriptCode; @override final String? countryCode; - @override final TranslationBuilder build; + + @override + Future build({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) async { + switch (this) { + case AppLocale.en: + return TranslationsEn( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.de: + await l_de.loadLibrary(); + return l_de.TranslationsDe( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.fr: + await l_fr.loadLibrary(); + return l_fr.TranslationsFr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.it: + await l_it.loadLibrary(); + return l_it.TranslationsIt( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ko: + await l_ko.loadLibrary(); + return l_ko.TranslationsKo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.nl: + await l_nl.loadLibrary(); + return l_nl.TranslationsNl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.sv: + await l_sv.loadLibrary(); + return l_sv.TranslationsSv( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.zh: + await l_zh.loadLibrary(); + return l_zh.TranslationsZh( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + } + } + + @override + Translations buildSync({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) { + switch (this) { + case AppLocale.en: + return TranslationsEn( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.de: + return l_de.TranslationsDe( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.fr: + return l_fr.TranslationsFr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.it: + return l_it.TranslationsIt( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ko: + return l_ko.TranslationsKo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.nl: + return l_nl.TranslationsNl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.sv: + return l_sv.TranslationsSv( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.zh: + return l_zh.TranslationsZh( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + } + } /// Gets current instance managed by [LocaleSettings]. - Translations get translations => LocaleSettings.instance.translationMap[this]!; + Translations get translations => LocaleSettings.instance.getTranslations(this); } /// Method A: Simple @@ -88,19 +223,31 @@ extension BuildContextTranslationsExtension on BuildContext { /// Manages all translation instances and the current locale class LocaleSettings extends BaseFlutterLocaleSettings { - LocaleSettings._() : super(utils: AppLocaleUtils.instance); + LocaleSettings._() : super( + utils: AppLocaleUtils.instance, + lazy: true, + ); 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( + static Future setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); + static Future setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale); + static Future useDeviceLocale() => instance.useDeviceLocale(); + static Future setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver( + language: language, + locale: locale, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + + // synchronous versions + static AppLocale setLocaleSync(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocaleSync(locale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale setLocaleRawSync(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRawSync(rawLocale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale useDeviceLocaleSync() => instance.useDeviceLocaleSync(); + static void setPluralResolverSync({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolverSync( language: language, locale: locale, cardinalResolver: cardinalResolver, @@ -110,7 +257,10 @@ class LocaleSettings extends BaseFlutterLocaleSettings /// Provides utility functions without any side effects. class AppLocaleUtils extends BaseAppLocaleUtils { - AppLocaleUtils._() : super(baseLocale: _baseLocale, locales: AppLocale.values); + AppLocaleUtils._() : super( + baseLocale: AppLocale.en, + locales: AppLocale.values, + ); static final instance = AppLocaleUtils._(); @@ -121,11702 +271,3 @@ class AppLocaleUtils extends BaseAppLocaleUtils { 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; - - /// 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; - - /// Access flat map - dynamic operator[](String key) => $meta.getTranslation(key); - - 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 _StringsSubtitlingStylingEn subtitlingStyling = _StringsSubtitlingStylingEn._(_root); - late final _StringsMpvConfigEn mpvConfig = _StringsMpvConfigEn._(_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); - late final _StringsWatchTogetherEn watchTogether = _StringsWatchTogetherEn._(_root); - late final _StringsDownloadsEn downloads = _StringsDownloadsEn._(_root); -} - -// Path: app -class _StringsAppEn { - _StringsAppEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get title => 'Plezy'; - String get loading => 'Loading...'; -} - -// Path: auth -class _StringsAuthEn { - _StringsAuthEn._(this._root); - - 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.'; -} - -// Path: common -class _StringsCommonEn { - _StringsCommonEn._(this._root); - - 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 logout => 'Logout'; - String get unknown => 'Unknown'; - String get refresh => 'Refresh'; - String get yes => 'Yes'; - String get no => 'No'; - String get delete => 'Delete'; - String get shuffle => 'Shuffle'; - String get addTo => 'Add to...'; -} - -// Path: screens -class _StringsScreensEn { - _StringsScreensEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get licenses => 'Licenses'; - String get switchProfile => 'Switch Profile'; - String get subtitleStyling => 'Subtitle Styling'; - String get mpvConfig => 'MPV Configuration'; - String get search => 'Search'; - String get logs => 'Logs'; -} - -// Path: update -class _StringsUpdateEn { - _StringsUpdateEn._(this._root); - - 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'; -} - -// Path: settings -class _StringsSettingsEn { - _StringsSettingsEn._(this._root); - - 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 advanced => 'Advanced'; - String get episodePosterMode => 'Episode Poster Style'; - String get seriesPoster => 'Series Poster'; - String get seriesPosterDescription => 'Show the series poster for all episodes'; - String get seasonPoster => 'Season Poster'; - String get seasonPosterDescription => 'Show the season-specific poster for episodes'; - String get episodeThumbnail => 'Episode Thumbnail'; - String get episodeThumbnailDescription => 'Show 16:9 episode screenshot thumbnails'; - 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 showHeroSection => 'Show Hero Section'; - String get useGlobalHubs => 'Use Plex Home Layout'; - String get useGlobalHubsDescription => 'Show home page hubs like the official Plex client. When off, shows per-library recommendations instead.'; - String get showServerNameOnHubs => 'Show Server Name on Hubs'; - String get showServerNameOnHubsDescription => 'Always display the server name in hub titles. When off, only shows for duplicate hub names.'; - 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 videoPlayerControls => 'Video Player Controls'; - String get keyboardShortcuts => 'Keyboard Shortcuts'; - String get keyboardShortcutsDescription => 'Customize keyboard shortcuts'; - String get videoPlayerNavigation => 'Video Player Navigation'; - String get videoPlayerNavigationDescription => 'Use arrow keys to navigate video player controls'; - 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'; - String get downloads => 'Downloads'; - String get downloadLocationDescription => 'Choose where to store downloaded content'; - String get downloadLocationDefault => 'Default (App Storage)'; - String get downloadLocationCustom => 'Custom Location'; - String get selectFolder => 'Select Folder'; - String get resetToDefault => 'Reset to Default'; - String currentPath({required Object path}) => 'Current: ${path}'; - String get downloadLocationChanged => 'Download location changed'; - String get downloadLocationReset => 'Download location reset to default'; - String get downloadLocationInvalid => 'Selected folder is not writable'; - String get downloadLocationSelectError => 'Failed to select folder'; - String get downloadOnWifiOnly => 'Download on WiFi only'; - String get downloadOnWifiOnlyDescription => 'Prevent downloads when on cellular data'; - String get cellularDownloadBlocked => 'Downloads are disabled on cellular data. Connect to WiFi or change the setting.'; - String get maxVolume => 'Maximum Volume'; - String get maxVolumeDescription => 'Allow volume boost above 100% for quiet media'; - String maxVolumePercent({required Object percent}) => '${percent}%'; - String get maxVolumeHint => 'Enter max volume (100-300)'; - String get discordRichPresence => 'Discord Rich Presence'; - String get discordRichPresenceDescription => 'Show what you\'re watching on Discord'; - String get matchContentFrameRate => 'Match Content Frame Rate'; - String get matchContentFrameRateDescription => 'Adjust display refresh rate to match video content, reducing judder and saving battery'; -} - -// Path: search -class _StringsSearchEn { - _StringsSearchEn._(this._root); - - 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'; -} - -// Path: hotkeys -class _StringsHotkeysEn { - _StringsHotkeysEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String setShortcutFor({required Object actionName}) => 'Set Shortcut for ${actionName}'; - String get clearShortcut => 'Clear shortcut'; - late final _StringsHotkeysActionsEn actions = _StringsHotkeysActionsEn._(_root); -} - -// Path: pinEntry -class _StringsPinEntryEn { - _StringsPinEntryEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get enterPin => 'Enter PIN'; - String get showPin => 'Show PIN'; - String get hidePin => 'Hide PIN'; -} - -// Path: fileInfo -class _StringsFileInfoEn { - _StringsFileInfoEn._(this._root); - - 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'; -} - -// Path: mediaMenu -class _StringsMediaMenuEn { - _StringsMediaMenuEn._(this._root); - - 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'; -} - -// Path: accessibility -class _StringsAccessibilityEn { - _StringsAccessibilityEn._(this._root); - - 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'; -} - -// Path: tooltips -class _StringsTooltipsEn { - _StringsTooltipsEn._(this._root); - - final Translations _root; // ignore: unused_field - - // 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); - - 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 autoPlayNext => 'Auto-Play Next'; - String get playNext => 'Play Next'; - 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 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 pipButton => 'Picture-in-Picture mode'; - String get aspectRatioButton => 'Aspect ratio'; - String get fullscreenButton => 'Enter fullscreen'; - String get exitFullscreenButton => 'Exit fullscreen'; - String get alwaysOnTopButton => 'Always on top'; - 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); - - final Translations _root; // ignore: unused_field - - // Translations - String get admin => 'Admin'; - String get restricted => 'Restricted'; - String get protected => 'Protected'; - String get current => 'CURRENT'; -} - -// Path: messages -class _StringsMessagesEn { - _StringsMessagesEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get markedAsWatched => 'Marked as watched'; - String get markedAsUnwatched => 'Marked as unwatched'; - String get markedAsWatchedOffline => 'Marked as watched (will sync when online)'; - String get markedAsUnwatchedOffline => 'Marked as unwatched (will sync when online)'; - 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 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 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: subtitlingStyling -class _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingEn._(this._root); - - 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'; -} - -// Path: mpvConfig -class _StringsMpvConfigEn { - _StringsMpvConfigEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get title => 'MPV Configuration'; - String get description => 'Advanced video player settings'; - String get properties => 'Properties'; - String get presets => 'Presets'; - String get noProperties => 'No properties configured'; - String get noPresets => 'No saved presets'; - String get addProperty => 'Add Property'; - String get editProperty => 'Edit Property'; - String get deleteProperty => 'Delete Property'; - String get propertyKey => 'Property Key'; - String get propertyKeyHint => 'e.g., hwdec, demuxer-max-bytes'; - String get propertyValue => 'Property Value'; - String get propertyValueHint => 'e.g., auto, 256000000'; - String get saveAsPreset => 'Save as Preset...'; - String get presetName => 'Preset Name'; - String get presetNameHint => 'Enter a name for this preset'; - String get loadPreset => 'Load'; - String get deletePreset => 'Delete'; - String get presetSaved => 'Preset saved'; - String get presetLoaded => 'Preset loaded'; - String get presetDeleted => 'Preset deleted'; - String get confirmDeletePreset => 'Are you sure you want to delete this preset?'; - String get confirmDeleteProperty => 'Are you sure you want to delete this property?'; - String entriesCount({required Object count}) => '${count} entries'; -} - -// Path: dialog -class _StringsDialogEn { - _StringsDialogEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get confirmAction => 'Confirm Action'; - String get cancel => 'Cancel'; - String get playNow => 'Play Now'; -} - -// Path: discover -class _StringsDiscoverEn { - _StringsDiscoverEn._(this._root); - - 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 play => 'Play'; - String playEpisode({required Object season, required Object episode}) => '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); - - 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}'; -} - -// Path: libraries -class _StringsLibrariesEn { - _StringsLibrariesEn._(this._root); - - 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 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); - - 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'; -} - -// Path: serverSelection -class _StringsServerSelectionEn { - _StringsServerSelectionEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get allServerConnectionsFailed => 'Failed to connect to any servers. Please check your network and try again.'; - String get noServersFound => 'No servers found'; - String noServersFoundForAccount({required Object username, required Object email}) => 'No servers found for ${username} (${email})'; - String failedToLoadServers({required Object error}) => 'Failed to load servers: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailEn { - _StringsHubDetailEn._(this._root); - - 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'; -} - -// Path: logs -class _StringsLogsEn { - _StringsLogsEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get clearLogs => 'Clear Logs'; - String get copyLogs => 'Copy Logs'; - String get error => 'Error:'; - String get stackTrace => 'Stack Trace:'; -} - -// Path: licenses -class _StringsLicensesEn { - _StringsLicensesEn._(this._root); - - 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'; -} - -// Path: navigation -class _StringsNavigationEn { - _StringsNavigationEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get home => 'Home'; - String get search => 'Search'; - String get libraries => 'Libraries'; - String get settings => 'Settings'; - String get downloads => 'Downloads'; -} - -// Path: collections -class _StringsCollectionsEn { - _StringsCollectionsEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get title => 'Collections'; - String get collection => 'Collection'; - String get empty => 'Collection is empty'; - 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 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); - - 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 playlistName => 'Playlist Name'; - String get enterPlaylistName => 'Enter playlist name'; - String get delete => 'Delete Playlist'; - String get removeItem => 'Remove from Playlist'; - String get smartPlaylist => 'Smart 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 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: watchTogether -class _StringsWatchTogetherEn { - _StringsWatchTogetherEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get title => 'Watch Together'; - String get description => 'Watch content in sync with friends and family'; - String get createSession => 'Create Session'; - String get creating => 'Creating...'; - String get joinSession => 'Join Session'; - String get joining => 'Joining...'; - String get controlMode => 'Control Mode'; - String get controlModeQuestion => 'Who can control playback?'; - String get hostOnly => 'Host Only'; - String get anyone => 'Anyone'; - String get hostingSession => 'Hosting Session'; - String get inSession => 'In Session'; - String get sessionCode => 'Session Code'; - String get hostControlsPlayback => 'Host controls playback'; - String get anyoneCanControl => 'Anyone can control playback'; - String get hostControls => 'Host controls'; - String get anyoneControls => 'Anyone controls'; - String get participants => 'Participants'; - String get host => 'Host'; - String get hostBadge => 'HOST'; - String get youAreHost => 'You are the host'; - String get watchingWithOthers => 'Watching with others'; - String get endSession => 'End Session'; - String get leaveSession => 'Leave Session'; - String get endSessionQuestion => 'End Session?'; - String get leaveSessionQuestion => 'Leave Session?'; - String get endSessionConfirm => 'This will end the session for all participants.'; - String get leaveSessionConfirm => 'You will be removed from the session.'; - String get endSessionConfirmOverlay => 'This will end the watch session for all participants.'; - String get leaveSessionConfirmOverlay => 'You will be disconnected from the watch session.'; - String get end => 'End'; - String get leave => 'Leave'; - String get syncing => 'Syncing...'; - String get participant => 'participant'; - String get joinWatchSession => 'Join Watch Session'; - String get enterCodeHint => 'Enter 8-character code'; - String get pasteFromClipboard => 'Paste from clipboard'; - String get pleaseEnterCode => 'Please enter a session code'; - String get codeMustBe8Chars => 'Session code must be 8 characters'; - String get joinInstructions => 'Enter the session code shared by the host to join their watch session.'; - String get failedToCreate => 'Failed to create session'; - String get failedToJoin => 'Failed to join session'; - String get sessionCodeCopied => 'Session code copied to clipboard'; -} - -// Path: downloads -class _StringsDownloadsEn { - _StringsDownloadsEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get title => 'Downloads'; - String get manage => 'Manage'; - String get tvShows => 'TV Shows'; - String get movies => 'Movies'; - String get noDownloads => 'No downloads yet'; - String get noDownloadsDescription => 'Downloaded content will appear here for offline viewing'; - String get downloadNow => 'Download'; - String get deleteDownload => 'Delete download'; - String get retryDownload => 'Retry download'; - String get downloadQueued => 'Download queued'; - String episodesQueued({required Object count}) => '${count} episodes queued for download'; - String get downloadDeleted => 'Download deleted'; - String deleteConfirm({required Object title}) => 'Are you sure you want to delete "${title}"? This will remove the downloaded file from your device.'; - String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Deleting ${title}... (${current} of ${total})'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsEn { - _StringsHotkeysActionsEn._(this._root); - - final Translations _root; // ignore: unused_field - - // Translations - String get playPause => 'Play/Pause'; - String get volumeUp => 'Volume Up'; - String get volumeDown => 'Volume Down'; - String seekForward({required Object seconds}) => 'Seek Forward (${seconds}s)'; - String seekBackward({required Object seconds}) => 'Seek Backward (${seconds}s)'; - String get fullscreenToggle => 'Toggle Fullscreen'; - String get muteToggle => 'Toggle Mute'; - String get subtitleToggle => 'Toggle Subtitles'; - String get audioTrackNext => 'Next Audio Track'; - String get subtitleTrackNext => 'Next Subtitle Track'; - String get chapterNext => 'Next Chapter'; - String get chapterPrevious => 'Previous Chapter'; - String get speedIncrease => 'Increase Speed'; - String get speedDecrease => 'Decrease Speed'; - String get speedReset => 'Reset Speed'; - String get subSeekNext => 'Seek to Next Subtitle'; - String get subSeekPrev => 'Seek to Previous Subtitle'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsEn { - _StringsLibrariesTabsEn._(this._root); - - final Translations _root; // ignore: unused_field - - // 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); - - 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'; -} - -// 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); - } - - /// Metadata for the translations of . - @override final TranslationMetadata $meta; - - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); - - @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 _StringsSubtitlingStylingDe subtitlingStyling = _StringsSubtitlingStylingDe._(_root); - @override late final _StringsMpvConfigDe mpvConfig = _StringsMpvConfigDe._(_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 _StringsDownloadsDe downloads = _StringsDownloadsDe._(_root); - @override late final _StringsPlaylistsDe playlists = _StringsPlaylistsDe._(_root); - @override late final _StringsCollectionsDe collections = _StringsCollectionsDe._(_root); - @override late final _StringsWatchTogetherDe watchTogether = _StringsWatchTogetherDe._(_root); -} - -// Path: app -class _StringsAppDe implements _StringsAppEn { - _StringsAppDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Lädt...'; -} - -// Path: auth -class _StringsAuthDe implements _StringsAuthEn { - _StringsAuthDe._(this._root); - - @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.'; -} - -// Path: common -class _StringsCommonDe implements _StringsCommonEn { - _StringsCommonDe._(this._root); - - @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 logout => 'Abmelden'; - @override String get unknown => 'Unbekannt'; - @override String get refresh => 'Aktualisieren'; - @override String get yes => 'Ja'; - @override String get no => 'Nein'; - @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); - - @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 mpvConfig => 'MPV-Konfiguration'; - @override String get search => 'Suche'; - @override String get logs => 'Protokolle'; -} - -// Path: update -class _StringsUpdateDe implements _StringsUpdateEn { - _StringsUpdateDe._(this._root); - - @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'; -} - -// Path: settings -class _StringsSettingsDe implements _StringsSettingsEn { - _StringsSettingsDe._(this._root); - - @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 advanced => 'Erweitert'; - @override String get episodePosterMode => 'Episoden-Poster-Stil'; - @override String get seriesPoster => 'Serienposter'; - @override String get seriesPosterDescription => 'Zeige das Serienposter für alle Episoden'; - @override String get seasonPoster => 'Staffelposter'; - @override String get seasonPosterDescription => 'Zeige das staffelspezifische Poster für Episoden'; - @override String get episodeThumbnail => 'Episoden-Miniatur'; - @override String get episodeThumbnailDescription => 'Zeige 16:9 Episoden-Vorschaubilder'; - @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 showHeroSection => 'Hero-Bereich anzeigen'; - @override String get useGlobalHubs => 'Plex-Startseiten-Layout verwenden'; - @override String get useGlobalHubsDescription => 'Zeigt Startseiten-Hubs wie der offizielle Plex-Client. Wenn deaktiviert, werden stattdessen Empfehlungen pro Bibliothek angezeigt.'; - @override String get showServerNameOnHubs => 'Servername bei Hubs anzeigen'; - @override String get showServerNameOnHubsDescription => 'Zeigt immer den Servernamen in Hub-Titeln an. Wenn deaktiviert, nur bei doppelten Hub-Namen.'; - @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 videoPlayerControls => 'Videoplayer-Steuerung'; - @override String get keyboardShortcuts => 'Tastenkürzel'; - @override String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; - @override String get videoPlayerNavigation => 'Videoplayer-Navigation'; - @override String get videoPlayerNavigationDescription => 'Pfeiltasten zur Navigation der Videoplayer-Steuerung verwenden'; - @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'; - @override String get downloads => 'Downloads'; - @override String get downloadLocationDescription => 'Speicherort für heruntergeladene Inhalte wählen'; - @override String get downloadLocationDefault => 'Standard (App-Speicher)'; - @override String get downloadLocationCustom => 'Benutzerdefinierter Speicherort'; - @override String get selectFolder => 'Ordner auswählen'; - @override String get resetToDefault => 'Auf Standard zurücksetzen'; - @override String currentPath({required Object path}) => 'Aktuell: ${path}'; - @override String get downloadLocationChanged => 'Download-Speicherort geändert'; - @override String get downloadLocationReset => 'Download-Speicherort auf Standard zurückgesetzt'; - @override String get downloadLocationInvalid => 'Ausgewählter Ordner ist nicht beschreibbar'; - @override String get downloadLocationSelectError => 'Ordnerauswahl fehlgeschlagen'; - @override String get downloadOnWifiOnly => 'Nur über WLAN herunterladen'; - @override String get downloadOnWifiOnlyDescription => 'Downloads über mobile Daten verhindern'; - @override String get cellularDownloadBlocked => 'Downloads sind über mobile Daten deaktiviert. Verbinde dich mit einem WLAN oder ändere die Einstellung.'; - @override String get maxVolume => 'Maximale Lautstärke'; - @override String get maxVolumeDescription => 'Lautstärke über 100% für leise Medien erlauben'; - @override String maxVolumePercent({required Object percent}) => '${percent}%'; - @override String get maxVolumeHint => 'Maximale Lautstärke eingeben (100-300)'; - @override String get discordRichPresence => 'Discord Rich Presence'; - @override String get discordRichPresenceDescription => 'Zeige auf Discord, was du gerade schaust'; - @override String get matchContentFrameRate => 'Inhalts-Bildrate anpassen'; - @override String get matchContentFrameRateDescription => 'Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku'; -} - -// Path: search -class _StringsSearchDe implements _StringsSearchEn { - _StringsSearchDe._(this._root); - - @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'; -} - -// Path: hotkeys -class _StringsHotkeysDe implements _StringsHotkeysEn { - _StringsHotkeysDe._(this._root); - - @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'; - @override late final _StringsHotkeysActionsDe actions = _StringsHotkeysActionsDe._(_root); -} - -// Path: pinEntry -class _StringsPinEntryDe implements _StringsPinEntryEn { - _StringsPinEntryDe._(this._root); - - @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'; -} - -// Path: fileInfo -class _StringsFileInfoDe implements _StringsFileInfoEn { - _StringsFileInfoDe._(this._root); - - @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'; -} - -// Path: mediaMenu -class _StringsMediaMenuDe implements _StringsMediaMenuEn { - _StringsMediaMenuDe._(this._root); - - @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'; -} - -// Path: accessibility -class _StringsAccessibilityDe implements _StringsAccessibilityEn { - _StringsAccessibilityDe._(this._root); - - @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'; -} - -// Path: tooltips -class _StringsTooltipsDe implements _StringsTooltipsEn { - _StringsTooltipsDe._(this._root); - - @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'; -} - -// Path: videoControls -class _StringsVideoControlsDe implements _StringsVideoControlsEn { - _StringsVideoControlsDe._(this._root); - - @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 autoPlayNext => 'Nächstes automatisch abspielen'; - @override String get playNext => 'Nächstes abspielen'; - @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 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 pipButton => 'Bild-in-Bild Modus'; - @override String get aspectRatioButton => 'Seitenverhältnis'; - @override String get fullscreenButton => 'Vollbild aktivieren'; - @override String get exitFullscreenButton => 'Vollbild verlassen'; - @override String get alwaysOnTopButton => 'Immer im Vordergrund'; - @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); - - @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'; -} - -// Path: messages -class _StringsMessagesDe implements _StringsMessagesEn { - _StringsMessagesDe._(this._root); - - @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 markedAsWatchedOffline => 'Als gesehen markiert (wird synchronisiert, wenn online)'; - @override String get markedAsUnwatchedOffline => 'Als ungesehen markiert (wird synchronisiert, wenn online)'; - @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 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 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: subtitlingStyling -class _StringsSubtitlingStylingDe implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingDe._(this._root); - - @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'; -} - -// Path: mpvConfig -class _StringsMpvConfigDe implements _StringsMpvConfigEn { - _StringsMpvConfigDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get title => 'MPV-Konfiguration'; - @override String get description => 'Erweiterte Videoplayer-Einstellungen'; - @override String get properties => 'Eigenschaften'; - @override String get presets => 'Voreinstellungen'; - @override String get noProperties => 'Keine Eigenschaften konfiguriert'; - @override String get noPresets => 'Keine gespeicherten Voreinstellungen'; - @override String get addProperty => 'Eigenschaft hinzufügen'; - @override String get editProperty => 'Eigenschaft bearbeiten'; - @override String get deleteProperty => 'Eigenschaft löschen'; - @override String get propertyKey => 'Eigenschaftsschlüssel'; - @override String get propertyKeyHint => 'z.B. hwdec, demuxer-max-bytes'; - @override String get propertyValue => 'Eigenschaftswert'; - @override String get propertyValueHint => 'z.B. auto, 256000000'; - @override String get saveAsPreset => 'Als Voreinstellung speichern...'; - @override String get presetName => 'Name der Voreinstellung'; - @override String get presetNameHint => 'Namen für diese Voreinstellung eingeben'; - @override String get loadPreset => 'Laden'; - @override String get deletePreset => 'Löschen'; - @override String get presetSaved => 'Voreinstellung gespeichert'; - @override String get presetLoaded => 'Voreinstellung geladen'; - @override String get presetDeleted => 'Voreinstellung gelöscht'; - @override String get confirmDeletePreset => 'Möchten Sie diese Voreinstellung wirklich löschen?'; - @override String get confirmDeleteProperty => 'Möchten Sie diese Eigenschaft wirklich löschen?'; - @override String entriesCount({required Object count}) => '${count} Einträge'; -} - -// Path: dialog -class _StringsDialogDe implements _StringsDialogEn { - _StringsDialogDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get confirmAction => 'Aktion bestätigen'; - @override String get cancel => 'Abbrechen'; - @override String get playNow => 'Jetzt abspielen'; -} - -// Path: discover -class _StringsDiscoverDe implements _StringsDiscoverEn { - _StringsDiscoverDe._(this._root); - - @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 play => 'Abspielen'; - @override String playEpisode({required Object season, required Object episode}) => 'S${season}E${episode}'; - @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); - - @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'; -} - -// Path: libraries -class _StringsLibrariesDe implements _StringsLibrariesEn { - _StringsLibrariesDe._(this._root); - - @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 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); - - @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'; -} - -// Path: serverSelection -class _StringsServerSelectionDe implements _StringsServerSelectionEn { - _StringsServerSelectionDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get allServerConnectionsFailed => 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; - @override String get noServersFound => 'Keine Server gefunden'; - @override String noServersFoundForAccount({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})'; - @override String failedToLoadServers({required Object error}) => 'Server konnten nicht geladen werden: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailDe implements _StringsHubDetailEn { - _StringsHubDetailDe._(this._root); - - @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'; -} - -// Path: logs -class _StringsLogsDe implements _StringsLogsEn { - _StringsLogsDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get clearLogs => 'Protokolle löschen'; - @override String get copyLogs => 'Protokolle kopieren'; - @override String get error => 'Fehler:'; - @override String get stackTrace => 'Stacktrace:'; -} - -// Path: licenses -class _StringsLicensesDe implements _StringsLicensesEn { - _StringsLicensesDe._(this._root); - - @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'; -} - -// Path: navigation -class _StringsNavigationDe implements _StringsNavigationEn { - _StringsNavigationDe._(this._root); - - @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'; - @override String get downloads => 'Downloads'; -} - -// Path: downloads -class _StringsDownloadsDe implements _StringsDownloadsEn { - _StringsDownloadsDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get title => 'Downloads'; - @override String get manage => 'Verwalten'; - @override String get tvShows => 'Serien'; - @override String get movies => 'Filme'; - @override String get noDownloads => 'Noch keine Downloads'; - @override String get noDownloadsDescription => 'Heruntergeladene Inhalte werden hier für die Offline-Wiedergabe angezeigt'; - @override String get downloadNow => 'Herunterladen'; - @override String get deleteDownload => 'Download löschen'; - @override String get retryDownload => 'Download wiederholen'; - @override String get downloadQueued => 'Download in Warteschlange'; - @override String episodesQueued({required Object count}) => '${count} Episoden zum Download hinzugefügt'; - @override String get downloadDeleted => 'Download gelöscht'; - @override String deleteConfirm({required Object title}) => 'Möchtest du "${title}" wirklich löschen? Die heruntergeladene Datei wird von deinem Gerät entfernt.'; - @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Lösche ${title}... (${current} von ${total})'; -} - -// Path: playlists -class _StringsPlaylistsDe implements _StringsPlaylistsEn { - _StringsPlaylistsDe._(this._root); - - @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 playlistName => 'Name der Wiedergabeliste'; - @override String get enterPlaylistName => 'Name der Wiedergabeliste eingeben'; - @override String get delete => 'Wiedergabeliste löschen'; - @override String get removeItem => 'Aus Wiedergabeliste entfernen'; - @override String get smartPlaylist => 'Intelligente 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 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); - - @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 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 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: watchTogether -class _StringsWatchTogetherDe implements _StringsWatchTogetherEn { - _StringsWatchTogetherDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get title => 'Gemeinsam Schauen'; - @override String get description => 'Inhalte synchron mit Freunden und Familie schauen'; - @override String get createSession => 'Sitzung Erstellen'; - @override String get creating => 'Erstellen...'; - @override String get joinSession => 'Sitzung Beitreten'; - @override String get joining => 'Beitreten...'; - @override String get controlMode => 'Steuerungsmodus'; - @override String get controlModeQuestion => 'Wer kann die Wiedergabe steuern?'; - @override String get hostOnly => 'Nur Host'; - @override String get anyone => 'Alle'; - @override String get hostingSession => 'Sitzung Hosten'; - @override String get inSession => 'In Sitzung'; - @override String get sessionCode => 'Sitzungscode'; - @override String get hostControlsPlayback => 'Host steuert die Wiedergabe'; - @override String get anyoneCanControl => 'Alle können die Wiedergabe steuern'; - @override String get hostControls => 'Host steuert'; - @override String get anyoneControls => 'Alle steuern'; - @override String get participants => 'Teilnehmer'; - @override String get host => 'Host'; - @override String get hostBadge => 'HOST'; - @override String get youAreHost => 'Du bist der Host'; - @override String get watchingWithOthers => 'Mit anderen schauen'; - @override String get endSession => 'Sitzung Beenden'; - @override String get leaveSession => 'Sitzung Verlassen'; - @override String get endSessionQuestion => 'Sitzung Beenden?'; - @override String get leaveSessionQuestion => 'Sitzung Verlassen?'; - @override String get endSessionConfirm => 'Dies beendet die Sitzung für alle Teilnehmer.'; - @override String get leaveSessionConfirm => 'Du wirst aus der Sitzung entfernt.'; - @override String get endSessionConfirmOverlay => 'Dies beendet die Schausitzung für alle Teilnehmer.'; - @override String get leaveSessionConfirmOverlay => 'Du wirst von der Schausitzung getrennt.'; - @override String get end => 'Beenden'; - @override String get leave => 'Verlassen'; - @override String get syncing => 'Synchronisieren...'; - @override String get participant => 'Teilnehmer'; - @override String get joinWatchSession => 'Schausitzung Beitreten'; - @override String get enterCodeHint => '8-stelligen Code eingeben'; - @override String get pasteFromClipboard => 'Aus Zwischenablage einfügen'; - @override String get pleaseEnterCode => 'Bitte gib einen Sitzungscode ein'; - @override String get codeMustBe8Chars => 'Sitzungscode muss 8 Zeichen haben'; - @override String get joinInstructions => 'Gib den vom Host geteilten Sitzungscode ein, um seiner Schausitzung beizutreten.'; - @override String get failedToCreate => 'Sitzung konnte nicht erstellt werden'; - @override String get failedToJoin => 'Sitzung konnte nicht beigetreten werden'; - @override String get sessionCodeCopied => 'Sitzungscode in Zwischenablage kopiert'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsDe implements _StringsHotkeysActionsEn { - _StringsHotkeysActionsDe._(this._root); - - @override final _StringsDe _root; // ignore: unused_field - - // Translations - @override String get playPause => 'Wiedergabe/Pause'; - @override String get volumeUp => 'Lauter'; - @override String get volumeDown => 'Leiser'; - @override String seekForward({required Object seconds}) => 'Vorspulen (${seconds}s)'; - @override String seekBackward({required Object seconds}) => 'Zurückspulen (${seconds}s)'; - @override String get fullscreenToggle => 'Vollbild umschalten'; - @override String get muteToggle => 'Stumm umschalten'; - @override String get subtitleToggle => 'Untertitel umschalten'; - @override String get audioTrackNext => 'Nächste Audiospur'; - @override String get subtitleTrackNext => 'Nächste Untertitelspur'; - @override String get chapterNext => 'Nächstes Kapitel'; - @override String get chapterPrevious => 'Vorheriges Kapitel'; - @override String get speedIncrease => 'Geschwindigkeit erhöhen'; - @override String get speedDecrease => 'Geschwindigkeit verringern'; - @override String get speedReset => 'Geschwindigkeit zurücksetzen'; - @override String get subSeekNext => 'Zum nächsten Untertitel springen'; - @override String get subSeekPrev => 'Zum vorherigen Untertitel springen'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsDe implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsDe._(this._root); - - @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'; -} - -// Path: libraries.groupings -class _StringsLibrariesGroupingsDe implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsDe._(this._root); - - @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'; -} - -// Path: -class _StringsFr implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsFr.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.fr, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } - - /// Metadata for the translations of . - @override final TranslationMetadata $meta; - - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); - - @override late final _StringsFr _root = this; // ignore: unused_field - - // Translations - @override late final _StringsAppFr app = _StringsAppFr._(_root); - @override late final _StringsAuthFr auth = _StringsAuthFr._(_root); - @override late final _StringsCommonFr common = _StringsCommonFr._(_root); - @override late final _StringsScreensFr screens = _StringsScreensFr._(_root); - @override late final _StringsUpdateFr update = _StringsUpdateFr._(_root); - @override late final _StringsSettingsFr settings = _StringsSettingsFr._(_root); - @override late final _StringsSearchFr search = _StringsSearchFr._(_root); - @override late final _StringsHotkeysFr hotkeys = _StringsHotkeysFr._(_root); - @override late final _StringsPinEntryFr pinEntry = _StringsPinEntryFr._(_root); - @override late final _StringsFileInfoFr fileInfo = _StringsFileInfoFr._(_root); - @override late final _StringsMediaMenuFr mediaMenu = _StringsMediaMenuFr._(_root); - @override late final _StringsAccessibilityFr accessibility = _StringsAccessibilityFr._(_root); - @override late final _StringsTooltipsFr tooltips = _StringsTooltipsFr._(_root); - @override late final _StringsVideoControlsFr videoControls = _StringsVideoControlsFr._(_root); - @override late final _StringsUserStatusFr userStatus = _StringsUserStatusFr._(_root); - @override late final _StringsMessagesFr messages = _StringsMessagesFr._(_root); - @override late final _StringsSubtitlingStylingFr subtitlingStyling = _StringsSubtitlingStylingFr._(_root); - @override late final _StringsMpvConfigFr mpvConfig = _StringsMpvConfigFr._(_root); - @override late final _StringsDialogFr dialog = _StringsDialogFr._(_root); - @override late final _StringsDiscoverFr discover = _StringsDiscoverFr._(_root); - @override late final _StringsErrorsFr errors = _StringsErrorsFr._(_root); - @override late final _StringsLibrariesFr libraries = _StringsLibrariesFr._(_root); - @override late final _StringsAboutFr about = _StringsAboutFr._(_root); - @override late final _StringsServerSelectionFr serverSelection = _StringsServerSelectionFr._(_root); - @override late final _StringsHubDetailFr hubDetail = _StringsHubDetailFr._(_root); - @override late final _StringsLogsFr logs = _StringsLogsFr._(_root); - @override late final _StringsLicensesFr licenses = _StringsLicensesFr._(_root); - @override late final _StringsNavigationFr navigation = _StringsNavigationFr._(_root); - @override late final _StringsCollectionsFr collections = _StringsCollectionsFr._(_root); - @override late final _StringsPlaylistsFr playlists = _StringsPlaylistsFr._(_root); - @override late final _StringsWatchTogetherFr watchTogether = _StringsWatchTogetherFr._(_root); - @override late final _StringsDownloadsFr downloads = _StringsDownloadsFr._(_root); -} - -// Path: app -class _StringsAppFr implements _StringsAppEn { - _StringsAppFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Chargement...'; -} - -// Path: auth -class _StringsAuthFr implements _StringsAuthEn { - _StringsAuthFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get signInWithPlex => 'S\'inscrire avec Plex'; - @override String get showQRCode => 'Afficher le QR Code'; - @override String get cancel => 'Annuler'; - @override String get authenticate => 'S\'authentifier'; - @override String get retry => 'Réessayer'; - @override String get debugEnterToken => 'Debug: Entrez votre token Plex'; - @override String get plexTokenLabel => 'Token d\'authentification Plex'; - @override String get plexTokenHint => 'Entrez votre token Plex.tv'; - @override String get authenticationTimeout => 'Délai d\'authentification expiré. Veuillez réessayer.'; - @override String get scanQRCodeInstruction => 'Scannez ce code QR avec un appareil connecté à Plex pour vous authentifier.'; - @override String get waitingForAuth => 'En attente d\'authentification...\nVeuillez vous connecter dans votre navigateur.'; -} - -// Path: common -class _StringsCommonFr implements _StringsCommonEn { - _StringsCommonFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get cancel => 'Annuler'; - @override String get save => 'Sauvegarder'; - @override String get close => 'Fermer'; - @override String get clear => 'Nettoyer'; - @override String get reset => 'Réinitialiser'; - @override String get later => 'Plus tard'; - @override String get submit => 'Soumettre'; - @override String get confirm => 'Confirmer'; - @override String get retry => 'Réessayer'; - @override String get logout => 'Se déconnecter'; - @override String get unknown => 'Inconnu'; - @override String get refresh => 'Rafraichir'; - @override String get yes => 'Oui'; - @override String get no => 'Non'; - @override String get delete => 'Supprimer'; - @override String get shuffle => 'Mélanger'; - @override String get addTo => 'Ajouter à...'; -} - -// Path: screens -class _StringsScreensFr implements _StringsScreensEn { - _StringsScreensFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get licenses => 'Licenses'; - @override String get switchProfile => 'Changer de profil'; - @override String get subtitleStyling => 'Configuration des sous-titres'; - @override String get mpvConfig => 'Configuration MPV'; - @override String get search => 'Recherche'; - @override String get logs => 'Logs'; -} - -// Path: update -class _StringsUpdateFr implements _StringsUpdateEn { - _StringsUpdateFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get available => 'Mise à jour disponible'; - @override String versionAvailable({required Object version}) => 'Version ${version} disponible'; - @override String currentVersion({required Object version}) => 'Installé: ${version}'; - @override String get skipVersion => 'Ignorer cette version'; - @override String get viewRelease => 'Voir la Release'; - @override String get latestVersion => 'Vous utilisez la dernière version'; - @override String get checkFailed => 'Échec de la vérification des mises à jour'; -} - -// Path: settings -class _StringsSettingsFr implements _StringsSettingsEn { - _StringsSettingsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Paramètres'; - @override String get language => 'Langue'; - @override String get theme => 'Thème'; - @override String get appearance => 'Apparence'; - @override String get videoPlayback => 'Lecture vidéo'; - @override String get advanced => 'Avancé'; - @override String get episodePosterMode => 'Style du Poster d\'épisode'; - @override String get seriesPoster => 'Poster de série'; - @override String get seriesPosterDescription => 'Afficher le poster de série pour tous les épisodes'; - @override String get seasonPoster => 'Poster de saison'; - @override String get seasonPosterDescription => 'Afficher le poster spécifique à la saison pour les épisodes'; - @override String get episodeThumbnail => 'Mignature d\'épisode'; - @override String get episodeThumbnailDescription => 'Afficher les vignettes des captures d\'écran des épisodes au format 16:9'; - @override String get showHeroSectionDescription => 'Afficher le carrousel de contenu en vedette sur l\'écran d\'accueil'; - @override String get secondsLabel => 'Secondes'; - @override String get minutesLabel => 'Minutes'; - @override String get secondsShort => 's'; - @override String get minutesShort => 'm'; - @override String durationHint({required Object min, required Object max}) => 'Entrez la durée (${min}-${max})'; - @override String get systemTheme => 'Système'; - @override String get systemThemeDescription => 'Suivre les paramètres système'; - @override String get lightTheme => 'Light'; - @override String get darkTheme => 'Dark'; - @override String get libraryDensity => 'Densité des bibliothèques'; - @override String get compact => 'Compact'; - @override String get compactDescription => 'Cartes plus petites, plus d\'éléments visibles'; - @override String get normal => 'Normal'; - @override String get normalDescription => 'Taille par défaut'; - @override String get comfortable => 'Confortable'; - @override String get comfortableDescription => 'Cartes plus grandes, moins d\'éléments visibles'; - @override String get viewMode => 'Mode d\'affichage'; - @override String get gridView => 'Grille'; - @override String get gridViewDescription => 'Afficher les éléments dans une disposition en grille'; - @override String get listView => 'Liste'; - @override String get listViewDescription => 'Afficher les éléments dans une liste'; - @override String get showHeroSection => 'Afficher la section Hero'; - @override String get useGlobalHubs => 'Utiliser la disposition Plex Home'; - @override String get useGlobalHubsDescription => 'Afficher les hubs de la page d\'accueil comme le client Plex officiel. Lorsque cette option est désactivée, affiche à la place les recommandations par bibliothèque.'; - @override String get showServerNameOnHubs => 'Afficher le nom du serveur sur les hubs'; - @override String get showServerNameOnHubsDescription => 'Toujours afficher le nom du serveur dans les titres des hubs. Lorsque cette option est désactivée, seuls les noms de hubs en double s\'affichent.'; - @override String get hardwareDecoding => 'Décodage matériel'; - @override String get hardwareDecodingDescription => 'Utilisez l\'accélération matérielle lorsqu\'elle est disponible.'; - @override String get bufferSize => 'Taille du Buffer'; - @override String bufferSizeMB({required Object size}) => '${size}MB'; - @override String get subtitleStyling => 'Stylisation des sous-titres'; - @override String get subtitleStylingDescription => 'Personnaliser l\'apparence des sous-titres'; - @override String get smallSkipDuration => 'Small Skip Duration'; - @override String get largeSkipDuration => 'Large Skip Duration'; - @override String secondsUnit({required Object seconds}) => '${seconds} secondes'; - @override String get defaultSleepTimer => 'Minuterie de mise en veille par défaut'; - @override String minutesUnit({required Object minutes}) => '${minutes} minutes'; - @override String get rememberTrackSelections => 'Mémoriser les sélections de pistes par émission/film'; - @override String get rememberTrackSelectionsDescription => 'Enregistrer automatiquement les préférences linguistiques pour l\'audio et les sous-titres lorsque vous changez de piste pendant la lecture'; - @override String get videoPlayerControls => 'Commandes du lecteur vidéo'; - @override String get keyboardShortcuts => 'Raccourcis clavier'; - @override String get keyboardShortcutsDescription => 'Personnaliser les raccourcis clavier'; - @override String get videoPlayerNavigation => 'Navigation dans le lecteur vidéo'; - @override String get videoPlayerNavigationDescription => 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.'; - @override String get debugLogging => 'Journalisation de débogage'; - @override String get debugLoggingDescription => 'Activer la journalisation détaillée pour le dépannage'; - @override String get viewLogs => 'Voir les logs'; - @override String get viewLogsDescription => 'Voir les logs d\'application'; - @override String get clearCache => 'Vider le cache'; - @override String get clearCacheDescription => 'Cela effacera toutes les images et données mises en cache. Le chargement du contenu de l\'application peut prendre plus de temps après avoir effacé le cache.'; - @override String get clearCacheSuccess => 'Cache effacé avec succès'; - @override String get resetSettings => 'Réinitialiser les paramètres'; - @override String get resetSettingsDescription => 'Cela réinitialisera tous les paramètres à leurs valeurs par défaut. Cette action ne peut pas être annulée.'; - @override String get resetSettingsSuccess => 'Réinitialisation des paramètres réussie'; - @override String get shortcutsReset => 'Raccourcis réinitialisés aux valeurs par défaut'; - @override String get about => 'À propos'; - @override String get aboutDescription => 'Informations sur l\'application et licences'; - @override String get updates => 'Mises à jour'; - @override String get updateAvailable => 'Mise à jour disponible'; - @override String get checkForUpdates => 'Vérifier les mises à jour'; - @override String get validationErrorEnterNumber => 'Veuillez saisir un numéro valide'; - @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'La durée doit être comprise entre ${min} et ${max} ${unit}'; - @override String shortcutAlreadyAssigned({required Object action}) => 'Raccourci déjà attribué à ${action}'; - @override String shortcutUpdated({required Object action}) => 'Raccourci mis à jour pour ${action}'; - @override String get autoSkip => 'Skip automatique'; - @override String get autoSkipIntro => 'Skip automatique de l\'introduction'; - @override String get autoSkipIntroDescription => 'Skipper automatiquement l\'introduction après quelques secondes'; - @override String get autoSkipCredits => 'Skip automatique des crédits'; - @override String get autoSkipCreditsDescription => 'Passer les crédits et passer à l\'épisode suivant automatiquement'; - @override String get autoSkipDelay => 'Délai avant skip automatique'; - @override String autoSkipDelayDescription({required Object seconds}) => 'Attendre ${seconds} secondes avant l\'auto-skip'; - @override String get downloads => 'Téléchargement'; - @override String get downloadLocationDescription => 'Choisissez où stocker le contenu téléchargé'; - @override String get downloadLocationDefault => 'Par défaut (stockage de l\'application)'; - @override String get downloadLocationCustom => 'Emplacement personnalisé'; - @override String get selectFolder => 'Sélectionner un dossier'; - @override String get resetToDefault => 'Réinitialiser les paramètres par défaut'; - @override String currentPath({required Object path}) => 'Actuel: ${path}'; - @override String get downloadLocationChanged => 'Emplacement de téléchargement modifié'; - @override String get downloadLocationReset => 'Emplacement de téléchargement réinitialisé à la valeur par défaut'; - @override String get downloadLocationInvalid => 'Le dossier sélectionné n\'est pas accessible en écriture'; - @override String get downloadLocationSelectError => 'Échec de la sélection du dossier'; - @override String get downloadOnWifiOnly => 'Télécharger uniquement via WiFi'; - @override String get downloadOnWifiOnlyDescription => 'Empêcher les téléchargements lorsque vous utilisez les données cellulaires'; - @override String get cellularDownloadBlocked => 'Les téléchargements sont désactivés sur les données cellulaires. Connectez-vous au Wi-Fi ou modifiez le paramètre.'; - @override String get maxVolume => 'Volume maximal'; - @override String get maxVolumeDescription => 'Autoriser l\'augmentation du volume au-delà de 100 % pour les médias silencieux'; - @override String maxVolumePercent({required Object percent}) => '${percent}%'; - @override String get maxVolumeHint => 'Entrez le volume maximal (100-300)'; - @override String get discordRichPresence => 'Discord Rich Presence'; - @override String get discordRichPresenceDescription => 'Montrez ce que vous regardez sur Discord'; - @override String get matchContentFrameRate => 'Fréquence d\'images du contenu correspondant'; - @override String get matchContentFrameRateDescription => 'Ajustez la fréquence de rafraîchissement de l\'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie'; -} - -// Path: search -class _StringsSearchFr implements _StringsSearchEn { - _StringsSearchFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get hint => 'Rechercher des films, des séries, de la musique...'; - @override String get tryDifferentTerm => 'Essayez un autre terme de recherche'; - @override String get searchYourMedia => 'Rechercher dans vos médias'; - @override String get enterTitleActorOrKeyword => 'Entrez un titre, un acteur ou un mot-clé'; -} - -// Path: hotkeys -class _StringsHotkeysFr implements _StringsHotkeysEn { - _StringsHotkeysFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String setShortcutFor({required Object actionName}) => 'Définir un raccourci pour ${actionName}'; - @override String get clearShortcut => 'Effacer le raccourci'; - @override late final _StringsHotkeysActionsFr actions = _StringsHotkeysActionsFr._(_root); -} - -// Path: pinEntry -class _StringsPinEntryFr implements _StringsPinEntryEn { - _StringsPinEntryFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get enterPin => 'Entrer le code PIN'; - @override String get showPin => 'Afficher le code PIN'; - @override String get hidePin => 'Masquer le code PIN'; -} - -// Path: fileInfo -class _StringsFileInfoFr implements _StringsFileInfoEn { - _StringsFileInfoFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Informations sur le fichier'; - @override String get video => 'Vidéo'; - @override String get audio => 'Audio'; - @override String get file => 'Fichier'; - @override String get advanced => 'Avancé'; - @override String get codec => 'Codec'; - @override String get resolution => 'Résolution'; - @override String get bitrate => 'Bitrate'; - @override String get frameRate => 'Fréquence d\'images'; - @override String get aspectRatio => 'Format d\'image'; - @override String get profile => 'Profil'; - @override String get bitDepth => 'Profondeur de bits'; - @override String get colorSpace => 'Espace colorimétrique'; - @override String get colorRange => 'Gamme de couleurs'; - @override String get colorPrimaries => 'Couleurs primaires'; - @override String get chromaSubsampling => 'Sous-échantillonnage chromatique'; - @override String get channels => 'Channels'; - @override String get path => 'Chemin'; - @override String get size => 'Taille'; - @override String get container => 'Conteneur'; - @override String get duration => 'Durée'; - @override String get optimizedForStreaming => 'Optimisé pour le streaming'; - @override String get has64bitOffsets => 'Décalages 64 bits'; -} - -// Path: mediaMenu -class _StringsMediaMenuFr implements _StringsMediaMenuEn { - _StringsMediaMenuFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get markAsWatched => 'Marquer comme vu'; - @override String get markAsUnwatched => 'Marquer comme non visionné'; - @override String get removeFromContinueWatching => 'Supprimer de la liste "Continuer à regarder"'; - @override String get goToSeries => 'Aller à la série'; - @override String get goToSeason => 'Aller à la saison'; - @override String get shufflePlay => 'Lecture aléatoire'; - @override String get fileInfo => 'Informations sur le fichier'; -} - -// Path: accessibility -class _StringsAccessibilityFr implements _StringsAccessibilityEn { - _StringsAccessibilityFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String mediaCardMovie({required Object title}) => '${title}, film'; - @override String mediaCardShow({required Object title}) => '${title}, show 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 => 'visionné'; - @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} pourcentage visionné'; - @override String get mediaCardUnwatched => 'non visionné'; - @override String get tapToPlay => 'Appuyez pour lire'; -} - -// Path: tooltips -class _StringsTooltipsFr implements _StringsTooltipsEn { - _StringsTooltipsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get shufflePlay => 'Lecture aléatoire'; - @override String get markAsWatched => 'Marqué comme vu'; - @override String get markAsUnwatched => 'Marqué comme non vu'; -} - -// Path: videoControls -class _StringsVideoControlsFr implements _StringsVideoControlsEn { - _StringsVideoControlsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get audioLabel => 'Audio'; - @override String get subtitlesLabel => 'Sous-titres'; - @override String get resetToZero => 'Réinitialiser à 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} lire plus tard'; - @override String playsEarlier({required Object label}) => '${label} lire plus tôt'; - @override String get noOffset => 'Pas de décalage'; - @override String get letterbox => 'Boîte aux lettres'; - @override String get fillScreen => 'Remplir l\'écran'; - @override String get stretch => 'Etirer'; - @override String get lockRotation => 'Verrouillage de la rotation'; - @override String get unlockRotation => 'Déverrouiller la rotation'; - @override String get sleepTimer => 'Minuterie de mise en veille'; - @override String get timerActive => 'Minuterie active'; - @override String playbackWillPauseIn({required Object duration}) => 'La lecture sera mise en pause dans ${duration}'; - @override String get sleepTimerCompleted => 'Minuterie de mise en veille terminée - lecture en pause'; - @override String get autoPlayNext => 'Lecture automatique suivante'; - @override String get playNext => 'Lire l\'épisode suivant'; - @override String get playButton => 'Lire'; - @override String get pauseButton => 'Pause'; - @override String seekBackwardButton({required Object seconds}) => 'Reculer de ${seconds} secondes'; - @override String seekForwardButton({required Object seconds}) => 'Avancer de ${seconds} secondes'; - @override String get previousButton => 'Épisode précédent'; - @override String get nextButton => 'Épisode suivant'; - @override String get previousChapterButton => 'Chapitre précédent'; - @override String get nextChapterButton => 'Chapitre suivant'; - @override String get muteButton => 'Mute'; - @override String get unmuteButton => 'Dé-mute'; - @override String get settingsButton => 'Paramètres vidéo'; - @override String get audioTrackButton => 'Pistes audio'; - @override String get subtitlesButton => 'Sous-titres'; - @override String get chaptersButton => 'Chapitres'; - @override String get versionsButton => 'Versions vidéo'; - @override String get pipButton => 'Mode PiP (Picture-in-Picture)'; - @override String get aspectRatioButton => 'Format d\'image'; - @override String get fullscreenButton => 'Passer en mode plein écran'; - @override String get exitFullscreenButton => 'Quitter le mode plein écran'; - @override String get alwaysOnTopButton => 'Always on top'; - @override String get rotationLockButton => 'Verrouillage de rotation'; - @override String get timelineSlider => 'Timeline vidéo'; - @override String get volumeSlider => 'Niveau sonore'; - @override String get backButton => 'Retour'; -} - -// Path: userStatus -class _StringsUserStatusFr implements _StringsUserStatusEn { - _StringsUserStatusFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get admin => 'Admin'; - @override String get restricted => 'Restreint'; - @override String get protected => 'Protégé'; - @override String get current => 'ACTUEL'; -} - -// Path: messages -class _StringsMessagesFr implements _StringsMessagesEn { - _StringsMessagesFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get markedAsWatched => 'Marqué comme vu'; - @override String get markedAsUnwatched => 'Marqué comme non vu'; - @override String get markedAsWatchedOffline => 'Marqué comme vu (se synchronisera lorsque vous serez en ligne)'; - @override String get markedAsUnwatchedOffline => 'Marqué comme non vu (sera synchronisé lorsque vous serez en ligne)'; - @override String get removedFromContinueWatching => 'Supprimer de "Continuer à regarder"'; - @override String errorLoading({required Object error}) => 'Erreur: ${error}'; - @override String get fileInfoNotAvailable => 'Informations sur le fichier non disponibles'; - @override String errorLoadingFileInfo({required Object error}) => 'Erreur lors du chargement des informations sur le fichier: ${error}'; - @override String get errorLoadingSeries => 'Erreur lors du chargement de la série'; - @override String get errorLoadingSeason => 'Erreur lors du chargement de la saison'; - @override String get musicNotSupported => 'La lecture de musique n\'est pas encore prise en charge'; - @override String get logsCleared => 'Logs effacés'; - @override String get logsCopied => 'Logs copiés dans le presse-papier'; - @override String get noLogsAvailable => 'Aucun log disponible'; - @override String libraryScanning({required Object title}) => 'Scan de "${title}"...'; - @override String libraryScanStarted({required Object title}) => 'Scan de la bibliothèque démarrée pour "${title}"'; - @override String libraryScanFailed({required Object error}) => 'Échec du scan de la bibliothèque: ${error}'; - @override String metadataRefreshing({required Object title}) => 'Actualisation des métadonnées pour "${title}"...'; - @override String metadataRefreshStarted({required Object title}) => 'Actualisation des métadonnées lancée pour "${title}"'; - @override String metadataRefreshFailed({required Object error}) => 'Échec de l\'actualisation des métadonnées: ${error}'; - @override String get logoutConfirm => 'Êtes-vous sûr de vouloir vous déconnecter ?'; - @override String get noSeasonsFound => 'Aucune saison trouvée'; - @override String get noEpisodesFound => 'Aucun épisode trouvé dans la première saison'; - @override String get noEpisodesFoundGeneral => 'Aucun épisode trouvé'; - @override String get noResultsFound => 'Aucun résultat trouvé'; - @override String sleepTimerSet({required Object label}) => 'Minuterie de mise en veille réglée sur ${label}'; - @override String get noItemsAvailable => 'Aucun élément disponible'; - @override String get failedToCreatePlayQueue => 'Échec de la création de la file d\'attente de lecture'; - @override String get failedToCreatePlayQueueNoItems => 'Échec de la création de la file d\'attente de lecture - aucun élément'; - @override String failedPlayback({required Object action, required Object error}) => 'Echec de ${action}: ${error}'; -} - -// Path: subtitlingStyling -class _StringsSubtitlingStylingFr implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get stylingOptions => 'Options de style'; - @override String get fontSize => 'Taille de la police'; - @override String get textColor => 'Couleur du texte'; - @override String get borderSize => 'Taille de la bordure'; - @override String get borderColor => 'Couleur de la bordure'; - @override String get backgroundOpacity => 'Opacité d\'arrière-plan'; - @override String get backgroundColor => 'Couleur d\'arrière-plan'; -} - -// Path: mpvConfig -class _StringsMpvConfigFr implements _StringsMpvConfigEn { - _StringsMpvConfigFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Configuration MPV'; - @override String get description => 'Paramètres avancés du lecteur vidéo'; - @override String get properties => 'Propriétés'; - @override String get presets => 'Préréglages'; - @override String get noProperties => 'Aucune propriété configurée'; - @override String get noPresets => 'Aucun préréglage enregistré'; - @override String get addProperty => 'Ajouter une propriété'; - @override String get editProperty => 'Modifier la propriété'; - @override String get deleteProperty => 'Supprimer la propriété'; - @override String get propertyKey => 'Clé'; - @override String get propertyKeyHint => 'e.g., hwdec, demuxer-max-bytes'; - @override String get propertyValue => 'Valeur'; - @override String get propertyValueHint => 'e.g., auto, 256000000'; - @override String get saveAsPreset => 'Enregistrer comme préréglage...'; - @override String get presetName => 'Nom du préréglage'; - @override String get presetNameHint => 'Entrez un nom pour ce préréglage'; - @override String get loadPreset => 'Charger'; - @override String get deletePreset => 'Supprimer'; - @override String get presetSaved => 'Préréglage enregistré'; - @override String get presetLoaded => 'Préréglage chargé'; - @override String get presetDeleted => 'Préréglage supprimé'; - @override String get confirmDeletePreset => 'Êtes-vous sûr de vouloir supprimer ce préréglage ?'; - @override String get confirmDeleteProperty => 'Êtes-vous sûr de vouloir supprimer cette propriété ?'; - @override String entriesCount({required Object count}) => '${count} entrées'; -} - -// Path: dialog -class _StringsDialogFr implements _StringsDialogEn { - _StringsDialogFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get confirmAction => 'Confirmer l\'action'; - @override String get cancel => 'Annuler'; - @override String get playNow => 'Lire maintenant'; -} - -// Path: discover -class _StringsDiscoverFr implements _StringsDiscoverEn { - _StringsDiscoverFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Découvrez'; - @override String get switchProfile => 'Changer de profil'; - @override String get logout => 'Déconnexion'; - @override String get noContentAvailable => 'Aucun contenu disponible'; - @override String get addMediaToLibraries => 'Ajoutez des médias à votre bibliothèque'; - @override String get continueWatching => 'Continuer à regarder'; - @override String get play => 'Lire'; - @override String playEpisode({required Object season, required Object episode}) => 'S${season}E${episode}'; - @override String get pause => 'Pause'; - @override String get overview => 'Aperçu'; - @override String get cast => 'Cast'; - @override String get seasons => 'Saisons'; - @override String get studio => 'Studio'; - @override String get rating => 'Évaluation'; - @override String get watched => 'Vu'; - @override String episodeCount({required Object count}) => '${count} épisodes'; - @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} vu'; - @override String get movie => 'Film'; - @override String get tvShow => 'Show TV'; - @override String minutesLeft({required Object minutes}) => '${minutes} min restantes'; -} - -// Path: errors -class _StringsErrorsFr implements _StringsErrorsEn { - _StringsErrorsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String searchFailed({required Object error}) => 'Recherche échouée: ${error}'; - @override String connectionTimeout({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}'; - @override String get connectionFailed => 'Impossible de se connecter au serveur Plex'; - @override String failedToLoad({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}'; - @override String get noClientAvailable => 'Aucun client disponible'; - @override String authenticationFailed({required Object error}) => 'Échec de l\'authentification: ${error}'; - @override String get couldNotLaunchUrl => 'Impossible de lancer l\'URL d\'authentification'; - @override String get pleaseEnterToken => 'Veuillez saisir un token'; - @override String get invalidToken => 'Token invalide'; - @override String failedToVerifyToken({required Object error}) => 'Échec de la vérification du token: ${error}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Impossible de changer de profil vers ${displayName}'; -} - -// Path: libraries -class _StringsLibrariesFr implements _StringsLibrariesEn { - _StringsLibrariesFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Bibliothèques'; - @override String get scanLibraryFiles => 'Scanner les fichiers de la bibliothèque'; - @override String get scanLibrary => 'Scanner la bibliothèque'; - @override String get analyze => 'Analyser'; - @override String get analyzeLibrary => 'Analyser la bibliothèque'; - @override String get refreshMetadata => 'Actualiser les métadonnées'; - @override String get emptyTrash => 'Vider la corbeille'; - @override String emptyingTrash({required Object title}) => 'Vider les poubelles pour "${title}"...'; - @override String trashEmptied({required Object title}) => 'Poubelles vidées pour "${title}"'; - @override String failedToEmptyTrash({required Object error}) => 'Échec de la suppression des éléments supprimés: ${error}'; - @override String analyzing({required Object title}) => 'Analyse de "${title}"...'; - @override String analysisStarted({required Object title}) => 'L\'analyse a commencé pour "${title}"'; - @override String failedToAnalyze({required Object error}) => 'Échec de l\'analyse de la bibliothèque: ${error}'; - @override String get noLibrariesFound => 'Aucune bibliothèque trouvée'; - @override String get thisLibraryIsEmpty => 'Cette bibliothèque est vide'; - @override String get all => 'Tout'; - @override String get clearAll => 'Tout effacer'; - @override String scanLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?'; - @override String analyzeLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir analyser "${title}"?'; - @override String refreshMetadataConfirm({required Object title}) => 'Êtes-vous sûr de vouloir actualiser les métadonnées pour "${title}"?'; - @override String emptyTrashConfirm({required Object title}) => 'Êtes-vous sûr de vouloir vider la corbeille pour "${title}"?'; - @override String get manageLibraries => 'Gérer les bibliothèques'; - @override String get sort => 'Trier'; - @override String get sortBy => 'Trier par'; - @override String get filters => 'Filtres'; - @override String get confirmActionMessage => 'Êtes-vous sûr de vouloir effectuer cette action ?'; - @override String get showLibrary => 'Afficher la bibliothèque'; - @override String get hideLibrary => 'Masquer la bibliothèque'; - @override String get libraryOptions => 'Options de bibliothèque'; - @override String get content => 'contenu de la bibliothèque'; - @override String get selectLibrary => 'Sélectionner la bibliothèque'; - @override String filtersWithCount({required Object count}) => 'Filtres (${count})'; - @override String get noRecommendations => 'Aucune recommandation disponible'; - @override String get noCollections => 'Aucune collection dans cette bibliothèque'; - @override String get noFoldersFound => 'Aucun dossier trouvé'; - @override String get folders => 'dossiers'; - @override late final _StringsLibrariesTabsFr tabs = _StringsLibrariesTabsFr._(_root); - @override late final _StringsLibrariesGroupingsFr groupings = _StringsLibrariesGroupingsFr._(_root); -} - -// Path: about -class _StringsAboutFr implements _StringsAboutEn { - _StringsAboutFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'À propos'; - @override String get openSourceLicenses => 'Licences Open Source'; - @override String versionLabel({required Object version}) => 'Version ${version}'; - @override String get appDescription => 'Un magnifique client Plex pour Flutter'; - @override String get viewLicensesDescription => 'Afficher les licences des bibliothèques tierces'; -} - -// Path: serverSelection -class _StringsServerSelectionFr implements _StringsServerSelectionEn { - _StringsServerSelectionFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get allServerConnectionsFailed => 'Impossible de se connecter à un serveur. Veuillez vérifier votre connexion réseau et réessayer.'; - @override String get noServersFound => 'Aucun serveur trouvé'; - @override String noServersFoundForAccount({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})'; - @override String failedToLoadServers({required Object error}) => 'Échec du chargement des serveurs: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailFr implements _StringsHubDetailEn { - _StringsHubDetailFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Titre'; - @override String get releaseYear => 'Année de sortie'; - @override String get dateAdded => 'Date d\'ajout'; - @override String get rating => 'Évaluation'; - @override String get noItemsFound => 'Aucun élément trouvé'; -} - -// Path: logs -class _StringsLogsFr implements _StringsLogsEn { - _StringsLogsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get clearLogs => 'Effacer les logs'; - @override String get copyLogs => 'Copier les logs'; - @override String get error => 'Erreur:'; - @override String get stackTrace => 'Liste des appels:'; -} - -// Path: licenses -class _StringsLicensesFr implements _StringsLicensesEn { - _StringsLicensesFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get relatedPackages => 'Package associés'; - @override String get license => 'Licence'; - @override String licenseNumber({required Object number}) => 'Licence ${number}'; - @override String licensesCount({required Object count}) => '${count} licences'; -} - -// Path: navigation -class _StringsNavigationFr implements _StringsNavigationEn { - _StringsNavigationFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get home => 'Accueil'; - @override String get search => 'Rechercher'; - @override String get libraries => 'Bibliothèques'; - @override String get settings => 'Paramètres'; - @override String get downloads => 'Téléchargements'; -} - -// Path: collections -class _StringsCollectionsFr implements _StringsCollectionsEn { - _StringsCollectionsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Collections'; - @override String get collection => 'Collection'; - @override String get empty => 'La collection est vide'; - @override String get unknownLibrarySection => 'Impossible de supprimer : section de bibliothèque inconnue'; - @override String get deleteCollection => 'Supprimer la collection'; - @override String deleteConfirm({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cette action ne peut pas être annulée.'; - @override String get deleted => 'Collection supprimée'; - @override String get deleteFailed => 'Échec de la suppression de la collection'; - @override String deleteFailedWithError({required Object error}) => 'Échec de la suppression de la collection: ${error}'; - @override String failedToLoadItems({required Object error}) => 'Échec du chargement des éléments de la collection: ${error}'; - @override String get selectCollection => 'Sélectionner une collection'; - @override String get createNewCollection => 'Créer une nouvelle collection'; - @override String get collectionName => 'Nom de la collection'; - @override String get enterCollectionName => 'Entrez le nom de la collection'; - @override String get addedToCollection => 'Ajouté à la collection'; - @override String get errorAddingToCollection => 'Échec de l\'ajout à la collection'; - @override String get created => 'Collection créée'; - @override String get removeFromCollection => 'Supprimer de la collection'; - @override String removeFromCollectionConfirm({required Object title}) => 'Retirer "${title}" de cette collection ?'; - @override String get removedFromCollection => 'Retiré de la collection'; - @override String get removeFromCollectionFailed => 'Impossible de supprimer de la collection'; - @override String removeFromCollectionError({required Object error}) => 'Erreur lors de la suppression de la collection: ${error}'; -} - -// Path: playlists -class _StringsPlaylistsFr implements _StringsPlaylistsEn { - _StringsPlaylistsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Playlists'; - @override String get playlist => 'Playlist'; - @override String get noPlaylists => 'Aucune playlist trouvée'; - @override String get create => 'Créer une playlist'; - @override String get playlistName => 'Nom de playlist'; - @override String get enterPlaylistName => 'Entrer le nom de playlist'; - @override String get delete => 'Supprimer la playlist'; - @override String get removeItem => 'Retirer de la playlist'; - @override String get smartPlaylist => 'Smart playlist'; - @override String itemCount({required Object count}) => '${count} éléments'; - @override String get oneItem => '1 élément'; - @override String get emptyPlaylist => 'Cette playlist est vide'; - @override String get deleteConfirm => 'Supprimer la playlist ?'; - @override String deleteMessage({required Object name}) => 'Êtes-vous sûr de vouloir supprimer "${name}"?'; - @override String get created => 'Playlist créée'; - @override String get deleted => 'Playlist supprimée'; - @override String get itemAdded => 'Ajouté à la playlist'; - @override String get itemRemoved => 'Retiré de la playlist'; - @override String get selectPlaylist => 'Select Playlist'; - @override String get createNewPlaylist => 'Créer une nouvelle playlist'; - @override String get errorCreating => 'Échec de la création de playlist'; - @override String get errorDeleting => 'Échec de suppression de playlist'; - @override String get errorLoading => 'Échec de chargement de playlists'; - @override String get errorAdding => 'Échec d\'ajout dans la playlist'; - @override String get errorReordering => 'Échec de réordonnacement d\'élément de playlist'; - @override String get errorRemoving => 'Échec de suppression depuis la playlist'; -} - -// Path: watchTogether -class _StringsWatchTogetherFr implements _StringsWatchTogetherEn { - _StringsWatchTogetherFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Regarder ensemble'; - @override String get description => 'Regardez du contenu en synchronisation avec vos amis et votre famille'; - @override String get createSession => 'Créer une session'; - @override String get creating => 'Création...'; - @override String get joinSession => 'Rejoindre la session'; - @override String get joining => 'Rejoindre...'; - @override String get controlMode => 'Mode de contrôle'; - @override String get controlModeQuestion => 'Qui peut contrôler la lecture ?'; - @override String get hostOnly => 'Hôte uniquement'; - @override String get anyone => 'N\'importe qui'; - @override String get hostingSession => 'Session d\'hébergement'; - @override String get inSession => 'En session'; - @override String get sessionCode => 'Code de session'; - @override String get hostControlsPlayback => 'L\'hôte contrôle la lecture'; - @override String get anyoneCanControl => 'Tout le monde peut contrôler la lecture'; - @override String get hostControls => 'Commandes de l\'hôte'; - @override String get anyoneControls => 'Tout le monde contrôle'; - @override String get participants => 'Participants'; - @override String get host => 'Hôte'; - @override String get hostBadge => 'HOST'; - @override String get youAreHost => 'Vous êtes l\'hôte'; - @override String get watchingWithOthers => 'Regarder avec d\'autres personnes'; - @override String get endSession => 'Fin de session'; - @override String get leaveSession => 'Quitter la session'; - @override String get endSessionQuestion => 'Terminer la session ?'; - @override String get leaveSessionQuestion => 'Quitter la session ?'; - @override String get endSessionConfirm => 'Cela mettra fin à la session pour tous les participants.'; - @override String get leaveSessionConfirm => 'Vous allez être déconnecté de la session.'; - @override String get endSessionConfirmOverlay => 'Cela mettra fin à la session de visionnage pour tous les participants.'; - @override String get leaveSessionConfirmOverlay => 'Vous serez déconnecté de la session de visionnage.'; - @override String get end => 'Terminer'; - @override String get leave => 'Fin'; - @override String get syncing => 'Synchronisation...'; - @override String get participant => 'participant'; - @override String get joinWatchSession => 'Rejoindre la session de visionnage'; - @override String get enterCodeHint => 'Entrez le code à 8 caractères'; - @override String get pasteFromClipboard => 'Coller depuis le presse-papiers'; - @override String get pleaseEnterCode => 'Veuillez saisir un code de session'; - @override String get codeMustBe8Chars => 'Le code de session doit comporter 8 caractères'; - @override String get joinInstructions => 'Entrez le code de session partagé par l\'hôte pour rejoindre sa session de visionnage.'; - @override String get failedToCreate => 'Échec de la création de la session'; - @override String get failedToJoin => 'Échec de la connexion à la session'; - @override String get sessionCodeCopied => 'Code de session copié dans le presse-papiers'; -} - -// Path: downloads -class _StringsDownloadsFr implements _StringsDownloadsEn { - _StringsDownloadsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get title => 'Téléchargements'; - @override String get manage => 'Gérer'; - @override String get tvShows => 'Show TV'; - @override String get movies => 'Films'; - @override String get noDownloads => 'Aucun téléchargement pour le moment'; - @override String get noDownloadsDescription => 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.'; - @override String get downloadNow => 'Télécharger'; - @override String get deleteDownload => 'Supprimer le téléchargement'; - @override String get retryDownload => 'Réessayer le téléchargement'; - @override String get downloadQueued => 'Téléchargement en attente'; - @override String episodesQueued({required Object count}) => '${count} épisodes en attente de téléchargement'; - @override String get downloadDeleted => 'Télécharger supprimé'; - @override String deleteConfirm({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cela supprimera le fichier téléchargé de votre appareil.'; - @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Suppression de ${title}... (${current} sur ${total})'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsFr implements _StringsHotkeysActionsEn { - _StringsHotkeysActionsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get playPause => 'Lecture/Pause'; - @override String get volumeUp => 'Augmenter le volume'; - @override String get volumeDown => 'Baisser le volume'; - @override String seekForward({required Object seconds}) => 'Avancer (${seconds}s)'; - @override String seekBackward({required Object seconds}) => 'Reculer (${seconds}s)'; - @override String get fullscreenToggle => 'Basculer en mode plein écran'; - @override String get muteToggle => 'Activer/désactiver le mode silencieux'; - @override String get subtitleToggle => 'Activer/désactiver les sous-titres'; - @override String get audioTrackNext => 'Piste audio suivante'; - @override String get subtitleTrackNext => 'Piste de sous-titres suivante'; - @override String get chapterNext => 'Chapitre suivant'; - @override String get chapterPrevious => 'Chapitre précédent'; - @override String get speedIncrease => 'Augmenter la vitesse'; - @override String get speedDecrease => 'Réduire la vitesse'; - @override String get speedReset => 'Réinitialiser la vitesse'; - @override String get subSeekNext => 'Rechercher le sous-titre suivant'; - @override String get subSeekPrev => 'Rechercher le sous-titre précédent'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsFr implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get recommended => 'Recommandé'; - @override String get browse => 'Parcourir'; - @override String get collections => 'Collections'; - @override String get playlists => 'Playlists'; -} - -// Path: libraries.groupings -class _StringsLibrariesGroupingsFr implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsFr._(this._root); - - @override final _StringsFr _root; // ignore: unused_field - - // Translations - @override String get all => 'Tous'; - @override String get movies => 'Films'; - @override String get shows => 'Show TV'; - @override String get seasons => 'Saisons'; - @override String get episodes => 'Épisodes'; - @override String get folders => 'Dossiers'; -} - -// 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); - } - - /// Metadata for the translations of . - @override final TranslationMetadata $meta; - - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); - - @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 _StringsSubtitlingStylingIt subtitlingStyling = _StringsSubtitlingStylingIt._(_root); - @override late final _StringsMpvConfigIt mpvConfig = _StringsMpvConfigIt._(_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 _StringsDownloadsIt downloads = _StringsDownloadsIt._(_root); - @override late final _StringsPlaylistsIt playlists = _StringsPlaylistsIt._(_root); - @override late final _StringsCollectionsIt collections = _StringsCollectionsIt._(_root); - @override late final _StringsWatchTogetherIt watchTogether = _StringsWatchTogetherIt._(_root); -} - -// Path: app -class _StringsAppIt implements _StringsAppEn { - _StringsAppIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Caricamento...'; -} - -// Path: auth -class _StringsAuthIt implements _StringsAuthEn { - _StringsAuthIt._(this._root); - - @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.'; -} - -// Path: common -class _StringsCommonIt implements _StringsCommonEn { - _StringsCommonIt._(this._root); - - @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 logout => 'Disconnetti'; - @override String get unknown => 'Sconosciuto'; - @override String get refresh => 'Aggiorna'; - @override String get yes => 'Sì'; - @override String get no => 'No'; - @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); - - @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 mpvConfig => 'Configurazione MPV'; - @override String get search => 'Cerca'; - @override String get logs => 'Registro'; -} - -// Path: update -class _StringsUpdateIt implements _StringsUpdateEn { - _StringsUpdateIt._(this._root); - - @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'; -} - -// Path: settings -class _StringsSettingsIt implements _StringsSettingsEn { - _StringsSettingsIt._(this._root); - - @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 advanced => 'Avanzate'; - @override String get episodePosterMode => 'Stile poster episodio'; - @override String get seriesPoster => 'Poster della serie'; - @override String get seriesPosterDescription => 'Mostra il poster della serie per tutti gli episodi'; - @override String get seasonPoster => 'Poster della stagione'; - @override String get seasonPosterDescription => 'Mostra il poster specifico della stagione per gli episodi'; - @override String get episodeThumbnail => 'Miniatura episodio'; - @override String get episodeThumbnailDescription => 'Mostra miniature 16:9 degli 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 showHeroSection => 'Mostra sezione principale'; - @override String get useGlobalHubs => 'Usa layout Home di Plex'; - @override String get useGlobalHubsDescription => 'Mostra gli hub della home page come il client Plex ufficiale. Se disattivato, mostra invece i suggerimenti per libreria.'; - @override String get showServerNameOnHubs => 'Mostra nome server sugli hub'; - @override String get showServerNameOnHubsDescription => 'Mostra sempre il nome del server nei titoli degli hub. Se disattivato, solo per nomi hub duplicati.'; - @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 videoPlayerControls => 'Controlli del lettore video'; - @override String get keyboardShortcuts => 'Scorciatoie da tastiera'; - @override String get keyboardShortcutsDescription => 'Personalizza le scorciatoie da tastiera'; - @override String get videoPlayerNavigation => 'Navigazione del lettore video'; - @override String get videoPlayerNavigationDescription => 'Usa i tasti freccia per navigare nei controlli del lettore video'; - @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'; - @override String get downloads => 'Download'; - @override String get downloadLocationDescription => 'Scegli dove salvare i contenuti scaricati'; - @override String get downloadLocationDefault => 'Predefinita (Archiviazione App)'; - @override String get downloadLocationCustom => 'Posizione Personalizzata'; - @override String get selectFolder => 'Seleziona Cartella'; - @override String get resetToDefault => 'Ripristina Predefinita'; - @override String currentPath({required Object path}) => 'Corrente: ${path}'; - @override String get downloadLocationChanged => 'Posizione di download modificata'; - @override String get downloadLocationReset => 'Posizione di download ripristinata a predefinita'; - @override String get downloadLocationInvalid => 'La cartella selezionata non è scrivibile'; - @override String get downloadLocationSelectError => 'Impossibile selezionare la cartella'; - @override String get downloadOnWifiOnly => 'Scarica solo con WiFi'; - @override String get downloadOnWifiOnlyDescription => 'Impedisci i download quando si utilizza la rete dati cellulare'; - @override String get cellularDownloadBlocked => 'I download sono disabilitati sulla rete dati cellulare. Connettiti al WiFi o modifica l\'impostazione.'; - @override String get maxVolume => 'Volume massimo'; - @override String get maxVolumeDescription => 'Consenti volume superiore al 100% per contenuti audio bassi'; - @override String maxVolumePercent({required Object percent}) => '${percent}%'; - @override String get maxVolumeHint => 'Inserisci volume massimo (100-300)'; - @override String get discordRichPresence => 'Discord Rich Presence'; - @override String get discordRichPresenceDescription => 'Mostra su Discord cosa stai guardando'; - @override String get matchContentFrameRate => 'Adatta frequenza fotogrammi'; - @override String get matchContentFrameRateDescription => 'Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria'; -} - -// Path: search -class _StringsSearchIt implements _StringsSearchEn { - _StringsSearchIt._(this._root); - - @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'; -} - -// Path: hotkeys -class _StringsHotkeysIt implements _StringsHotkeysEn { - _StringsHotkeysIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String setShortcutFor({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; - @override String get clearShortcut => 'Elimina scorciatoia'; - @override late final _StringsHotkeysActionsIt actions = _StringsHotkeysActionsIt._(_root); -} - -// Path: pinEntry -class _StringsPinEntryIt implements _StringsPinEntryEn { - _StringsPinEntryIt._(this._root); - - @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'; -} - -// Path: fileInfo -class _StringsFileInfoIt implements _StringsFileInfoEn { - _StringsFileInfoIt._(this._root); - - @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'; -} - -// Path: mediaMenu -class _StringsMediaMenuIt implements _StringsMediaMenuEn { - _StringsMediaMenuIt._(this._root); - - @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'; -} - -// Path: accessibility -class _StringsAccessibilityIt implements _StringsAccessibilityEn { - _StringsAccessibilityIt._(this._root); - - @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'; -} - -// Path: tooltips -class _StringsTooltipsIt implements _StringsTooltipsEn { - _StringsTooltipsIt._(this._root); - - @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'; -} - -// Path: videoControls -class _StringsVideoControlsIt implements _StringsVideoControlsEn { - _StringsVideoControlsIt._(this._root); - - @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 autoPlayNext => 'Riproduzione automatica successivo'; - @override String get playNext => 'Riproduci successivo'; - @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 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 pipButton => 'Modalità Picture-in-Picture'; - @override String get aspectRatioButton => 'Proporzioni'; - @override String get fullscreenButton => 'Attiva schermo intero'; - @override String get exitFullscreenButton => 'Esci da schermo intero'; - @override String get alwaysOnTopButton => 'Sempre in primo piano'; - @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); - - @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'; -} - -// Path: messages -class _StringsMessagesIt implements _StringsMessagesEn { - _StringsMessagesIt._(this._root); - - @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 markedAsWatchedOffline => 'Segnato come visto (sincronizzato online)'; - @override String get markedAsUnwatchedOffline => 'Segnato come non visto (sincronizzato online)'; - @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 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 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: subtitlingStyling -class _StringsSubtitlingStylingIt implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingIt._(this._root); - - @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'; -} - -// Path: mpvConfig -class _StringsMpvConfigIt implements _StringsMpvConfigEn { - _StringsMpvConfigIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get title => 'Configurazione MPV'; - @override String get description => 'Impostazioni avanzate del lettore video'; - @override String get properties => 'Proprietà'; - @override String get presets => 'Preset'; - @override String get noProperties => 'Nessuna proprietà configurata'; - @override String get noPresets => 'Nessun preset salvato'; - @override String get addProperty => 'Aggiungi proprietà'; - @override String get editProperty => 'Modifica proprietà'; - @override String get deleteProperty => 'Elimina proprietà'; - @override String get propertyKey => 'Chiave proprietà'; - @override String get propertyKeyHint => 'es. hwdec, demuxer-max-bytes'; - @override String get propertyValue => 'Valore proprietà'; - @override String get propertyValueHint => 'es. auto, 256000000'; - @override String get saveAsPreset => 'Salva come preset...'; - @override String get presetName => 'Nome preset'; - @override String get presetNameHint => 'Inserisci un nome per questo preset'; - @override String get loadPreset => 'Carica'; - @override String get deletePreset => 'Elimina'; - @override String get presetSaved => 'Preset salvato'; - @override String get presetLoaded => 'Preset caricato'; - @override String get presetDeleted => 'Preset eliminato'; - @override String get confirmDeletePreset => 'Sei sicuro di voler eliminare questo preset?'; - @override String get confirmDeleteProperty => 'Sei sicuro di voler eliminare questa proprietà?'; - @override String entriesCount({required Object count}) => '${count} voci'; -} - -// Path: dialog -class _StringsDialogIt implements _StringsDialogEn { - _StringsDialogIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get confirmAction => 'Conferma azione'; - @override String get cancel => 'Cancella'; - @override String get playNow => 'Riproduci ora'; -} - -// Path: discover -class _StringsDiscoverIt implements _StringsDiscoverEn { - _StringsDiscoverIt._(this._root); - - @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 play => 'Riproduci'; - @override String playEpisode({required Object season, required Object episode}) => '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); - - @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}'; -} - -// Path: libraries -class _StringsLibrariesIt implements _StringsLibrariesEn { - _StringsLibrariesIt._(this._root); - - @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 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); - - @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'; -} - -// Path: serverSelection -class _StringsServerSelectionIt implements _StringsServerSelectionEn { - _StringsServerSelectionIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get allServerConnectionsFailed => 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; - @override String get noServersFound => 'Nessun server trovato'; - @override String noServersFoundForAccount({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})'; - @override String failedToLoadServers({required Object error}) => 'Impossibile caricare i server: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailIt implements _StringsHubDetailEn { - _StringsHubDetailIt._(this._root); - - @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'; -} - -// Path: logs -class _StringsLogsIt implements _StringsLogsEn { - _StringsLogsIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get clearLogs => 'Cancella log'; - @override String get copyLogs => 'Copia log'; - @override String get error => 'Errore:'; - @override String get stackTrace => 'Traccia dello stack:'; -} - -// Path: licenses -class _StringsLicensesIt implements _StringsLicensesEn { - _StringsLicensesIt._(this._root); - - @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'; -} - -// Path: navigation -class _StringsNavigationIt implements _StringsNavigationEn { - _StringsNavigationIt._(this._root); - - @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'; - @override String get downloads => 'Download'; -} - -// Path: downloads -class _StringsDownloadsIt implements _StringsDownloadsEn { - _StringsDownloadsIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get title => 'Download'; - @override String get manage => 'Gestisci'; - @override String get tvShows => 'Serie TV'; - @override String get movies => 'Film'; - @override String get noDownloads => 'Nessun download'; - @override String get noDownloadsDescription => 'I contenuti scaricati appariranno qui per la visualizzazione offline'; - @override String get downloadNow => 'Scarica'; - @override String get deleteDownload => 'Elimina download'; - @override String get retryDownload => 'Riprova download'; - @override String get downloadQueued => 'Download in coda'; - @override String episodesQueued({required Object count}) => '${count} episodi in coda per il download'; - @override String get downloadDeleted => 'Download eliminato'; - @override String deleteConfirm({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Il file scaricato verrà rimosso dal tuo dispositivo.'; - @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Eliminazione di ${title}... (${current} di ${total})'; -} - -// Path: playlists -class _StringsPlaylistsIt implements _StringsPlaylistsEn { - _StringsPlaylistsIt._(this._root); - - @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 playlistName => 'Nome playlist'; - @override String get enterPlaylistName => 'Inserisci nome playlist'; - @override String get delete => 'Elimina playlist'; - @override String get removeItem => 'Rimuovi da playlist'; - @override String get smartPlaylist => 'Playlist intelligente'; - @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 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); - - @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 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 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: watchTogether -class _StringsWatchTogetherIt implements _StringsWatchTogetherEn { - _StringsWatchTogetherIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get title => 'Guarda Insieme'; - @override String get description => 'Guarda contenuti in sincronia con amici e familiari'; - @override String get createSession => 'Crea Sessione'; - @override String get creating => 'Creazione...'; - @override String get joinSession => 'Unisciti alla Sessione'; - @override String get joining => 'Connessione...'; - @override String get controlMode => 'Modalità di Controllo'; - @override String get controlModeQuestion => 'Chi può controllare la riproduzione?'; - @override String get hostOnly => 'Solo Host'; - @override String get anyone => 'Tutti'; - @override String get hostingSession => 'Hosting Sessione'; - @override String get inSession => 'In Sessione'; - @override String get sessionCode => 'Codice Sessione'; - @override String get hostControlsPlayback => 'L\'host controlla la riproduzione'; - @override String get anyoneCanControl => 'Tutti possono controllare la riproduzione'; - @override String get hostControls => 'Controllo host'; - @override String get anyoneControls => 'Controllo di tutti'; - @override String get participants => 'Partecipanti'; - @override String get host => 'Host'; - @override String get hostBadge => 'HOST'; - @override String get youAreHost => 'Sei l\'host'; - @override String get watchingWithOthers => 'Guardando con altri'; - @override String get endSession => 'Termina Sessione'; - @override String get leaveSession => 'Lascia Sessione'; - @override String get endSessionQuestion => 'Terminare la Sessione?'; - @override String get leaveSessionQuestion => 'Lasciare la Sessione?'; - @override String get endSessionConfirm => 'Questo terminerà la sessione per tutti i partecipanti.'; - @override String get leaveSessionConfirm => 'Sarai rimosso dalla sessione.'; - @override String get endSessionConfirmOverlay => 'Questo terminerà la sessione di visione per tutti i partecipanti.'; - @override String get leaveSessionConfirmOverlay => 'Sarai disconnesso dalla sessione di visione.'; - @override String get end => 'Termina'; - @override String get leave => 'Lascia'; - @override String get syncing => 'Sincronizzazione...'; - @override String get participant => 'partecipante'; - @override String get joinWatchSession => 'Unisciti alla Sessione di Visione'; - @override String get enterCodeHint => 'Inserisci codice di 8 caratteri'; - @override String get pasteFromClipboard => 'Incolla dagli appunti'; - @override String get pleaseEnterCode => 'Inserisci un codice sessione'; - @override String get codeMustBe8Chars => 'Il codice sessione deve essere di 8 caratteri'; - @override String get joinInstructions => 'Inserisci il codice sessione condiviso dall\'host per unirti alla loro sessione di visione.'; - @override String get failedToCreate => 'Impossibile creare la sessione'; - @override String get failedToJoin => 'Impossibile unirsi alla sessione'; - @override String get sessionCodeCopied => 'Codice sessione copiato negli appunti'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsIt implements _StringsHotkeysActionsEn { - _StringsHotkeysActionsIt._(this._root); - - @override final _StringsIt _root; // ignore: unused_field - - // Translations - @override String get playPause => 'Riproduci/Pausa'; - @override String get volumeUp => 'Alza volume'; - @override String get volumeDown => 'Abbassa volume'; - @override String seekForward({required Object seconds}) => 'Avanti (${seconds}s)'; - @override String seekBackward({required Object seconds}) => 'Indietro (${seconds}s)'; - @override String get fullscreenToggle => 'Schermo intero'; - @override String get muteToggle => 'Muto'; - @override String get subtitleToggle => 'Sottotitoli'; - @override String get audioTrackNext => 'Traccia audio successiva'; - @override String get subtitleTrackNext => 'Sottotitoli successivi'; - @override String get chapterNext => 'Capitolo successivo'; - @override String get chapterPrevious => 'Capitolo precedente'; - @override String get speedIncrease => 'Aumenta velocità'; - @override String get speedDecrease => 'Diminuisci velocità'; - @override String get speedReset => 'Ripristina velocità'; - @override String get subSeekNext => 'Vai al sottotitolo successivo'; - @override String get subSeekPrev => 'Vai al sottotitolo precedente'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsIt implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsIt._(this._root); - - @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'; -} - -// Path: libraries.groupings -class _StringsLibrariesGroupingsIt implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsIt._(this._root); - - @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'; -} - -// Path: -class _StringsKo implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsKo.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.ko, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } - - /// Metadata for the translations of . - @override final TranslationMetadata $meta; - - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); - - @override late final _StringsKo _root = this; // ignore: unused_field - - // Translations - @override late final _StringsAppKo app = _StringsAppKo._(_root); - @override late final _StringsAuthKo auth = _StringsAuthKo._(_root); - @override late final _StringsCommonKo common = _StringsCommonKo._(_root); - @override late final _StringsScreensKo screens = _StringsScreensKo._(_root); - @override late final _StringsUpdateKo update = _StringsUpdateKo._(_root); - @override late final _StringsSettingsKo settings = _StringsSettingsKo._(_root); - @override late final _StringsSearchKo search = _StringsSearchKo._(_root); - @override late final _StringsHotkeysKo hotkeys = _StringsHotkeysKo._(_root); - @override late final _StringsPinEntryKo pinEntry = _StringsPinEntryKo._(_root); - @override late final _StringsFileInfoKo fileInfo = _StringsFileInfoKo._(_root); - @override late final _StringsMediaMenuKo mediaMenu = _StringsMediaMenuKo._(_root); - @override late final _StringsAccessibilityKo accessibility = _StringsAccessibilityKo._(_root); - @override late final _StringsTooltipsKo tooltips = _StringsTooltipsKo._(_root); - @override late final _StringsVideoControlsKo videoControls = _StringsVideoControlsKo._(_root); - @override late final _StringsUserStatusKo userStatus = _StringsUserStatusKo._(_root); - @override late final _StringsMessagesKo messages = _StringsMessagesKo._(_root); - @override late final _StringsSubtitlingStylingKo subtitlingStyling = _StringsSubtitlingStylingKo._(_root); - @override late final _StringsMpvConfigKo mpvConfig = _StringsMpvConfigKo._(_root); - @override late final _StringsDialogKo dialog = _StringsDialogKo._(_root); - @override late final _StringsDiscoverKo discover = _StringsDiscoverKo._(_root); - @override late final _StringsErrorsKo errors = _StringsErrorsKo._(_root); - @override late final _StringsLibrariesKo libraries = _StringsLibrariesKo._(_root); - @override late final _StringsAboutKo about = _StringsAboutKo._(_root); - @override late final _StringsServerSelectionKo serverSelection = _StringsServerSelectionKo._(_root); - @override late final _StringsHubDetailKo hubDetail = _StringsHubDetailKo._(_root); - @override late final _StringsLogsKo logs = _StringsLogsKo._(_root); - @override late final _StringsLicensesKo licenses = _StringsLicensesKo._(_root); - @override late final _StringsNavigationKo navigation = _StringsNavigationKo._(_root); - @override late final _StringsCollectionsKo collections = _StringsCollectionsKo._(_root); - @override late final _StringsPlaylistsKo playlists = _StringsPlaylistsKo._(_root); - @override late final _StringsWatchTogetherKo watchTogether = _StringsWatchTogetherKo._(_root); - @override late final _StringsDownloadsKo downloads = _StringsDownloadsKo._(_root); -} - -// Path: app -class _StringsAppKo implements _StringsAppEn { - _StringsAppKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get title => 'Plezy'; - @override String get loading => '로딩 중...'; -} - -// Path: auth -class _StringsAuthKo implements _StringsAuthEn { - _StringsAuthKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get signInWithPlex => 'Plex 계정으로 로그인'; - @override String get showQRCode => 'QR 코드'; - @override String get cancel => '취소'; - @override String get authenticate => '인증'; - @override String get retry => '재시도'; - @override String get debugEnterToken => '디버깅을 위해 Plex 토큰을 입력하세요.'; - @override String get plexTokenLabel => 'Plex 인증 토큰'; - @override String get plexTokenHint => 'Plex.tv 토큰을 입력하세요'; - @override String get authenticationTimeout => '인증 시간이 초과되었습니다. 다시 시도해 주세요.'; - @override String get scanQRCodeInstruction => 'Plex 계정에 로그인된 기기에서 이 QR 코드를 스캔하여 본인 인증을 해주세요.'; - @override String get waitingForAuth => '인증 대기 중... 브라우저에서 로그인을 완료해 주세요.'; -} - -// Path: common -class _StringsCommonKo implements _StringsCommonEn { - _StringsCommonKo._(this._root); - - @override final _StringsKo _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 logout => '로그아웃'; - @override String get unknown => '알 수 없는'; - @override String get refresh => '새로고침'; - @override String get yes => '예'; - @override String get no => '아니오'; - @override String get delete => '삭제'; - @override String get shuffle => '무작위 재생'; - @override String get addTo => '추가하기...'; -} - -// Path: screens -class _StringsScreensKo implements _StringsScreensEn { - _StringsScreensKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get licenses => '라이선스'; - @override String get selectServer => '서버 선택'; - @override String get switchProfile => '프로필 전환'; - @override String get subtitleStyling => '자막 스타일 설정'; - @override String get mpvConfig => 'MPV 설정'; - @override String get search => '검색'; - @override String get logs => '로그'; -} - -// Path: update -class _StringsUpdateKo implements _StringsUpdateEn { - _StringsUpdateKo._(this._root); - - @override final _StringsKo _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 => '업데이트 확인 실패'; -} - -// Path: settings -class _StringsSettingsKo implements _StringsSettingsEn { - _StringsSettingsKo._(this._root); - - @override final _StringsKo _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 advanced => '고급'; - @override String get episodePosterMode => '에피소드 포스터 스타일'; - @override String get seriesPoster => '시리즈 포스터'; - @override String get seriesPosterDescription => '모든 에피소드에 시리즈 포스터 표시'; - @override String get seasonPoster => '시즌 포스터'; - @override String get seasonPosterDescription => '에피소드에 시즌별 포스터 표시'; - @override String get episodeThumbnail => '에피소드 썸네일'; - @override String get episodeThumbnailDescription => '16:9 에피소드 스크린샷 썸네일 표시'; - @override String get showHeroSectionDescription => '홈 화면에 주요 콘텐츠 캐러셀(슬라이드) 표시'; - @override String get secondsLabel => '초'; - @override String get minutesLabel => '분'; - @override String get secondsShort => '초'; - @override String get minutesShort => '분'; - @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 showHeroSection => '주요 추천 영역 표시'; - @override String get useGlobalHubs => 'Plex 홈 레이아웃 사용'; - @override String get useGlobalHubsDescription => '공식 Plex 클라이언트처럼 홈 페이지 허브를 표시합니다. 끄면 라이브러리별 추천이 대신 표시됩니다.'; - @override String get showServerNameOnHubs => '허브에 서버 이름 표시'; - @override String get showServerNameOnHubsDescription => '허브 제목에 항상 서버 이름을 표시합니다. 끄면 중복된 허브 이름에만 표시됩니다.'; - @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 videoPlayerControls => '비디오 플레이어 컨트롤'; - @override String get keyboardShortcuts => '키보드 단축키'; - @override String get keyboardShortcutsDescription => '사용자 정의 키보드 단축키'; - @override String get videoPlayerNavigation => '비디오 플레이어 탐색'; - @override String get videoPlayerNavigationDescription => '방향 키를 사용하여 비디오 플레이어 컨트롤 탐색'; - @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} 초 대기'; - @override String get downloads => '다운로드'; - @override String get downloadLocationDescription => '다운로드 콘텐츠 저장 위치 선택'; - @override String get downloadLocationDefault => '기본값 (앱 저장소)'; - @override String get downloadLocationCustom => '사용자 지정 위치'; - @override String get selectFolder => '폴더 선택'; - @override String get resetToDefault => '기본값으로 재설정'; - @override String currentPath({required Object path}) => '현재: ${path}'; - @override String get downloadLocationChanged => '다운로드 위치가 변경 되었습니다'; - @override String get downloadLocationReset => '다운로드 위치가 기본값으로 재설정 되었습니다'; - @override String get downloadLocationInvalid => '선택한 폴더에 쓰기 권한이 없습니다'; - @override String get downloadLocationSelectError => '폴더 선택 실패'; - @override String get downloadOnWifiOnly => 'WiFi 연결 시에만 다운로드'; - @override String get downloadOnWifiOnlyDescription => '셀룰러 데이터 사용 시 다운로드 불가'; - @override String get cellularDownloadBlocked => '셀룰러 데이터에서 다운로드가 차단 되었습니다. WiFi에 연결하거나 설정을 변경하세요.'; - @override String get maxVolume => '최대 볼륨'; - @override String get maxVolumeDescription => '조용한 미디어를 위해 100% 이상의 볼륨 허용'; - @override String maxVolumePercent({required Object percent}) => '${percent}%'; - @override String get maxVolumeHint => '최대 볼륨 입력 (100-300)'; - @override String get discordRichPresence => 'Discord Rich Presence'; - @override String get discordRichPresenceDescription => 'Discord에서 시청 중인 콘텐츠 표시'; - @override String get matchContentFrameRate => '콘텐츠 프레임 레이트 맞춤'; - @override String get matchContentFrameRateDescription => '비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다'; -} - -// Path: search -class _StringsSearchKo implements _StringsSearchEn { - _StringsSearchKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get hint => '영화, 시리즈, 음악 등을 검색하세요...'; - @override String get tryDifferentTerm => '다른 검색어를 시도해 보세요'; - @override String get searchYourMedia => '미디어 검색'; - @override String get enterTitleActorOrKeyword => '제목, 배우 또는 키워드를 입력하세요'; -} - -// Path: hotkeys -class _StringsHotkeysKo implements _StringsHotkeysEn { - _StringsHotkeysKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String setShortcutFor({required Object actionName}) => '${actionName}에 대한 단축키 설정'; - @override String get clearShortcut => '단축키 삭제'; - @override late final _StringsHotkeysActionsKo actions = _StringsHotkeysActionsKo._(_root); -} - -// Path: pinEntry -class _StringsPinEntryKo implements _StringsPinEntryEn { - _StringsPinEntryKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get enterPin => 'PIN 입력'; - @override String get showPin => 'PIN 표시'; - @override String get hidePin => 'PIN 숨기기'; -} - -// Path: fileInfo -class _StringsFileInfoKo implements _StringsFileInfoEn { - _StringsFileInfoKo._(this._root); - - @override final _StringsKo _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비트 오프셋'; -} - -// Path: mediaMenu -class _StringsMediaMenuKo implements _StringsMediaMenuEn { - _StringsMediaMenuKo._(this._root); - - @override final _StringsKo _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 => '파일 정보'; -} - -// Path: accessibility -class _StringsAccessibilityKo implements _StringsAccessibilityEn { - _StringsAccessibilityKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String mediaCardMovie({required Object title}) => '${title}, 영화'; - @override String mediaCardShow({required Object title}) => '${title}, 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 => '시청 완료'; - @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} 퍼센트 시청 완료'; - @override String get mediaCardUnwatched => '미시청'; - @override String get tapToPlay => '터치 하여 재생'; -} - -// Path: tooltips -class _StringsTooltipsKo implements _StringsTooltipsEn { - _StringsTooltipsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get shufflePlay => '무작위 재생'; - @override String get markAsWatched => '시청 완료로 표시'; - @override String get markAsUnwatched => '시청 안 함으로 표시'; -} - -// Path: videoControls -class _StringsVideoControlsKo implements _StringsVideoControlsEn { - _StringsVideoControlsKo._(this._root); - - @override final _StringsKo _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 => '레터박스 모드'; - @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 autoPlayNext => '다음 자동 재생'; - @override String get playNext => '다음 재생'; - @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 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 pipButton => '픽처 인 픽처 모드'; - @override String get aspectRatioButton => '화면비율'; - @override String get fullscreenButton => '전체화면'; - @override String get exitFullscreenButton => '전체화면 종료'; - @override String get alwaysOnTopButton => '창 최상위 고정'; - @override String get rotationLockButton => '회전 잠금'; - @override String get timelineSlider => '타임라인'; - @override String get volumeSlider => '볼륨 조절'; - @override String get backButton => '뒤로 가기'; -} - -// Path: userStatus -class _StringsUserStatusKo implements _StringsUserStatusEn { - _StringsUserStatusKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get admin => '관리자'; - @override String get restricted => '제한됨'; - @override String get protected => '보호됨'; - @override String get current => '현재'; -} - -// Path: messages -class _StringsMessagesKo implements _StringsMessagesEn { - _StringsMessagesKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get markedAsWatched => '시청 완료로 표시됨'; - @override String get markedAsUnwatched => '시청 안 함으로 표시됨'; - @override String get markedAsWatchedOffline => '시청 완료로 표시됨 (연결 시 동기화됨)'; - @override String get markedAsUnwatchedOffline => '미시청으로 표시됨 (연결 시 동기화됨)'; - @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 logoutConfirm => '로그아웃 하시겠습니까?'; - @override String get noSeasonsFound => '시즌을 찾을 수 없음'; - @override String get noEpisodesFound => '시즌 1에서 에피소드를 찾을 수 없습니다'; - @override String get noEpisodesFoundGeneral => '에피소드를 찾을 수 없습니다'; - @override String get noResultsFound => '결과를 찾을 수 없습니다'; - @override String sleepTimerSet({required Object label}) => '수면 타이머가 ${label}로 설정 되었습니다'; - @override String get noItemsAvailable => '사용 가능한 항목이 없습니다'; - @override String get failedToCreatePlayQueue => '재생 대기열 생성 실패'; - @override String get failedToCreatePlayQueueNoItems => '재생 대기열 생성 실패 - 항목 없음'; - @override String failedPlayback({required Object action, required Object error}) => '${action}을(를) 수행할 수 없습니다: ${error}'; -} - -// Path: subtitlingStyling -class _StringsSubtitlingStylingKo implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingKo._(this._root); - - @override final _StringsKo _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 => '배경색'; -} - -// Path: mpvConfig -class _StringsMpvConfigKo implements _StringsMpvConfigEn { - _StringsMpvConfigKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get title => 'MPV 설정'; - @override String get description => '고급 비디오 플레이어 설정'; - @override String get properties => '속성'; - @override String get presets => '사전 설정'; - @override String get noProperties => '설정된 속성이 없습니다'; - @override String get noPresets => '저장된 사전 설정이 없습니다'; - @override String get addProperty => '속성 추가'; - @override String get editProperty => '속성 편집'; - @override String get deleteProperty => '속성 삭제'; - @override String get propertyKey => '속성 키'; - @override String get propertyKeyHint => '예: hwdec, demuxer-max-bytes'; - @override String get propertyValue => '속성값'; - @override String get propertyValueHint => '예: auto, 256000000'; - @override String get saveAsPreset => '프리셋으로 저장...'; - @override String get presetName => '프리셋 이름'; - @override String get presetNameHint => '이 프리셋의 이름을 입력하세요'; - @override String get loadPreset => '로드'; - @override String get deletePreset => '삭제'; - @override String get presetSaved => '프리셋이 저장 되었습니다'; - @override String get presetLoaded => '프리셋이 로드 되었습니다'; - @override String get presetDeleted => '프리셋이 삭제 되었습니다'; - @override String get confirmDeletePreset => '이 프리셋을 삭제 하시겠습니까?'; - @override String get confirmDeleteProperty => '이 속성을 삭제 하시겠습니까?'; - @override String entriesCount({required Object count}) => '${count} 항목'; -} - -// Path: dialog -class _StringsDialogKo implements _StringsDialogEn { - _StringsDialogKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get confirmAction => '확인'; - @override String get cancel => '취소'; - @override String get playNow => '지금 재생'; -} - -// Path: discover -class _StringsDiscoverKo implements _StringsDiscoverEn { - _StringsDiscoverKo._(this._root); - - @override final _StringsKo _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 play => '재생'; - @override String playEpisode({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 => 'TV 시리즈'; - @override String minutesLeft({required Object minutes}) => '${minutes}분 남음'; -} - -// Path: errors -class _StringsErrorsKo implements _StringsErrorsEn { - _StringsErrorsKo._(this._root); - - @override final _StringsKo _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}으로 전환할 수 없습니다'; -} - -// Path: libraries -class _StringsLibrariesKo implements _StringsLibrariesEn { - _StringsLibrariesKo._(this._root); - - @override final _StringsKo _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 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 _StringsLibrariesTabsKo tabs = _StringsLibrariesTabsKo._(_root); - @override late final _StringsLibrariesGroupingsKo groupings = _StringsLibrariesGroupingsKo._(_root); -} - -// Path: about -class _StringsAboutKo implements _StringsAboutEn { - _StringsAboutKo._(this._root); - - @override final _StringsKo _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 => '타사 라이브러리 라이선스 보기'; -} - -// Path: serverSelection -class _StringsServerSelectionKo implements _StringsServerSelectionEn { - _StringsServerSelectionKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get allServerConnectionsFailed => '어떤 서버에도 연결할 수 없습니다. 네트워크를 확인하고 다시 시도하세요.'; - @override String get noServersFound => '서버를 찾을 수 없습니다.'; - @override String noServersFoundForAccount({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.'; - @override String failedToLoadServers({required Object error}) => '서버를 로드할 수 없습니다: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailKo implements _StringsHubDetailEn { - _StringsHubDetailKo._(this._root); - - @override final _StringsKo _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 => '항목이 없습니다'; -} - -// Path: logs -class _StringsLogsKo implements _StringsLogsEn { - _StringsLogsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get clearLogs => '로그 지우기'; - @override String get copyLogs => '로그 복사'; - @override String get error => '오류:'; - @override String get stackTrace => '스택 추적 (Stack Trace):'; -} - -// Path: licenses -class _StringsLicensesKo implements _StringsLicensesEn { - _StringsLicensesKo._(this._root); - - @override final _StringsKo _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} 개의 라이선스'; -} - -// Path: navigation -class _StringsNavigationKo implements _StringsNavigationEn { - _StringsNavigationKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get home => '홈'; - @override String get search => '검색'; - @override String get libraries => '미디어 라이브러리'; - @override String get settings => '설정'; - @override String get downloads => '다운로드'; -} - -// Path: collections -class _StringsCollectionsKo implements _StringsCollectionsEn { - _StringsCollectionsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get title => '컬렉션'; - @override String get collection => '컬렉션'; - @override String get empty => '컬렉션이 비어 있습니다'; - @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 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: playlists -class _StringsPlaylistsKo implements _StringsPlaylistsEn { - _StringsPlaylistsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get title => '플레이리스트'; - @override String get playlist => '재생 목록'; - @override String get noPlaylists => '재생 목록을 찾을 수 없습니다'; - @override String get create => '재생 목록 생성'; - @override String get playlistName => '재생 목록 이름'; - @override String get enterPlaylistName => '재생 목록 이름 입력'; - @override String get delete => '재생 목록 삭제'; - @override String get removeItem => '재생 목록에서 항목 제거'; - @override String get smartPlaylist => '스마트 재생 목록'; - @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 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 => '재생 목록에서 제거 실패'; -} - -// Path: watchTogether -class _StringsWatchTogetherKo implements _StringsWatchTogetherEn { - _StringsWatchTogetherKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get title => '함께 보기'; - @override String get description => '친구 및 가족과 콘텐츠를 동시에 시청하세요'; - @override String get createSession => '세션 생성'; - @override String get creating => '생성 중...'; - @override String get joinSession => '세션 참여'; - @override String get joining => '참가 중...'; - @override String get controlMode => '제어 모드'; - @override String get controlModeQuestion => '누가 재생을 제어할 수 있나요?'; - @override String get hostOnly => '호스트만'; - @override String get anyone => '누구나'; - @override String get hostingSession => '세션 호스팅'; - @override String get inSession => '세션 중'; - @override String get sessionCode => '세션 코드'; - @override String get hostControlsPlayback => '호스트 재생 제어'; - @override String get anyoneCanControl => '누구나 재생 제어 가능'; - @override String get hostControls => '호스트 제어'; - @override String get anyoneControls => '누구나 제어'; - @override String get participants => '참가자'; - @override String get host => '호스트'; - @override String get hostBadge => '호스트'; - @override String get youAreHost => '당신은 호스트 입니다'; - @override String get watchingWithOthers => '다른 사람과 함께 시청 중'; - @override String get endSession => '세션 종료'; - @override String get leaveSession => '세션 탈퇴'; - @override String get endSessionQuestion => '세션을 종료 하시겠습니까?'; - @override String get leaveSessionQuestion => '세션을 탈퇴 하시겠습니까?'; - @override String get endSessionConfirm => '이 작업은 모든 참가자의 세션을 종료합니다.'; - @override String get leaveSessionConfirm => '당신은 세션에서 제거됩니다.'; - @override String get endSessionConfirmOverlay => '이것은 모든 참가자의 시청 세션을 종료합니다.'; - @override String get leaveSessionConfirmOverlay => '시청 세션 연결이 끊어집니다.'; - @override String get end => '종료'; - @override String get leave => '이탈'; - @override String get syncing => '동기화 중...'; - @override String get participant => '참여자'; - @override String get joinWatchSession => '시청 세션에 참여'; - @override String get enterCodeHint => '8자리 코드 입력'; - @override String get pasteFromClipboard => '클립보드에서 붙여넣기'; - @override String get pleaseEnterCode => '세션 코드를 입력하세요'; - @override String get codeMustBe8Chars => '세션 코드는 반드시 8자리여야 합니다'; - @override String get joinInstructions => '호스트가 공유한 세션 코드를 입력하여 시청 세션에 참여하세요.'; - @override String get failedToCreate => '세션 생성 실패'; - @override String get failedToJoin => '세션 참여 실패'; - @override String get sessionCodeCopied => '세션 코드가 클립보드에 복사되었습니다'; -} - -// Path: downloads -class _StringsDownloadsKo implements _StringsDownloadsEn { - _StringsDownloadsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get title => '다운로드'; - @override String get manage => '관리'; - @override String get tvShows => 'TV 프로그램'; - @override String get movies => '영화'; - @override String get noDownloads => '다운로드 없음'; - @override String get noDownloadsDescription => '다운로드한 콘텐츠는 오프라인 시청을 위해 여기에 표시됩니다'; - @override String get downloadNow => '다운로드'; - @override String get deleteDownload => '다운로드 삭제'; - @override String get retryDownload => '다운로드 재시도'; - @override String get downloadQueued => '다운로드 대기 중'; - @override String episodesQueued({required Object count}) => '${count} 에피소드가 다운로드 대기열에 추가 되었습니다'; - @override String get downloadDeleted => '다운로드 삭제됨'; - @override String deleteConfirm({required Object title}) => '"${title}"를 삭제 하시겠습니까? 다운로드한 파일이 기기에서 삭제됩니다.'; - @override String deletingWithProgress({required Object title, required Object current, required Object total}) => '${title} 삭제 중... (${current}/${total})'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsKo implements _StringsHotkeysActionsEn { - _StringsHotkeysActionsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get playPause => '재생/일시정지'; - @override String get volumeUp => '볼륨 높이기'; - @override String get volumeDown => '볼륨 낮추기'; - @override String seekForward({required Object seconds}) => '앞으로 이동 (${seconds}초)'; - @override String seekBackward({required Object seconds}) => '뒤로 이동 (${seconds}초)'; - @override String get fullscreenToggle => '전체 화면 전환'; - @override String get muteToggle => '음소거 전환'; - @override String get subtitleToggle => '자막 전환'; - @override String get audioTrackNext => '다음 오디오 트랙'; - @override String get subtitleTrackNext => '다음 자막 트랙'; - @override String get chapterNext => '다음 챕터'; - @override String get chapterPrevious => '이전 챕터'; - @override String get speedIncrease => '속도 높이기'; - @override String get speedDecrease => '속도 낮추기'; - @override String get speedReset => '속도 초기화'; - @override String get subSeekNext => '다음 자막으로 이동'; - @override String get subSeekPrev => '이전 자막으로 이동'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsKo implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get recommended => '추천'; - @override String get browse => '찾아보기'; - @override String get collections => '컬렉션'; - @override String get playlists => '재생 목록'; -} - -// Path: libraries.groupings -class _StringsLibrariesGroupingsKo implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsKo._(this._root); - - @override final _StringsKo _root; // ignore: unused_field - - // Translations - @override String get all => '전체'; - @override String get movies => '영화'; - @override String get shows => 'TV 프로그램'; - @override String get seasons => '시즌'; - @override String get episodes => '화'; - @override String get folders => '폴더'; -} - -// 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); - } - - /// Metadata for the translations of . - @override final TranslationMetadata $meta; - - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); - - @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 _StringsSubtitlingStylingNl subtitlingStyling = _StringsSubtitlingStylingNl._(_root); - @override late final _StringsMpvConfigNl mpvConfig = _StringsMpvConfigNl._(_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 _StringsDownloadsNl downloads = _StringsDownloadsNl._(_root); - @override late final _StringsPlaylistsNl playlists = _StringsPlaylistsNl._(_root); - @override late final _StringsCollectionsNl collections = _StringsCollectionsNl._(_root); - @override late final _StringsWatchTogetherNl watchTogether = _StringsWatchTogetherNl._(_root); -} - -// Path: app -class _StringsAppNl implements _StringsAppEn { - _StringsAppNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Laden...'; -} - -// Path: auth -class _StringsAuthNl implements _StringsAuthEn { - _StringsAuthNl._(this._root); - - @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.'; -} - -// Path: common -class _StringsCommonNl implements _StringsCommonEn { - _StringsCommonNl._(this._root); - - @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 logout => 'Uitloggen'; - @override String get unknown => 'Onbekend'; - @override String get refresh => 'Vernieuwen'; - @override String get yes => 'Ja'; - @override String get no => 'Nee'; - @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); - - @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 mpvConfig => 'MPV-configuratie'; - @override String get search => 'Zoeken'; - @override String get logs => 'Logbestanden'; -} - -// Path: update -class _StringsUpdateNl implements _StringsUpdateEn { - _StringsUpdateNl._(this._root); - - @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'; -} - -// Path: settings -class _StringsSettingsNl implements _StringsSettingsEn { - _StringsSettingsNl._(this._root); - - @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 advanced => 'Geavanceerd'; - @override String get episodePosterMode => 'Aflevering poster stijl'; - @override String get seriesPoster => 'Serie poster'; - @override String get seriesPosterDescription => 'Toon de serie poster voor alle afleveringen'; - @override String get seasonPoster => 'Seizoen poster'; - @override String get seasonPosterDescription => 'Toon de seizoensspecifieke poster voor afleveringen'; - @override String get episodeThumbnail => 'Aflevering miniatuur'; - @override String get episodeThumbnailDescription => 'Toon 16:9 aflevering miniaturen'; - @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 showHeroSection => 'Toon hoofdsectie'; - @override String get useGlobalHubs => 'Plex Home-indeling gebruiken'; - @override String get useGlobalHubsDescription => 'Toon startpagina-hubs zoals de officiële Plex-client. Indien uitgeschakeld, worden in plaats daarvan aanbevelingen per bibliotheek getoond.'; - @override String get showServerNameOnHubs => 'Servernaam tonen bij hubs'; - @override String get showServerNameOnHubsDescription => 'Toon altijd de servernaam in hub-titels. Indien uitgeschakeld, alleen bij dubbele hub-namen.'; - @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 videoPlayerControls => 'Videospeler bediening'; - @override String get keyboardShortcuts => 'Toetsenbord sneltoetsen'; - @override String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; - @override String get videoPlayerNavigation => 'Videospeler navigatie'; - @override String get videoPlayerNavigationDescription => 'Gebruik pijltjestoetsen om door de videospeler bediening te navigeren'; - @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'; - @override String get downloads => 'Downloads'; - @override String get downloadLocationDescription => 'Kies waar gedownloade content wordt opgeslagen'; - @override String get downloadLocationDefault => 'Standaard (App-opslag)'; - @override String get downloadLocationCustom => 'Aangepaste Locatie'; - @override String get selectFolder => 'Selecteer Map'; - @override String get resetToDefault => 'Herstel naar Standaard'; - @override String currentPath({required Object path}) => 'Huidig: ${path}'; - @override String get downloadLocationChanged => 'Downloadlocatie gewijzigd'; - @override String get downloadLocationReset => 'Downloadlocatie hersteld naar standaard'; - @override String get downloadLocationInvalid => 'Geselecteerde map is niet beschrijfbaar'; - @override String get downloadLocationSelectError => 'Kan map niet selecteren'; - @override String get downloadOnWifiOnly => 'Alleen via WiFi downloaden'; - @override String get downloadOnWifiOnlyDescription => 'Voorkom downloads bij gebruik van mobiele data'; - @override String get cellularDownloadBlocked => 'Downloads zijn uitgeschakeld bij mobiele data. Maak verbinding met WiFi of wijzig de instelling.'; - @override String get maxVolume => 'Maximaal volume'; - @override String get maxVolumeDescription => 'Volume boven 100% toestaan voor stille media'; - @override String maxVolumePercent({required Object percent}) => '${percent}%'; - @override String get maxVolumeHint => 'Voer maximaal volume in (100-300)'; - @override String get discordRichPresence => 'Discord Rich Presence'; - @override String get discordRichPresenceDescription => 'Toon op Discord wat je aan het kijken bent'; - @override String get matchContentFrameRate => 'Inhoudsframesnelheid afstemmen'; - @override String get matchContentFrameRateDescription => 'Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij'; -} - -// Path: search -class _StringsSearchNl implements _StringsSearchEn { - _StringsSearchNl._(this._root); - - @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'; -} - -// Path: hotkeys -class _StringsHotkeysNl implements _StringsHotkeysEn { - _StringsHotkeysNl._(this._root); - - @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'; - @override late final _StringsHotkeysActionsNl actions = _StringsHotkeysActionsNl._(_root); -} - -// Path: pinEntry -class _StringsPinEntryNl implements _StringsPinEntryEn { - _StringsPinEntryNl._(this._root); - - @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'; -} - -// Path: fileInfo -class _StringsFileInfoNl implements _StringsFileInfoEn { - _StringsFileInfoNl._(this._root); - - @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'; -} - -// Path: mediaMenu -class _StringsMediaMenuNl implements _StringsMediaMenuEn { - _StringsMediaMenuNl._(this._root); - - @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'; -} - -// Path: accessibility -class _StringsAccessibilityNl implements _StringsAccessibilityEn { - _StringsAccessibilityNl._(this._root); - - @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'; -} - -// Path: tooltips -class _StringsTooltipsNl implements _StringsTooltipsEn { - _StringsTooltipsNl._(this._root); - - @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'; -} - -// Path: videoControls -class _StringsVideoControlsNl implements _StringsVideoControlsEn { - _StringsVideoControlsNl._(this._root); - - @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 autoPlayNext => 'Automatisch volgende afspelen'; - @override String get playNext => 'Volgende afspelen'; - @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 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 pipButton => 'Beeld-in-beeld modus'; - @override String get aspectRatioButton => 'Beeldverhouding'; - @override String get fullscreenButton => 'Volledig scherm activeren'; - @override String get exitFullscreenButton => 'Volledig scherm verlaten'; - @override String get alwaysOnTopButton => 'Altijd bovenop'; - @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); - - @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'; -} - -// Path: messages -class _StringsMessagesNl implements _StringsMessagesEn { - _StringsMessagesNl._(this._root); - - @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 markedAsWatchedOffline => 'Gemarkeerd als gekeken (sync wanneer online)'; - @override String get markedAsUnwatchedOffline => 'Gemarkeerd als ongekeken (sync wanneer online)'; - @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 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 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: subtitlingStyling -class _StringsSubtitlingStylingNl implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingNl._(this._root); - - @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'; -} - -// Path: mpvConfig -class _StringsMpvConfigNl implements _StringsMpvConfigEn { - _StringsMpvConfigNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get title => 'MPV-configuratie'; - @override String get description => 'Geavanceerde videospeler-instellingen'; - @override String get properties => 'Eigenschappen'; - @override String get presets => 'Voorinstellingen'; - @override String get noProperties => 'Geen eigenschappen geconfigureerd'; - @override String get noPresets => 'Geen opgeslagen voorinstellingen'; - @override String get addProperty => 'Eigenschap toevoegen'; - @override String get editProperty => 'Eigenschap bewerken'; - @override String get deleteProperty => 'Eigenschap verwijderen'; - @override String get propertyKey => 'Eigenschapssleutel'; - @override String get propertyKeyHint => 'bijv. hwdec, demuxer-max-bytes'; - @override String get propertyValue => 'Eigenschapswaarde'; - @override String get propertyValueHint => 'bijv. auto, 256000000'; - @override String get saveAsPreset => 'Opslaan als voorinstelling...'; - @override String get presetName => 'Naam voorinstelling'; - @override String get presetNameHint => 'Voer een naam in voor deze voorinstelling'; - @override String get loadPreset => 'Laden'; - @override String get deletePreset => 'Verwijderen'; - @override String get presetSaved => 'Voorinstelling opgeslagen'; - @override String get presetLoaded => 'Voorinstelling geladen'; - @override String get presetDeleted => 'Voorinstelling verwijderd'; - @override String get confirmDeletePreset => 'Weet je zeker dat je deze voorinstelling wilt verwijderen?'; - @override String get confirmDeleteProperty => 'Weet je zeker dat je deze eigenschap wilt verwijderen?'; - @override String entriesCount({required Object count}) => '${count} items'; -} - -// Path: dialog -class _StringsDialogNl implements _StringsDialogEn { - _StringsDialogNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get confirmAction => 'Bevestig actie'; - @override String get cancel => 'Annuleren'; - @override String get playNow => 'Nu afspelen'; -} - -// Path: discover -class _StringsDiscoverNl implements _StringsDiscoverEn { - _StringsDiscoverNl._(this._root); - - @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 play => 'Afspelen'; - @override String playEpisode({required Object season, required Object episode}) => '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); - - @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}'; -} - -// Path: libraries -class _StringsLibrariesNl implements _StringsLibrariesEn { - _StringsLibrariesNl._(this._root); - - @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 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); - - @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'; -} - -// Path: serverSelection -class _StringsServerSelectionNl implements _StringsServerSelectionEn { - _StringsServerSelectionNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get allServerConnectionsFailed => 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; - @override String get noServersFound => 'Geen servers gevonden'; - @override String noServersFoundForAccount({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})'; - @override String failedToLoadServers({required Object error}) => 'Kon servers niet laden: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailNl implements _StringsHubDetailEn { - _StringsHubDetailNl._(this._root); - - @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'; -} - -// Path: logs -class _StringsLogsNl implements _StringsLogsEn { - _StringsLogsNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get clearLogs => 'Wis logs'; - @override String get copyLogs => 'Kopieer logs'; - @override String get error => 'Fout:'; - @override String get stackTrace => 'Stacktracering:'; -} - -// Path: licenses -class _StringsLicensesNl implements _StringsLicensesEn { - _StringsLicensesNl._(this._root); - - @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'; -} - -// Path: navigation -class _StringsNavigationNl implements _StringsNavigationEn { - _StringsNavigationNl._(this._root); - - @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'; - @override String get downloads => 'Downloads'; -} - -// Path: downloads -class _StringsDownloadsNl implements _StringsDownloadsEn { - _StringsDownloadsNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get title => 'Downloads'; - @override String get manage => 'Beheren'; - @override String get tvShows => 'Series'; - @override String get movies => 'Films'; - @override String get noDownloads => 'Nog geen downloads'; - @override String get noDownloadsDescription => 'Gedownloade content verschijnt hier voor offline weergave'; - @override String get downloadNow => 'Download'; - @override String get deleteDownload => 'Download verwijderen'; - @override String get retryDownload => 'Download opnieuw proberen'; - @override String get downloadQueued => 'Download in wachtrij'; - @override String episodesQueued({required Object count}) => '${count} afleveringen in wachtrij voor download'; - @override String get downloadDeleted => 'Download verwijderd'; - @override String deleteConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Het gedownloade bestand wordt van je apparaat verwijderd.'; - @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Verwijderen van ${title}... (${current} van ${total})'; -} - -// Path: playlists -class _StringsPlaylistsNl implements _StringsPlaylistsEn { - _StringsPlaylistsNl._(this._root); - - @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 playlistName => 'Naam afspeellijst'; - @override String get enterPlaylistName => 'Voer naam afspeellijst in'; - @override String get delete => 'Afspeellijst verwijderen'; - @override String get removeItem => 'Verwijderen uit afspeellijst'; - @override String get smartPlaylist => 'Slimme 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 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); - - @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 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 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: watchTogether -class _StringsWatchTogetherNl implements _StringsWatchTogetherEn { - _StringsWatchTogetherNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get title => 'Samen Kijken'; - @override String get description => 'Kijk synchroon met vrienden en familie'; - @override String get createSession => 'Sessie Maken'; - @override String get creating => 'Maken...'; - @override String get joinSession => 'Sessie Deelnemen'; - @override String get joining => 'Deelnemen...'; - @override String get controlMode => 'Controlemodus'; - @override String get controlModeQuestion => 'Wie kan het afspelen bedienen?'; - @override String get hostOnly => 'Alleen Host'; - @override String get anyone => 'Iedereen'; - @override String get hostingSession => 'Sessie Hosten'; - @override String get inSession => 'In Sessie'; - @override String get sessionCode => 'Sessiecode'; - @override String get hostControlsPlayback => 'Host bedient het afspelen'; - @override String get anyoneCanControl => 'Iedereen kan het afspelen bedienen'; - @override String get hostControls => 'Host bedient'; - @override String get anyoneControls => 'Iedereen bedient'; - @override String get participants => 'Deelnemers'; - @override String get host => 'Host'; - @override String get hostBadge => 'HOST'; - @override String get youAreHost => 'Jij bent de host'; - @override String get watchingWithOthers => 'Kijken met anderen'; - @override String get endSession => 'Sessie Beëindigen'; - @override String get leaveSession => 'Sessie Verlaten'; - @override String get endSessionQuestion => 'Sessie Beëindigen?'; - @override String get leaveSessionQuestion => 'Sessie Verlaten?'; - @override String get endSessionConfirm => 'Dit beëindigt de sessie voor alle deelnemers.'; - @override String get leaveSessionConfirm => 'Je wordt uit de sessie verwijderd.'; - @override String get endSessionConfirmOverlay => 'Dit beëindigt de kijksessie voor alle deelnemers.'; - @override String get leaveSessionConfirmOverlay => 'Je wordt losgekoppeld van de kijksessie.'; - @override String get end => 'Beëindigen'; - @override String get leave => 'Verlaten'; - @override String get syncing => 'Synchroniseren...'; - @override String get participant => 'deelnemer'; - @override String get joinWatchSession => 'Kijksessie Deelnemen'; - @override String get enterCodeHint => 'Voer 8-teken code in'; - @override String get pasteFromClipboard => 'Plakken van klembord'; - @override String get pleaseEnterCode => 'Voer een sessiecode in'; - @override String get codeMustBe8Chars => 'Sessiecode moet 8 tekens zijn'; - @override String get joinInstructions => 'Voer de sessiecode in die door de host is gedeeld om deel te nemen aan hun kijksessie.'; - @override String get failedToCreate => 'Sessie maken mislukt'; - @override String get failedToJoin => 'Sessie deelnemen mislukt'; - @override String get sessionCodeCopied => 'Sessiecode gekopieerd naar klembord'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsNl implements _StringsHotkeysActionsEn { - _StringsHotkeysActionsNl._(this._root); - - @override final _StringsNl _root; // ignore: unused_field - - // Translations - @override String get playPause => 'Afspelen/Pauzeren'; - @override String get volumeUp => 'Volume omhoog'; - @override String get volumeDown => 'Volume omlaag'; - @override String seekForward({required Object seconds}) => 'Vooruitspoelen (${seconds}s)'; - @override String seekBackward({required Object seconds}) => 'Terugspoelen (${seconds}s)'; - @override String get fullscreenToggle => 'Volledig scherm'; - @override String get muteToggle => 'Dempen'; - @override String get subtitleToggle => 'Ondertiteling'; - @override String get audioTrackNext => 'Volgende audiotrack'; - @override String get subtitleTrackNext => 'Volgende ondertiteltrack'; - @override String get chapterNext => 'Volgend hoofdstuk'; - @override String get chapterPrevious => 'Vorig hoofdstuk'; - @override String get speedIncrease => 'Snelheid verhogen'; - @override String get speedDecrease => 'Snelheid verlagen'; - @override String get speedReset => 'Snelheid resetten'; - @override String get subSeekNext => 'Naar volgende ondertitel'; - @override String get subSeekPrev => 'Naar vorige ondertitel'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsNl implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsNl._(this._root); - - @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'; -} - -// Path: libraries.groupings -class _StringsLibrariesGroupingsNl implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsNl._(this._root); - - @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'; -} - -// 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); - } - - /// Metadata for the translations of . - @override final TranslationMetadata $meta; - - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); - - @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 _StringsSubtitlingStylingSv subtitlingStyling = _StringsSubtitlingStylingSv._(_root); - @override late final _StringsMpvConfigSv mpvConfig = _StringsMpvConfigSv._(_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 _StringsDownloadsSv downloads = _StringsDownloadsSv._(_root); - @override late final _StringsPlaylistsSv playlists = _StringsPlaylistsSv._(_root); - @override late final _StringsCollectionsSv collections = _StringsCollectionsSv._(_root); - @override late final _StringsWatchTogetherSv watchTogether = _StringsWatchTogetherSv._(_root); -} - -// Path: app -class _StringsAppSv implements _StringsAppEn { - _StringsAppSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Laddar...'; -} - -// Path: auth -class _StringsAuthSv implements _StringsAuthEn { - _StringsAuthSv._(this._root); - - @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.'; -} - -// Path: common -class _StringsCommonSv implements _StringsCommonEn { - _StringsCommonSv._(this._root); - - @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 logout => 'Logga ut'; - @override String get unknown => 'Okänd'; - @override String get refresh => 'Uppdatera'; - @override String get yes => 'Ja'; - @override String get no => 'Nej'; - @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); - - @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 mpvConfig => 'MPV-konfiguration'; - @override String get search => 'Sök'; - @override String get logs => 'Loggar'; -} - -// Path: update -class _StringsUpdateSv implements _StringsUpdateEn { - _StringsUpdateSv._(this._root); - - @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'; -} - -// Path: settings -class _StringsSettingsSv implements _StringsSettingsEn { - _StringsSettingsSv._(this._root); - - @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 advanced => 'Avancerat'; - @override String get episodePosterMode => 'Avsnittsaffisch-stil'; - @override String get seriesPoster => 'Serieaffisch'; - @override String get seriesPosterDescription => 'Visa seriens affisch för alla avsnitt'; - @override String get seasonPoster => 'Säsongsaffisch'; - @override String get seasonPosterDescription => 'Visa säsongens affisch för avsnitt'; - @override String get episodeThumbnail => 'Avsnittsminiatyr'; - @override String get episodeThumbnailDescription => 'Visa 16:9 skärmbild från avsnittet'; - @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 showHeroSection => 'Visa hjältesektion'; - @override String get useGlobalHubs => 'Använd Plex hem-layout'; - @override String get useGlobalHubsDescription => 'Visar startsidans hubbar som den officiella Plex-klienten. När av visas rekommendationer per bibliotek istället.'; - @override String get showServerNameOnHubs => 'Visa servernamn på hubbar'; - @override String get showServerNameOnHubsDescription => 'Visa alltid servernamnet i hubbtitlar. När av visas endast för duplicerade hubbnamn.'; - @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 videoPlayerControls => 'Videospelar-kontroller'; - @override String get keyboardShortcuts => 'Tangentbordsgenvägar'; - @override String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; - @override String get videoPlayerNavigation => 'Navigering i videospelaren'; - @override String get videoPlayerNavigationDescription => 'Använd piltangenter för att navigera videospelarens kontroller'; - @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'; - @override String get downloads => 'Nedladdningar'; - @override String get downloadLocationDescription => 'Välj var nedladdat innehåll ska lagras'; - @override String get downloadLocationDefault => 'Standard (App-lagring)'; - @override String get downloadLocationCustom => 'Anpassad Plats'; - @override String get selectFolder => 'Välj Mapp'; - @override String get resetToDefault => 'Återställ till Standard'; - @override String currentPath({required Object path}) => 'Nuvarande: ${path}'; - @override String get downloadLocationChanged => 'Nedladdningsplats ändrad'; - @override String get downloadLocationReset => 'Nedladdningsplats återställd till standard'; - @override String get downloadLocationInvalid => 'Vald mapp är inte skrivbar'; - @override String get downloadLocationSelectError => 'Kunde inte välja mapp'; - @override String get downloadOnWifiOnly => 'Ladda ner endast på WiFi'; - @override String get downloadOnWifiOnlyDescription => 'Förhindra nedladdningar vid användning av mobildata'; - @override String get cellularDownloadBlocked => 'Nedladdningar är inaktiverade på mobildata. Anslut till WiFi eller ändra inställningen.'; - @override String get maxVolume => 'Maximal volym'; - @override String get maxVolumeDescription => 'Tillåt volym över 100% för tyst media'; - @override String maxVolumePercent({required Object percent}) => '${percent}%'; - @override String get maxVolumeHint => 'Ange maximal volym (100-300)'; - @override String get discordRichPresence => 'Discord Rich Presence'; - @override String get discordRichPresenceDescription => 'Visa vad du tittar på i Discord'; - @override String get matchContentFrameRate => 'Matcha innehållets bildfrekvens'; - @override String get matchContentFrameRateDescription => 'Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri'; -} - -// Path: search -class _StringsSearchSv implements _StringsSearchEn { - _StringsSearchSv._(this._root); - - @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'; -} - -// Path: hotkeys -class _StringsHotkeysSv implements _StringsHotkeysEn { - _StringsHotkeysSv._(this._root); - - @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'; - @override late final _StringsHotkeysActionsSv actions = _StringsHotkeysActionsSv._(_root); -} - -// Path: pinEntry -class _StringsPinEntrySv implements _StringsPinEntryEn { - _StringsPinEntrySv._(this._root); - - @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'; -} - -// Path: fileInfo -class _StringsFileInfoSv implements _StringsFileInfoEn { - _StringsFileInfoSv._(this._root); - - @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'; -} - -// Path: mediaMenu -class _StringsMediaMenuSv implements _StringsMediaMenuEn { - _StringsMediaMenuSv._(this._root); - - @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'; -} - -// Path: accessibility -class _StringsAccessibilitySv implements _StringsAccessibilityEn { - _StringsAccessibilitySv._(this._root); - - @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'; -} - -// Path: tooltips -class _StringsTooltipsSv implements _StringsTooltipsEn { - _StringsTooltipsSv._(this._root); - - @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'; -} - -// Path: videoControls -class _StringsVideoControlsSv implements _StringsVideoControlsEn { - _StringsVideoControlsSv._(this._root); - - @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 autoPlayNext => 'Spela nästa automatiskt'; - @override String get playNext => 'Spela nästa'; - @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 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 pipButton => 'Bild-i-bild läge'; - @override String get aspectRatioButton => 'Bildförhållande'; - @override String get fullscreenButton => 'Aktivera helskärm'; - @override String get exitFullscreenButton => 'Avsluta helskärm'; - @override String get alwaysOnTopButton => 'Alltid överst'; - @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); - - @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'; -} - -// Path: messages -class _StringsMessagesSv implements _StringsMessagesEn { - _StringsMessagesSv._(this._root); - - @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 markedAsWatchedOffline => 'Markerad som sedd (synkroniseras när online)'; - @override String get markedAsUnwatchedOffline => 'Markerad som osedd (synkroniseras när online)'; - @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 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 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: subtitlingStyling -class _StringsSubtitlingStylingSv implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingSv._(this._root); - - @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'; -} - -// Path: mpvConfig -class _StringsMpvConfigSv implements _StringsMpvConfigEn { - _StringsMpvConfigSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get title => 'MPV-konfiguration'; - @override String get description => 'Avancerade videospelares inställningar'; - @override String get properties => 'Egenskaper'; - @override String get presets => 'Förval'; - @override String get noProperties => 'Inga egenskaper konfigurerade'; - @override String get noPresets => 'Inga sparade förval'; - @override String get addProperty => 'Lägg till egenskap'; - @override String get editProperty => 'Redigera egenskap'; - @override String get deleteProperty => 'Ta bort egenskap'; - @override String get propertyKey => 'Egenskapsnyckel'; - @override String get propertyKeyHint => 't.ex. hwdec, demuxer-max-bytes'; - @override String get propertyValue => 'Egenskapsvärde'; - @override String get propertyValueHint => 't.ex. auto, 256000000'; - @override String get saveAsPreset => 'Spara som förval...'; - @override String get presetName => 'Förvalnamn'; - @override String get presetNameHint => 'Ange ett namn för detta förval'; - @override String get loadPreset => 'Ladda'; - @override String get deletePreset => 'Ta bort'; - @override String get presetSaved => 'Förval sparat'; - @override String get presetLoaded => 'Förval laddat'; - @override String get presetDeleted => 'Förval borttaget'; - @override String get confirmDeletePreset => 'Är du säker på att du vill ta bort detta förval?'; - @override String get confirmDeleteProperty => 'Är du säker på att du vill ta bort denna egenskap?'; - @override String entriesCount({required Object count}) => '${count} poster'; -} - -// Path: dialog -class _StringsDialogSv implements _StringsDialogEn { - _StringsDialogSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get confirmAction => 'Bekräfta åtgärd'; - @override String get cancel => 'Avbryt'; - @override String get playNow => 'Spela nu'; -} - -// Path: discover -class _StringsDiscoverSv implements _StringsDiscoverEn { - _StringsDiscoverSv._(this._root); - - @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 play => 'Spela'; - @override String playEpisode({required Object season, required Object episode}) => '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); - - @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}'; -} - -// Path: libraries -class _StringsLibrariesSv implements _StringsLibrariesEn { - _StringsLibrariesSv._(this._root); - - @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 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); - - @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'; -} - -// Path: serverSelection -class _StringsServerSelectionSv implements _StringsServerSelectionEn { - _StringsServerSelectionSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get allServerConnectionsFailed => 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; - @override String get noServersFound => 'Inga servrar hittades'; - @override String noServersFoundForAccount({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})'; - @override String failedToLoadServers({required Object error}) => 'Misslyckades att ladda servrar: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailSv implements _StringsHubDetailEn { - _StringsHubDetailSv._(this._root); - - @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'; -} - -// Path: logs -class _StringsLogsSv implements _StringsLogsEn { - _StringsLogsSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get clearLogs => 'Rensa loggar'; - @override String get copyLogs => 'Kopiera loggar'; - @override String get error => 'Fel:'; - @override String get stackTrace => 'Stack trace:'; -} - -// Path: licenses -class _StringsLicensesSv implements _StringsLicensesEn { - _StringsLicensesSv._(this._root); - - @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'; -} - -// Path: navigation -class _StringsNavigationSv implements _StringsNavigationEn { - _StringsNavigationSv._(this._root); - - @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'; - @override String get downloads => 'Nedladdningar'; -} - -// Path: downloads -class _StringsDownloadsSv implements _StringsDownloadsEn { - _StringsDownloadsSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get title => 'Nedladdningar'; - @override String get manage => 'Hantera'; - @override String get tvShows => 'TV-serier'; - @override String get movies => 'Filmer'; - @override String get noDownloads => 'Inga nedladdningar ännu'; - @override String get noDownloadsDescription => 'Nedladdat innehåll visas här för offline-visning'; - @override String get downloadNow => 'Ladda ner'; - @override String get deleteDownload => 'Ta bort nedladdning'; - @override String get retryDownload => 'Försök igen'; - @override String get downloadQueued => 'Nedladdning köad'; - @override String episodesQueued({required Object count}) => '${count} avsnitt köade för nedladdning'; - @override String get downloadDeleted => 'Nedladdning borttagen'; - @override String deleteConfirm({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Den nedladdade filen kommer att tas bort från din enhet.'; - @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Tar bort ${title}... (${current} av ${total})'; -} - -// Path: playlists -class _StringsPlaylistsSv implements _StringsPlaylistsEn { - _StringsPlaylistsSv._(this._root); - - @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 playlistName => 'Spellistans namn'; - @override String get enterPlaylistName => 'Ange spellistans namn'; - @override String get delete => 'Ta bort spellista'; - @override String get removeItem => 'Ta bort från spellista'; - @override String get smartPlaylist => 'Smart 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 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); - - @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 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 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: watchTogether -class _StringsWatchTogetherSv implements _StringsWatchTogetherEn { - _StringsWatchTogetherSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get title => 'Titta Tillsammans'; - @override String get description => 'Titta på innehåll synkroniserat med vänner och familj'; - @override String get createSession => 'Skapa Session'; - @override String get creating => 'Skapar...'; - @override String get joinSession => 'Gå med i Session'; - @override String get joining => 'Ansluter...'; - @override String get controlMode => 'Kontrollläge'; - @override String get controlModeQuestion => 'Vem kan styra uppspelningen?'; - @override String get hostOnly => 'Endast Värd'; - @override String get anyone => 'Alla'; - @override String get hostingSession => 'Värd för Session'; - @override String get inSession => 'I Session'; - @override String get sessionCode => 'Sessionskod'; - @override String get hostControlsPlayback => 'Värden styr uppspelningen'; - @override String get anyoneCanControl => 'Alla kan styra uppspelningen'; - @override String get hostControls => 'Värd styr'; - @override String get anyoneControls => 'Alla styr'; - @override String get participants => 'Deltagare'; - @override String get host => 'Värd'; - @override String get hostBadge => 'VÄRD'; - @override String get youAreHost => 'Du är värden'; - @override String get watchingWithOthers => 'Tittar med andra'; - @override String get endSession => 'Avsluta Session'; - @override String get leaveSession => 'Lämna Session'; - @override String get endSessionQuestion => 'Avsluta Session?'; - @override String get leaveSessionQuestion => 'Lämna Session?'; - @override String get endSessionConfirm => 'Detta avslutar sessionen för alla deltagare.'; - @override String get leaveSessionConfirm => 'Du kommer att tas bort från sessionen.'; - @override String get endSessionConfirmOverlay => 'Detta avslutar tittarsessionen för alla deltagare.'; - @override String get leaveSessionConfirmOverlay => 'Du kommer att kopplas bort från tittarsessionen.'; - @override String get end => 'Avsluta'; - @override String get leave => 'Lämna'; - @override String get syncing => 'Synkroniserar...'; - @override String get participant => 'deltagare'; - @override String get joinWatchSession => 'Gå med i Tittarsession'; - @override String get enterCodeHint => 'Ange 8-teckens kod'; - @override String get pasteFromClipboard => 'Klistra in från urklipp'; - @override String get pleaseEnterCode => 'Vänligen ange en sessionskod'; - @override String get codeMustBe8Chars => 'Sessionskod måste vara 8 tecken'; - @override String get joinInstructions => 'Ange sessionskoden som delats av värden för att gå med i deras tittarsession.'; - @override String get failedToCreate => 'Det gick inte att skapa session'; - @override String get failedToJoin => 'Det gick inte att gå med i session'; - @override String get sessionCodeCopied => 'Sessionskod kopierad till urklipp'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsSv implements _StringsHotkeysActionsEn { - _StringsHotkeysActionsSv._(this._root); - - @override final _StringsSv _root; // ignore: unused_field - - // Translations - @override String get playPause => 'Spela/Pausa'; - @override String get volumeUp => 'Höj volym'; - @override String get volumeDown => 'Sänk volym'; - @override String seekForward({required Object seconds}) => 'Spola framåt (${seconds}s)'; - @override String seekBackward({required Object seconds}) => 'Spola bakåt (${seconds}s)'; - @override String get fullscreenToggle => 'Växla helskärm'; - @override String get muteToggle => 'Växla ljud av'; - @override String get subtitleToggle => 'Växla undertexter'; - @override String get audioTrackNext => 'Nästa ljudspår'; - @override String get subtitleTrackNext => 'Nästa undertextspår'; - @override String get chapterNext => 'Nästa kapitel'; - @override String get chapterPrevious => 'Föregående kapitel'; - @override String get speedIncrease => 'Öka hastighet'; - @override String get speedDecrease => 'Minska hastighet'; - @override String get speedReset => 'Återställ hastighet'; - @override String get subSeekNext => 'Hoppa till nästa undertext'; - @override String get subSeekPrev => 'Hoppa till föregående undertext'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsSv implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsSv._(this._root); - - @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'; -} - -// Path: libraries.groupings -class _StringsLibrariesGroupingsSv implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsSv._(this._root); - - @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'; -} - -// 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); - } - - /// Metadata for the translations of . - @override final TranslationMetadata $meta; - - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); - - @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 _StringsSubtitlingStylingZh subtitlingStyling = _StringsSubtitlingStylingZh._(_root); - @override late final _StringsMpvConfigZh mpvConfig = _StringsMpvConfigZh._(_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 _StringsDownloadsZh downloads = _StringsDownloadsZh._(_root); - @override late final _StringsPlaylistsZh playlists = _StringsPlaylistsZh._(_root); - @override late final _StringsCollectionsZh collections = _StringsCollectionsZh._(_root); - @override late final _StringsWatchTogetherZh watchTogether = _StringsWatchTogetherZh._(_root); -} - -// Path: app -class _StringsAppZh implements _StringsAppEn { - _StringsAppZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get title => 'Plezy'; - @override String get loading => '加载中...'; -} - -// Path: auth -class _StringsAuthZh implements _StringsAuthEn { - _StringsAuthZh._(this._root); - - @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请在你的浏览器中完成登录。'; -} - -// Path: common -class _StringsCommonZh implements _StringsCommonEn { - _StringsCommonZh._(this._root); - - @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 logout => '登出'; - @override String get unknown => '未知'; - @override String get refresh => '刷新'; - @override String get yes => '是'; - @override String get no => '否'; - @override String get delete => '删除'; - @override String get shuffle => '随机播放'; - @override String get addTo => '添加到...'; -} - -// Path: screens -class _StringsScreensZh implements _StringsScreensEn { - _StringsScreensZh._(this._root); - - @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 mpvConfig => 'MPV 配置'; - @override String get search => '搜索'; - @override String get logs => '日志'; -} - -// Path: update -class _StringsUpdateZh implements _StringsUpdateEn { - _StringsUpdateZh._(this._root); - - @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 => '无法检查更新'; -} - -// Path: settings -class _StringsSettingsZh implements _StringsSettingsEn { - _StringsSettingsZh._(this._root); - - @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 advanced => '高级'; - @override String get episodePosterMode => '剧集海报样式'; - @override String get seriesPoster => '剧集海报'; - @override String get seriesPosterDescription => '为所有剧集显示剧集海报'; - @override String get seasonPoster => '季海报'; - @override String get seasonPosterDescription => '为剧集显示特定季的海报'; - @override String get episodeThumbnail => '剧集缩略图'; - @override String get episodeThumbnailDescription => '显示16:9剧集截图缩略图'; - @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 showHeroSection => '显示主要精选区'; - @override String get useGlobalHubs => '使用 Plex 主页布局'; - @override String get useGlobalHubsDescription => '显示与官方 Plex 客户端相同的主页推荐。关闭时将显示按媒体库分类的推荐。'; - @override String get showServerNameOnHubs => '在推荐栏显示服务器名称'; - @override String get showServerNameOnHubsDescription => '始终在推荐栏标题中显示服务器名称。关闭时仅在推荐栏名称重复时显示。'; - @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 videoPlayerControls => '视频播放器控制'; - @override String get keyboardShortcuts => '键盘快捷键'; - @override String get keyboardShortcutsDescription => '自定义键盘快捷键'; - @override String get videoPlayerNavigation => '视频播放器导航'; - @override String get videoPlayerNavigationDescription => '使用方向键导航视频播放器控件'; - @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} 秒'; - @override String get downloads => '下载'; - @override String get downloadLocationDescription => '选择下载内容的存储位置'; - @override String get downloadLocationDefault => '默认(应用存储)'; - @override String get downloadLocationCustom => '自定义位置'; - @override String get selectFolder => '选择文件夹'; - @override String get resetToDefault => '重置为默认'; - @override String currentPath({required Object path}) => '当前: ${path}'; - @override String get downloadLocationChanged => '下载位置已更改'; - @override String get downloadLocationReset => '下载位置已重置为默认'; - @override String get downloadLocationInvalid => '所选文件夹不可写入'; - @override String get downloadLocationSelectError => '选择文件夹失败'; - @override String get downloadOnWifiOnly => '仅在 WiFi 时下载'; - @override String get downloadOnWifiOnlyDescription => '使用蜂窝数据时禁止下载'; - @override String get cellularDownloadBlocked => '蜂窝数据下已禁用下载。请连接 WiFi 或更改设置。'; - @override String get maxVolume => '最大音量'; - @override String get maxVolumeDescription => '允许音量超过 100% 以适应安静的媒体'; - @override String maxVolumePercent({required Object percent}) => '${percent}%'; - @override String get maxVolumeHint => '输入最大音量 (100-300)'; - @override String get discordRichPresence => 'Discord 动态状态'; - @override String get discordRichPresenceDescription => '在 Discord 上显示您正在观看的内容'; - @override String get matchContentFrameRate => '匹配内容帧率'; - @override String get matchContentFrameRateDescription => '调整显示刷新率以匹配视频内容,减少画面抖动并节省电量'; -} - -// Path: search -class _StringsSearchZh implements _StringsSearchEn { - _StringsSearchZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // 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); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String setShortcutFor({required Object actionName}) => '为 ${actionName} 设置快捷键'; - @override String get clearShortcut => '清除快捷键'; - @override late final _StringsHotkeysActionsZh actions = _StringsHotkeysActionsZh._(_root); -} - -// Path: pinEntry -class _StringsPinEntryZh implements _StringsPinEntryEn { - _StringsPinEntryZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // 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); - - @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位偏移量'; -} - -// Path: mediaMenu -class _StringsMediaMenuZh implements _StringsMediaMenuEn { - _StringsMediaMenuZh._(this._root); - - @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 => '文件信息'; -} - -// Path: accessibility -class _StringsAccessibilityZh implements _StringsAccessibilityEn { - _StringsAccessibilityZh._(this._root); - - @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 => '点击播放'; -} - -// Path: tooltips -class _StringsTooltipsZh implements _StringsTooltipsEn { - _StringsTooltipsZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get shufflePlay => '随机播放'; - @override String get markAsWatched => '标记为已观看'; - @override String get markAsUnwatched => '标记为未观看'; -} - -// Path: videoControls -class _StringsVideoControlsZh implements _StringsVideoControlsEn { - _StringsVideoControlsZh._(this._root); - - @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 autoPlayNext => '自动播放下一集'; - @override String get playNext => '播放下一集'; - @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 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 pipButton => '画中画模式'; - @override String get aspectRatioButton => '宽高比'; - @override String get fullscreenButton => '进入全屏'; - @override String get exitFullscreenButton => '退出全屏'; - @override String get alwaysOnTopButton => '置顶窗口'; - @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); - - @override final _StringsZh _root; // ignore: unused_field - - // 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); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get markedAsWatched => '已标记为已观看'; - @override String get markedAsUnwatched => '已标记为未观看'; - @override String get markedAsWatchedOffline => '已标记为已观看 (将在联网时同步)'; - @override String get markedAsUnwatchedOffline => '已标记为未观看 (将在联网时同步)'; - @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 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 get noItemsAvailable => '没有可用的项目'; - @override String get failedToCreatePlayQueue => '创建播放队列失败'; - @override String get failedToCreatePlayQueueNoItems => '创建播放队列失败 - 没有项目'; - @override String failedPlayback({required Object action, required Object error}) => '无法${action}: ${error}'; -} - -// Path: subtitlingStyling -class _StringsSubtitlingStylingZh implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingZh._(this._root); - - @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 => '背景颜色'; -} - -// Path: mpvConfig -class _StringsMpvConfigZh implements _StringsMpvConfigEn { - _StringsMpvConfigZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get title => 'MPV 配置'; - @override String get description => '高级视频播放器设置'; - @override String get properties => '属性'; - @override String get presets => '预设'; - @override String get noProperties => '未配置任何属性'; - @override String get noPresets => '没有保存的预设'; - @override String get addProperty => '添加属性'; - @override String get editProperty => '编辑属性'; - @override String get deleteProperty => '删除属性'; - @override String get propertyKey => '属性键'; - @override String get propertyKeyHint => '例如 hwdec, demuxer-max-bytes'; - @override String get propertyValue => '属性值'; - @override String get propertyValueHint => '例如 auto, 256000000'; - @override String get saveAsPreset => '保存为预设...'; - @override String get presetName => '预设名称'; - @override String get presetNameHint => '输入此预设的名称'; - @override String get loadPreset => '加载'; - @override String get deletePreset => '删除'; - @override String get presetSaved => '预设已保存'; - @override String get presetLoaded => '预设已加载'; - @override String get presetDeleted => '预设已删除'; - @override String get confirmDeletePreset => '确定要删除此预设吗?'; - @override String get confirmDeleteProperty => '确定要删除此属性吗?'; - @override String entriesCount({required Object count}) => '${count} 条目'; -} - -// Path: dialog -class _StringsDialogZh implements _StringsDialogEn { - _StringsDialogZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get confirmAction => '确认操作'; - @override String get cancel => '取消'; - @override String get playNow => '立即播放'; -} - -// Path: discover -class _StringsDiscoverZh implements _StringsDiscoverEn { - _StringsDiscoverZh._(this._root); - - @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 play => '播放'; - @override String playEpisode({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); - - @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}'; -} - -// Path: libraries -class _StringsLibrariesZh implements _StringsLibrariesEn { - _StringsLibrariesZh._(this._root); - - @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 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); - - @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 => '查看第三方库的许可证'; -} - -// Path: serverSelection -class _StringsServerSelectionZh implements _StringsServerSelectionEn { - _StringsServerSelectionZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get allServerConnectionsFailed => '无法连接到任何服务器。请检查你的网络并重试。'; - @override String get noServersFound => '未找到服务器'; - @override String noServersFoundForAccount({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器'; - @override String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; -} - -// Path: hubDetail -class _StringsHubDetailZh implements _StringsHubDetailEn { - _StringsHubDetailZh._(this._root); - - @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 => '未找到项目'; -} - -// Path: logs -class _StringsLogsZh implements _StringsLogsEn { - _StringsLogsZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get clearLogs => '清除日志'; - @override String get copyLogs => '复制日志'; - @override String get error => '错误:'; - @override String get stackTrace => '堆栈跟踪 (Stack Trace):'; -} - -// Path: licenses -class _StringsLicensesZh implements _StringsLicensesEn { - _StringsLicensesZh._(this._root); - - @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} 个许可证'; -} - -// Path: navigation -class _StringsNavigationZh implements _StringsNavigationEn { - _StringsNavigationZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get home => '主页'; - @override String get search => '搜索'; - @override String get libraries => '媒体库'; - @override String get settings => '设置'; - @override String get downloads => '下载'; -} - -// Path: downloads -class _StringsDownloadsZh implements _StringsDownloadsEn { - _StringsDownloadsZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get title => '下载'; - @override String get manage => '管理'; - @override String get tvShows => '电视剧'; - @override String get movies => '电影'; - @override String get noDownloads => '暂无下载'; - @override String get noDownloadsDescription => '下载的内容将在此处显示以供离线观看'; - @override String get downloadNow => '下载'; - @override String get deleteDownload => '删除下载'; - @override String get retryDownload => '重试下载'; - @override String get downloadQueued => '下载已排队'; - @override String episodesQueued({required Object count}) => '${count} 集已加入下载队列'; - @override String get downloadDeleted => '下载已删除'; - @override String deleteConfirm({required Object title}) => '确定要删除 "${title}" 吗?下载的文件将从您的设备中删除。'; - @override String deletingWithProgress({required Object title, required Object current, required Object total}) => '正在删除 ${title}... (${current}/${total})'; -} - -// Path: playlists -class _StringsPlaylistsZh implements _StringsPlaylistsEn { - _StringsPlaylistsZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get title => '播放列表'; - @override String get noPlaylists => '未找到播放列表'; - @override String get create => '创建播放列表'; - @override String get playlistName => '播放列表名称'; - @override String get enterPlaylistName => '输入播放列表名称'; - @override String get delete => '删除播放列表'; - @override String get removeItem => '从播放列表中移除'; - @override String get smartPlaylist => '智能播放列表'; - @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 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); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get title => '合集'; - @override String get collection => '合集'; - @override String get empty => '合集为空'; - @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 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: watchTogether -class _StringsWatchTogetherZh implements _StringsWatchTogetherEn { - _StringsWatchTogetherZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get title => '一起看'; - @override String get description => '与朋友和家人同步观看内容'; - @override String get createSession => '创建会话'; - @override String get creating => '创建中...'; - @override String get joinSession => '加入会话'; - @override String get joining => '加入中...'; - @override String get controlMode => '控制模式'; - @override String get controlModeQuestion => '谁可以控制播放?'; - @override String get hostOnly => '仅主持人'; - @override String get anyone => '任何人'; - @override String get hostingSession => '主持会话'; - @override String get inSession => '在会话中'; - @override String get sessionCode => '会话代码'; - @override String get hostControlsPlayback => '主持人控制播放'; - @override String get anyoneCanControl => '任何人都可以控制播放'; - @override String get hostControls => '主持人控制'; - @override String get anyoneControls => '任何人控制'; - @override String get participants => '参与者'; - @override String get host => '主持人'; - @override String get hostBadge => '主持人'; - @override String get youAreHost => '你是主持人'; - @override String get watchingWithOthers => '与他人一起观看'; - @override String get endSession => '结束会话'; - @override String get leaveSession => '离开会话'; - @override String get endSessionQuestion => '结束会话?'; - @override String get leaveSessionQuestion => '离开会话?'; - @override String get endSessionConfirm => '这将为所有参与者结束会话。'; - @override String get leaveSessionConfirm => '你将被移出会话。'; - @override String get endSessionConfirmOverlay => '这将为所有参与者结束观看会话。'; - @override String get leaveSessionConfirmOverlay => '你将断开与观看会话的连接。'; - @override String get end => '结束'; - @override String get leave => '离开'; - @override String get syncing => '同步中...'; - @override String get participant => '参与者'; - @override String get joinWatchSession => '加入观看会话'; - @override String get enterCodeHint => '输入8位代码'; - @override String get pasteFromClipboard => '从剪贴板粘贴'; - @override String get pleaseEnterCode => '请输入会话代码'; - @override String get codeMustBe8Chars => '会话代码必须是8个字符'; - @override String get joinInstructions => '输入主持人分享的会话代码以加入他们的观看会话。'; - @override String get failedToCreate => '创建会话失败'; - @override String get failedToJoin => '加入会话失败'; - @override String get sessionCodeCopied => '会话代码已复制到剪贴板'; -} - -// Path: hotkeys.actions -class _StringsHotkeysActionsZh implements _StringsHotkeysActionsEn { - _StringsHotkeysActionsZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // Translations - @override String get playPause => '播放/暂停'; - @override String get volumeUp => '增大音量'; - @override String get volumeDown => '减小音量'; - @override String seekForward({required Object seconds}) => '快进 (${seconds}秒)'; - @override String seekBackward({required Object seconds}) => '快退 (${seconds}秒)'; - @override String get fullscreenToggle => '切换全屏'; - @override String get muteToggle => '切换静音'; - @override String get subtitleToggle => '切换字幕'; - @override String get audioTrackNext => '下一音轨'; - @override String get subtitleTrackNext => '下一字幕轨'; - @override String get chapterNext => '下一章节'; - @override String get chapterPrevious => '上一章节'; - @override String get speedIncrease => '加速'; - @override String get speedDecrease => '减速'; - @override String get speedReset => '重置速度'; - @override String get subSeekNext => '跳转到下一字幕'; - @override String get subSeekPrev => '跳转到上一字幕'; -} - -// Path: libraries.tabs -class _StringsLibrariesTabsZh implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsZh._(this._root); - - @override final _StringsZh _root; // ignore: unused_field - - // 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); - - @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 => '文件夹'; -} - -/// 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.logout': return 'Logout'; - case 'common.unknown': return 'Unknown'; - case 'common.refresh': return 'Refresh'; - case 'common.yes': return 'Yes'; - case 'common.no': return 'No'; - 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.mpvConfig': return 'MPV Configuration'; - 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.advanced': return 'Advanced'; - case 'settings.episodePosterMode': return 'Episode Poster Style'; - case 'settings.seriesPoster': return 'Series Poster'; - case 'settings.seriesPosterDescription': return 'Show the series poster for all episodes'; - case 'settings.seasonPoster': return 'Season Poster'; - case 'settings.seasonPosterDescription': return 'Show the season-specific poster for episodes'; - case 'settings.episodeThumbnail': return 'Episode Thumbnail'; - case 'settings.episodeThumbnailDescription': return 'Show 16:9 episode screenshot thumbnails'; - 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.showHeroSection': return 'Show Hero Section'; - case 'settings.useGlobalHubs': return 'Use Plex Home Layout'; - case 'settings.useGlobalHubsDescription': return 'Show home page hubs like the official Plex client. When off, shows per-library recommendations instead.'; - case 'settings.showServerNameOnHubs': return 'Show Server Name on Hubs'; - case 'settings.showServerNameOnHubsDescription': return 'Always display the server name in hub titles. When off, only shows for duplicate hub names.'; - 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.videoPlayerControls': return 'Video Player Controls'; - case 'settings.keyboardShortcuts': return 'Keyboard Shortcuts'; - case 'settings.keyboardShortcutsDescription': return 'Customize keyboard shortcuts'; - case 'settings.videoPlayerNavigation': return 'Video Player Navigation'; - case 'settings.videoPlayerNavigationDescription': return 'Use arrow keys to navigate video player controls'; - 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 'settings.downloads': return 'Downloads'; - case 'settings.downloadLocationDescription': return 'Choose where to store downloaded content'; - case 'settings.downloadLocationDefault': return 'Default (App Storage)'; - case 'settings.downloadLocationCustom': return 'Custom Location'; - case 'settings.selectFolder': return 'Select Folder'; - case 'settings.resetToDefault': return 'Reset to Default'; - case 'settings.currentPath': return ({required Object path}) => 'Current: ${path}'; - case 'settings.downloadLocationChanged': return 'Download location changed'; - case 'settings.downloadLocationReset': return 'Download location reset to default'; - case 'settings.downloadLocationInvalid': return 'Selected folder is not writable'; - case 'settings.downloadLocationSelectError': return 'Failed to select folder'; - case 'settings.downloadOnWifiOnly': return 'Download on WiFi only'; - case 'settings.downloadOnWifiOnlyDescription': return 'Prevent downloads when on cellular data'; - case 'settings.cellularDownloadBlocked': return 'Downloads are disabled on cellular data. Connect to WiFi or change the setting.'; - case 'settings.maxVolume': return 'Maximum Volume'; - case 'settings.maxVolumeDescription': return 'Allow volume boost above 100% for quiet media'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return 'Enter max volume (100-300)'; - case 'settings.discordRichPresence': return 'Discord Rich Presence'; - case 'settings.discordRichPresenceDescription': return 'Show what you\'re watching on Discord'; - case 'settings.matchContentFrameRate': return 'Match Content Frame Rate'; - case 'settings.matchContentFrameRateDescription': return 'Adjust display refresh rate to match video content, reducing judder and saving battery'; - 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 'hotkeys.actions.playPause': return 'Play/Pause'; - case 'hotkeys.actions.volumeUp': return 'Volume Up'; - case 'hotkeys.actions.volumeDown': return 'Volume Down'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => 'Seek Forward (${seconds}s)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => 'Seek Backward (${seconds}s)'; - case 'hotkeys.actions.fullscreenToggle': return 'Toggle Fullscreen'; - case 'hotkeys.actions.muteToggle': return 'Toggle Mute'; - case 'hotkeys.actions.subtitleToggle': return 'Toggle Subtitles'; - case 'hotkeys.actions.audioTrackNext': return 'Next Audio Track'; - case 'hotkeys.actions.subtitleTrackNext': return 'Next Subtitle Track'; - case 'hotkeys.actions.chapterNext': return 'Next Chapter'; - case 'hotkeys.actions.chapterPrevious': return 'Previous Chapter'; - case 'hotkeys.actions.speedIncrease': return 'Increase Speed'; - case 'hotkeys.actions.speedDecrease': return 'Decrease Speed'; - case 'hotkeys.actions.speedReset': return 'Reset Speed'; - case 'hotkeys.actions.subSeekNext': return 'Seek to Next Subtitle'; - case 'hotkeys.actions.subSeekPrev': return 'Seek to Previous Subtitle'; - 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.autoPlayNext': return 'Auto-Play Next'; - case 'videoControls.playNext': return 'Play Next'; - 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.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.pipButton': return 'Picture-in-Picture mode'; - case 'videoControls.aspectRatioButton': return 'Aspect ratio'; - case 'videoControls.fullscreenButton': return 'Enter fullscreen'; - case 'videoControls.exitFullscreenButton': return 'Exit fullscreen'; - case 'videoControls.alwaysOnTopButton': return 'Always on top'; - 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.markedAsWatchedOffline': return 'Marked as watched (will sync when online)'; - case 'messages.markedAsUnwatchedOffline': return 'Marked as unwatched (will sync when online)'; - 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.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.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 '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 'mpvConfig.title': return 'MPV Configuration'; - case 'mpvConfig.description': return 'Advanced video player settings'; - case 'mpvConfig.properties': return 'Properties'; - case 'mpvConfig.presets': return 'Presets'; - case 'mpvConfig.noProperties': return 'No properties configured'; - case 'mpvConfig.noPresets': return 'No saved presets'; - case 'mpvConfig.addProperty': return 'Add Property'; - case 'mpvConfig.editProperty': return 'Edit Property'; - case 'mpvConfig.deleteProperty': return 'Delete Property'; - case 'mpvConfig.propertyKey': return 'Property Key'; - case 'mpvConfig.propertyKeyHint': return 'e.g., hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return 'Property Value'; - case 'mpvConfig.propertyValueHint': return 'e.g., auto, 256000000'; - case 'mpvConfig.saveAsPreset': return 'Save as Preset...'; - case 'mpvConfig.presetName': return 'Preset Name'; - case 'mpvConfig.presetNameHint': return 'Enter a name for this preset'; - case 'mpvConfig.loadPreset': return 'Load'; - case 'mpvConfig.deletePreset': return 'Delete'; - case 'mpvConfig.presetSaved': return 'Preset saved'; - case 'mpvConfig.presetLoaded': return 'Preset loaded'; - case 'mpvConfig.presetDeleted': return 'Preset deleted'; - case 'mpvConfig.confirmDeletePreset': return 'Are you sure you want to delete this preset?'; - case 'mpvConfig.confirmDeleteProperty': return 'Are you sure you want to delete this property?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} entries'; - case 'dialog.confirmAction': return 'Confirm 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.play': return 'Play'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => '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 '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.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.allServerConnectionsFailed': return 'Failed to connect to any servers. Please check your network and try again.'; - case 'serverSelection.noServersFound': return 'No servers found'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => 'No servers found for ${username} (${email})'; - 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.clearLogs': return 'Clear Logs'; - case 'logs.copyLogs': return 'Copy Logs'; - 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 'navigation.downloads': return 'Downloads'; - case 'collections.title': return 'Collections'; - case 'collections.collection': return 'Collection'; - case 'collections.empty': return 'Collection is empty'; - 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.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.playlistName': return 'Playlist Name'; - case 'playlists.enterPlaylistName': return 'Enter playlist name'; - case 'playlists.delete': return 'Delete Playlist'; - case 'playlists.removeItem': return 'Remove from Playlist'; - case 'playlists.smartPlaylist': return 'Smart 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.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'; - case 'watchTogether.title': return 'Watch Together'; - case 'watchTogether.description': return 'Watch content in sync with friends and family'; - case 'watchTogether.createSession': return 'Create Session'; - case 'watchTogether.creating': return 'Creating...'; - case 'watchTogether.joinSession': return 'Join Session'; - case 'watchTogether.joining': return 'Joining...'; - case 'watchTogether.controlMode': return 'Control Mode'; - case 'watchTogether.controlModeQuestion': return 'Who can control playback?'; - case 'watchTogether.hostOnly': return 'Host Only'; - case 'watchTogether.anyone': return 'Anyone'; - case 'watchTogether.hostingSession': return 'Hosting Session'; - case 'watchTogether.inSession': return 'In Session'; - case 'watchTogether.sessionCode': return 'Session Code'; - case 'watchTogether.hostControlsPlayback': return 'Host controls playback'; - case 'watchTogether.anyoneCanControl': return 'Anyone can control playback'; - case 'watchTogether.hostControls': return 'Host controls'; - case 'watchTogether.anyoneControls': return 'Anyone controls'; - case 'watchTogether.participants': return 'Participants'; - case 'watchTogether.host': return 'Host'; - case 'watchTogether.hostBadge': return 'HOST'; - case 'watchTogether.youAreHost': return 'You are the host'; - case 'watchTogether.watchingWithOthers': return 'Watching with others'; - case 'watchTogether.endSession': return 'End Session'; - case 'watchTogether.leaveSession': return 'Leave Session'; - case 'watchTogether.endSessionQuestion': return 'End Session?'; - case 'watchTogether.leaveSessionQuestion': return 'Leave Session?'; - case 'watchTogether.endSessionConfirm': return 'This will end the session for all participants.'; - case 'watchTogether.leaveSessionConfirm': return 'You will be removed from the session.'; - case 'watchTogether.endSessionConfirmOverlay': return 'This will end the watch session for all participants.'; - case 'watchTogether.leaveSessionConfirmOverlay': return 'You will be disconnected from the watch session.'; - case 'watchTogether.end': return 'End'; - case 'watchTogether.leave': return 'Leave'; - case 'watchTogether.syncing': return 'Syncing...'; - case 'watchTogether.participant': return 'participant'; - case 'watchTogether.joinWatchSession': return 'Join Watch Session'; - case 'watchTogether.enterCodeHint': return 'Enter 8-character code'; - case 'watchTogether.pasteFromClipboard': return 'Paste from clipboard'; - case 'watchTogether.pleaseEnterCode': return 'Please enter a session code'; - case 'watchTogether.codeMustBe8Chars': return 'Session code must be 8 characters'; - case 'watchTogether.joinInstructions': return 'Enter the session code shared by the host to join their watch session.'; - case 'watchTogether.failedToCreate': return 'Failed to create session'; - case 'watchTogether.failedToJoin': return 'Failed to join session'; - case 'watchTogether.sessionCodeCopied': return 'Session code copied to clipboard'; - case 'downloads.title': return 'Downloads'; - case 'downloads.manage': return 'Manage'; - case 'downloads.tvShows': return 'TV Shows'; - case 'downloads.movies': return 'Movies'; - case 'downloads.noDownloads': return 'No downloads yet'; - case 'downloads.noDownloadsDescription': return 'Downloaded content will appear here for offline viewing'; - case 'downloads.downloadNow': return 'Download'; - case 'downloads.deleteDownload': return 'Delete download'; - case 'downloads.retryDownload': return 'Retry download'; - case 'downloads.downloadQueued': return 'Download queued'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} episodes queued for download'; - case 'downloads.downloadDeleted': return 'Download deleted'; - case 'downloads.deleteConfirm': return ({required Object title}) => 'Are you sure you want to delete "${title}"? This will remove the downloaded file from your device.'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => 'Deleting ${title}... (${current} of ${total})'; - 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.logout': return 'Abmelden'; - case 'common.unknown': return 'Unbekannt'; - case 'common.refresh': return 'Aktualisieren'; - case 'common.yes': return 'Ja'; - case 'common.no': return 'Nein'; - 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.mpvConfig': return 'MPV-Konfiguration'; - 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.advanced': return 'Erweitert'; - case 'settings.episodePosterMode': return 'Episoden-Poster-Stil'; - case 'settings.seriesPoster': return 'Serienposter'; - case 'settings.seriesPosterDescription': return 'Zeige das Serienposter für alle Episoden'; - case 'settings.seasonPoster': return 'Staffelposter'; - case 'settings.seasonPosterDescription': return 'Zeige das staffelspezifische Poster für Episoden'; - case 'settings.episodeThumbnail': return 'Episoden-Miniatur'; - case 'settings.episodeThumbnailDescription': return 'Zeige 16:9 Episoden-Vorschaubilder'; - 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.showHeroSection': return 'Hero-Bereich anzeigen'; - case 'settings.useGlobalHubs': return 'Plex-Startseiten-Layout verwenden'; - case 'settings.useGlobalHubsDescription': return 'Zeigt Startseiten-Hubs wie der offizielle Plex-Client. Wenn deaktiviert, werden stattdessen Empfehlungen pro Bibliothek angezeigt.'; - case 'settings.showServerNameOnHubs': return 'Servername bei Hubs anzeigen'; - case 'settings.showServerNameOnHubsDescription': return 'Zeigt immer den Servernamen in Hub-Titeln an. Wenn deaktiviert, nur bei doppelten Hub-Namen.'; - 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.videoPlayerControls': return 'Videoplayer-Steuerung'; - case 'settings.keyboardShortcuts': return 'Tastenkürzel'; - case 'settings.keyboardShortcutsDescription': return 'Tastenkürzel anpassen'; - case 'settings.videoPlayerNavigation': return 'Videoplayer-Navigation'; - case 'settings.videoPlayerNavigationDescription': return 'Pfeiltasten zur Navigation der Videoplayer-Steuerung verwenden'; - 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 'settings.downloads': return 'Downloads'; - case 'settings.downloadLocationDescription': return 'Speicherort für heruntergeladene Inhalte wählen'; - case 'settings.downloadLocationDefault': return 'Standard (App-Speicher)'; - case 'settings.downloadLocationCustom': return 'Benutzerdefinierter Speicherort'; - case 'settings.selectFolder': return 'Ordner auswählen'; - case 'settings.resetToDefault': return 'Auf Standard zurücksetzen'; - case 'settings.currentPath': return ({required Object path}) => 'Aktuell: ${path}'; - case 'settings.downloadLocationChanged': return 'Download-Speicherort geändert'; - case 'settings.downloadLocationReset': return 'Download-Speicherort auf Standard zurückgesetzt'; - case 'settings.downloadLocationInvalid': return 'Ausgewählter Ordner ist nicht beschreibbar'; - case 'settings.downloadLocationSelectError': return 'Ordnerauswahl fehlgeschlagen'; - case 'settings.downloadOnWifiOnly': return 'Nur über WLAN herunterladen'; - case 'settings.downloadOnWifiOnlyDescription': return 'Downloads über mobile Daten verhindern'; - case 'settings.cellularDownloadBlocked': return 'Downloads sind über mobile Daten deaktiviert. Verbinde dich mit einem WLAN oder ändere die Einstellung.'; - case 'settings.maxVolume': return 'Maximale Lautstärke'; - case 'settings.maxVolumeDescription': return 'Lautstärke über 100% für leise Medien erlauben'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return 'Maximale Lautstärke eingeben (100-300)'; - case 'settings.discordRichPresence': return 'Discord Rich Presence'; - case 'settings.discordRichPresenceDescription': return 'Zeige auf Discord, was du gerade schaust'; - case 'settings.matchContentFrameRate': return 'Inhalts-Bildrate anpassen'; - case 'settings.matchContentFrameRateDescription': return 'Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku'; - 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 'hotkeys.actions.playPause': return 'Wiedergabe/Pause'; - case 'hotkeys.actions.volumeUp': return 'Lauter'; - case 'hotkeys.actions.volumeDown': return 'Leiser'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => 'Vorspulen (${seconds}s)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => 'Zurückspulen (${seconds}s)'; - case 'hotkeys.actions.fullscreenToggle': return 'Vollbild umschalten'; - case 'hotkeys.actions.muteToggle': return 'Stumm umschalten'; - case 'hotkeys.actions.subtitleToggle': return 'Untertitel umschalten'; - case 'hotkeys.actions.audioTrackNext': return 'Nächste Audiospur'; - case 'hotkeys.actions.subtitleTrackNext': return 'Nächste Untertitelspur'; - case 'hotkeys.actions.chapterNext': return 'Nächstes Kapitel'; - case 'hotkeys.actions.chapterPrevious': return 'Vorheriges Kapitel'; - case 'hotkeys.actions.speedIncrease': return 'Geschwindigkeit erhöhen'; - case 'hotkeys.actions.speedDecrease': return 'Geschwindigkeit verringern'; - case 'hotkeys.actions.speedReset': return 'Geschwindigkeit zurücksetzen'; - case 'hotkeys.actions.subSeekNext': return 'Zum nächsten Untertitel springen'; - case 'hotkeys.actions.subSeekPrev': return 'Zum vorherigen Untertitel springen'; - 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.autoPlayNext': return 'Nächstes automatisch abspielen'; - case 'videoControls.playNext': return 'Nächstes abspielen'; - 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.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.pipButton': return 'Bild-in-Bild Modus'; - case 'videoControls.aspectRatioButton': return 'Seitenverhältnis'; - case 'videoControls.fullscreenButton': return 'Vollbild aktivieren'; - case 'videoControls.exitFullscreenButton': return 'Vollbild verlassen'; - case 'videoControls.alwaysOnTopButton': return 'Immer im Vordergrund'; - 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.markedAsWatchedOffline': return 'Als gesehen markiert (wird synchronisiert, wenn online)'; - case 'messages.markedAsUnwatchedOffline': return 'Als ungesehen markiert (wird synchronisiert, wenn online)'; - 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.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.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 '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 'mpvConfig.title': return 'MPV-Konfiguration'; - case 'mpvConfig.description': return 'Erweiterte Videoplayer-Einstellungen'; - case 'mpvConfig.properties': return 'Eigenschaften'; - case 'mpvConfig.presets': return 'Voreinstellungen'; - case 'mpvConfig.noProperties': return 'Keine Eigenschaften konfiguriert'; - case 'mpvConfig.noPresets': return 'Keine gespeicherten Voreinstellungen'; - case 'mpvConfig.addProperty': return 'Eigenschaft hinzufügen'; - case 'mpvConfig.editProperty': return 'Eigenschaft bearbeiten'; - case 'mpvConfig.deleteProperty': return 'Eigenschaft löschen'; - case 'mpvConfig.propertyKey': return 'Eigenschaftsschlüssel'; - case 'mpvConfig.propertyKeyHint': return 'z.B. hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return 'Eigenschaftswert'; - case 'mpvConfig.propertyValueHint': return 'z.B. auto, 256000000'; - case 'mpvConfig.saveAsPreset': return 'Als Voreinstellung speichern...'; - case 'mpvConfig.presetName': return 'Name der Voreinstellung'; - case 'mpvConfig.presetNameHint': return 'Namen für diese Voreinstellung eingeben'; - case 'mpvConfig.loadPreset': return 'Laden'; - case 'mpvConfig.deletePreset': return 'Löschen'; - case 'mpvConfig.presetSaved': return 'Voreinstellung gespeichert'; - case 'mpvConfig.presetLoaded': return 'Voreinstellung geladen'; - case 'mpvConfig.presetDeleted': return 'Voreinstellung gelöscht'; - case 'mpvConfig.confirmDeletePreset': return 'Möchten Sie diese Voreinstellung wirklich löschen?'; - case 'mpvConfig.confirmDeleteProperty': return 'Möchten Sie diese Eigenschaft wirklich löschen?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} Einträge'; - case 'dialog.confirmAction': return 'Aktion bestätigen'; - 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.play': return 'Abspielen'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'S${season}E${episode}'; - 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 '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.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.allServerConnectionsFailed': return 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; - case 'serverSelection.noServersFound': return 'Keine Server gefunden'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})'; - 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.clearLogs': return 'Protokolle löschen'; - case 'logs.copyLogs': return 'Protokolle kopieren'; - 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 'navigation.downloads': return 'Downloads'; - case 'downloads.title': return 'Downloads'; - case 'downloads.manage': return 'Verwalten'; - case 'downloads.tvShows': return 'Serien'; - case 'downloads.movies': return 'Filme'; - case 'downloads.noDownloads': return 'Noch keine Downloads'; - case 'downloads.noDownloadsDescription': return 'Heruntergeladene Inhalte werden hier für die Offline-Wiedergabe angezeigt'; - case 'downloads.downloadNow': return 'Herunterladen'; - case 'downloads.deleteDownload': return 'Download löschen'; - case 'downloads.retryDownload': return 'Download wiederholen'; - case 'downloads.downloadQueued': return 'Download in Warteschlange'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} Episoden zum Download hinzugefügt'; - case 'downloads.downloadDeleted': return 'Download gelöscht'; - case 'downloads.deleteConfirm': return ({required Object title}) => 'Möchtest du "${title}" wirklich löschen? Die heruntergeladene Datei wird von deinem Gerät entfernt.'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => 'Lösche ${title}... (${current} von ${total})'; - case 'playlists.title': return 'Wiedergabelisten'; - case 'playlists.noPlaylists': return 'Keine Wiedergabelisten gefunden'; - case 'playlists.create': return 'Wiedergabeliste erstellen'; - case 'playlists.playlistName': return 'Name der Wiedergabeliste'; - case 'playlists.enterPlaylistName': return 'Name der Wiedergabeliste eingeben'; - case 'playlists.delete': return 'Wiedergabeliste löschen'; - case 'playlists.removeItem': return 'Aus Wiedergabeliste entfernen'; - case 'playlists.smartPlaylist': return 'Intelligente 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.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.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.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}'; - case 'watchTogether.title': return 'Gemeinsam Schauen'; - case 'watchTogether.description': return 'Inhalte synchron mit Freunden und Familie schauen'; - case 'watchTogether.createSession': return 'Sitzung Erstellen'; - case 'watchTogether.creating': return 'Erstellen...'; - case 'watchTogether.joinSession': return 'Sitzung Beitreten'; - case 'watchTogether.joining': return 'Beitreten...'; - case 'watchTogether.controlMode': return 'Steuerungsmodus'; - case 'watchTogether.controlModeQuestion': return 'Wer kann die Wiedergabe steuern?'; - case 'watchTogether.hostOnly': return 'Nur Host'; - case 'watchTogether.anyone': return 'Alle'; - case 'watchTogether.hostingSession': return 'Sitzung Hosten'; - case 'watchTogether.inSession': return 'In Sitzung'; - case 'watchTogether.sessionCode': return 'Sitzungscode'; - case 'watchTogether.hostControlsPlayback': return 'Host steuert die Wiedergabe'; - case 'watchTogether.anyoneCanControl': return 'Alle können die Wiedergabe steuern'; - case 'watchTogether.hostControls': return 'Host steuert'; - case 'watchTogether.anyoneControls': return 'Alle steuern'; - case 'watchTogether.participants': return 'Teilnehmer'; - case 'watchTogether.host': return 'Host'; - case 'watchTogether.hostBadge': return 'HOST'; - case 'watchTogether.youAreHost': return 'Du bist der Host'; - case 'watchTogether.watchingWithOthers': return 'Mit anderen schauen'; - case 'watchTogether.endSession': return 'Sitzung Beenden'; - case 'watchTogether.leaveSession': return 'Sitzung Verlassen'; - case 'watchTogether.endSessionQuestion': return 'Sitzung Beenden?'; - case 'watchTogether.leaveSessionQuestion': return 'Sitzung Verlassen?'; - case 'watchTogether.endSessionConfirm': return 'Dies beendet die Sitzung für alle Teilnehmer.'; - case 'watchTogether.leaveSessionConfirm': return 'Du wirst aus der Sitzung entfernt.'; - case 'watchTogether.endSessionConfirmOverlay': return 'Dies beendet die Schausitzung für alle Teilnehmer.'; - case 'watchTogether.leaveSessionConfirmOverlay': return 'Du wirst von der Schausitzung getrennt.'; - case 'watchTogether.end': return 'Beenden'; - case 'watchTogether.leave': return 'Verlassen'; - case 'watchTogether.syncing': return 'Synchronisieren...'; - case 'watchTogether.participant': return 'Teilnehmer'; - case 'watchTogether.joinWatchSession': return 'Schausitzung Beitreten'; - case 'watchTogether.enterCodeHint': return '8-stelligen Code eingeben'; - case 'watchTogether.pasteFromClipboard': return 'Aus Zwischenablage einfügen'; - case 'watchTogether.pleaseEnterCode': return 'Bitte gib einen Sitzungscode ein'; - case 'watchTogether.codeMustBe8Chars': return 'Sitzungscode muss 8 Zeichen haben'; - case 'watchTogether.joinInstructions': return 'Gib den vom Host geteilten Sitzungscode ein, um seiner Schausitzung beizutreten.'; - case 'watchTogether.failedToCreate': return 'Sitzung konnte nicht erstellt werden'; - case 'watchTogether.failedToJoin': return 'Sitzung konnte nicht beigetreten werden'; - case 'watchTogether.sessionCodeCopied': return 'Sitzungscode in Zwischenablage kopiert'; - default: return null; - } - } -} - -extension on _StringsFr { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return 'Chargement...'; - case 'auth.signInWithPlex': return 'S\'inscrire avec Plex'; - case 'auth.showQRCode': return 'Afficher le QR Code'; - case 'auth.cancel': return 'Annuler'; - case 'auth.authenticate': return 'S\'authentifier'; - case 'auth.retry': return 'Réessayer'; - case 'auth.debugEnterToken': return 'Debug: Entrez votre token Plex'; - case 'auth.plexTokenLabel': return 'Token d\'authentification Plex'; - case 'auth.plexTokenHint': return 'Entrez votre token Plex.tv'; - case 'auth.authenticationTimeout': return 'Délai d\'authentification expiré. Veuillez réessayer.'; - case 'auth.scanQRCodeInstruction': return 'Scannez ce code QR avec un appareil connecté à Plex pour vous authentifier.'; - case 'auth.waitingForAuth': return 'En attente d\'authentification...\nVeuillez vous connecter dans votre navigateur.'; - case 'common.cancel': return 'Annuler'; - case 'common.save': return 'Sauvegarder'; - case 'common.close': return 'Fermer'; - case 'common.clear': return 'Nettoyer'; - case 'common.reset': return 'Réinitialiser'; - case 'common.later': return 'Plus tard'; - case 'common.submit': return 'Soumettre'; - case 'common.confirm': return 'Confirmer'; - case 'common.retry': return 'Réessayer'; - case 'common.logout': return 'Se déconnecter'; - case 'common.unknown': return 'Inconnu'; - case 'common.refresh': return 'Rafraichir'; - case 'common.yes': return 'Oui'; - case 'common.no': return 'Non'; - case 'common.delete': return 'Supprimer'; - case 'common.shuffle': return 'Mélanger'; - case 'common.addTo': return 'Ajouter à...'; - case 'screens.licenses': return 'Licenses'; - case 'screens.switchProfile': return 'Changer de profil'; - case 'screens.subtitleStyling': return 'Configuration des sous-titres'; - case 'screens.mpvConfig': return 'Configuration MPV'; - case 'screens.search': return 'Recherche'; - case 'screens.logs': return 'Logs'; - case 'update.available': return 'Mise à jour disponible'; - case 'update.versionAvailable': return ({required Object version}) => 'Version ${version} disponible'; - case 'update.currentVersion': return ({required Object version}) => 'Installé: ${version}'; - case 'update.skipVersion': return 'Ignorer cette version'; - case 'update.viewRelease': return 'Voir la Release'; - case 'update.latestVersion': return 'Vous utilisez la dernière version'; - case 'update.checkFailed': return 'Échec de la vérification des mises à jour'; - case 'settings.title': return 'Paramètres'; - case 'settings.language': return 'Langue'; - case 'settings.theme': return 'Thème'; - case 'settings.appearance': return 'Apparence'; - case 'settings.videoPlayback': return 'Lecture vidéo'; - case 'settings.advanced': return 'Avancé'; - case 'settings.episodePosterMode': return 'Style du Poster d\'épisode'; - case 'settings.seriesPoster': return 'Poster de série'; - case 'settings.seriesPosterDescription': return 'Afficher le poster de série pour tous les épisodes'; - case 'settings.seasonPoster': return 'Poster de saison'; - case 'settings.seasonPosterDescription': return 'Afficher le poster spécifique à la saison pour les épisodes'; - case 'settings.episodeThumbnail': return 'Mignature d\'épisode'; - case 'settings.episodeThumbnailDescription': return 'Afficher les vignettes des captures d\'écran des épisodes au format 16:9'; - case 'settings.showHeroSectionDescription': return 'Afficher le carrousel de contenu en vedette sur l\'écran d\'accueil'; - case 'settings.secondsLabel': return 'Secondes'; - 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}) => 'Entrez la durée (${min}-${max})'; - case 'settings.systemTheme': return 'Système'; - case 'settings.systemThemeDescription': return 'Suivre les paramètres système'; - case 'settings.lightTheme': return 'Light'; - case 'settings.darkTheme': return 'Dark'; - case 'settings.libraryDensity': return 'Densité des bibliothèques'; - case 'settings.compact': return 'Compact'; - case 'settings.compactDescription': return 'Cartes plus petites, plus d\'éléments visibles'; - case 'settings.normal': return 'Normal'; - case 'settings.normalDescription': return 'Taille par défaut'; - case 'settings.comfortable': return 'Confortable'; - case 'settings.comfortableDescription': return 'Cartes plus grandes, moins d\'éléments visibles'; - case 'settings.viewMode': return 'Mode d\'affichage'; - case 'settings.gridView': return 'Grille'; - case 'settings.gridViewDescription': return 'Afficher les éléments dans une disposition en grille'; - case 'settings.listView': return 'Liste'; - case 'settings.listViewDescription': return 'Afficher les éléments dans une liste'; - case 'settings.showHeroSection': return 'Afficher la section Hero'; - case 'settings.useGlobalHubs': return 'Utiliser la disposition Plex Home'; - case 'settings.useGlobalHubsDescription': return 'Afficher les hubs de la page d\'accueil comme le client Plex officiel. Lorsque cette option est désactivée, affiche à la place les recommandations par bibliothèque.'; - case 'settings.showServerNameOnHubs': return 'Afficher le nom du serveur sur les hubs'; - case 'settings.showServerNameOnHubsDescription': return 'Toujours afficher le nom du serveur dans les titres des hubs. Lorsque cette option est désactivée, seuls les noms de hubs en double s\'affichent.'; - case 'settings.hardwareDecoding': return 'Décodage matériel'; - case 'settings.hardwareDecodingDescription': return 'Utilisez l\'accélération matérielle lorsqu\'elle est disponible.'; - case 'settings.bufferSize': return 'Taille du Buffer'; - case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': return 'Stylisation des sous-titres'; - case 'settings.subtitleStylingDescription': return 'Personnaliser l\'apparence des sous-titres'; - case 'settings.smallSkipDuration': return 'Small Skip Duration'; - case 'settings.largeSkipDuration': return 'Large Skip Duration'; - case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} secondes'; - case 'settings.defaultSleepTimer': return 'Minuterie de mise en veille par défaut'; - case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minutes'; - case 'settings.rememberTrackSelections': return 'Mémoriser les sélections de pistes par émission/film'; - case 'settings.rememberTrackSelectionsDescription': return 'Enregistrer automatiquement les préférences linguistiques pour l\'audio et les sous-titres lorsque vous changez de piste pendant la lecture'; - case 'settings.videoPlayerControls': return 'Commandes du lecteur vidéo'; - case 'settings.keyboardShortcuts': return 'Raccourcis clavier'; - case 'settings.keyboardShortcutsDescription': return 'Personnaliser les raccourcis clavier'; - case 'settings.videoPlayerNavigation': return 'Navigation dans le lecteur vidéo'; - case 'settings.videoPlayerNavigationDescription': return 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.'; - case 'settings.debugLogging': return 'Journalisation de débogage'; - case 'settings.debugLoggingDescription': return 'Activer la journalisation détaillée pour le dépannage'; - case 'settings.viewLogs': return 'Voir les logs'; - case 'settings.viewLogsDescription': return 'Voir les logs d\'application'; - case 'settings.clearCache': return 'Vider le cache'; - case 'settings.clearCacheDescription': return 'Cela effacera toutes les images et données mises en cache. Le chargement du contenu de l\'application peut prendre plus de temps après avoir effacé le cache.'; - case 'settings.clearCacheSuccess': return 'Cache effacé avec succès'; - case 'settings.resetSettings': return 'Réinitialiser les paramètres'; - case 'settings.resetSettingsDescription': return 'Cela réinitialisera tous les paramètres à leurs valeurs par défaut. Cette action ne peut pas être annulée.'; - case 'settings.resetSettingsSuccess': return 'Réinitialisation des paramètres réussie'; - case 'settings.shortcutsReset': return 'Raccourcis réinitialisés aux valeurs par défaut'; - case 'settings.about': return 'À propos'; - case 'settings.aboutDescription': return 'Informations sur l\'application et licences'; - case 'settings.updates': return 'Mises à jour'; - case 'settings.updateAvailable': return 'Mise à jour disponible'; - case 'settings.checkForUpdates': return 'Vérifier les mises à jour'; - case 'settings.validationErrorEnterNumber': return 'Veuillez saisir un numéro valide'; - case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'La durée doit être comprise entre ${min} et ${max} ${unit}'; - case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Raccourci déjà attribué à ${action}'; - case 'settings.shortcutUpdated': return ({required Object action}) => 'Raccourci mis à jour pour ${action}'; - case 'settings.autoSkip': return 'Skip automatique'; - case 'settings.autoSkipIntro': return 'Skip automatique de l\'introduction'; - case 'settings.autoSkipIntroDescription': return 'Skipper automatiquement l\'introduction après quelques secondes'; - case 'settings.autoSkipCredits': return 'Skip automatique des crédits'; - case 'settings.autoSkipCreditsDescription': return 'Passer les crédits et passer à l\'épisode suivant automatiquement'; - case 'settings.autoSkipDelay': return 'Délai avant skip automatique'; - case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => 'Attendre ${seconds} secondes avant l\'auto-skip'; - case 'settings.downloads': return 'Téléchargement'; - case 'settings.downloadLocationDescription': return 'Choisissez où stocker le contenu téléchargé'; - case 'settings.downloadLocationDefault': return 'Par défaut (stockage de l\'application)'; - case 'settings.downloadLocationCustom': return 'Emplacement personnalisé'; - case 'settings.selectFolder': return 'Sélectionner un dossier'; - case 'settings.resetToDefault': return 'Réinitialiser les paramètres par défaut'; - case 'settings.currentPath': return ({required Object path}) => 'Actuel: ${path}'; - case 'settings.downloadLocationChanged': return 'Emplacement de téléchargement modifié'; - case 'settings.downloadLocationReset': return 'Emplacement de téléchargement réinitialisé à la valeur par défaut'; - case 'settings.downloadLocationInvalid': return 'Le dossier sélectionné n\'est pas accessible en écriture'; - case 'settings.downloadLocationSelectError': return 'Échec de la sélection du dossier'; - case 'settings.downloadOnWifiOnly': return 'Télécharger uniquement via WiFi'; - case 'settings.downloadOnWifiOnlyDescription': return 'Empêcher les téléchargements lorsque vous utilisez les données cellulaires'; - case 'settings.cellularDownloadBlocked': return 'Les téléchargements sont désactivés sur les données cellulaires. Connectez-vous au Wi-Fi ou modifiez le paramètre.'; - case 'settings.maxVolume': return 'Volume maximal'; - case 'settings.maxVolumeDescription': return 'Autoriser l\'augmentation du volume au-delà de 100 % pour les médias silencieux'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return 'Entrez le volume maximal (100-300)'; - case 'settings.discordRichPresence': return 'Discord Rich Presence'; - case 'settings.discordRichPresenceDescription': return 'Montrez ce que vous regardez sur Discord'; - case 'settings.matchContentFrameRate': return 'Fréquence d\'images du contenu correspondant'; - case 'settings.matchContentFrameRateDescription': return 'Ajustez la fréquence de rafraîchissement de l\'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie'; - case 'search.hint': return 'Rechercher des films, des séries, de la musique...'; - case 'search.tryDifferentTerm': return 'Essayez un autre terme de recherche'; - case 'search.searchYourMedia': return 'Rechercher dans vos médias'; - case 'search.enterTitleActorOrKeyword': return 'Entrez un titre, un acteur ou un mot-clé'; - case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Définir un raccourci pour ${actionName}'; - case 'hotkeys.clearShortcut': return 'Effacer le raccourci'; - case 'hotkeys.actions.playPause': return 'Lecture/Pause'; - case 'hotkeys.actions.volumeUp': return 'Augmenter le volume'; - case 'hotkeys.actions.volumeDown': return 'Baisser le volume'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => 'Avancer (${seconds}s)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => 'Reculer (${seconds}s)'; - case 'hotkeys.actions.fullscreenToggle': return 'Basculer en mode plein écran'; - case 'hotkeys.actions.muteToggle': return 'Activer/désactiver le mode silencieux'; - case 'hotkeys.actions.subtitleToggle': return 'Activer/désactiver les sous-titres'; - case 'hotkeys.actions.audioTrackNext': return 'Piste audio suivante'; - case 'hotkeys.actions.subtitleTrackNext': return 'Piste de sous-titres suivante'; - case 'hotkeys.actions.chapterNext': return 'Chapitre suivant'; - case 'hotkeys.actions.chapterPrevious': return 'Chapitre précédent'; - case 'hotkeys.actions.speedIncrease': return 'Augmenter la vitesse'; - case 'hotkeys.actions.speedDecrease': return 'Réduire la vitesse'; - case 'hotkeys.actions.speedReset': return 'Réinitialiser la vitesse'; - case 'hotkeys.actions.subSeekNext': return 'Rechercher le sous-titre suivant'; - case 'hotkeys.actions.subSeekPrev': return 'Rechercher le sous-titre précédent'; - case 'pinEntry.enterPin': return 'Entrer le code PIN'; - case 'pinEntry.showPin': return 'Afficher le code PIN'; - case 'pinEntry.hidePin': return 'Masquer le code PIN'; - case 'fileInfo.title': return 'Informations sur le fichier'; - case 'fileInfo.video': return 'Vidéo'; - case 'fileInfo.audio': return 'Audio'; - case 'fileInfo.file': return 'Fichier'; - case 'fileInfo.advanced': return 'Avancé'; - case 'fileInfo.codec': return 'Codec'; - case 'fileInfo.resolution': return 'Résolution'; - case 'fileInfo.bitrate': return 'Bitrate'; - case 'fileInfo.frameRate': return 'Fréquence d\'images'; - case 'fileInfo.aspectRatio': return 'Format d\'image'; - case 'fileInfo.profile': return 'Profil'; - case 'fileInfo.bitDepth': return 'Profondeur de bits'; - case 'fileInfo.colorSpace': return 'Espace colorimétrique'; - case 'fileInfo.colorRange': return 'Gamme de couleurs'; - case 'fileInfo.colorPrimaries': return 'Couleurs primaires'; - case 'fileInfo.chromaSubsampling': return 'Sous-échantillonnage chromatique'; - case 'fileInfo.channels': return 'Channels'; - case 'fileInfo.path': return 'Chemin'; - case 'fileInfo.size': return 'Taille'; - case 'fileInfo.container': return 'Conteneur'; - case 'fileInfo.duration': return 'Durée'; - case 'fileInfo.optimizedForStreaming': return 'Optimisé pour le streaming'; - case 'fileInfo.has64bitOffsets': return 'Décalages 64 bits'; - case 'mediaMenu.markAsWatched': return 'Marquer comme vu'; - case 'mediaMenu.markAsUnwatched': return 'Marquer comme non visionné'; - case 'mediaMenu.removeFromContinueWatching': return 'Supprimer de la liste "Continuer à regarder"'; - case 'mediaMenu.goToSeries': return 'Aller à la série'; - case 'mediaMenu.goToSeason': return 'Aller à la saison'; - case 'mediaMenu.shufflePlay': return 'Lecture aléatoire'; - case 'mediaMenu.fileInfo': return 'Informations sur le fichier'; - case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, show 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 'visionné'; - case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} pourcentage visionné'; - case 'accessibility.mediaCardUnwatched': return 'non visionné'; - case 'accessibility.tapToPlay': return 'Appuyez pour lire'; - case 'tooltips.shufflePlay': return 'Lecture aléatoire'; - case 'tooltips.markAsWatched': return 'Marqué comme vu'; - case 'tooltips.markAsUnwatched': return 'Marqué comme non vu'; - case 'videoControls.audioLabel': return 'Audio'; - case 'videoControls.subtitlesLabel': return 'Sous-titres'; - case 'videoControls.resetToZero': return 'Réinitialiser à 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} lire plus tard'; - case 'videoControls.playsEarlier': return ({required Object label}) => '${label} lire plus tôt'; - case 'videoControls.noOffset': return 'Pas de décalage'; - case 'videoControls.letterbox': return 'Boîte aux lettres'; - case 'videoControls.fillScreen': return 'Remplir l\'écran'; - case 'videoControls.stretch': return 'Etirer'; - case 'videoControls.lockRotation': return 'Verrouillage de la rotation'; - case 'videoControls.unlockRotation': return 'Déverrouiller la rotation'; - case 'videoControls.sleepTimer': return 'Minuterie de mise en veille'; - case 'videoControls.timerActive': return 'Minuterie active'; - case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'La lecture sera mise en pause dans ${duration}'; - case 'videoControls.sleepTimerCompleted': return 'Minuterie de mise en veille terminée - lecture en pause'; - case 'videoControls.autoPlayNext': return 'Lecture automatique suivante'; - case 'videoControls.playNext': return 'Lire l\'épisode suivant'; - case 'videoControls.playButton': return 'Lire'; - case 'videoControls.pauseButton': return 'Pause'; - case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Reculer de ${seconds} secondes'; - case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Avancer de ${seconds} secondes'; - case 'videoControls.previousButton': return 'Épisode précédent'; - case 'videoControls.nextButton': return 'Épisode suivant'; - case 'videoControls.previousChapterButton': return 'Chapitre précédent'; - case 'videoControls.nextChapterButton': return 'Chapitre suivant'; - case 'videoControls.muteButton': return 'Mute'; - case 'videoControls.unmuteButton': return 'Dé-mute'; - case 'videoControls.settingsButton': return 'Paramètres vidéo'; - case 'videoControls.audioTrackButton': return 'Pistes audio'; - case 'videoControls.subtitlesButton': return 'Sous-titres'; - case 'videoControls.chaptersButton': return 'Chapitres'; - case 'videoControls.versionsButton': return 'Versions vidéo'; - case 'videoControls.pipButton': return 'Mode PiP (Picture-in-Picture)'; - case 'videoControls.aspectRatioButton': return 'Format d\'image'; - case 'videoControls.fullscreenButton': return 'Passer en mode plein écran'; - case 'videoControls.exitFullscreenButton': return 'Quitter le mode plein écran'; - case 'videoControls.alwaysOnTopButton': return 'Always on top'; - case 'videoControls.rotationLockButton': return 'Verrouillage de rotation'; - case 'videoControls.timelineSlider': return 'Timeline vidéo'; - case 'videoControls.volumeSlider': return 'Niveau sonore'; - case 'videoControls.backButton': return 'Retour'; - case 'userStatus.admin': return 'Admin'; - case 'userStatus.restricted': return 'Restreint'; - case 'userStatus.protected': return 'Protégé'; - case 'userStatus.current': return 'ACTUEL'; - case 'messages.markedAsWatched': return 'Marqué comme vu'; - case 'messages.markedAsUnwatched': return 'Marqué comme non vu'; - case 'messages.markedAsWatchedOffline': return 'Marqué comme vu (se synchronisera lorsque vous serez en ligne)'; - case 'messages.markedAsUnwatchedOffline': return 'Marqué comme non vu (sera synchronisé lorsque vous serez en ligne)'; - case 'messages.removedFromContinueWatching': return 'Supprimer de "Continuer à regarder"'; - case 'messages.errorLoading': return ({required Object error}) => 'Erreur: ${error}'; - case 'messages.fileInfoNotAvailable': return 'Informations sur le fichier non disponibles'; - case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Erreur lors du chargement des informations sur le fichier: ${error}'; - case 'messages.errorLoadingSeries': return 'Erreur lors du chargement de la série'; - case 'messages.errorLoadingSeason': return 'Erreur lors du chargement de la saison'; - case 'messages.musicNotSupported': return 'La lecture de musique n\'est pas encore prise en charge'; - case 'messages.logsCleared': return 'Logs effacés'; - case 'messages.logsCopied': return 'Logs copiés dans le presse-papier'; - case 'messages.noLogsAvailable': return 'Aucun log disponible'; - case 'messages.libraryScanning': return ({required Object title}) => 'Scan de "${title}"...'; - case 'messages.libraryScanStarted': return ({required Object title}) => 'Scan de la bibliothèque démarrée pour "${title}"'; - case 'messages.libraryScanFailed': return ({required Object error}) => 'Échec du scan de la bibliothèque: ${error}'; - case 'messages.metadataRefreshing': return ({required Object title}) => 'Actualisation des métadonnées pour "${title}"...'; - case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Actualisation des métadonnées lancée pour "${title}"'; - case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Échec de l\'actualisation des métadonnées: ${error}'; - case 'messages.logoutConfirm': return 'Êtes-vous sûr de vouloir vous déconnecter ?'; - case 'messages.noSeasonsFound': return 'Aucune saison trouvée'; - case 'messages.noEpisodesFound': return 'Aucun épisode trouvé dans la première saison'; - case 'messages.noEpisodesFoundGeneral': return 'Aucun épisode trouvé'; - case 'messages.noResultsFound': return 'Aucun résultat trouvé'; - case 'messages.sleepTimerSet': return ({required Object label}) => 'Minuterie de mise en veille réglée sur ${label}'; - case 'messages.noItemsAvailable': return 'Aucun élément disponible'; - case 'messages.failedToCreatePlayQueue': return 'Échec de la création de la file d\'attente de lecture'; - case 'messages.failedToCreatePlayQueueNoItems': return 'Échec de la création de la file d\'attente de lecture - aucun élément'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Echec de ${action}: ${error}'; - case 'subtitlingStyling.stylingOptions': return 'Options de style'; - case 'subtitlingStyling.fontSize': return 'Taille de la police'; - case 'subtitlingStyling.textColor': return 'Couleur du texte'; - case 'subtitlingStyling.borderSize': return 'Taille de la bordure'; - case 'subtitlingStyling.borderColor': return 'Couleur de la bordure'; - case 'subtitlingStyling.backgroundOpacity': return 'Opacité d\'arrière-plan'; - case 'subtitlingStyling.backgroundColor': return 'Couleur d\'arrière-plan'; - case 'mpvConfig.title': return 'Configuration MPV'; - case 'mpvConfig.description': return 'Paramètres avancés du lecteur vidéo'; - case 'mpvConfig.properties': return 'Propriétés'; - case 'mpvConfig.presets': return 'Préréglages'; - case 'mpvConfig.noProperties': return 'Aucune propriété configurée'; - case 'mpvConfig.noPresets': return 'Aucun préréglage enregistré'; - case 'mpvConfig.addProperty': return 'Ajouter une propriété'; - case 'mpvConfig.editProperty': return 'Modifier la propriété'; - case 'mpvConfig.deleteProperty': return 'Supprimer la propriété'; - case 'mpvConfig.propertyKey': return 'Clé'; - case 'mpvConfig.propertyKeyHint': return 'e.g., hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return 'Valeur'; - case 'mpvConfig.propertyValueHint': return 'e.g., auto, 256000000'; - case 'mpvConfig.saveAsPreset': return 'Enregistrer comme préréglage...'; - case 'mpvConfig.presetName': return 'Nom du préréglage'; - case 'mpvConfig.presetNameHint': return 'Entrez un nom pour ce préréglage'; - case 'mpvConfig.loadPreset': return 'Charger'; - case 'mpvConfig.deletePreset': return 'Supprimer'; - case 'mpvConfig.presetSaved': return 'Préréglage enregistré'; - case 'mpvConfig.presetLoaded': return 'Préréglage chargé'; - case 'mpvConfig.presetDeleted': return 'Préréglage supprimé'; - case 'mpvConfig.confirmDeletePreset': return 'Êtes-vous sûr de vouloir supprimer ce préréglage ?'; - case 'mpvConfig.confirmDeleteProperty': return 'Êtes-vous sûr de vouloir supprimer cette propriété ?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} entrées'; - case 'dialog.confirmAction': return 'Confirmer l\'action'; - case 'dialog.cancel': return 'Annuler'; - case 'dialog.playNow': return 'Lire maintenant'; - case 'discover.title': return 'Découvrez'; - case 'discover.switchProfile': return 'Changer de profil'; - case 'discover.logout': return 'Déconnexion'; - case 'discover.noContentAvailable': return 'Aucun contenu disponible'; - case 'discover.addMediaToLibraries': return 'Ajoutez des médias à votre bibliothèque'; - case 'discover.continueWatching': return 'Continuer à regarder'; - case 'discover.play': return 'Lire'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'S${season}E${episode}'; - case 'discover.pause': return 'Pause'; - case 'discover.overview': return 'Aperçu'; - case 'discover.cast': return 'Cast'; - case 'discover.seasons': return 'Saisons'; - case 'discover.studio': return 'Studio'; - case 'discover.rating': return 'Évaluation'; - case 'discover.watched': return 'Vu'; - case 'discover.episodeCount': return ({required Object count}) => '${count} épisodes'; - case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} vu'; - case 'discover.movie': return 'Film'; - case 'discover.tvShow': return 'Show TV'; - case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} min restantes'; - case 'errors.searchFailed': return ({required Object error}) => 'Recherche échouée: ${error}'; - case 'errors.connectionTimeout': return ({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}'; - case 'errors.connectionFailed': return 'Impossible de se connecter au serveur Plex'; - case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}'; - case 'errors.noClientAvailable': return 'Aucun client disponible'; - case 'errors.authenticationFailed': return ({required Object error}) => 'Échec de l\'authentification: ${error}'; - case 'errors.couldNotLaunchUrl': return 'Impossible de lancer l\'URL d\'authentification'; - case 'errors.pleaseEnterToken': return 'Veuillez saisir un token'; - case 'errors.invalidToken': return 'Token invalide'; - case 'errors.failedToVerifyToken': return ({required Object error}) => 'Échec de la vérification du token: ${error}'; - case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Impossible de changer de profil vers ${displayName}'; - case 'libraries.title': return 'Bibliothèques'; - case 'libraries.scanLibraryFiles': return 'Scanner les fichiers de la bibliothèque'; - case 'libraries.scanLibrary': return 'Scanner la bibliothèque'; - case 'libraries.analyze': return 'Analyser'; - case 'libraries.analyzeLibrary': return 'Analyser la bibliothèque'; - case 'libraries.refreshMetadata': return 'Actualiser les métadonnées'; - case 'libraries.emptyTrash': return 'Vider la corbeille'; - case 'libraries.emptyingTrash': return ({required Object title}) => 'Vider les poubelles pour "${title}"...'; - case 'libraries.trashEmptied': return ({required Object title}) => 'Poubelles vidées pour "${title}"'; - case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Échec de la suppression des éléments supprimés: ${error}'; - case 'libraries.analyzing': return ({required Object title}) => 'Analyse de "${title}"...'; - case 'libraries.analysisStarted': return ({required Object title}) => 'L\'analyse a commencé pour "${title}"'; - case 'libraries.failedToAnalyze': return ({required Object error}) => 'Échec de l\'analyse de la bibliothèque: ${error}'; - case 'libraries.noLibrariesFound': return 'Aucune bibliothèque trouvée'; - case 'libraries.thisLibraryIsEmpty': return 'Cette bibliothèque est vide'; - case 'libraries.all': return 'Tout'; - case 'libraries.clearAll': return 'Tout effacer'; - case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?'; - case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Êtes-vous sûr de vouloir analyser "${title}"?'; - case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Êtes-vous sûr de vouloir actualiser les métadonnées pour "${title}"?'; - case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Êtes-vous sûr de vouloir vider la corbeille pour "${title}"?'; - case 'libraries.manageLibraries': return 'Gérer les bibliothèques'; - case 'libraries.sort': return 'Trier'; - case 'libraries.sortBy': return 'Trier par'; - case 'libraries.filters': return 'Filtres'; - case 'libraries.confirmActionMessage': return 'Êtes-vous sûr de vouloir effectuer cette action ?'; - case 'libraries.showLibrary': return 'Afficher la bibliothèque'; - case 'libraries.hideLibrary': return 'Masquer la bibliothèque'; - case 'libraries.libraryOptions': return 'Options de bibliothèque'; - case 'libraries.content': return 'contenu de la bibliothèque'; - case 'libraries.selectLibrary': return 'Sélectionner la bibliothèque'; - case 'libraries.filtersWithCount': return ({required Object count}) => 'Filtres (${count})'; - case 'libraries.noRecommendations': return 'Aucune recommandation disponible'; - case 'libraries.noCollections': return 'Aucune collection dans cette bibliothèque'; - case 'libraries.noFoldersFound': return 'Aucun dossier trouvé'; - case 'libraries.folders': return 'dossiers'; - case 'libraries.tabs.recommended': return 'Recommandé'; - case 'libraries.tabs.browse': return 'Parcourir'; - case 'libraries.tabs.collections': return 'Collections'; - case 'libraries.tabs.playlists': return 'Playlists'; - case 'libraries.groupings.all': return 'Tous'; - case 'libraries.groupings.movies': return 'Films'; - case 'libraries.groupings.shows': return 'Show TV'; - case 'libraries.groupings.seasons': return 'Saisons'; - case 'libraries.groupings.episodes': return 'Épisodes'; - case 'libraries.groupings.folders': return 'Dossiers'; - case 'about.title': return 'À propos'; - case 'about.openSourceLicenses': return 'Licences Open Source'; - case 'about.versionLabel': return ({required Object version}) => 'Version ${version}'; - case 'about.appDescription': return 'Un magnifique client Plex pour Flutter'; - case 'about.viewLicensesDescription': return 'Afficher les licences des bibliothèques tierces'; - case 'serverSelection.allServerConnectionsFailed': return 'Impossible de se connecter à un serveur. Veuillez vérifier votre connexion réseau et réessayer.'; - case 'serverSelection.noServersFound': return 'Aucun serveur trouvé'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})'; - case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Échec du chargement des serveurs: ${error}'; - case 'hubDetail.title': return 'Titre'; - case 'hubDetail.releaseYear': return 'Année de sortie'; - case 'hubDetail.dateAdded': return 'Date d\'ajout'; - case 'hubDetail.rating': return 'Évaluation'; - case 'hubDetail.noItemsFound': return 'Aucun élément trouvé'; - case 'logs.clearLogs': return 'Effacer les logs'; - case 'logs.copyLogs': return 'Copier les logs'; - case 'logs.error': return 'Erreur:'; - case 'logs.stackTrace': return 'Liste des appels:'; - case 'licenses.relatedPackages': return 'Package associés'; - case 'licenses.license': return 'Licence'; - case 'licenses.licenseNumber': return ({required Object number}) => 'Licence ${number}'; - case 'licenses.licensesCount': return ({required Object count}) => '${count} licences'; - case 'navigation.home': return 'Accueil'; - case 'navigation.search': return 'Rechercher'; - case 'navigation.libraries': return 'Bibliothèques'; - case 'navigation.settings': return 'Paramètres'; - case 'navigation.downloads': return 'Téléchargements'; - case 'collections.title': return 'Collections'; - case 'collections.collection': return 'Collection'; - case 'collections.empty': return 'La collection est vide'; - case 'collections.unknownLibrarySection': return 'Impossible de supprimer : section de bibliothèque inconnue'; - case 'collections.deleteCollection': return 'Supprimer la collection'; - case 'collections.deleteConfirm': return ({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cette action ne peut pas être annulée.'; - case 'collections.deleted': return 'Collection supprimée'; - case 'collections.deleteFailed': return 'Échec de la suppression de la collection'; - case 'collections.deleteFailedWithError': return ({required Object error}) => 'Échec de la suppression de la collection: ${error}'; - case 'collections.failedToLoadItems': return ({required Object error}) => 'Échec du chargement des éléments de la collection: ${error}'; - case 'collections.selectCollection': return 'Sélectionner une collection'; - case 'collections.createNewCollection': return 'Créer une nouvelle collection'; - case 'collections.collectionName': return 'Nom de la collection'; - case 'collections.enterCollectionName': return 'Entrez le nom de la collection'; - case 'collections.addedToCollection': return 'Ajouté à la collection'; - case 'collections.errorAddingToCollection': return 'Échec de l\'ajout à la collection'; - case 'collections.created': return 'Collection créée'; - case 'collections.removeFromCollection': return 'Supprimer de la collection'; - case 'collections.removeFromCollectionConfirm': return ({required Object title}) => 'Retirer "${title}" de cette collection ?'; - case 'collections.removedFromCollection': return 'Retiré de la collection'; - case 'collections.removeFromCollectionFailed': return 'Impossible de supprimer de la collection'; - case 'collections.removeFromCollectionError': return ({required Object error}) => 'Erreur lors de la suppression de la collection: ${error}'; - case 'playlists.title': return 'Playlists'; - case 'playlists.playlist': return 'Playlist'; - case 'playlists.noPlaylists': return 'Aucune playlist trouvée'; - case 'playlists.create': return 'Créer une playlist'; - case 'playlists.playlistName': return 'Nom de playlist'; - case 'playlists.enterPlaylistName': return 'Entrer le nom de playlist'; - case 'playlists.delete': return 'Supprimer la playlist'; - case 'playlists.removeItem': return 'Retirer de la playlist'; - case 'playlists.smartPlaylist': return 'Smart playlist'; - case 'playlists.itemCount': return ({required Object count}) => '${count} éléments'; - case 'playlists.oneItem': return '1 élément'; - case 'playlists.emptyPlaylist': return 'Cette playlist est vide'; - case 'playlists.deleteConfirm': return 'Supprimer la playlist ?'; - case 'playlists.deleteMessage': return ({required Object name}) => 'Êtes-vous sûr de vouloir supprimer "${name}"?'; - case 'playlists.created': return 'Playlist créée'; - case 'playlists.deleted': return 'Playlist supprimée'; - case 'playlists.itemAdded': return 'Ajouté à la playlist'; - case 'playlists.itemRemoved': return 'Retiré de la playlist'; - case 'playlists.selectPlaylist': return 'Select Playlist'; - case 'playlists.createNewPlaylist': return 'Créer une nouvelle playlist'; - case 'playlists.errorCreating': return 'Échec de la création de playlist'; - case 'playlists.errorDeleting': return 'Échec de suppression de playlist'; - case 'playlists.errorLoading': return 'Échec de chargement de playlists'; - case 'playlists.errorAdding': return 'Échec d\'ajout dans la playlist'; - case 'playlists.errorReordering': return 'Échec de réordonnacement d\'élément de playlist'; - case 'playlists.errorRemoving': return 'Échec de suppression depuis la playlist'; - case 'watchTogether.title': return 'Regarder ensemble'; - case 'watchTogether.description': return 'Regardez du contenu en synchronisation avec vos amis et votre famille'; - case 'watchTogether.createSession': return 'Créer une session'; - case 'watchTogether.creating': return 'Création...'; - case 'watchTogether.joinSession': return 'Rejoindre la session'; - case 'watchTogether.joining': return 'Rejoindre...'; - case 'watchTogether.controlMode': return 'Mode de contrôle'; - case 'watchTogether.controlModeQuestion': return 'Qui peut contrôler la lecture ?'; - case 'watchTogether.hostOnly': return 'Hôte uniquement'; - case 'watchTogether.anyone': return 'N\'importe qui'; - case 'watchTogether.hostingSession': return 'Session d\'hébergement'; - case 'watchTogether.inSession': return 'En session'; - case 'watchTogether.sessionCode': return 'Code de session'; - case 'watchTogether.hostControlsPlayback': return 'L\'hôte contrôle la lecture'; - case 'watchTogether.anyoneCanControl': return 'Tout le monde peut contrôler la lecture'; - case 'watchTogether.hostControls': return 'Commandes de l\'hôte'; - case 'watchTogether.anyoneControls': return 'Tout le monde contrôle'; - case 'watchTogether.participants': return 'Participants'; - case 'watchTogether.host': return 'Hôte'; - case 'watchTogether.hostBadge': return 'HOST'; - case 'watchTogether.youAreHost': return 'Vous êtes l\'hôte'; - case 'watchTogether.watchingWithOthers': return 'Regarder avec d\'autres personnes'; - case 'watchTogether.endSession': return 'Fin de session'; - case 'watchTogether.leaveSession': return 'Quitter la session'; - case 'watchTogether.endSessionQuestion': return 'Terminer la session ?'; - case 'watchTogether.leaveSessionQuestion': return 'Quitter la session ?'; - case 'watchTogether.endSessionConfirm': return 'Cela mettra fin à la session pour tous les participants.'; - case 'watchTogether.leaveSessionConfirm': return 'Vous allez être déconnecté de la session.'; - case 'watchTogether.endSessionConfirmOverlay': return 'Cela mettra fin à la session de visionnage pour tous les participants.'; - case 'watchTogether.leaveSessionConfirmOverlay': return 'Vous serez déconnecté de la session de visionnage.'; - case 'watchTogether.end': return 'Terminer'; - case 'watchTogether.leave': return 'Fin'; - case 'watchTogether.syncing': return 'Synchronisation...'; - case 'watchTogether.participant': return 'participant'; - case 'watchTogether.joinWatchSession': return 'Rejoindre la session de visionnage'; - case 'watchTogether.enterCodeHint': return 'Entrez le code à 8 caractères'; - case 'watchTogether.pasteFromClipboard': return 'Coller depuis le presse-papiers'; - case 'watchTogether.pleaseEnterCode': return 'Veuillez saisir un code de session'; - case 'watchTogether.codeMustBe8Chars': return 'Le code de session doit comporter 8 caractères'; - case 'watchTogether.joinInstructions': return 'Entrez le code de session partagé par l\'hôte pour rejoindre sa session de visionnage.'; - case 'watchTogether.failedToCreate': return 'Échec de la création de la session'; - case 'watchTogether.failedToJoin': return 'Échec de la connexion à la session'; - case 'watchTogether.sessionCodeCopied': return 'Code de session copié dans le presse-papiers'; - case 'downloads.title': return 'Téléchargements'; - case 'downloads.manage': return 'Gérer'; - case 'downloads.tvShows': return 'Show TV'; - case 'downloads.movies': return 'Films'; - case 'downloads.noDownloads': return 'Aucun téléchargement pour le moment'; - case 'downloads.noDownloadsDescription': return 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.'; - case 'downloads.downloadNow': return 'Télécharger'; - case 'downloads.deleteDownload': return 'Supprimer le téléchargement'; - case 'downloads.retryDownload': return 'Réessayer le téléchargement'; - case 'downloads.downloadQueued': return 'Téléchargement en attente'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} épisodes en attente de téléchargement'; - case 'downloads.downloadDeleted': return 'Télécharger supprimé'; - case 'downloads.deleteConfirm': return ({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cela supprimera le fichier téléchargé de votre appareil.'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => 'Suppression de ${title}... (${current} sur ${total})'; - 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.logout': return 'Disconnetti'; - case 'common.unknown': return 'Sconosciuto'; - case 'common.refresh': return 'Aggiorna'; - case 'common.yes': return 'Sì'; - case 'common.no': return 'No'; - 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.mpvConfig': return 'Configurazione MPV'; - 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.advanced': return 'Avanzate'; - case 'settings.episodePosterMode': return 'Stile poster episodio'; - case 'settings.seriesPoster': return 'Poster della serie'; - case 'settings.seriesPosterDescription': return 'Mostra il poster della serie per tutti gli episodi'; - case 'settings.seasonPoster': return 'Poster della stagione'; - case 'settings.seasonPosterDescription': return 'Mostra il poster specifico della stagione per gli episodi'; - case 'settings.episodeThumbnail': return 'Miniatura episodio'; - case 'settings.episodeThumbnailDescription': return 'Mostra miniature 16:9 degli 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.showHeroSection': return 'Mostra sezione principale'; - case 'settings.useGlobalHubs': return 'Usa layout Home di Plex'; - case 'settings.useGlobalHubsDescription': return 'Mostra gli hub della home page come il client Plex ufficiale. Se disattivato, mostra invece i suggerimenti per libreria.'; - case 'settings.showServerNameOnHubs': return 'Mostra nome server sugli hub'; - case 'settings.showServerNameOnHubsDescription': return 'Mostra sempre il nome del server nei titoli degli hub. Se disattivato, solo per nomi hub duplicati.'; - 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.videoPlayerControls': return 'Controlli del lettore video'; - case 'settings.keyboardShortcuts': return 'Scorciatoie da tastiera'; - case 'settings.keyboardShortcutsDescription': return 'Personalizza le scorciatoie da tastiera'; - case 'settings.videoPlayerNavigation': return 'Navigazione del lettore video'; - case 'settings.videoPlayerNavigationDescription': return 'Usa i tasti freccia per navigare nei controlli del lettore video'; - 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 'settings.downloads': return 'Download'; - case 'settings.downloadLocationDescription': return 'Scegli dove salvare i contenuti scaricati'; - case 'settings.downloadLocationDefault': return 'Predefinita (Archiviazione App)'; - case 'settings.downloadLocationCustom': return 'Posizione Personalizzata'; - case 'settings.selectFolder': return 'Seleziona Cartella'; - case 'settings.resetToDefault': return 'Ripristina Predefinita'; - case 'settings.currentPath': return ({required Object path}) => 'Corrente: ${path}'; - case 'settings.downloadLocationChanged': return 'Posizione di download modificata'; - case 'settings.downloadLocationReset': return 'Posizione di download ripristinata a predefinita'; - case 'settings.downloadLocationInvalid': return 'La cartella selezionata non è scrivibile'; - case 'settings.downloadLocationSelectError': return 'Impossibile selezionare la cartella'; - case 'settings.downloadOnWifiOnly': return 'Scarica solo con WiFi'; - case 'settings.downloadOnWifiOnlyDescription': return 'Impedisci i download quando si utilizza la rete dati cellulare'; - case 'settings.cellularDownloadBlocked': return 'I download sono disabilitati sulla rete dati cellulare. Connettiti al WiFi o modifica l\'impostazione.'; - case 'settings.maxVolume': return 'Volume massimo'; - case 'settings.maxVolumeDescription': return 'Consenti volume superiore al 100% per contenuti audio bassi'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return 'Inserisci volume massimo (100-300)'; - case 'settings.discordRichPresence': return 'Discord Rich Presence'; - case 'settings.discordRichPresenceDescription': return 'Mostra su Discord cosa stai guardando'; - case 'settings.matchContentFrameRate': return 'Adatta frequenza fotogrammi'; - case 'settings.matchContentFrameRateDescription': return 'Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria'; - 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 'hotkeys.actions.playPause': return 'Riproduci/Pausa'; - case 'hotkeys.actions.volumeUp': return 'Alza volume'; - case 'hotkeys.actions.volumeDown': return 'Abbassa volume'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => 'Avanti (${seconds}s)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => 'Indietro (${seconds}s)'; - case 'hotkeys.actions.fullscreenToggle': return 'Schermo intero'; - case 'hotkeys.actions.muteToggle': return 'Muto'; - case 'hotkeys.actions.subtitleToggle': return 'Sottotitoli'; - case 'hotkeys.actions.audioTrackNext': return 'Traccia audio successiva'; - case 'hotkeys.actions.subtitleTrackNext': return 'Sottotitoli successivi'; - case 'hotkeys.actions.chapterNext': return 'Capitolo successivo'; - case 'hotkeys.actions.chapterPrevious': return 'Capitolo precedente'; - case 'hotkeys.actions.speedIncrease': return 'Aumenta velocità'; - case 'hotkeys.actions.speedDecrease': return 'Diminuisci velocità'; - case 'hotkeys.actions.speedReset': return 'Ripristina velocità'; - case 'hotkeys.actions.subSeekNext': return 'Vai al sottotitolo successivo'; - case 'hotkeys.actions.subSeekPrev': return 'Vai al sottotitolo precedente'; - 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.autoPlayNext': return 'Riproduzione automatica successivo'; - case 'videoControls.playNext': return 'Riproduci successivo'; - 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.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.pipButton': return 'Modalità Picture-in-Picture'; - case 'videoControls.aspectRatioButton': return 'Proporzioni'; - case 'videoControls.fullscreenButton': return 'Attiva schermo intero'; - case 'videoControls.exitFullscreenButton': return 'Esci da schermo intero'; - case 'videoControls.alwaysOnTopButton': return 'Sempre in primo piano'; - 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.markedAsWatchedOffline': return 'Segnato come visto (sincronizzato online)'; - case 'messages.markedAsUnwatchedOffline': return 'Segnato come non visto (sincronizzato online)'; - 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.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.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 '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 'mpvConfig.title': return 'Configurazione MPV'; - case 'mpvConfig.description': return 'Impostazioni avanzate del lettore video'; - case 'mpvConfig.properties': return 'Proprietà'; - case 'mpvConfig.presets': return 'Preset'; - case 'mpvConfig.noProperties': return 'Nessuna proprietà configurata'; - case 'mpvConfig.noPresets': return 'Nessun preset salvato'; - case 'mpvConfig.addProperty': return 'Aggiungi proprietà'; - case 'mpvConfig.editProperty': return 'Modifica proprietà'; - case 'mpvConfig.deleteProperty': return 'Elimina proprietà'; - case 'mpvConfig.propertyKey': return 'Chiave proprietà'; - case 'mpvConfig.propertyKeyHint': return 'es. hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return 'Valore proprietà'; - case 'mpvConfig.propertyValueHint': return 'es. auto, 256000000'; - case 'mpvConfig.saveAsPreset': return 'Salva come preset...'; - case 'mpvConfig.presetName': return 'Nome preset'; - case 'mpvConfig.presetNameHint': return 'Inserisci un nome per questo preset'; - case 'mpvConfig.loadPreset': return 'Carica'; - case 'mpvConfig.deletePreset': return 'Elimina'; - case 'mpvConfig.presetSaved': return 'Preset salvato'; - case 'mpvConfig.presetLoaded': return 'Preset caricato'; - case 'mpvConfig.presetDeleted': return 'Preset eliminato'; - case 'mpvConfig.confirmDeletePreset': return 'Sei sicuro di voler eliminare questo preset?'; - case 'mpvConfig.confirmDeleteProperty': return 'Sei sicuro di voler eliminare questa proprietà?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} voci'; - case 'dialog.confirmAction': return 'Conferma 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.play': return 'Riproduci'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => '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 '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.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.allServerConnectionsFailed': return 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; - case 'serverSelection.noServersFound': return 'Nessun server trovato'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})'; - 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.clearLogs': return 'Cancella log'; - case 'logs.copyLogs': return 'Copia log'; - 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 'navigation.downloads': return 'Download'; - case 'downloads.title': return 'Download'; - case 'downloads.manage': return 'Gestisci'; - case 'downloads.tvShows': return 'Serie TV'; - case 'downloads.movies': return 'Film'; - case 'downloads.noDownloads': return 'Nessun download'; - case 'downloads.noDownloadsDescription': return 'I contenuti scaricati appariranno qui per la visualizzazione offline'; - case 'downloads.downloadNow': return 'Scarica'; - case 'downloads.deleteDownload': return 'Elimina download'; - case 'downloads.retryDownload': return 'Riprova download'; - case 'downloads.downloadQueued': return 'Download in coda'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} episodi in coda per il download'; - case 'downloads.downloadDeleted': return 'Download eliminato'; - case 'downloads.deleteConfirm': return ({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Il file scaricato verrà rimosso dal tuo dispositivo.'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => 'Eliminazione di ${title}... (${current} di ${total})'; - case 'playlists.title': return 'Playlist'; - case 'playlists.noPlaylists': return 'Nessuna playlist trovata'; - case 'playlists.create': return 'Crea playlist'; - case 'playlists.playlistName': return 'Nome playlist'; - case 'playlists.enterPlaylistName': return 'Inserisci nome playlist'; - case 'playlists.delete': return 'Elimina playlist'; - case 'playlists.removeItem': return 'Rimuovi da playlist'; - case 'playlists.smartPlaylist': return 'Playlist intelligente'; - 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.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.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.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}'; - case 'watchTogether.title': return 'Guarda Insieme'; - case 'watchTogether.description': return 'Guarda contenuti in sincronia con amici e familiari'; - case 'watchTogether.createSession': return 'Crea Sessione'; - case 'watchTogether.creating': return 'Creazione...'; - case 'watchTogether.joinSession': return 'Unisciti alla Sessione'; - case 'watchTogether.joining': return 'Connessione...'; - case 'watchTogether.controlMode': return 'Modalità di Controllo'; - case 'watchTogether.controlModeQuestion': return 'Chi può controllare la riproduzione?'; - case 'watchTogether.hostOnly': return 'Solo Host'; - case 'watchTogether.anyone': return 'Tutti'; - case 'watchTogether.hostingSession': return 'Hosting Sessione'; - case 'watchTogether.inSession': return 'In Sessione'; - case 'watchTogether.sessionCode': return 'Codice Sessione'; - case 'watchTogether.hostControlsPlayback': return 'L\'host controlla la riproduzione'; - case 'watchTogether.anyoneCanControl': return 'Tutti possono controllare la riproduzione'; - case 'watchTogether.hostControls': return 'Controllo host'; - case 'watchTogether.anyoneControls': return 'Controllo di tutti'; - case 'watchTogether.participants': return 'Partecipanti'; - case 'watchTogether.host': return 'Host'; - case 'watchTogether.hostBadge': return 'HOST'; - case 'watchTogether.youAreHost': return 'Sei l\'host'; - case 'watchTogether.watchingWithOthers': return 'Guardando con altri'; - case 'watchTogether.endSession': return 'Termina Sessione'; - case 'watchTogether.leaveSession': return 'Lascia Sessione'; - case 'watchTogether.endSessionQuestion': return 'Terminare la Sessione?'; - case 'watchTogether.leaveSessionQuestion': return 'Lasciare la Sessione?'; - case 'watchTogether.endSessionConfirm': return 'Questo terminerà la sessione per tutti i partecipanti.'; - case 'watchTogether.leaveSessionConfirm': return 'Sarai rimosso dalla sessione.'; - case 'watchTogether.endSessionConfirmOverlay': return 'Questo terminerà la sessione di visione per tutti i partecipanti.'; - case 'watchTogether.leaveSessionConfirmOverlay': return 'Sarai disconnesso dalla sessione di visione.'; - case 'watchTogether.end': return 'Termina'; - case 'watchTogether.leave': return 'Lascia'; - case 'watchTogether.syncing': return 'Sincronizzazione...'; - case 'watchTogether.participant': return 'partecipante'; - case 'watchTogether.joinWatchSession': return 'Unisciti alla Sessione di Visione'; - case 'watchTogether.enterCodeHint': return 'Inserisci codice di 8 caratteri'; - case 'watchTogether.pasteFromClipboard': return 'Incolla dagli appunti'; - case 'watchTogether.pleaseEnterCode': return 'Inserisci un codice sessione'; - case 'watchTogether.codeMustBe8Chars': return 'Il codice sessione deve essere di 8 caratteri'; - case 'watchTogether.joinInstructions': return 'Inserisci il codice sessione condiviso dall\'host per unirti alla loro sessione di visione.'; - case 'watchTogether.failedToCreate': return 'Impossibile creare la sessione'; - case 'watchTogether.failedToJoin': return 'Impossibile unirsi alla sessione'; - case 'watchTogether.sessionCodeCopied': return 'Codice sessione copiato negli appunti'; - default: return null; - } - } -} - -extension on _StringsKo { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return '로딩 중...'; - case 'auth.signInWithPlex': return 'Plex 계정으로 로그인'; - case 'auth.showQRCode': return 'QR 코드'; - case 'auth.cancel': return '취소'; - case 'auth.authenticate': return '인증'; - case 'auth.retry': return '재시도'; - case 'auth.debugEnterToken': return '디버깅을 위해 Plex 토큰을 입력하세요.'; - case 'auth.plexTokenLabel': return 'Plex 인증 토큰'; - case 'auth.plexTokenHint': return 'Plex.tv 토큰을 입력하세요'; - case 'auth.authenticationTimeout': return '인증 시간이 초과되었습니다. 다시 시도해 주세요.'; - case 'auth.scanQRCodeInstruction': return 'Plex 계정에 로그인된 기기에서 이 QR 코드를 스캔하여 본인 인증을 해주세요.'; - case 'auth.waitingForAuth': return '인증 대기 중... 브라우저에서 로그인을 완료해 주세요.'; - 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.logout': return '로그아웃'; - case 'common.unknown': return '알 수 없는'; - case 'common.refresh': return '새로고침'; - case 'common.yes': return '예'; - case 'common.no': 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.mpvConfig': return 'MPV 설정'; - 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.advanced': return '고급'; - case 'settings.episodePosterMode': return '에피소드 포스터 스타일'; - case 'settings.seriesPoster': return '시리즈 포스터'; - case 'settings.seriesPosterDescription': return '모든 에피소드에 시리즈 포스터 표시'; - case 'settings.seasonPoster': return '시즌 포스터'; - case 'settings.seasonPosterDescription': return '에피소드에 시즌별 포스터 표시'; - case 'settings.episodeThumbnail': return '에피소드 썸네일'; - case 'settings.episodeThumbnailDescription': return '16:9 에피소드 스크린샷 썸네일 표시'; - case 'settings.showHeroSectionDescription': return '홈 화면에 주요 콘텐츠 캐러셀(슬라이드) 표시'; - case 'settings.secondsLabel': return '초'; - case 'settings.minutesLabel': return '분'; - case 'settings.secondsShort': return '초'; - case 'settings.minutesShort': return '분'; - 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.showHeroSection': return '주요 추천 영역 표시'; - case 'settings.useGlobalHubs': return 'Plex 홈 레이아웃 사용'; - case 'settings.useGlobalHubsDescription': return '공식 Plex 클라이언트처럼 홈 페이지 허브를 표시합니다. 끄면 라이브러리별 추천이 대신 표시됩니다.'; - case 'settings.showServerNameOnHubs': return '허브에 서버 이름 표시'; - case 'settings.showServerNameOnHubsDescription': 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.videoPlayerControls': return '비디오 플레이어 컨트롤'; - case 'settings.keyboardShortcuts': return '키보드 단축키'; - case 'settings.keyboardShortcutsDescription': return '사용자 정의 키보드 단축키'; - case 'settings.videoPlayerNavigation': return '비디오 플레이어 탐색'; - case 'settings.videoPlayerNavigationDescription': 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 'settings.downloads': return '다운로드'; - case 'settings.downloadLocationDescription': return '다운로드 콘텐츠 저장 위치 선택'; - case 'settings.downloadLocationDefault': return '기본값 (앱 저장소)'; - case 'settings.downloadLocationCustom': return '사용자 지정 위치'; - case 'settings.selectFolder': return '폴더 선택'; - case 'settings.resetToDefault': return '기본값으로 재설정'; - case 'settings.currentPath': return ({required Object path}) => '현재: ${path}'; - case 'settings.downloadLocationChanged': return '다운로드 위치가 변경 되었습니다'; - case 'settings.downloadLocationReset': return '다운로드 위치가 기본값으로 재설정 되었습니다'; - case 'settings.downloadLocationInvalid': return '선택한 폴더에 쓰기 권한이 없습니다'; - case 'settings.downloadLocationSelectError': return '폴더 선택 실패'; - case 'settings.downloadOnWifiOnly': return 'WiFi 연결 시에만 다운로드'; - case 'settings.downloadOnWifiOnlyDescription': return '셀룰러 데이터 사용 시 다운로드 불가'; - case 'settings.cellularDownloadBlocked': return '셀룰러 데이터에서 다운로드가 차단 되었습니다. WiFi에 연결하거나 설정을 변경하세요.'; - case 'settings.maxVolume': return '최대 볼륨'; - case 'settings.maxVolumeDescription': return '조용한 미디어를 위해 100% 이상의 볼륨 허용'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return '최대 볼륨 입력 (100-300)'; - case 'settings.discordRichPresence': return 'Discord Rich Presence'; - case 'settings.discordRichPresenceDescription': return 'Discord에서 시청 중인 콘텐츠 표시'; - case 'settings.matchContentFrameRate': return '콘텐츠 프레임 레이트 맞춤'; - case 'settings.matchContentFrameRateDescription': return '비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다'; - 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 'hotkeys.actions.playPause': return '재생/일시정지'; - case 'hotkeys.actions.volumeUp': return '볼륨 높이기'; - case 'hotkeys.actions.volumeDown': return '볼륨 낮추기'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => '앞으로 이동 (${seconds}초)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => '뒤로 이동 (${seconds}초)'; - case 'hotkeys.actions.fullscreenToggle': return '전체 화면 전환'; - case 'hotkeys.actions.muteToggle': return '음소거 전환'; - case 'hotkeys.actions.subtitleToggle': return '자막 전환'; - case 'hotkeys.actions.audioTrackNext': return '다음 오디오 트랙'; - case 'hotkeys.actions.subtitleTrackNext': return '다음 자막 트랙'; - case 'hotkeys.actions.chapterNext': return '다음 챕터'; - case 'hotkeys.actions.chapterPrevious': return '이전 챕터'; - case 'hotkeys.actions.speedIncrease': return '속도 높이기'; - case 'hotkeys.actions.speedDecrease': return '속도 낮추기'; - case 'hotkeys.actions.speedReset': return '속도 초기화'; - case 'hotkeys.actions.subSeekNext': return '다음 자막으로 이동'; - case 'hotkeys.actions.subSeekPrev': 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}, 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 '시청 완료'; - 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 '레터박스 모드'; - 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.autoPlayNext': return '다음 자동 재생'; - case 'videoControls.playNext': 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.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.pipButton': return '픽처 인 픽처 모드'; - case 'videoControls.aspectRatioButton': return '화면비율'; - case 'videoControls.fullscreenButton': return '전체화면'; - case 'videoControls.exitFullscreenButton': return '전체화면 종료'; - case 'videoControls.alwaysOnTopButton': 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.markedAsWatchedOffline': return '시청 완료로 표시됨 (연결 시 동기화됨)'; - case 'messages.markedAsUnwatchedOffline': 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.logoutConfirm': return '로그아웃 하시겠습니까?'; - case 'messages.noSeasonsFound': return '시즌을 찾을 수 없음'; - case 'messages.noEpisodesFound': return '시즌 1에서 에피소드를 찾을 수 없습니다'; - case 'messages.noEpisodesFoundGeneral': return '에피소드를 찾을 수 없습니다'; - case 'messages.noResultsFound': return '결과를 찾을 수 없습니다'; - case 'messages.sleepTimerSet': return ({required Object label}) => '수면 타이머가 ${label}로 설정 되었습니다'; - 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 '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 'mpvConfig.title': return 'MPV 설정'; - case 'mpvConfig.description': return '고급 비디오 플레이어 설정'; - case 'mpvConfig.properties': return '속성'; - case 'mpvConfig.presets': return '사전 설정'; - case 'mpvConfig.noProperties': return '설정된 속성이 없습니다'; - case 'mpvConfig.noPresets': return '저장된 사전 설정이 없습니다'; - case 'mpvConfig.addProperty': return '속성 추가'; - case 'mpvConfig.editProperty': return '속성 편집'; - case 'mpvConfig.deleteProperty': return '속성 삭제'; - case 'mpvConfig.propertyKey': return '속성 키'; - case 'mpvConfig.propertyKeyHint': return '예: hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return '속성값'; - case 'mpvConfig.propertyValueHint': return '예: auto, 256000000'; - case 'mpvConfig.saveAsPreset': return '프리셋으로 저장...'; - case 'mpvConfig.presetName': return '프리셋 이름'; - case 'mpvConfig.presetNameHint': return '이 프리셋의 이름을 입력하세요'; - case 'mpvConfig.loadPreset': return '로드'; - case 'mpvConfig.deletePreset': return '삭제'; - case 'mpvConfig.presetSaved': return '프리셋이 저장 되었습니다'; - case 'mpvConfig.presetLoaded': return '프리셋이 로드 되었습니다'; - case 'mpvConfig.presetDeleted': return '프리셋이 삭제 되었습니다'; - case 'mpvConfig.confirmDeletePreset': return '이 프리셋을 삭제 하시겠습니까?'; - case 'mpvConfig.confirmDeleteProperty': return '이 속성을 삭제 하시겠습니까?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} 항목'; - case 'dialog.confirmAction': 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.play': return '재생'; - case 'discover.playEpisode': 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 'TV 시리즈'; - 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 '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.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 'TV 프로그램'; - 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.allServerConnectionsFailed': return '어떤 서버에도 연결할 수 없습니다. 네트워크를 확인하고 다시 시도하세요.'; - case 'serverSelection.noServersFound': return '서버를 찾을 수 없습니다.'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.'; - 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.clearLogs': return '로그 지우기'; - case 'logs.copyLogs': 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 'navigation.downloads': return '다운로드'; - case 'collections.title': return '컬렉션'; - case 'collections.collection': return '컬렉션'; - case 'collections.empty': 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.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}'; - case 'playlists.title': return '플레이리스트'; - case 'playlists.playlist': return '재생 목록'; - case 'playlists.noPlaylists': return '재생 목록을 찾을 수 없습니다'; - case 'playlists.create': return '재생 목록 생성'; - case 'playlists.playlistName': return '재생 목록 이름'; - case 'playlists.enterPlaylistName': return '재생 목록 이름 입력'; - case 'playlists.delete': return '재생 목록 삭제'; - case 'playlists.removeItem': return '재생 목록에서 항목 제거'; - case 'playlists.smartPlaylist': 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.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 'watchTogether.title': return '함께 보기'; - case 'watchTogether.description': return '친구 및 가족과 콘텐츠를 동시에 시청하세요'; - case 'watchTogether.createSession': return '세션 생성'; - case 'watchTogether.creating': return '생성 중...'; - case 'watchTogether.joinSession': return '세션 참여'; - case 'watchTogether.joining': return '참가 중...'; - case 'watchTogether.controlMode': return '제어 모드'; - case 'watchTogether.controlModeQuestion': return '누가 재생을 제어할 수 있나요?'; - case 'watchTogether.hostOnly': return '호스트만'; - case 'watchTogether.anyone': return '누구나'; - case 'watchTogether.hostingSession': return '세션 호스팅'; - case 'watchTogether.inSession': return '세션 중'; - case 'watchTogether.sessionCode': return '세션 코드'; - case 'watchTogether.hostControlsPlayback': return '호스트 재생 제어'; - case 'watchTogether.anyoneCanControl': return '누구나 재생 제어 가능'; - case 'watchTogether.hostControls': return '호스트 제어'; - case 'watchTogether.anyoneControls': return '누구나 제어'; - case 'watchTogether.participants': return '참가자'; - case 'watchTogether.host': return '호스트'; - case 'watchTogether.hostBadge': return '호스트'; - case 'watchTogether.youAreHost': return '당신은 호스트 입니다'; - case 'watchTogether.watchingWithOthers': return '다른 사람과 함께 시청 중'; - case 'watchTogether.endSession': return '세션 종료'; - case 'watchTogether.leaveSession': return '세션 탈퇴'; - case 'watchTogether.endSessionQuestion': return '세션을 종료 하시겠습니까?'; - case 'watchTogether.leaveSessionQuestion': return '세션을 탈퇴 하시겠습니까?'; - case 'watchTogether.endSessionConfirm': return '이 작업은 모든 참가자의 세션을 종료합니다.'; - case 'watchTogether.leaveSessionConfirm': return '당신은 세션에서 제거됩니다.'; - case 'watchTogether.endSessionConfirmOverlay': return '이것은 모든 참가자의 시청 세션을 종료합니다.'; - case 'watchTogether.leaveSessionConfirmOverlay': return '시청 세션 연결이 끊어집니다.'; - case 'watchTogether.end': return '종료'; - case 'watchTogether.leave': return '이탈'; - case 'watchTogether.syncing': return '동기화 중...'; - case 'watchTogether.participant': return '참여자'; - case 'watchTogether.joinWatchSession': return '시청 세션에 참여'; - case 'watchTogether.enterCodeHint': return '8자리 코드 입력'; - case 'watchTogether.pasteFromClipboard': return '클립보드에서 붙여넣기'; - case 'watchTogether.pleaseEnterCode': return '세션 코드를 입력하세요'; - case 'watchTogether.codeMustBe8Chars': return '세션 코드는 반드시 8자리여야 합니다'; - case 'watchTogether.joinInstructions': return '호스트가 공유한 세션 코드를 입력하여 시청 세션에 참여하세요.'; - case 'watchTogether.failedToCreate': return '세션 생성 실패'; - case 'watchTogether.failedToJoin': return '세션 참여 실패'; - case 'watchTogether.sessionCodeCopied': return '세션 코드가 클립보드에 복사되었습니다'; - case 'downloads.title': return '다운로드'; - case 'downloads.manage': return '관리'; - case 'downloads.tvShows': return 'TV 프로그램'; - case 'downloads.movies': return '영화'; - case 'downloads.noDownloads': return '다운로드 없음'; - case 'downloads.noDownloadsDescription': return '다운로드한 콘텐츠는 오프라인 시청을 위해 여기에 표시됩니다'; - case 'downloads.downloadNow': return '다운로드'; - case 'downloads.deleteDownload': return '다운로드 삭제'; - case 'downloads.retryDownload': return '다운로드 재시도'; - case 'downloads.downloadQueued': return '다운로드 대기 중'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} 에피소드가 다운로드 대기열에 추가 되었습니다'; - case 'downloads.downloadDeleted': return '다운로드 삭제됨'; - case 'downloads.deleteConfirm': return ({required Object title}) => '"${title}"를 삭제 하시겠습니까? 다운로드한 파일이 기기에서 삭제됩니다.'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => '${title} 삭제 중... (${current}/${total})'; - 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.logout': return 'Uitloggen'; - case 'common.unknown': return 'Onbekend'; - case 'common.refresh': return 'Vernieuwen'; - case 'common.yes': return 'Ja'; - case 'common.no': return 'Nee'; - 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.mpvConfig': return 'MPV-configuratie'; - 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.advanced': return 'Geavanceerd'; - case 'settings.episodePosterMode': return 'Aflevering poster stijl'; - case 'settings.seriesPoster': return 'Serie poster'; - case 'settings.seriesPosterDescription': return 'Toon de serie poster voor alle afleveringen'; - case 'settings.seasonPoster': return 'Seizoen poster'; - case 'settings.seasonPosterDescription': return 'Toon de seizoensspecifieke poster voor afleveringen'; - case 'settings.episodeThumbnail': return 'Aflevering miniatuur'; - case 'settings.episodeThumbnailDescription': return 'Toon 16:9 aflevering miniaturen'; - 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.showHeroSection': return 'Toon hoofdsectie'; - case 'settings.useGlobalHubs': return 'Plex Home-indeling gebruiken'; - case 'settings.useGlobalHubsDescription': return 'Toon startpagina-hubs zoals de officiële Plex-client. Indien uitgeschakeld, worden in plaats daarvan aanbevelingen per bibliotheek getoond.'; - case 'settings.showServerNameOnHubs': return 'Servernaam tonen bij hubs'; - case 'settings.showServerNameOnHubsDescription': return 'Toon altijd de servernaam in hub-titels. Indien uitgeschakeld, alleen bij dubbele hub-namen.'; - 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.videoPlayerControls': return 'Videospeler bediening'; - case 'settings.keyboardShortcuts': return 'Toetsenbord sneltoetsen'; - case 'settings.keyboardShortcutsDescription': return 'Pas toetsenbord sneltoetsen aan'; - case 'settings.videoPlayerNavigation': return 'Videospeler navigatie'; - case 'settings.videoPlayerNavigationDescription': return 'Gebruik pijltjestoetsen om door de videospeler bediening te navigeren'; - 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 'settings.downloads': return 'Downloads'; - case 'settings.downloadLocationDescription': return 'Kies waar gedownloade content wordt opgeslagen'; - case 'settings.downloadLocationDefault': return 'Standaard (App-opslag)'; - case 'settings.downloadLocationCustom': return 'Aangepaste Locatie'; - case 'settings.selectFolder': return 'Selecteer Map'; - case 'settings.resetToDefault': return 'Herstel naar Standaard'; - case 'settings.currentPath': return ({required Object path}) => 'Huidig: ${path}'; - case 'settings.downloadLocationChanged': return 'Downloadlocatie gewijzigd'; - case 'settings.downloadLocationReset': return 'Downloadlocatie hersteld naar standaard'; - case 'settings.downloadLocationInvalid': return 'Geselecteerde map is niet beschrijfbaar'; - case 'settings.downloadLocationSelectError': return 'Kan map niet selecteren'; - case 'settings.downloadOnWifiOnly': return 'Alleen via WiFi downloaden'; - case 'settings.downloadOnWifiOnlyDescription': return 'Voorkom downloads bij gebruik van mobiele data'; - case 'settings.cellularDownloadBlocked': return 'Downloads zijn uitgeschakeld bij mobiele data. Maak verbinding met WiFi of wijzig de instelling.'; - case 'settings.maxVolume': return 'Maximaal volume'; - case 'settings.maxVolumeDescription': return 'Volume boven 100% toestaan voor stille media'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return 'Voer maximaal volume in (100-300)'; - case 'settings.discordRichPresence': return 'Discord Rich Presence'; - case 'settings.discordRichPresenceDescription': return 'Toon op Discord wat je aan het kijken bent'; - case 'settings.matchContentFrameRate': return 'Inhoudsframesnelheid afstemmen'; - case 'settings.matchContentFrameRateDescription': return 'Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij'; - 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 'hotkeys.actions.playPause': return 'Afspelen/Pauzeren'; - case 'hotkeys.actions.volumeUp': return 'Volume omhoog'; - case 'hotkeys.actions.volumeDown': return 'Volume omlaag'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => 'Vooruitspoelen (${seconds}s)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => 'Terugspoelen (${seconds}s)'; - case 'hotkeys.actions.fullscreenToggle': return 'Volledig scherm'; - case 'hotkeys.actions.muteToggle': return 'Dempen'; - case 'hotkeys.actions.subtitleToggle': return 'Ondertiteling'; - case 'hotkeys.actions.audioTrackNext': return 'Volgende audiotrack'; - case 'hotkeys.actions.subtitleTrackNext': return 'Volgende ondertiteltrack'; - case 'hotkeys.actions.chapterNext': return 'Volgend hoofdstuk'; - case 'hotkeys.actions.chapterPrevious': return 'Vorig hoofdstuk'; - case 'hotkeys.actions.speedIncrease': return 'Snelheid verhogen'; - case 'hotkeys.actions.speedDecrease': return 'Snelheid verlagen'; - case 'hotkeys.actions.speedReset': return 'Snelheid resetten'; - case 'hotkeys.actions.subSeekNext': return 'Naar volgende ondertitel'; - case 'hotkeys.actions.subSeekPrev': return 'Naar vorige ondertitel'; - 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.autoPlayNext': return 'Automatisch volgende afspelen'; - case 'videoControls.playNext': return 'Volgende afspelen'; - 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.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.pipButton': return 'Beeld-in-beeld modus'; - case 'videoControls.aspectRatioButton': return 'Beeldverhouding'; - case 'videoControls.fullscreenButton': return 'Volledig scherm activeren'; - case 'videoControls.exitFullscreenButton': return 'Volledig scherm verlaten'; - case 'videoControls.alwaysOnTopButton': return 'Altijd bovenop'; - 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.markedAsWatchedOffline': return 'Gemarkeerd als gekeken (sync wanneer online)'; - case 'messages.markedAsUnwatchedOffline': return 'Gemarkeerd als ongekeken (sync wanneer online)'; - 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.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.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 '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 'mpvConfig.title': return 'MPV-configuratie'; - case 'mpvConfig.description': return 'Geavanceerde videospeler-instellingen'; - case 'mpvConfig.properties': return 'Eigenschappen'; - case 'mpvConfig.presets': return 'Voorinstellingen'; - case 'mpvConfig.noProperties': return 'Geen eigenschappen geconfigureerd'; - case 'mpvConfig.noPresets': return 'Geen opgeslagen voorinstellingen'; - case 'mpvConfig.addProperty': return 'Eigenschap toevoegen'; - case 'mpvConfig.editProperty': return 'Eigenschap bewerken'; - case 'mpvConfig.deleteProperty': return 'Eigenschap verwijderen'; - case 'mpvConfig.propertyKey': return 'Eigenschapssleutel'; - case 'mpvConfig.propertyKeyHint': return 'bijv. hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return 'Eigenschapswaarde'; - case 'mpvConfig.propertyValueHint': return 'bijv. auto, 256000000'; - case 'mpvConfig.saveAsPreset': return 'Opslaan als voorinstelling...'; - case 'mpvConfig.presetName': return 'Naam voorinstelling'; - case 'mpvConfig.presetNameHint': return 'Voer een naam in voor deze voorinstelling'; - case 'mpvConfig.loadPreset': return 'Laden'; - case 'mpvConfig.deletePreset': return 'Verwijderen'; - case 'mpvConfig.presetSaved': return 'Voorinstelling opgeslagen'; - case 'mpvConfig.presetLoaded': return 'Voorinstelling geladen'; - case 'mpvConfig.presetDeleted': return 'Voorinstelling verwijderd'; - case 'mpvConfig.confirmDeletePreset': return 'Weet je zeker dat je deze voorinstelling wilt verwijderen?'; - case 'mpvConfig.confirmDeleteProperty': return 'Weet je zeker dat je deze eigenschap wilt verwijderen?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} items'; - case 'dialog.confirmAction': return 'Bevestig actie'; - 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.play': return 'Afspelen'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => '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 '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.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.allServerConnectionsFailed': return 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; - case 'serverSelection.noServersFound': return 'Geen servers gevonden'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})'; - 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.clearLogs': return 'Wis logs'; - case 'logs.copyLogs': return 'Kopieer logs'; - 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 'navigation.downloads': return 'Downloads'; - case 'downloads.title': return 'Downloads'; - case 'downloads.manage': return 'Beheren'; - case 'downloads.tvShows': return 'Series'; - case 'downloads.movies': return 'Films'; - case 'downloads.noDownloads': return 'Nog geen downloads'; - case 'downloads.noDownloadsDescription': return 'Gedownloade content verschijnt hier voor offline weergave'; - case 'downloads.downloadNow': return 'Download'; - case 'downloads.deleteDownload': return 'Download verwijderen'; - case 'downloads.retryDownload': return 'Download opnieuw proberen'; - case 'downloads.downloadQueued': return 'Download in wachtrij'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} afleveringen in wachtrij voor download'; - case 'downloads.downloadDeleted': return 'Download verwijderd'; - case 'downloads.deleteConfirm': return ({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Het gedownloade bestand wordt van je apparaat verwijderd.'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => 'Verwijderen van ${title}... (${current} van ${total})'; - case 'playlists.title': return 'Afspeellijsten'; - case 'playlists.noPlaylists': return 'Geen afspeellijsten gevonden'; - case 'playlists.create': return 'Afspeellijst maken'; - case 'playlists.playlistName': return 'Naam afspeellijst'; - case 'playlists.enterPlaylistName': return 'Voer naam afspeellijst in'; - case 'playlists.delete': return 'Afspeellijst verwijderen'; - case 'playlists.removeItem': return 'Verwijderen uit afspeellijst'; - case 'playlists.smartPlaylist': return 'Slimme 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.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.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.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}'; - case 'watchTogether.title': return 'Samen Kijken'; - case 'watchTogether.description': return 'Kijk synchroon met vrienden en familie'; - case 'watchTogether.createSession': return 'Sessie Maken'; - case 'watchTogether.creating': return 'Maken...'; - case 'watchTogether.joinSession': return 'Sessie Deelnemen'; - case 'watchTogether.joining': return 'Deelnemen...'; - case 'watchTogether.controlMode': return 'Controlemodus'; - case 'watchTogether.controlModeQuestion': return 'Wie kan het afspelen bedienen?'; - case 'watchTogether.hostOnly': return 'Alleen Host'; - case 'watchTogether.anyone': return 'Iedereen'; - case 'watchTogether.hostingSession': return 'Sessie Hosten'; - case 'watchTogether.inSession': return 'In Sessie'; - case 'watchTogether.sessionCode': return 'Sessiecode'; - case 'watchTogether.hostControlsPlayback': return 'Host bedient het afspelen'; - case 'watchTogether.anyoneCanControl': return 'Iedereen kan het afspelen bedienen'; - case 'watchTogether.hostControls': return 'Host bedient'; - case 'watchTogether.anyoneControls': return 'Iedereen bedient'; - case 'watchTogether.participants': return 'Deelnemers'; - case 'watchTogether.host': return 'Host'; - case 'watchTogether.hostBadge': return 'HOST'; - case 'watchTogether.youAreHost': return 'Jij bent de host'; - case 'watchTogether.watchingWithOthers': return 'Kijken met anderen'; - case 'watchTogether.endSession': return 'Sessie Beëindigen'; - case 'watchTogether.leaveSession': return 'Sessie Verlaten'; - case 'watchTogether.endSessionQuestion': return 'Sessie Beëindigen?'; - case 'watchTogether.leaveSessionQuestion': return 'Sessie Verlaten?'; - case 'watchTogether.endSessionConfirm': return 'Dit beëindigt de sessie voor alle deelnemers.'; - case 'watchTogether.leaveSessionConfirm': return 'Je wordt uit de sessie verwijderd.'; - case 'watchTogether.endSessionConfirmOverlay': return 'Dit beëindigt de kijksessie voor alle deelnemers.'; - case 'watchTogether.leaveSessionConfirmOverlay': return 'Je wordt losgekoppeld van de kijksessie.'; - case 'watchTogether.end': return 'Beëindigen'; - case 'watchTogether.leave': return 'Verlaten'; - case 'watchTogether.syncing': return 'Synchroniseren...'; - case 'watchTogether.participant': return 'deelnemer'; - case 'watchTogether.joinWatchSession': return 'Kijksessie Deelnemen'; - case 'watchTogether.enterCodeHint': return 'Voer 8-teken code in'; - case 'watchTogether.pasteFromClipboard': return 'Plakken van klembord'; - case 'watchTogether.pleaseEnterCode': return 'Voer een sessiecode in'; - case 'watchTogether.codeMustBe8Chars': return 'Sessiecode moet 8 tekens zijn'; - case 'watchTogether.joinInstructions': return 'Voer de sessiecode in die door de host is gedeeld om deel te nemen aan hun kijksessie.'; - case 'watchTogether.failedToCreate': return 'Sessie maken mislukt'; - case 'watchTogether.failedToJoin': return 'Sessie deelnemen mislukt'; - case 'watchTogether.sessionCodeCopied': return 'Sessiecode gekopieerd naar klembord'; - 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.logout': return 'Logga ut'; - case 'common.unknown': return 'Okänd'; - case 'common.refresh': return 'Uppdatera'; - case 'common.yes': return 'Ja'; - case 'common.no': return 'Nej'; - 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.mpvConfig': return 'MPV-konfiguration'; - 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.advanced': return 'Avancerat'; - case 'settings.episodePosterMode': return 'Avsnittsaffisch-stil'; - case 'settings.seriesPoster': return 'Serieaffisch'; - case 'settings.seriesPosterDescription': return 'Visa seriens affisch för alla avsnitt'; - case 'settings.seasonPoster': return 'Säsongsaffisch'; - case 'settings.seasonPosterDescription': return 'Visa säsongens affisch för avsnitt'; - case 'settings.episodeThumbnail': return 'Avsnittsminiatyr'; - case 'settings.episodeThumbnailDescription': return 'Visa 16:9 skärmbild från avsnittet'; - 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.showHeroSection': return 'Visa hjältesektion'; - case 'settings.useGlobalHubs': return 'Använd Plex hem-layout'; - case 'settings.useGlobalHubsDescription': return 'Visar startsidans hubbar som den officiella Plex-klienten. När av visas rekommendationer per bibliotek istället.'; - case 'settings.showServerNameOnHubs': return 'Visa servernamn på hubbar'; - case 'settings.showServerNameOnHubsDescription': return 'Visa alltid servernamnet i hubbtitlar. När av visas endast för duplicerade hubbnamn.'; - 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.videoPlayerControls': return 'Videospelar-kontroller'; - case 'settings.keyboardShortcuts': return 'Tangentbordsgenvägar'; - case 'settings.keyboardShortcutsDescription': return 'Anpassa tangentbordsgenvägar'; - case 'settings.videoPlayerNavigation': return 'Navigering i videospelaren'; - case 'settings.videoPlayerNavigationDescription': return 'Använd piltangenter för att navigera videospelarens kontroller'; - 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 'settings.downloads': return 'Nedladdningar'; - case 'settings.downloadLocationDescription': return 'Välj var nedladdat innehåll ska lagras'; - case 'settings.downloadLocationDefault': return 'Standard (App-lagring)'; - case 'settings.downloadLocationCustom': return 'Anpassad Plats'; - case 'settings.selectFolder': return 'Välj Mapp'; - case 'settings.resetToDefault': return 'Återställ till Standard'; - case 'settings.currentPath': return ({required Object path}) => 'Nuvarande: ${path}'; - case 'settings.downloadLocationChanged': return 'Nedladdningsplats ändrad'; - case 'settings.downloadLocationReset': return 'Nedladdningsplats återställd till standard'; - case 'settings.downloadLocationInvalid': return 'Vald mapp är inte skrivbar'; - case 'settings.downloadLocationSelectError': return 'Kunde inte välja mapp'; - case 'settings.downloadOnWifiOnly': return 'Ladda ner endast på WiFi'; - case 'settings.downloadOnWifiOnlyDescription': return 'Förhindra nedladdningar vid användning av mobildata'; - case 'settings.cellularDownloadBlocked': return 'Nedladdningar är inaktiverade på mobildata. Anslut till WiFi eller ändra inställningen.'; - case 'settings.maxVolume': return 'Maximal volym'; - case 'settings.maxVolumeDescription': return 'Tillåt volym över 100% för tyst media'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return 'Ange maximal volym (100-300)'; - case 'settings.discordRichPresence': return 'Discord Rich Presence'; - case 'settings.discordRichPresenceDescription': return 'Visa vad du tittar på i Discord'; - case 'settings.matchContentFrameRate': return 'Matcha innehållets bildfrekvens'; - case 'settings.matchContentFrameRateDescription': return 'Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri'; - 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 'hotkeys.actions.playPause': return 'Spela/Pausa'; - case 'hotkeys.actions.volumeUp': return 'Höj volym'; - case 'hotkeys.actions.volumeDown': return 'Sänk volym'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => 'Spola framåt (${seconds}s)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => 'Spola bakåt (${seconds}s)'; - case 'hotkeys.actions.fullscreenToggle': return 'Växla helskärm'; - case 'hotkeys.actions.muteToggle': return 'Växla ljud av'; - case 'hotkeys.actions.subtitleToggle': return 'Växla undertexter'; - case 'hotkeys.actions.audioTrackNext': return 'Nästa ljudspår'; - case 'hotkeys.actions.subtitleTrackNext': return 'Nästa undertextspår'; - case 'hotkeys.actions.chapterNext': return 'Nästa kapitel'; - case 'hotkeys.actions.chapterPrevious': return 'Föregående kapitel'; - case 'hotkeys.actions.speedIncrease': return 'Öka hastighet'; - case 'hotkeys.actions.speedDecrease': return 'Minska hastighet'; - case 'hotkeys.actions.speedReset': return 'Återställ hastighet'; - case 'hotkeys.actions.subSeekNext': return 'Hoppa till nästa undertext'; - case 'hotkeys.actions.subSeekPrev': return 'Hoppa till föregående undertext'; - 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.autoPlayNext': return 'Spela nästa automatiskt'; - case 'videoControls.playNext': return 'Spela nästa'; - 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.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.pipButton': return 'Bild-i-bild läge'; - case 'videoControls.aspectRatioButton': return 'Bildförhållande'; - case 'videoControls.fullscreenButton': return 'Aktivera helskärm'; - case 'videoControls.exitFullscreenButton': return 'Avsluta helskärm'; - case 'videoControls.alwaysOnTopButton': return 'Alltid överst'; - 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.markedAsWatchedOffline': return 'Markerad som sedd (synkroniseras när online)'; - case 'messages.markedAsUnwatchedOffline': return 'Markerad som osedd (synkroniseras när online)'; - 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.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.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 '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 'mpvConfig.title': return 'MPV-konfiguration'; - case 'mpvConfig.description': return 'Avancerade videospelares inställningar'; - case 'mpvConfig.properties': return 'Egenskaper'; - case 'mpvConfig.presets': return 'Förval'; - case 'mpvConfig.noProperties': return 'Inga egenskaper konfigurerade'; - case 'mpvConfig.noPresets': return 'Inga sparade förval'; - case 'mpvConfig.addProperty': return 'Lägg till egenskap'; - case 'mpvConfig.editProperty': return 'Redigera egenskap'; - case 'mpvConfig.deleteProperty': return 'Ta bort egenskap'; - case 'mpvConfig.propertyKey': return 'Egenskapsnyckel'; - case 'mpvConfig.propertyKeyHint': return 't.ex. hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return 'Egenskapsvärde'; - case 'mpvConfig.propertyValueHint': return 't.ex. auto, 256000000'; - case 'mpvConfig.saveAsPreset': return 'Spara som förval...'; - case 'mpvConfig.presetName': return 'Förvalnamn'; - case 'mpvConfig.presetNameHint': return 'Ange ett namn för detta förval'; - case 'mpvConfig.loadPreset': return 'Ladda'; - case 'mpvConfig.deletePreset': return 'Ta bort'; - case 'mpvConfig.presetSaved': return 'Förval sparat'; - case 'mpvConfig.presetLoaded': return 'Förval laddat'; - case 'mpvConfig.presetDeleted': return 'Förval borttaget'; - case 'mpvConfig.confirmDeletePreset': return 'Är du säker på att du vill ta bort detta förval?'; - case 'mpvConfig.confirmDeleteProperty': return 'Är du säker på att du vill ta bort denna egenskap?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} poster'; - case 'dialog.confirmAction': return 'Bekräfta å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.play': return 'Spela'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => '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 '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.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.allServerConnectionsFailed': return 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; - case 'serverSelection.noServersFound': return 'Inga servrar hittades'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})'; - 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.clearLogs': return 'Rensa loggar'; - case 'logs.copyLogs': return 'Kopiera loggar'; - 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 'navigation.downloads': return 'Nedladdningar'; - case 'downloads.title': return 'Nedladdningar'; - case 'downloads.manage': return 'Hantera'; - case 'downloads.tvShows': return 'TV-serier'; - case 'downloads.movies': return 'Filmer'; - case 'downloads.noDownloads': return 'Inga nedladdningar ännu'; - case 'downloads.noDownloadsDescription': return 'Nedladdat innehåll visas här för offline-visning'; - case 'downloads.downloadNow': return 'Ladda ner'; - case 'downloads.deleteDownload': return 'Ta bort nedladdning'; - case 'downloads.retryDownload': return 'Försök igen'; - case 'downloads.downloadQueued': return 'Nedladdning köad'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} avsnitt köade för nedladdning'; - case 'downloads.downloadDeleted': return 'Nedladdning borttagen'; - case 'downloads.deleteConfirm': return ({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Den nedladdade filen kommer att tas bort från din enhet.'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => 'Tar bort ${title}... (${current} av ${total})'; - case 'playlists.title': return 'Spellistor'; - case 'playlists.noPlaylists': return 'Inga spellistor hittades'; - case 'playlists.create': return 'Skapa spellista'; - case 'playlists.playlistName': return 'Spellistans namn'; - case 'playlists.enterPlaylistName': return 'Ange spellistans namn'; - case 'playlists.delete': return 'Ta bort spellista'; - case 'playlists.removeItem': return 'Ta bort från spellista'; - case 'playlists.smartPlaylist': return 'Smart 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.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.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.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}'; - case 'watchTogether.title': return 'Titta Tillsammans'; - case 'watchTogether.description': return 'Titta på innehåll synkroniserat med vänner och familj'; - case 'watchTogether.createSession': return 'Skapa Session'; - case 'watchTogether.creating': return 'Skapar...'; - case 'watchTogether.joinSession': return 'Gå med i Session'; - case 'watchTogether.joining': return 'Ansluter...'; - case 'watchTogether.controlMode': return 'Kontrollläge'; - case 'watchTogether.controlModeQuestion': return 'Vem kan styra uppspelningen?'; - case 'watchTogether.hostOnly': return 'Endast Värd'; - case 'watchTogether.anyone': return 'Alla'; - case 'watchTogether.hostingSession': return 'Värd för Session'; - case 'watchTogether.inSession': return 'I Session'; - case 'watchTogether.sessionCode': return 'Sessionskod'; - case 'watchTogether.hostControlsPlayback': return 'Värden styr uppspelningen'; - case 'watchTogether.anyoneCanControl': return 'Alla kan styra uppspelningen'; - case 'watchTogether.hostControls': return 'Värd styr'; - case 'watchTogether.anyoneControls': return 'Alla styr'; - case 'watchTogether.participants': return 'Deltagare'; - case 'watchTogether.host': return 'Värd'; - case 'watchTogether.hostBadge': return 'VÄRD'; - case 'watchTogether.youAreHost': return 'Du är värden'; - case 'watchTogether.watchingWithOthers': return 'Tittar med andra'; - case 'watchTogether.endSession': return 'Avsluta Session'; - case 'watchTogether.leaveSession': return 'Lämna Session'; - case 'watchTogether.endSessionQuestion': return 'Avsluta Session?'; - case 'watchTogether.leaveSessionQuestion': return 'Lämna Session?'; - case 'watchTogether.endSessionConfirm': return 'Detta avslutar sessionen för alla deltagare.'; - case 'watchTogether.leaveSessionConfirm': return 'Du kommer att tas bort från sessionen.'; - case 'watchTogether.endSessionConfirmOverlay': return 'Detta avslutar tittarsessionen för alla deltagare.'; - case 'watchTogether.leaveSessionConfirmOverlay': return 'Du kommer att kopplas bort från tittarsessionen.'; - case 'watchTogether.end': return 'Avsluta'; - case 'watchTogether.leave': return 'Lämna'; - case 'watchTogether.syncing': return 'Synkroniserar...'; - case 'watchTogether.participant': return 'deltagare'; - case 'watchTogether.joinWatchSession': return 'Gå med i Tittarsession'; - case 'watchTogether.enterCodeHint': return 'Ange 8-teckens kod'; - case 'watchTogether.pasteFromClipboard': return 'Klistra in från urklipp'; - case 'watchTogether.pleaseEnterCode': return 'Vänligen ange en sessionskod'; - case 'watchTogether.codeMustBe8Chars': return 'Sessionskod måste vara 8 tecken'; - case 'watchTogether.joinInstructions': return 'Ange sessionskoden som delats av värden för att gå med i deras tittarsession.'; - case 'watchTogether.failedToCreate': return 'Det gick inte att skapa session'; - case 'watchTogether.failedToJoin': return 'Det gick inte att gå med i session'; - case 'watchTogether.sessionCodeCopied': return 'Sessionskod kopierad till urklipp'; - 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.logout': return '登出'; - case 'common.unknown': return '未知'; - case 'common.refresh': return '刷新'; - case 'common.yes': return '是'; - case 'common.no': 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.mpvConfig': return 'MPV 配置'; - 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.advanced': return '高级'; - case 'settings.episodePosterMode': return '剧集海报样式'; - case 'settings.seriesPoster': return '剧集海报'; - case 'settings.seriesPosterDescription': return '为所有剧集显示剧集海报'; - case 'settings.seasonPoster': return '季海报'; - case 'settings.seasonPosterDescription': return '为剧集显示特定季的海报'; - case 'settings.episodeThumbnail': return '剧集缩略图'; - case 'settings.episodeThumbnailDescription': return '显示16:9剧集截图缩略图'; - 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.showHeroSection': return '显示主要精选区'; - case 'settings.useGlobalHubs': return '使用 Plex 主页布局'; - case 'settings.useGlobalHubsDescription': return '显示与官方 Plex 客户端相同的主页推荐。关闭时将显示按媒体库分类的推荐。'; - case 'settings.showServerNameOnHubs': return '在推荐栏显示服务器名称'; - case 'settings.showServerNameOnHubsDescription': 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.videoPlayerControls': return '视频播放器控制'; - case 'settings.keyboardShortcuts': return '键盘快捷键'; - case 'settings.keyboardShortcutsDescription': return '自定义键盘快捷键'; - case 'settings.videoPlayerNavigation': return '视频播放器导航'; - case 'settings.videoPlayerNavigationDescription': 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 'settings.downloads': return '下载'; - case 'settings.downloadLocationDescription': return '选择下载内容的存储位置'; - case 'settings.downloadLocationDefault': return '默认(应用存储)'; - case 'settings.downloadLocationCustom': return '自定义位置'; - case 'settings.selectFolder': return '选择文件夹'; - case 'settings.resetToDefault': return '重置为默认'; - case 'settings.currentPath': return ({required Object path}) => '当前: ${path}'; - case 'settings.downloadLocationChanged': return '下载位置已更改'; - case 'settings.downloadLocationReset': return '下载位置已重置为默认'; - case 'settings.downloadLocationInvalid': return '所选文件夹不可写入'; - case 'settings.downloadLocationSelectError': return '选择文件夹失败'; - case 'settings.downloadOnWifiOnly': return '仅在 WiFi 时下载'; - case 'settings.downloadOnWifiOnlyDescription': return '使用蜂窝数据时禁止下载'; - case 'settings.cellularDownloadBlocked': return '蜂窝数据下已禁用下载。请连接 WiFi 或更改设置。'; - case 'settings.maxVolume': return '最大音量'; - case 'settings.maxVolumeDescription': return '允许音量超过 100% 以适应安静的媒体'; - case 'settings.maxVolumePercent': return ({required Object percent}) => '${percent}%'; - case 'settings.maxVolumeHint': return '输入最大音量 (100-300)'; - case 'settings.discordRichPresence': return 'Discord 动态状态'; - case 'settings.discordRichPresenceDescription': return '在 Discord 上显示您正在观看的内容'; - case 'settings.matchContentFrameRate': return '匹配内容帧率'; - case 'settings.matchContentFrameRateDescription': return '调整显示刷新率以匹配视频内容,减少画面抖动并节省电量'; - 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 'hotkeys.actions.playPause': return '播放/暂停'; - case 'hotkeys.actions.volumeUp': return '增大音量'; - case 'hotkeys.actions.volumeDown': return '减小音量'; - case 'hotkeys.actions.seekForward': return ({required Object seconds}) => '快进 (${seconds}秒)'; - case 'hotkeys.actions.seekBackward': return ({required Object seconds}) => '快退 (${seconds}秒)'; - case 'hotkeys.actions.fullscreenToggle': return '切换全屏'; - case 'hotkeys.actions.muteToggle': return '切换静音'; - case 'hotkeys.actions.subtitleToggle': return '切换字幕'; - case 'hotkeys.actions.audioTrackNext': return '下一音轨'; - case 'hotkeys.actions.subtitleTrackNext': return '下一字幕轨'; - case 'hotkeys.actions.chapterNext': return '下一章节'; - case 'hotkeys.actions.chapterPrevious': return '上一章节'; - case 'hotkeys.actions.speedIncrease': return '加速'; - case 'hotkeys.actions.speedDecrease': return '减速'; - case 'hotkeys.actions.speedReset': return '重置速度'; - case 'hotkeys.actions.subSeekNext': return '跳转到下一字幕'; - case 'hotkeys.actions.subSeekPrev': 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.autoPlayNext': return '自动播放下一集'; - case 'videoControls.playNext': 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.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.pipButton': return '画中画模式'; - case 'videoControls.aspectRatioButton': return '宽高比'; - case 'videoControls.fullscreenButton': return '进入全屏'; - case 'videoControls.exitFullscreenButton': return '退出全屏'; - case 'videoControls.alwaysOnTopButton': 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.markedAsWatchedOffline': return '已标记为已观看 (将在联网时同步)'; - case 'messages.markedAsUnwatchedOffline': 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.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.noItemsAvailable': return '没有可用的项目'; - case 'messages.failedToCreatePlayQueue': return '创建播放队列失败'; - case 'messages.failedToCreatePlayQueueNoItems': return '创建播放队列失败 - 没有项目'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => '无法${action}: ${error}'; - 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 'mpvConfig.title': return 'MPV 配置'; - case 'mpvConfig.description': return '高级视频播放器设置'; - case 'mpvConfig.properties': return '属性'; - case 'mpvConfig.presets': return '预设'; - case 'mpvConfig.noProperties': return '未配置任何属性'; - case 'mpvConfig.noPresets': return '没有保存的预设'; - case 'mpvConfig.addProperty': return '添加属性'; - case 'mpvConfig.editProperty': return '编辑属性'; - case 'mpvConfig.deleteProperty': return '删除属性'; - case 'mpvConfig.propertyKey': return '属性键'; - case 'mpvConfig.propertyKeyHint': return '例如 hwdec, demuxer-max-bytes'; - case 'mpvConfig.propertyValue': return '属性值'; - case 'mpvConfig.propertyValueHint': return '例如 auto, 256000000'; - case 'mpvConfig.saveAsPreset': return '保存为预设...'; - case 'mpvConfig.presetName': return '预设名称'; - case 'mpvConfig.presetNameHint': return '输入此预设的名称'; - case 'mpvConfig.loadPreset': return '加载'; - case 'mpvConfig.deletePreset': return '删除'; - case 'mpvConfig.presetSaved': return '预设已保存'; - case 'mpvConfig.presetLoaded': return '预设已加载'; - case 'mpvConfig.presetDeleted': return '预设已删除'; - case 'mpvConfig.confirmDeletePreset': return '确定要删除此预设吗?'; - case 'mpvConfig.confirmDeleteProperty': return '确定要删除此属性吗?'; - case 'mpvConfig.entriesCount': return ({required Object count}) => '${count} 条目'; - case 'dialog.confirmAction': 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.play': return '播放'; - case 'discover.playEpisode': 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 '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.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.allServerConnectionsFailed': return '无法连接到任何服务器。请检查你的网络并重试。'; - case 'serverSelection.noServersFound': return '未找到服务器'; - case 'serverSelection.noServersFoundForAccount': return ({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器'; - 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.clearLogs': return '清除日志'; - case 'logs.copyLogs': 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 'navigation.downloads': return '下载'; - case 'downloads.title': return '下载'; - case 'downloads.manage': return '管理'; - case 'downloads.tvShows': return '电视剧'; - case 'downloads.movies': return '电影'; - case 'downloads.noDownloads': return '暂无下载'; - case 'downloads.noDownloadsDescription': return '下载的内容将在此处显示以供离线观看'; - case 'downloads.downloadNow': return '下载'; - case 'downloads.deleteDownload': return '删除下载'; - case 'downloads.retryDownload': return '重试下载'; - case 'downloads.downloadQueued': return '下载已排队'; - case 'downloads.episodesQueued': return ({required Object count}) => '${count} 集已加入下载队列'; - case 'downloads.downloadDeleted': return '下载已删除'; - case 'downloads.deleteConfirm': return ({required Object title}) => '确定要删除 "${title}" 吗?下载的文件将从您的设备中删除。'; - case 'downloads.deletingWithProgress': return ({required Object title, required Object current, required Object total}) => '正在删除 ${title}... (${current}/${total})'; - case 'playlists.title': return '播放列表'; - case 'playlists.noPlaylists': return '未找到播放列表'; - case 'playlists.create': return '创建播放列表'; - case 'playlists.playlistName': return '播放列表名称'; - case 'playlists.enterPlaylistName': return '输入播放列表名称'; - case 'playlists.delete': return '删除播放列表'; - case 'playlists.removeItem': return '从播放列表中移除'; - case 'playlists.smartPlaylist': 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.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.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.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}'; - case 'watchTogether.title': return '一起看'; - case 'watchTogether.description': return '与朋友和家人同步观看内容'; - case 'watchTogether.createSession': return '创建会话'; - case 'watchTogether.creating': return '创建中...'; - case 'watchTogether.joinSession': return '加入会话'; - case 'watchTogether.joining': return '加入中...'; - case 'watchTogether.controlMode': return '控制模式'; - case 'watchTogether.controlModeQuestion': return '谁可以控制播放?'; - case 'watchTogether.hostOnly': return '仅主持人'; - case 'watchTogether.anyone': return '任何人'; - case 'watchTogether.hostingSession': return '主持会话'; - case 'watchTogether.inSession': return '在会话中'; - case 'watchTogether.sessionCode': return '会话代码'; - case 'watchTogether.hostControlsPlayback': return '主持人控制播放'; - case 'watchTogether.anyoneCanControl': return '任何人都可以控制播放'; - case 'watchTogether.hostControls': return '主持人控制'; - case 'watchTogether.anyoneControls': return '任何人控制'; - case 'watchTogether.participants': return '参与者'; - case 'watchTogether.host': return '主持人'; - case 'watchTogether.hostBadge': return '主持人'; - case 'watchTogether.youAreHost': return '你是主持人'; - case 'watchTogether.watchingWithOthers': return '与他人一起观看'; - case 'watchTogether.endSession': return '结束会话'; - case 'watchTogether.leaveSession': return '离开会话'; - case 'watchTogether.endSessionQuestion': return '结束会话?'; - case 'watchTogether.leaveSessionQuestion': return '离开会话?'; - case 'watchTogether.endSessionConfirm': return '这将为所有参与者结束会话。'; - case 'watchTogether.leaveSessionConfirm': return '你将被移出会话。'; - case 'watchTogether.endSessionConfirmOverlay': return '这将为所有参与者结束观看会话。'; - case 'watchTogether.leaveSessionConfirmOverlay': return '你将断开与观看会话的连接。'; - case 'watchTogether.end': return '结束'; - case 'watchTogether.leave': return '离开'; - case 'watchTogether.syncing': return '同步中...'; - case 'watchTogether.participant': return '参与者'; - case 'watchTogether.joinWatchSession': return '加入观看会话'; - case 'watchTogether.enterCodeHint': return '输入8位代码'; - case 'watchTogether.pasteFromClipboard': return '从剪贴板粘贴'; - case 'watchTogether.pleaseEnterCode': return '请输入会话代码'; - case 'watchTogether.codeMustBe8Chars': return '会话代码必须是8个字符'; - case 'watchTogether.joinInstructions': return '输入主持人分享的会话代码以加入他们的观看会话。'; - case 'watchTogether.failedToCreate': return '创建会话失败'; - case 'watchTogether.failedToJoin': return '加入会话失败'; - case 'watchTogether.sessionCodeCopied': return '会话代码已复制到剪贴板'; - default: return null; - } - } -} diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart new file mode 100644 index 00000000..6bad5680 --- /dev/null +++ b/lib/i18n/strings_de.g.dart @@ -0,0 +1,1483 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsDe with BaseTranslations implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsDe({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.de, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsDe _root = this; // ignore: unused_field + + @override + TranslationsDe $copyWith({TranslationMetadata? meta}) => TranslationsDe(meta: meta ?? this.$meta); + + // Translations + @override late final _TranslationsAppDe app = _TranslationsAppDe._(_root); + @override late final _TranslationsAuthDe auth = _TranslationsAuthDe._(_root); + @override late final _TranslationsCommonDe common = _TranslationsCommonDe._(_root); + @override late final _TranslationsScreensDe screens = _TranslationsScreensDe._(_root); + @override late final _TranslationsUpdateDe update = _TranslationsUpdateDe._(_root); + @override late final _TranslationsSettingsDe settings = _TranslationsSettingsDe._(_root); + @override late final _TranslationsSearchDe search = _TranslationsSearchDe._(_root); + @override late final _TranslationsHotkeysDe hotkeys = _TranslationsHotkeysDe._(_root); + @override late final _TranslationsPinEntryDe pinEntry = _TranslationsPinEntryDe._(_root); + @override late final _TranslationsFileInfoDe fileInfo = _TranslationsFileInfoDe._(_root); + @override late final _TranslationsMediaMenuDe mediaMenu = _TranslationsMediaMenuDe._(_root); + @override late final _TranslationsAccessibilityDe accessibility = _TranslationsAccessibilityDe._(_root); + @override late final _TranslationsTooltipsDe tooltips = _TranslationsTooltipsDe._(_root); + @override late final _TranslationsVideoControlsDe videoControls = _TranslationsVideoControlsDe._(_root); + @override late final _TranslationsUserStatusDe userStatus = _TranslationsUserStatusDe._(_root); + @override late final _TranslationsMessagesDe messages = _TranslationsMessagesDe._(_root); + @override late final _TranslationsSubtitlingStylingDe subtitlingStyling = _TranslationsSubtitlingStylingDe._(_root); + @override late final _TranslationsMpvConfigDe mpvConfig = _TranslationsMpvConfigDe._(_root); + @override late final _TranslationsDialogDe dialog = _TranslationsDialogDe._(_root); + @override late final _TranslationsDiscoverDe discover = _TranslationsDiscoverDe._(_root); + @override late final _TranslationsErrorsDe errors = _TranslationsErrorsDe._(_root); + @override late final _TranslationsLibrariesDe libraries = _TranslationsLibrariesDe._(_root); + @override late final _TranslationsAboutDe about = _TranslationsAboutDe._(_root); + @override late final _TranslationsServerSelectionDe serverSelection = _TranslationsServerSelectionDe._(_root); + @override late final _TranslationsHubDetailDe hubDetail = _TranslationsHubDetailDe._(_root); + @override late final _TranslationsLogsDe logs = _TranslationsLogsDe._(_root); + @override late final _TranslationsLicensesDe licenses = _TranslationsLicensesDe._(_root); + @override late final _TranslationsNavigationDe navigation = _TranslationsNavigationDe._(_root); + @override late final _TranslationsDownloadsDe downloads = _TranslationsDownloadsDe._(_root); + @override late final _TranslationsPlaylistsDe playlists = _TranslationsPlaylistsDe._(_root); + @override late final _TranslationsCollectionsDe collections = _TranslationsCollectionsDe._(_root); + @override late final _TranslationsWatchTogetherDe watchTogether = _TranslationsWatchTogetherDe._(_root); +} + +// Path: app +class _TranslationsAppDe implements TranslationsAppEn { + _TranslationsAppDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Lädt...'; +} + +// Path: auth +class _TranslationsAuthDe implements TranslationsAuthEn { + _TranslationsAuthDe._(this._root); + + final TranslationsDe _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.'; +} + +// Path: common +class _TranslationsCommonDe implements TranslationsCommonEn { + _TranslationsCommonDe._(this._root); + + final TranslationsDe _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 logout => 'Abmelden'; + @override String get unknown => 'Unbekannt'; + @override String get refresh => 'Aktualisieren'; + @override String get yes => 'Ja'; + @override String get no => 'Nein'; + @override String get delete => 'Löschen'; + @override String get shuffle => 'Zufall'; + @override String get addTo => 'Hinzufügen zu...'; +} + +// Path: screens +class _TranslationsScreensDe implements TranslationsScreensEn { + _TranslationsScreensDe._(this._root); + + final TranslationsDe _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 mpvConfig => 'MPV-Konfiguration'; + @override String get search => 'Suche'; + @override String get logs => 'Protokolle'; +} + +// Path: update +class _TranslationsUpdateDe implements TranslationsUpdateEn { + _TranslationsUpdateDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: settings +class _TranslationsSettingsDe implements TranslationsSettingsEn { + _TranslationsSettingsDe._(this._root); + + final TranslationsDe _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 advanced => 'Erweitert'; + @override String get episodePosterMode => 'Episoden-Poster-Stil'; + @override String get seriesPoster => 'Serienposter'; + @override String get seriesPosterDescription => 'Zeige das Serienposter für alle Episoden'; + @override String get seasonPoster => 'Staffelposter'; + @override String get seasonPosterDescription => 'Zeige das staffelspezifische Poster für Episoden'; + @override String get episodeThumbnail => 'Episoden-Miniatur'; + @override String get episodeThumbnailDescription => 'Zeige 16:9 Episoden-Vorschaubilder'; + @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 showHeroSection => 'Hero-Bereich anzeigen'; + @override String get useGlobalHubs => 'Plex-Startseiten-Layout verwenden'; + @override String get useGlobalHubsDescription => 'Zeigt Startseiten-Hubs wie der offizielle Plex-Client. Wenn deaktiviert, werden stattdessen Empfehlungen pro Bibliothek angezeigt.'; + @override String get showServerNameOnHubs => 'Servername bei Hubs anzeigen'; + @override String get showServerNameOnHubsDescription => 'Zeigt immer den Servernamen in Hub-Titeln an. Wenn deaktiviert, nur bei doppelten Hub-Namen.'; + @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 videoPlayerControls => 'Videoplayer-Steuerung'; + @override String get keyboardShortcuts => 'Tastenkürzel'; + @override String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; + @override String get videoPlayerNavigation => 'Videoplayer-Navigation'; + @override String get videoPlayerNavigationDescription => 'Pfeiltasten zur Navigation der Videoplayer-Steuerung verwenden'; + @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'; + @override String get downloads => 'Downloads'; + @override String get downloadLocationDescription => 'Speicherort für heruntergeladene Inhalte wählen'; + @override String get downloadLocationDefault => 'Standard (App-Speicher)'; + @override String get downloadLocationCustom => 'Benutzerdefinierter Speicherort'; + @override String get selectFolder => 'Ordner auswählen'; + @override String get resetToDefault => 'Auf Standard zurücksetzen'; + @override String currentPath({required Object path}) => 'Aktuell: ${path}'; + @override String get downloadLocationChanged => 'Download-Speicherort geändert'; + @override String get downloadLocationReset => 'Download-Speicherort auf Standard zurückgesetzt'; + @override String get downloadLocationInvalid => 'Ausgewählter Ordner ist nicht beschreibbar'; + @override String get downloadLocationSelectError => 'Ordnerauswahl fehlgeschlagen'; + @override String get downloadOnWifiOnly => 'Nur über WLAN herunterladen'; + @override String get downloadOnWifiOnlyDescription => 'Downloads über mobile Daten verhindern'; + @override String get cellularDownloadBlocked => 'Downloads sind über mobile Daten deaktiviert. Verbinde dich mit einem WLAN oder ändere die Einstellung.'; + @override String get maxVolume => 'Maximale Lautstärke'; + @override String get maxVolumeDescription => 'Lautstärke über 100% für leise Medien erlauben'; + @override String maxVolumePercent({required Object percent}) => '${percent}%'; + @override String get maxVolumeHint => 'Maximale Lautstärke eingeben (100-300)'; + @override String get discordRichPresence => 'Discord Rich Presence'; + @override String get discordRichPresenceDescription => 'Zeige auf Discord, was du gerade schaust'; + @override String get matchContentFrameRate => 'Inhalts-Bildrate anpassen'; + @override String get matchContentFrameRateDescription => 'Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku'; +} + +// Path: search +class _TranslationsSearchDe implements TranslationsSearchEn { + _TranslationsSearchDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: hotkeys +class _TranslationsHotkeysDe implements TranslationsHotkeysEn { + _TranslationsHotkeysDe._(this._root); + + final TranslationsDe _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'; + @override late final _TranslationsHotkeysActionsDe actions = _TranslationsHotkeysActionsDe._(_root); +} + +// Path: pinEntry +class _TranslationsPinEntryDe implements TranslationsPinEntryEn { + _TranslationsPinEntryDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get enterPin => 'PIN eingeben'; + @override String get showPin => 'PIN anzeigen'; + @override String get hidePin => 'PIN verbergen'; +} + +// Path: fileInfo +class _TranslationsFileInfoDe implements TranslationsFileInfoEn { + _TranslationsFileInfoDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: mediaMenu +class _TranslationsMediaMenuDe implements TranslationsMediaMenuEn { + _TranslationsMediaMenuDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: accessibility +class _TranslationsAccessibilityDe implements TranslationsAccessibilityEn { + _TranslationsAccessibilityDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: tooltips +class _TranslationsTooltipsDe implements TranslationsTooltipsEn { + _TranslationsTooltipsDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get shufflePlay => 'Zufallswiedergabe'; + @override String get markAsWatched => 'Als gesehen markieren'; + @override String get markAsUnwatched => 'Als ungesehen markieren'; +} + +// Path: videoControls +class _TranslationsVideoControlsDe implements TranslationsVideoControlsEn { + _TranslationsVideoControlsDe._(this._root); + + final TranslationsDe _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 autoPlayNext => 'Nächstes automatisch abspielen'; + @override String get playNext => 'Nächstes abspielen'; + @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 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 pipButton => 'Bild-in-Bild Modus'; + @override String get aspectRatioButton => 'Seitenverhältnis'; + @override String get fullscreenButton => 'Vollbild aktivieren'; + @override String get exitFullscreenButton => 'Vollbild verlassen'; + @override String get alwaysOnTopButton => 'Immer im Vordergrund'; + @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 _TranslationsUserStatusDe implements TranslationsUserStatusEn { + _TranslationsUserStatusDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: messages +class _TranslationsMessagesDe implements TranslationsMessagesEn { + _TranslationsMessagesDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get markedAsWatched => 'Als gesehen markiert'; + @override String get markedAsUnwatched => 'Als ungesehen markiert'; + @override String get markedAsWatchedOffline => 'Als gesehen markiert (wird synchronisiert, wenn online)'; + @override String get markedAsUnwatchedOffline => 'Als ungesehen markiert (wird synchronisiert, wenn online)'; + @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 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 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: subtitlingStyling +class _TranslationsSubtitlingStylingDe implements TranslationsSubtitlingStylingEn { + _TranslationsSubtitlingStylingDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: mpvConfig +class _TranslationsMpvConfigDe implements TranslationsMpvConfigEn { + _TranslationsMpvConfigDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get title => 'MPV-Konfiguration'; + @override String get description => 'Erweiterte Videoplayer-Einstellungen'; + @override String get properties => 'Eigenschaften'; + @override String get presets => 'Voreinstellungen'; + @override String get noProperties => 'Keine Eigenschaften konfiguriert'; + @override String get noPresets => 'Keine gespeicherten Voreinstellungen'; + @override String get addProperty => 'Eigenschaft hinzufügen'; + @override String get editProperty => 'Eigenschaft bearbeiten'; + @override String get deleteProperty => 'Eigenschaft löschen'; + @override String get propertyKey => 'Eigenschaftsschlüssel'; + @override String get propertyKeyHint => 'z.B. hwdec, demuxer-max-bytes'; + @override String get propertyValue => 'Eigenschaftswert'; + @override String get propertyValueHint => 'z.B. auto, 256000000'; + @override String get saveAsPreset => 'Als Voreinstellung speichern...'; + @override String get presetName => 'Name der Voreinstellung'; + @override String get presetNameHint => 'Namen für diese Voreinstellung eingeben'; + @override String get loadPreset => 'Laden'; + @override String get deletePreset => 'Löschen'; + @override String get presetSaved => 'Voreinstellung gespeichert'; + @override String get presetLoaded => 'Voreinstellung geladen'; + @override String get presetDeleted => 'Voreinstellung gelöscht'; + @override String get confirmDeletePreset => 'Möchten Sie diese Voreinstellung wirklich löschen?'; + @override String get confirmDeleteProperty => 'Möchten Sie diese Eigenschaft wirklich löschen?'; + @override String entriesCount({required Object count}) => '${count} Einträge'; +} + +// Path: dialog +class _TranslationsDialogDe implements TranslationsDialogEn { + _TranslationsDialogDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get confirmAction => 'Aktion bestätigen'; + @override String get cancel => 'Abbrechen'; + @override String get playNow => 'Jetzt abspielen'; +} + +// Path: discover +class _TranslationsDiscoverDe implements TranslationsDiscoverEn { + _TranslationsDiscoverDe._(this._root); + + final TranslationsDe _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 play => 'Abspielen'; + @override String playEpisode({required Object season, required Object episode}) => 'S${season}E${episode}'; + @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 _TranslationsErrorsDe implements TranslationsErrorsEn { + _TranslationsErrorsDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: libraries +class _TranslationsLibrariesDe implements TranslationsLibrariesEn { + _TranslationsLibrariesDe._(this._root); + + final TranslationsDe _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 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 _TranslationsLibrariesTabsDe tabs = _TranslationsLibrariesTabsDe._(_root); + @override late final _TranslationsLibrariesGroupingsDe groupings = _TranslationsLibrariesGroupingsDe._(_root); +} + +// Path: about +class _TranslationsAboutDe implements TranslationsAboutEn { + _TranslationsAboutDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: serverSelection +class _TranslationsServerSelectionDe implements TranslationsServerSelectionEn { + _TranslationsServerSelectionDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get allServerConnectionsFailed => 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; + @override String get noServersFound => 'Keine Server gefunden'; + @override String noServersFoundForAccount({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})'; + @override String failedToLoadServers({required Object error}) => 'Server konnten nicht geladen werden: ${error}'; +} + +// Path: hubDetail +class _TranslationsHubDetailDe implements TranslationsHubDetailEn { + _TranslationsHubDetailDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: logs +class _TranslationsLogsDe implements TranslationsLogsEn { + _TranslationsLogsDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get clearLogs => 'Protokolle löschen'; + @override String get copyLogs => 'Protokolle kopieren'; + @override String get error => 'Fehler:'; + @override String get stackTrace => 'Stacktrace:'; +} + +// Path: licenses +class _TranslationsLicensesDe implements TranslationsLicensesEn { + _TranslationsLicensesDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: navigation +class _TranslationsNavigationDe implements TranslationsNavigationEn { + _TranslationsNavigationDe._(this._root); + + final TranslationsDe _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'; + @override String get downloads => 'Downloads'; +} + +// Path: downloads +class _TranslationsDownloadsDe implements TranslationsDownloadsEn { + _TranslationsDownloadsDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get title => 'Downloads'; + @override String get manage => 'Verwalten'; + @override String get tvShows => 'Serien'; + @override String get movies => 'Filme'; + @override String get noDownloads => 'Noch keine Downloads'; + @override String get noDownloadsDescription => 'Heruntergeladene Inhalte werden hier für die Offline-Wiedergabe angezeigt'; + @override String get downloadNow => 'Herunterladen'; + @override String get deleteDownload => 'Download löschen'; + @override String get retryDownload => 'Download wiederholen'; + @override String get downloadQueued => 'Download in Warteschlange'; + @override String episodesQueued({required Object count}) => '${count} Episoden zum Download hinzugefügt'; + @override String get downloadDeleted => 'Download gelöscht'; + @override String deleteConfirm({required Object title}) => 'Möchtest du "${title}" wirklich löschen? Die heruntergeladene Datei wird von deinem Gerät entfernt.'; + @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Lösche ${title}... (${current} von ${total})'; +} + +// Path: playlists +class _TranslationsPlaylistsDe implements TranslationsPlaylistsEn { + _TranslationsPlaylistsDe._(this._root); + + final TranslationsDe _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 playlistName => 'Name der Wiedergabeliste'; + @override String get enterPlaylistName => 'Name der Wiedergabeliste eingeben'; + @override String get delete => 'Wiedergabeliste löschen'; + @override String get removeItem => 'Aus Wiedergabeliste entfernen'; + @override String get smartPlaylist => 'Intelligente 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 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 _TranslationsCollectionsDe implements TranslationsCollectionsEn { + _TranslationsCollectionsDe._(this._root); + + final TranslationsDe _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 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 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: watchTogether +class _TranslationsWatchTogetherDe implements TranslationsWatchTogetherEn { + _TranslationsWatchTogetherDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get title => 'Gemeinsam Schauen'; + @override String get description => 'Inhalte synchron mit Freunden und Familie schauen'; + @override String get createSession => 'Sitzung Erstellen'; + @override String get creating => 'Erstellen...'; + @override String get joinSession => 'Sitzung Beitreten'; + @override String get joining => 'Beitreten...'; + @override String get controlMode => 'Steuerungsmodus'; + @override String get controlModeQuestion => 'Wer kann die Wiedergabe steuern?'; + @override String get hostOnly => 'Nur Host'; + @override String get anyone => 'Alle'; + @override String get hostingSession => 'Sitzung Hosten'; + @override String get inSession => 'In Sitzung'; + @override String get sessionCode => 'Sitzungscode'; + @override String get hostControlsPlayback => 'Host steuert die Wiedergabe'; + @override String get anyoneCanControl => 'Alle können die Wiedergabe steuern'; + @override String get hostControls => 'Host steuert'; + @override String get anyoneControls => 'Alle steuern'; + @override String get participants => 'Teilnehmer'; + @override String get host => 'Host'; + @override String get hostBadge => 'HOST'; + @override String get youAreHost => 'Du bist der Host'; + @override String get watchingWithOthers => 'Mit anderen schauen'; + @override String get endSession => 'Sitzung Beenden'; + @override String get leaveSession => 'Sitzung Verlassen'; + @override String get endSessionQuestion => 'Sitzung Beenden?'; + @override String get leaveSessionQuestion => 'Sitzung Verlassen?'; + @override String get endSessionConfirm => 'Dies beendet die Sitzung für alle Teilnehmer.'; + @override String get leaveSessionConfirm => 'Du wirst aus der Sitzung entfernt.'; + @override String get endSessionConfirmOverlay => 'Dies beendet die Schausitzung für alle Teilnehmer.'; + @override String get leaveSessionConfirmOverlay => 'Du wirst von der Schausitzung getrennt.'; + @override String get end => 'Beenden'; + @override String get leave => 'Verlassen'; + @override String get syncing => 'Synchronisieren...'; + @override String get participant => 'Teilnehmer'; + @override String get joinWatchSession => 'Schausitzung Beitreten'; + @override String get enterCodeHint => '8-stelligen Code eingeben'; + @override String get pasteFromClipboard => 'Aus Zwischenablage einfügen'; + @override String get pleaseEnterCode => 'Bitte gib einen Sitzungscode ein'; + @override String get codeMustBe8Chars => 'Sitzungscode muss 8 Zeichen haben'; + @override String get joinInstructions => 'Gib den vom Host geteilten Sitzungscode ein, um seiner Schausitzung beizutreten.'; + @override String get failedToCreate => 'Sitzung konnte nicht erstellt werden'; + @override String get failedToJoin => 'Sitzung konnte nicht beigetreten werden'; + @override String get sessionCodeCopied => 'Sitzungscode in Zwischenablage kopiert'; +} + +// Path: hotkeys.actions +class _TranslationsHotkeysActionsDe implements TranslationsHotkeysActionsEn { + _TranslationsHotkeysActionsDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get playPause => 'Wiedergabe/Pause'; + @override String get volumeUp => 'Lauter'; + @override String get volumeDown => 'Leiser'; + @override String seekForward({required Object seconds}) => 'Vorspulen (${seconds}s)'; + @override String seekBackward({required Object seconds}) => 'Zurückspulen (${seconds}s)'; + @override String get fullscreenToggle => 'Vollbild umschalten'; + @override String get muteToggle => 'Stumm umschalten'; + @override String get subtitleToggle => 'Untertitel umschalten'; + @override String get audioTrackNext => 'Nächste Audiospur'; + @override String get subtitleTrackNext => 'Nächste Untertitelspur'; + @override String get chapterNext => 'Nächstes Kapitel'; + @override String get chapterPrevious => 'Vorheriges Kapitel'; + @override String get speedIncrease => 'Geschwindigkeit erhöhen'; + @override String get speedDecrease => 'Geschwindigkeit verringern'; + @override String get speedReset => 'Geschwindigkeit zurücksetzen'; + @override String get subSeekNext => 'Zum nächsten Untertitel springen'; + @override String get subSeekPrev => 'Zum vorherigen Untertitel springen'; +} + +// Path: libraries.tabs +class _TranslationsLibrariesTabsDe implements TranslationsLibrariesTabsEn { + _TranslationsLibrariesTabsDe._(this._root); + + final TranslationsDe _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'; +} + +// Path: libraries.groupings +class _TranslationsLibrariesGroupingsDe implements TranslationsLibrariesGroupingsEn { + _TranslationsLibrariesGroupingsDe._(this._root); + + final TranslationsDe _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'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsDe { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => 'Lädt...', + 'auth.signInWithPlex' => 'Mit Plex anmelden', + 'auth.showQRCode' => 'QR-Code anzeigen', + 'auth.cancel' => 'Abbrechen', + 'auth.authenticate' => 'Authentifizieren', + 'auth.retry' => 'Erneut versuchen', + 'auth.debugEnterToken' => 'Debug: Plex-Token eingeben', + 'auth.plexTokenLabel' => 'Plex-Auth-Token', + 'auth.plexTokenHint' => 'Plex.tv-Token eingeben', + 'auth.authenticationTimeout' => 'Authentifizierung abgelaufen. Bitte erneut versuchen.', + 'auth.scanQRCodeInstruction' => 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.', + 'auth.waitingForAuth' => 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.', + 'common.cancel' => 'Abbrechen', + 'common.save' => 'Speichern', + 'common.close' => 'Schließen', + 'common.clear' => 'Leeren', + 'common.reset' => 'Zurücksetzen', + 'common.later' => 'Später', + 'common.submit' => 'Senden', + 'common.confirm' => 'Bestätigen', + 'common.retry' => 'Erneut versuchen', + 'common.logout' => 'Abmelden', + 'common.unknown' => 'Unbekannt', + 'common.refresh' => 'Aktualisieren', + 'common.yes' => 'Ja', + 'common.no' => 'Nein', + 'common.delete' => 'Löschen', + 'common.shuffle' => 'Zufall', + 'common.addTo' => 'Hinzufügen zu...', + 'screens.licenses' => 'Lizenzen', + 'screens.selectServer' => 'Server auswählen', + 'screens.switchProfile' => 'Profil wechseln', + 'screens.subtitleStyling' => 'Untertitel-Stil', + 'screens.mpvConfig' => 'MPV-Konfiguration', + 'screens.search' => 'Suche', + 'screens.logs' => 'Protokolle', + 'update.available' => 'Update verfügbar', + 'update.versionAvailable' => ({required Object version}) => 'Version ${version} ist verfügbar', + 'update.currentVersion' => ({required Object version}) => 'Aktuell: ${version}', + 'update.skipVersion' => 'Diese Version überspringen', + 'update.viewRelease' => 'Release anzeigen', + 'update.latestVersion' => 'Aktuellste Version installiert', + 'update.checkFailed' => 'Fehler bei der Updateprüfung', + 'settings.title' => 'Einstellungen', + 'settings.language' => 'Sprache', + 'settings.theme' => 'Design', + 'settings.appearance' => 'Darstellung', + 'settings.videoPlayback' => 'Videowiedergabe', + 'settings.advanced' => 'Erweitert', + 'settings.episodePosterMode' => 'Episoden-Poster-Stil', + 'settings.seriesPoster' => 'Serienposter', + 'settings.seriesPosterDescription' => 'Zeige das Serienposter für alle Episoden', + 'settings.seasonPoster' => 'Staffelposter', + 'settings.seasonPosterDescription' => 'Zeige das staffelspezifische Poster für Episoden', + 'settings.episodeThumbnail' => 'Episoden-Miniatur', + 'settings.episodeThumbnailDescription' => 'Zeige 16:9 Episoden-Vorschaubilder', + 'settings.showHeroSectionDescription' => 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen', + 'settings.secondsLabel' => 'Sekunden', + 'settings.minutesLabel' => 'Minuten', + 'settings.secondsShort' => 's', + 'settings.minutesShort' => 'm', + 'settings.durationHint' => ({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})', + 'settings.systemTheme' => 'System', + 'settings.systemThemeDescription' => 'Systemeinstellungen folgen', + 'settings.lightTheme' => 'Hell', + 'settings.darkTheme' => 'Dunkel', + 'settings.libraryDensity' => 'Mediathekdichte', + 'settings.compact' => 'Kompakt', + 'settings.compactDescription' => 'Kleinere Karten, mehr Elemente sichtbar', + 'settings.normal' => 'Normal', + 'settings.normalDescription' => 'Standardgröße', + 'settings.comfortable' => 'Großzügig', + 'settings.comfortableDescription' => 'Größere Karten, weniger Elemente sichtbar', + 'settings.viewMode' => 'Ansichtsmodus', + 'settings.gridView' => 'Raster', + 'settings.gridViewDescription' => 'Elemente im Raster anzeigen', + 'settings.listView' => 'Liste', + 'settings.listViewDescription' => 'Elemente in Listenansicht anzeigen', + 'settings.showHeroSection' => 'Hero-Bereich anzeigen', + 'settings.useGlobalHubs' => 'Plex-Startseiten-Layout verwenden', + 'settings.useGlobalHubsDescription' => 'Zeigt Startseiten-Hubs wie der offizielle Plex-Client. Wenn deaktiviert, werden stattdessen Empfehlungen pro Bibliothek angezeigt.', + 'settings.showServerNameOnHubs' => 'Servername bei Hubs anzeigen', + 'settings.showServerNameOnHubsDescription' => 'Zeigt immer den Servernamen in Hub-Titeln an. Wenn deaktiviert, nur bei doppelten Hub-Namen.', + 'settings.hardwareDecoding' => 'Hardware-Decodierung', + 'settings.hardwareDecodingDescription' => 'Hardwarebeschleunigung verwenden, sofern verfügbar', + 'settings.bufferSize' => 'Puffergröße', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => 'Untertitel-Stil', + 'settings.subtitleStylingDescription' => 'Aussehen von Untertiteln anpassen', + 'settings.smallSkipDuration' => 'Kleine Sprungdauer', + 'settings.largeSkipDuration' => 'Große Sprungdauer', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds} Sekunden', + 'settings.defaultSleepTimer' => 'Standard-Sleep-Timer', + 'settings.minutesUnit' => ({required Object minutes}) => '${minutes} Minuten', + 'settings.rememberTrackSelections' => 'Spurauswahl pro Serie/Film merken', + 'settings.rememberTrackSelectionsDescription' => 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert', + 'settings.videoPlayerControls' => 'Videoplayer-Steuerung', + 'settings.keyboardShortcuts' => 'Tastenkürzel', + 'settings.keyboardShortcutsDescription' => 'Tastenkürzel anpassen', + 'settings.videoPlayerNavigation' => 'Videoplayer-Navigation', + 'settings.videoPlayerNavigationDescription' => 'Pfeiltasten zur Navigation der Videoplayer-Steuerung verwenden', + 'settings.debugLogging' => 'Debug-Protokollierung', + 'settings.debugLoggingDescription' => 'Detaillierte Protokolle zur Fehleranalyse aktivieren', + 'settings.viewLogs' => 'Protokolle anzeigen', + 'settings.viewLogsDescription' => 'App-Protokolle anzeigen', + 'settings.clearCache' => 'Cache löschen', + 'settings.clearCacheDescription' => 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.', + 'settings.clearCacheSuccess' => 'Cache erfolgreich gelöscht', + 'settings.resetSettings' => 'Einstellungen zurücksetzen', + 'settings.resetSettingsDescription' => 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.', + 'settings.resetSettingsSuccess' => 'Einstellungen erfolgreich zurückgesetzt', + 'settings.shortcutsReset' => 'Tastenkürzel auf Standard zurückgesetzt', + 'settings.about' => 'Über', + 'settings.aboutDescription' => 'App-Informationen und Lizenzen', + 'settings.updates' => 'Updates', + 'settings.updateAvailable' => 'Update verfügbar', + 'settings.checkForUpdates' => 'Nach Updates suchen', + 'settings.validationErrorEnterNumber' => 'Bitte eine gültige Zahl eingeben', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Tastenkürzel bereits zugewiesen an ${action}', + 'settings.shortcutUpdated' => ({required Object action}) => 'Tastenkürzel aktualisiert für ${action}', + 'settings.autoSkip' => 'Automatisches Überspringen', + 'settings.autoSkipIntro' => 'Intro automatisch überspringen', + 'settings.autoSkipIntroDescription' => 'Intro-Marker nach wenigen Sekunden automatisch überspringen', + 'settings.autoSkipCredits' => 'Abspann automatisch überspringen', + 'settings.autoSkipCreditsDescription' => 'Abspann automatisch überspringen und nächste Episode abspielen', + 'settings.autoSkipDelay' => 'Verzögerung für automatisches Überspringen', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => '${seconds} Sekunden vor dem automatischen Überspringen warten', + 'settings.downloads' => 'Downloads', + 'settings.downloadLocationDescription' => 'Speicherort für heruntergeladene Inhalte wählen', + 'settings.downloadLocationDefault' => 'Standard (App-Speicher)', + 'settings.downloadLocationCustom' => 'Benutzerdefinierter Speicherort', + 'settings.selectFolder' => 'Ordner auswählen', + 'settings.resetToDefault' => 'Auf Standard zurücksetzen', + 'settings.currentPath' => ({required Object path}) => 'Aktuell: ${path}', + 'settings.downloadLocationChanged' => 'Download-Speicherort geändert', + 'settings.downloadLocationReset' => 'Download-Speicherort auf Standard zurückgesetzt', + 'settings.downloadLocationInvalid' => 'Ausgewählter Ordner ist nicht beschreibbar', + 'settings.downloadLocationSelectError' => 'Ordnerauswahl fehlgeschlagen', + 'settings.downloadOnWifiOnly' => 'Nur über WLAN herunterladen', + 'settings.downloadOnWifiOnlyDescription' => 'Downloads über mobile Daten verhindern', + 'settings.cellularDownloadBlocked' => 'Downloads sind über mobile Daten deaktiviert. Verbinde dich mit einem WLAN oder ändere die Einstellung.', + 'settings.maxVolume' => 'Maximale Lautstärke', + 'settings.maxVolumeDescription' => 'Lautstärke über 100% für leise Medien erlauben', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => 'Maximale Lautstärke eingeben (100-300)', + 'settings.discordRichPresence' => 'Discord Rich Presence', + 'settings.discordRichPresenceDescription' => 'Zeige auf Discord, was du gerade schaust', + 'settings.matchContentFrameRate' => 'Inhalts-Bildrate anpassen', + 'settings.matchContentFrameRateDescription' => 'Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku', + 'search.hint' => 'Filme, Serien, Musik suchen...', + 'search.tryDifferentTerm' => 'Anderen Suchbegriff versuchen', + 'search.searchYourMedia' => 'In den eigenen Medien suchen', + 'search.enterTitleActorOrKeyword' => 'Titel, Schauspieler oder Stichwort eingeben', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}', + 'hotkeys.clearShortcut' => 'Kürzel löschen', + 'hotkeys.actions.playPause' => 'Wiedergabe/Pause', + 'hotkeys.actions.volumeUp' => 'Lauter', + 'hotkeys.actions.volumeDown' => 'Leiser', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => 'Vorspulen (${seconds}s)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => 'Zurückspulen (${seconds}s)', + 'hotkeys.actions.fullscreenToggle' => 'Vollbild umschalten', + 'hotkeys.actions.muteToggle' => 'Stumm umschalten', + 'hotkeys.actions.subtitleToggle' => 'Untertitel umschalten', + 'hotkeys.actions.audioTrackNext' => 'Nächste Audiospur', + 'hotkeys.actions.subtitleTrackNext' => 'Nächste Untertitelspur', + 'hotkeys.actions.chapterNext' => 'Nächstes Kapitel', + 'hotkeys.actions.chapterPrevious' => 'Vorheriges Kapitel', + 'hotkeys.actions.speedIncrease' => 'Geschwindigkeit erhöhen', + 'hotkeys.actions.speedDecrease' => 'Geschwindigkeit verringern', + 'hotkeys.actions.speedReset' => 'Geschwindigkeit zurücksetzen', + 'hotkeys.actions.subSeekNext' => 'Zum nächsten Untertitel springen', + 'hotkeys.actions.subSeekPrev' => 'Zum vorherigen Untertitel springen', + 'pinEntry.enterPin' => 'PIN eingeben', + 'pinEntry.showPin' => 'PIN anzeigen', + 'pinEntry.hidePin' => 'PIN verbergen', + 'fileInfo.title' => 'Dateiinfo', + 'fileInfo.video' => 'Video', + 'fileInfo.audio' => 'Audio', + 'fileInfo.file' => 'Datei', + 'fileInfo.advanced' => 'Erweitert', + 'fileInfo.codec' => 'Codec', + 'fileInfo.resolution' => 'Auflösung', + 'fileInfo.bitrate' => 'Bitrate', + 'fileInfo.frameRate' => 'Bildrate', + 'fileInfo.aspectRatio' => 'Seitenverhältnis', + 'fileInfo.profile' => 'Profil', + 'fileInfo.bitDepth' => 'Farbtiefe', + 'fileInfo.colorSpace' => 'Farbraum', + 'fileInfo.colorRange' => 'Farbbereich', + 'fileInfo.colorPrimaries' => 'Primärfarben', + 'fileInfo.chromaSubsampling' => 'Chroma-Subsampling', + 'fileInfo.channels' => 'Kanäle', + 'fileInfo.path' => 'Pfad', + 'fileInfo.size' => 'Größe', + 'fileInfo.container' => 'Container', + 'fileInfo.duration' => 'Dauer', + 'fileInfo.optimizedForStreaming' => 'Für Streaming optimiert', + 'fileInfo.has64bitOffsets' => '64-Bit-Offsets', + 'mediaMenu.markAsWatched' => 'Als gesehen markieren', + 'mediaMenu.markAsUnwatched' => 'Als ungesehen markieren', + 'mediaMenu.removeFromContinueWatching' => 'Aus ‚Weiterschauen‘ entfernen', + 'mediaMenu.goToSeries' => 'Zur Serie', + 'mediaMenu.goToSeason' => 'Zur Staffel', + 'mediaMenu.shufflePlay' => 'Zufallswiedergabe', + 'mediaMenu.fileInfo' => 'Dateiinfo', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, Film', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, Serie', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => 'angesehen', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} Prozent angesehen', + 'accessibility.mediaCardUnwatched' => 'ungeschaut', + 'accessibility.tapToPlay' => 'Zum Abspielen tippen', + 'tooltips.shufflePlay' => 'Zufallswiedergabe', + 'tooltips.markAsWatched' => 'Als gesehen markieren', + 'tooltips.markAsUnwatched' => 'Als ungesehen markieren', + 'videoControls.audioLabel' => 'Audio', + 'videoControls.subtitlesLabel' => 'Untertitel', + 'videoControls.resetToZero' => 'Auf 0 ms zurücksetzen', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} spielt später', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} spielt früher', + 'videoControls.noOffset' => 'Kein Offset', + 'videoControls.letterbox' => 'Letterbox', + 'videoControls.fillScreen' => 'Bild füllen', + 'videoControls.stretch' => 'Strecken', + 'videoControls.lockRotation' => 'Rotation sperren', + 'videoControls.unlockRotation' => 'Rotation entsperren', + 'videoControls.sleepTimer' => 'Schlaftimer', + 'videoControls.timerActive' => 'Schlaftimer aktiv', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert', + 'videoControls.sleepTimerCompleted' => 'Schlaftimer abgelaufen – Wiedergabe pausiert', + 'videoControls.autoPlayNext' => 'Nächstes automatisch abspielen', + 'videoControls.playNext' => 'Nächstes abspielen', + 'videoControls.playButton' => 'Wiedergeben', + 'videoControls.pauseButton' => 'Pause', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} Sekunden zurück', + 'videoControls.seekForwardButton' => ({required Object seconds}) => '${seconds} Sekunden vor', + 'videoControls.previousButton' => 'Vorherige Episode', + 'videoControls.nextButton' => 'Nächste Episode', + 'videoControls.previousChapterButton' => 'Vorheriges Kapitel', + 'videoControls.nextChapterButton' => 'Nächstes Kapitel', + 'videoControls.muteButton' => 'Stumm schalten', + 'videoControls.unmuteButton' => 'Stummschaltung aufheben', + 'videoControls.settingsButton' => 'Videoeinstellungen', + 'videoControls.audioTrackButton' => 'Tonspuren', + 'videoControls.subtitlesButton' => 'Untertitel', + 'videoControls.chaptersButton' => 'Kapitel', + 'videoControls.versionsButton' => 'Videoversionen', + 'videoControls.pipButton' => 'Bild-in-Bild Modus', + 'videoControls.aspectRatioButton' => 'Seitenverhältnis', + 'videoControls.fullscreenButton' => 'Vollbild aktivieren', + 'videoControls.exitFullscreenButton' => 'Vollbild verlassen', + 'videoControls.alwaysOnTopButton' => 'Immer im Vordergrund', + 'videoControls.rotationLockButton' => 'Dreh­sperre', + 'videoControls.timelineSlider' => 'Video-Zeitleiste', + 'videoControls.volumeSlider' => 'Lautstärkepegel', + 'videoControls.backButton' => 'Zurück', + 'userStatus.admin' => 'Eigentümer', + 'userStatus.restricted' => 'Eingeschränkt', + 'userStatus.protected' => 'Geschützt', + 'userStatus.current' => 'AKTUELL', + 'messages.markedAsWatched' => 'Als gesehen markiert', + 'messages.markedAsUnwatched' => 'Als ungesehen markiert', + 'messages.markedAsWatchedOffline' => 'Als gesehen markiert (wird synchronisiert, wenn online)', + 'messages.markedAsUnwatchedOffline' => 'Als ungesehen markiert (wird synchronisiert, wenn online)', + 'messages.removedFromContinueWatching' => 'Aus ‚Weiterschauen\' entfernt', + 'messages.errorLoading' => ({required Object error}) => 'Fehler: ${error}', + 'messages.fileInfoNotAvailable' => 'Dateiinfo nicht verfügbar', + 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}', + 'messages.errorLoadingSeries' => 'Fehler beim Laden der Serie', + 'messages.errorLoadingSeason' => 'Fehler beim Laden der Staffel', + 'messages.musicNotSupported' => 'Musikwiedergabe wird noch nicht unterstützt', + 'messages.logsCleared' => 'Protokolle gelöscht', + 'messages.logsCopied' => 'Protokolle in Zwischenablage kopiert', + 'messages.noLogsAvailable' => 'Keine Protokolle verfügbar', + 'messages.libraryScanning' => ({required Object title}) => 'Scanne „${title}“...', + 'messages.libraryScanStarted' => ({required Object title}) => 'Mediathekscan gestartet für „${title}“', + 'messages.libraryScanFailed' => ({required Object error}) => 'Fehler beim Scannen der Mediathek: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => 'Metadaten werden aktualisiert für „${title}“...', + 'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadaten-Aktualisierung gestartet für „${title}“', + 'messages.metadataRefreshFailed' => ({required Object error}) => 'Metadaten konnten nicht aktualisiert werden: ${error}', + 'messages.logoutConfirm' => 'Abmeldung wirklich durchführen?', + 'messages.noSeasonsFound' => 'Keine Staffeln gefunden', + 'messages.noEpisodesFound' => 'Keine Episoden in der ersten Staffel gefunden', + 'messages.noEpisodesFoundGeneral' => 'Keine Episoden gefunden', + 'messages.noResultsFound' => 'Keine Ergebnisse gefunden', + 'messages.sleepTimerSet' => ({required Object label}) => 'Sleep-Timer gesetzt auf ${label}', + 'messages.noItemsAvailable' => 'Keine Elemente verfügbar', + 'messages.failedToCreatePlayQueue' => 'Wiedergabewarteschlange konnte nicht erstellt werden', + 'messages.failedToCreatePlayQueueNoItems' => 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente', + 'messages.failedPlayback' => ({required Object action, required Object error}) => 'Wiedergabe für ${action} fehlgeschlagen: ${error}', + 'subtitlingStyling.stylingOptions' => 'Stiloptionen', + 'subtitlingStyling.fontSize' => 'Schriftgröße', + 'subtitlingStyling.textColor' => 'Textfarbe', + 'subtitlingStyling.borderSize' => 'Rahmengröße', + 'subtitlingStyling.borderColor' => 'Rahmenfarbe', + 'subtitlingStyling.backgroundOpacity' => 'Hintergrunddeckkraft', + 'subtitlingStyling.backgroundColor' => 'Hintergrundfarbe', + 'mpvConfig.title' => 'MPV-Konfiguration', + 'mpvConfig.description' => 'Erweiterte Videoplayer-Einstellungen', + 'mpvConfig.properties' => 'Eigenschaften', + 'mpvConfig.presets' => 'Voreinstellungen', + 'mpvConfig.noProperties' => 'Keine Eigenschaften konfiguriert', + 'mpvConfig.noPresets' => 'Keine gespeicherten Voreinstellungen', + 'mpvConfig.addProperty' => 'Eigenschaft hinzufügen', + 'mpvConfig.editProperty' => 'Eigenschaft bearbeiten', + 'mpvConfig.deleteProperty' => 'Eigenschaft löschen', + 'mpvConfig.propertyKey' => 'Eigenschaftsschlüssel', + 'mpvConfig.propertyKeyHint' => 'z.B. hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => 'Eigenschaftswert', + 'mpvConfig.propertyValueHint' => 'z.B. auto, 256000000', + 'mpvConfig.saveAsPreset' => 'Als Voreinstellung speichern...', + 'mpvConfig.presetName' => 'Name der Voreinstellung', + 'mpvConfig.presetNameHint' => 'Namen für diese Voreinstellung eingeben', + 'mpvConfig.loadPreset' => 'Laden', + 'mpvConfig.deletePreset' => 'Löschen', + 'mpvConfig.presetSaved' => 'Voreinstellung gespeichert', + 'mpvConfig.presetLoaded' => 'Voreinstellung geladen', + 'mpvConfig.presetDeleted' => 'Voreinstellung gelöscht', + 'mpvConfig.confirmDeletePreset' => 'Möchten Sie diese Voreinstellung wirklich löschen?', + 'mpvConfig.confirmDeleteProperty' => 'Möchten Sie diese Eigenschaft wirklich löschen?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} Einträge', + 'dialog.confirmAction' => 'Aktion bestätigen', + 'dialog.cancel' => 'Abbrechen', + 'dialog.playNow' => 'Jetzt abspielen', + 'discover.title' => 'Entdecken', + 'discover.switchProfile' => 'Profil wechseln', + 'discover.switchServer' => 'Server wechseln', + 'discover.logout' => 'Abmelden', + 'discover.noContentAvailable' => 'Kein Inhalt verfügbar', + 'discover.addMediaToLibraries' => 'Medien zur Mediathek hinzufügen', + 'discover.continueWatching' => 'Weiterschauen', + 'discover.play' => 'Abspielen', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => 'Pause', + 'discover.overview' => 'Übersicht', + 'discover.cast' => 'Besetzung', + 'discover.seasons' => 'Staffeln', + 'discover.studio' => 'Studio', + 'discover.rating' => 'Altersfreigabe', + 'discover.watched' => 'Gesehen', + 'discover.episodeCount' => ({required Object count}) => '${count} Episoden', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '${watched} von ${total} gesehen', + 'discover.movie' => 'Film', + 'discover.tvShow' => 'Serie', + 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} Min übrig', + 'errors.searchFailed' => ({required Object error}) => 'Suche fehlgeschlagen: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}', + 'errors.connectionFailed' => 'Verbindung zum Plex-Server fehlgeschlagen', + 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}', + 'errors.noClientAvailable' => 'Kein Client verfügbar', + 'errors.authenticationFailed' => ({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}', + 'errors.couldNotLaunchUrl' => 'Auth-URL konnte nicht geöffnet werden', + 'errors.pleaseEnterToken' => 'Bitte Token eingeben', + 'errors.invalidToken' => 'Ungültiges Token', + 'errors.failedToVerifyToken' => ({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen', + 'libraries.title' => 'Mediatheken', + 'libraries.scanLibraryFiles' => 'Mediatheksdateien scannen', + 'libraries.scanLibrary' => 'Mediathek scannen', + 'libraries.analyze' => 'Analysieren', + 'libraries.analyzeLibrary' => 'Mediathek analysieren', + 'libraries.refreshMetadata' => 'Metadaten aktualisieren', + 'libraries.emptyTrash' => 'Papierkorb leeren', + 'libraries.emptyingTrash' => ({required Object title}) => 'Papierkorb für „${title}“ wird geleert...', + 'libraries.trashEmptied' => ({required Object title}) => 'Papierkorb für „${title}“ geleert', + 'libraries.failedToEmptyTrash' => ({required Object error}) => 'Papierkorb konnte nicht geleert werden: ${error}', + 'libraries.analyzing' => ({required Object title}) => 'Analysiere „${title}“...', + 'libraries.analysisStarted' => ({required Object title}) => 'Analyse gestartet für „${title}“', + 'libraries.failedToAnalyze' => ({required Object error}) => 'Analyse der Mediathek fehlgeschlagen: ${error}', + 'libraries.noLibrariesFound' => 'Keine Mediatheken gefunden', + 'libraries.thisLibraryIsEmpty' => 'Diese Mediathek ist leer', + 'libraries.all' => 'Alle', + 'libraries.clearAll' => 'Alle löschen', + 'libraries.scanLibraryConfirm' => ({required Object title}) => '„${title}“ wirklich scannen?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => '„${title}“ wirklich analysieren?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Metadaten für „${title}“ wirklich aktualisieren?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => 'Papierkorb für „${title}“ wirklich leeren?', + 'libraries.manageLibraries' => 'Mediatheken verwalten', + 'libraries.sort' => 'Sortieren', + 'libraries.sortBy' => 'Sortieren nach', + 'libraries.filters' => 'Filter', + 'libraries.confirmActionMessage' => 'Aktion wirklich durchführen?', + 'libraries.showLibrary' => 'Mediathek anzeigen', + 'libraries.hideLibrary' => 'Mediathek ausblenden', + 'libraries.libraryOptions' => 'Mediatheksoptionen', + 'libraries.content' => 'Bibliotheksinhalt', + 'libraries.selectLibrary' => 'Bibliothek auswählen', + 'libraries.filtersWithCount' => ({required Object count}) => 'Filter (${count})', + 'libraries.noRecommendations' => 'Keine Empfehlungen verfügbar', + 'libraries.noCollections' => 'Keine Sammlungen in dieser Mediathek', + 'libraries.noFoldersFound' => 'Keine Ordner gefunden', + 'libraries.folders' => 'Ordner', + 'libraries.tabs.recommended' => 'Empfohlen', + 'libraries.tabs.browse' => 'Durchsuchen', + 'libraries.tabs.collections' => 'Sammlungen', + 'libraries.tabs.playlists' => 'Wiedergabelisten', + 'libraries.groupings.all' => 'Alle', + 'libraries.groupings.movies' => 'Filme', + 'libraries.groupings.shows' => 'Serien', + 'libraries.groupings.seasons' => 'Staffeln', + 'libraries.groupings.episodes' => 'Episoden', + 'libraries.groupings.folders' => 'Ordner', + 'about.title' => 'Über', + 'about.openSourceLicenses' => 'Open-Source-Lizenzen', + 'about.versionLabel' => ({required Object version}) => 'Version ${version}', + 'about.appDescription' => 'Ein schöner Plex-Client für Flutter', + 'about.viewLicensesDescription' => 'Lizenzen von Drittanbieter-Bibliotheken anzeigen', + 'serverSelection.allServerConnectionsFailed' => 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.', + 'serverSelection.noServersFound' => 'Keine Server gefunden', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Server konnten nicht geladen werden: ${error}', + 'hubDetail.title' => 'Titel', + 'hubDetail.releaseYear' => 'Erscheinungsjahr', + 'hubDetail.dateAdded' => 'Hinzugefügt am', + 'hubDetail.rating' => 'Bewertung', + 'hubDetail.noItemsFound' => 'Keine Elemente gefunden', + 'logs.clearLogs' => 'Protokolle löschen', + 'logs.copyLogs' => 'Protokolle kopieren', + 'logs.error' => 'Fehler:', + 'logs.stackTrace' => 'Stacktrace:', + 'licenses.relatedPackages' => 'Verwandte Pakete', + 'licenses.license' => 'Lizenz', + 'licenses.licenseNumber' => ({required Object number}) => 'Lizenz ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} Lizenzen', + 'navigation.home' => 'Start', + 'navigation.search' => 'Suche', + 'navigation.libraries' => 'Mediatheken', + 'navigation.settings' => 'Einstellungen', + 'navigation.downloads' => 'Downloads', + 'downloads.title' => 'Downloads', + 'downloads.manage' => 'Verwalten', + 'downloads.tvShows' => 'Serien', + 'downloads.movies' => 'Filme', + 'downloads.noDownloads' => 'Noch keine Downloads', + 'downloads.noDownloadsDescription' => 'Heruntergeladene Inhalte werden hier für die Offline-Wiedergabe angezeigt', + 'downloads.downloadNow' => 'Herunterladen', + 'downloads.deleteDownload' => 'Download löschen', + 'downloads.retryDownload' => 'Download wiederholen', + 'downloads.downloadQueued' => 'Download in Warteschlange', + 'downloads.episodesQueued' => ({required Object count}) => '${count} Episoden zum Download hinzugefügt', + 'downloads.downloadDeleted' => 'Download gelöscht', + 'downloads.deleteConfirm' => ({required Object title}) => 'Möchtest du "${title}" wirklich löschen? Die heruntergeladene Datei wird von deinem Gerät entfernt.', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => 'Lösche ${title}... (${current} von ${total})', + 'playlists.title' => 'Wiedergabelisten', + 'playlists.noPlaylists' => 'Keine Wiedergabelisten gefunden', + 'playlists.create' => 'Wiedergabeliste erstellen', + 'playlists.playlistName' => 'Name der Wiedergabeliste', + 'playlists.enterPlaylistName' => 'Name der Wiedergabeliste eingeben', + 'playlists.delete' => 'Wiedergabeliste löschen', + 'playlists.removeItem' => 'Aus Wiedergabeliste entfernen', + 'playlists.smartPlaylist' => 'Intelligente Wiedergabeliste', + 'playlists.itemCount' => ({required Object count}) => '${count} Elemente', + 'playlists.oneItem' => '1 Element', + 'playlists.emptyPlaylist' => 'Diese Wiedergabeliste ist leer', + 'playlists.deleteConfirm' => 'Wiedergabeliste löschen?', + 'playlists.deleteMessage' => ({required Object name}) => 'Soll "${name}" wirklich gelöscht werden?', + 'playlists.created' => 'Wiedergabeliste erstellt', + 'playlists.deleted' => 'Wiedergabeliste gelöscht', + 'playlists.itemAdded' => 'Zur Wiedergabeliste hinzugefügt', + 'playlists.itemRemoved' => 'Aus Wiedergabeliste entfernt', + 'playlists.selectPlaylist' => 'Wiedergabeliste auswählen', + 'playlists.createNewPlaylist' => 'Neue Wiedergabeliste erstellen', + 'playlists.errorCreating' => 'Wiedergabeliste konnte nicht erstellt werden', + 'playlists.errorDeleting' => 'Wiedergabeliste konnte nicht gelöscht werden', + 'playlists.errorLoading' => 'Wiedergabelisten konnten nicht geladen werden', + 'playlists.errorAdding' => 'Konnte nicht zur Wiedergabeliste hinzugefügt werden', + 'playlists.errorReordering' => 'Element der Wiedergabeliste konnte nicht neu geordnet werden', + 'playlists.errorRemoving' => 'Konnte nicht aus der Wiedergabeliste entfernt werden', + 'playlists.playlist' => 'Wiedergabeliste', + 'collections.title' => 'Sammlungen', + 'collections.collection' => 'Sammlung', + 'collections.empty' => 'Sammlung ist leer', + 'collections.unknownLibrarySection' => 'Löschen nicht möglich: Unbekannte Bibliothekssektion', + 'collections.deleteCollection' => 'Sammlung löschen', + 'collections.deleteConfirm' => ({required Object title}) => 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.', + 'collections.deleted' => 'Sammlung gelöscht', + 'collections.deleteFailed' => 'Sammlung konnte nicht gelöscht werden', + 'collections.deleteFailedWithError' => ({required Object error}) => 'Sammlung konnte nicht gelöscht werden: ${error}', + 'collections.failedToLoadItems' => ({required Object error}) => 'Sammlungselemente konnten nicht geladen werden: ${error}', + 'collections.selectCollection' => 'Sammlung auswählen', + 'collections.createNewCollection' => 'Neue Sammlung erstellen', + 'collections.collectionName' => 'Sammlungsname', + 'collections.enterCollectionName' => 'Sammlungsnamen eingeben', + 'collections.addedToCollection' => 'Zur Sammlung hinzugefügt', + 'collections.errorAddingToCollection' => 'Fehler beim Hinzufügen zur Sammlung', + 'collections.created' => 'Sammlung erstellt', + 'collections.removeFromCollection' => 'Aus Sammlung entfernen', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => '"${title}" aus dieser Sammlung entfernen?', + 'collections.removedFromCollection' => 'Aus Sammlung entfernt', + 'collections.removeFromCollectionFailed' => 'Entfernen aus Sammlung fehlgeschlagen', + 'collections.removeFromCollectionError' => ({required Object error}) => 'Fehler beim Entfernen aus der Sammlung: ${error}', + 'watchTogether.title' => 'Gemeinsam Schauen', + 'watchTogether.description' => 'Inhalte synchron mit Freunden und Familie schauen', + 'watchTogether.createSession' => 'Sitzung Erstellen', + 'watchTogether.creating' => 'Erstellen...', + 'watchTogether.joinSession' => 'Sitzung Beitreten', + 'watchTogether.joining' => 'Beitreten...', + 'watchTogether.controlMode' => 'Steuerungsmodus', + 'watchTogether.controlModeQuestion' => 'Wer kann die Wiedergabe steuern?', + 'watchTogether.hostOnly' => 'Nur Host', + 'watchTogether.anyone' => 'Alle', + 'watchTogether.hostingSession' => 'Sitzung Hosten', + 'watchTogether.inSession' => 'In Sitzung', + 'watchTogether.sessionCode' => 'Sitzungscode', + 'watchTogether.hostControlsPlayback' => 'Host steuert die Wiedergabe', + 'watchTogether.anyoneCanControl' => 'Alle können die Wiedergabe steuern', + 'watchTogether.hostControls' => 'Host steuert', + _ => null, + } ?? switch (path) { + 'watchTogether.anyoneControls' => 'Alle steuern', + 'watchTogether.participants' => 'Teilnehmer', + 'watchTogether.host' => 'Host', + 'watchTogether.hostBadge' => 'HOST', + 'watchTogether.youAreHost' => 'Du bist der Host', + 'watchTogether.watchingWithOthers' => 'Mit anderen schauen', + 'watchTogether.endSession' => 'Sitzung Beenden', + 'watchTogether.leaveSession' => 'Sitzung Verlassen', + 'watchTogether.endSessionQuestion' => 'Sitzung Beenden?', + 'watchTogether.leaveSessionQuestion' => 'Sitzung Verlassen?', + 'watchTogether.endSessionConfirm' => 'Dies beendet die Sitzung für alle Teilnehmer.', + 'watchTogether.leaveSessionConfirm' => 'Du wirst aus der Sitzung entfernt.', + 'watchTogether.endSessionConfirmOverlay' => 'Dies beendet die Schausitzung für alle Teilnehmer.', + 'watchTogether.leaveSessionConfirmOverlay' => 'Du wirst von der Schausitzung getrennt.', + 'watchTogether.end' => 'Beenden', + 'watchTogether.leave' => 'Verlassen', + 'watchTogether.syncing' => 'Synchronisieren...', + 'watchTogether.participant' => 'Teilnehmer', + 'watchTogether.joinWatchSession' => 'Schausitzung Beitreten', + 'watchTogether.enterCodeHint' => '8-stelligen Code eingeben', + 'watchTogether.pasteFromClipboard' => 'Aus Zwischenablage einfügen', + 'watchTogether.pleaseEnterCode' => 'Bitte gib einen Sitzungscode ein', + 'watchTogether.codeMustBe8Chars' => 'Sitzungscode muss 8 Zeichen haben', + 'watchTogether.joinInstructions' => 'Gib den vom Host geteilten Sitzungscode ein, um seiner Schausitzung beizutreten.', + 'watchTogether.failedToCreate' => 'Sitzung konnte nicht erstellt werden', + 'watchTogether.failedToJoin' => 'Sitzung konnte nicht beigetreten werden', + 'watchTogether.sessionCodeCopied' => 'Sitzungscode in Zwischenablage kopiert', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart new file mode 100644 index 00000000..b75a7d40 --- /dev/null +++ b/lib/i18n/strings_en.g.dart @@ -0,0 +1,2558 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +part of 'strings.g.dart'; + +// Path: +typedef TranslationsEn = Translations; // ignore: unused_element +class Translations with BaseTranslations { + /// 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({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.en, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + dynamic operator[](String key) => $meta.getTranslation(key); + + late final Translations _root = this; // ignore: unused_field + + Translations $copyWith({TranslationMetadata? meta}) => Translations(meta: meta ?? this.$meta); + + // Translations + late final TranslationsAppEn app = TranslationsAppEn._(_root); + late final TranslationsAuthEn auth = TranslationsAuthEn._(_root); + late final TranslationsCommonEn common = TranslationsCommonEn._(_root); + late final TranslationsScreensEn screens = TranslationsScreensEn._(_root); + late final TranslationsUpdateEn update = TranslationsUpdateEn._(_root); + late final TranslationsSettingsEn settings = TranslationsSettingsEn._(_root); + late final TranslationsSearchEn search = TranslationsSearchEn._(_root); + late final TranslationsHotkeysEn hotkeys = TranslationsHotkeysEn._(_root); + late final TranslationsPinEntryEn pinEntry = TranslationsPinEntryEn._(_root); + late final TranslationsFileInfoEn fileInfo = TranslationsFileInfoEn._(_root); + late final TranslationsMediaMenuEn mediaMenu = TranslationsMediaMenuEn._(_root); + late final TranslationsAccessibilityEn accessibility = TranslationsAccessibilityEn._(_root); + late final TranslationsTooltipsEn tooltips = TranslationsTooltipsEn._(_root); + late final TranslationsVideoControlsEn videoControls = TranslationsVideoControlsEn._(_root); + late final TranslationsUserStatusEn userStatus = TranslationsUserStatusEn._(_root); + late final TranslationsMessagesEn messages = TranslationsMessagesEn._(_root); + late final TranslationsSubtitlingStylingEn subtitlingStyling = TranslationsSubtitlingStylingEn._(_root); + late final TranslationsMpvConfigEn mpvConfig = TranslationsMpvConfigEn._(_root); + late final TranslationsDialogEn dialog = TranslationsDialogEn._(_root); + late final TranslationsDiscoverEn discover = TranslationsDiscoverEn._(_root); + late final TranslationsErrorsEn errors = TranslationsErrorsEn._(_root); + late final TranslationsLibrariesEn libraries = TranslationsLibrariesEn._(_root); + late final TranslationsAboutEn about = TranslationsAboutEn._(_root); + late final TranslationsServerSelectionEn serverSelection = TranslationsServerSelectionEn._(_root); + late final TranslationsHubDetailEn hubDetail = TranslationsHubDetailEn._(_root); + late final TranslationsLogsEn logs = TranslationsLogsEn._(_root); + late final TranslationsLicensesEn licenses = TranslationsLicensesEn._(_root); + late final TranslationsNavigationEn navigation = TranslationsNavigationEn._(_root); + late final TranslationsCollectionsEn collections = TranslationsCollectionsEn._(_root); + late final TranslationsPlaylistsEn playlists = TranslationsPlaylistsEn._(_root); + late final TranslationsWatchTogetherEn watchTogether = TranslationsWatchTogetherEn._(_root); + late final TranslationsDownloadsEn downloads = TranslationsDownloadsEn._(_root); +} + +// Path: app +class TranslationsAppEn { + TranslationsAppEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Plezy' + String get title => 'Plezy'; + + /// en: 'Loading...' + String get loading => 'Loading...'; +} + +// Path: auth +class TranslationsAuthEn { + TranslationsAuthEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Sign in with Plex' + String get signInWithPlex => 'Sign in with Plex'; + + /// en: 'Show QR Code' + String get showQRCode => 'Show QR Code'; + + /// en: 'Cancel' + String get cancel => 'Cancel'; + + /// en: 'Authenticate' + String get authenticate => 'Authenticate'; + + /// en: 'Retry' + String get retry => 'Retry'; + + /// en: 'Debug: Enter Plex Token' + String get debugEnterToken => 'Debug: Enter Plex Token'; + + /// en: 'Plex Auth Token' + String get plexTokenLabel => 'Plex Auth Token'; + + /// en: 'Enter your Plex.tv token' + String get plexTokenHint => 'Enter your Plex.tv token'; + + /// en: 'Authentication timed out. Please try again.' + String get authenticationTimeout => 'Authentication timed out. Please try again.'; + + /// en: 'Scan this QR code with a device logged into Plex to authenticate.' + String get scanQRCodeInstruction => 'Scan this QR code with a device logged into Plex to authenticate.'; + + /// en: 'Waiting for authentication... Please complete sign-in in your browser.' + String get waitingForAuth => 'Waiting for authentication...\nPlease complete sign-in in your browser.'; +} + +// Path: common +class TranslationsCommonEn { + TranslationsCommonEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Cancel' + String get cancel => 'Cancel'; + + /// en: 'Save' + String get save => 'Save'; + + /// en: 'Close' + String get close => 'Close'; + + /// en: 'Clear' + String get clear => 'Clear'; + + /// en: 'Reset' + String get reset => 'Reset'; + + /// en: 'Later' + String get later => 'Later'; + + /// en: 'Submit' + String get submit => 'Submit'; + + /// en: 'Confirm' + String get confirm => 'Confirm'; + + /// en: 'Retry' + String get retry => 'Retry'; + + /// en: 'Logout' + String get logout => 'Logout'; + + /// en: 'Unknown' + String get unknown => 'Unknown'; + + /// en: 'Refresh' + String get refresh => 'Refresh'; + + /// en: 'Yes' + String get yes => 'Yes'; + + /// en: 'No' + String get no => 'No'; + + /// en: 'Delete' + String get delete => 'Delete'; + + /// en: 'Shuffle' + String get shuffle => 'Shuffle'; + + /// en: 'Add to...' + String get addTo => 'Add to...'; +} + +// Path: screens +class TranslationsScreensEn { + TranslationsScreensEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Licenses' + String get licenses => 'Licenses'; + + /// en: 'Switch Profile' + String get switchProfile => 'Switch Profile'; + + /// en: 'Subtitle Styling' + String get subtitleStyling => 'Subtitle Styling'; + + /// en: 'MPV Configuration' + String get mpvConfig => 'MPV Configuration'; + + /// en: 'Search' + String get search => 'Search'; + + /// en: 'Logs' + String get logs => 'Logs'; +} + +// Path: update +class TranslationsUpdateEn { + TranslationsUpdateEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Update Available' + String get available => 'Update Available'; + + /// en: 'Version ${version} is available' + String versionAvailable({required Object version}) => 'Version ${version} is available'; + + /// en: 'Current: ${version}' + String currentVersion({required Object version}) => 'Current: ${version}'; + + /// en: 'Skip This Version' + String get skipVersion => 'Skip This Version'; + + /// en: 'View Release' + String get viewRelease => 'View Release'; + + /// en: 'You are on the latest version' + String get latestVersion => 'You are on the latest version'; + + /// en: 'Failed to check for updates' + String get checkFailed => 'Failed to check for updates'; +} + +// Path: settings +class TranslationsSettingsEn { + TranslationsSettingsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Settings' + String get title => 'Settings'; + + /// en: 'Language' + String get language => 'Language'; + + /// en: 'Theme' + String get theme => 'Theme'; + + /// en: 'Appearance' + String get appearance => 'Appearance'; + + /// en: 'Video Playback' + String get videoPlayback => 'Video Playback'; + + /// en: 'Advanced' + String get advanced => 'Advanced'; + + /// en: 'Episode Poster Style' + String get episodePosterMode => 'Episode Poster Style'; + + /// en: 'Series Poster' + String get seriesPoster => 'Series Poster'; + + /// en: 'Show the series poster for all episodes' + String get seriesPosterDescription => 'Show the series poster for all episodes'; + + /// en: 'Season Poster' + String get seasonPoster => 'Season Poster'; + + /// en: 'Show the season-specific poster for episodes' + String get seasonPosterDescription => 'Show the season-specific poster for episodes'; + + /// en: 'Episode Thumbnail' + String get episodeThumbnail => 'Episode Thumbnail'; + + /// en: 'Show 16:9 episode screenshot thumbnails' + String get episodeThumbnailDescription => 'Show 16:9 episode screenshot thumbnails'; + + /// en: 'Display featured content carousel on home screen' + String get showHeroSectionDescription => 'Display featured content carousel on home screen'; + + /// en: 'Seconds' + String get secondsLabel => 'Seconds'; + + /// en: 'Minutes' + String get minutesLabel => 'Minutes'; + + /// en: 's' + String get secondsShort => 's'; + + /// en: 'm' + String get minutesShort => 'm'; + + /// en: 'Enter duration (${min}-${max})' + String durationHint({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; + + /// en: 'System' + String get systemTheme => 'System'; + + /// en: 'Follow system settings' + String get systemThemeDescription => 'Follow system settings'; + + /// en: 'Light' + String get lightTheme => 'Light'; + + /// en: 'Dark' + String get darkTheme => 'Dark'; + + /// en: 'Library Density' + String get libraryDensity => 'Library Density'; + + /// en: 'Compact' + String get compact => 'Compact'; + + /// en: 'Smaller cards, more items visible' + String get compactDescription => 'Smaller cards, more items visible'; + + /// en: 'Normal' + String get normal => 'Normal'; + + /// en: 'Default size' + String get normalDescription => 'Default size'; + + /// en: 'Comfortable' + String get comfortable => 'Comfortable'; + + /// en: 'Larger cards, fewer items visible' + String get comfortableDescription => 'Larger cards, fewer items visible'; + + /// en: 'View Mode' + String get viewMode => 'View Mode'; + + /// en: 'Grid' + String get gridView => 'Grid'; + + /// en: 'Display items in a grid layout' + String get gridViewDescription => 'Display items in a grid layout'; + + /// en: 'List' + String get listView => 'List'; + + /// en: 'Display items in a list layout' + String get listViewDescription => 'Display items in a list layout'; + + /// en: 'Show Hero Section' + String get showHeroSection => 'Show Hero Section'; + + /// en: 'Use Plex Home Layout' + String get useGlobalHubs => 'Use Plex Home Layout'; + + /// en: 'Show home page hubs like the official Plex client. When off, shows per-library recommendations instead.' + String get useGlobalHubsDescription => 'Show home page hubs like the official Plex client. When off, shows per-library recommendations instead.'; + + /// en: 'Show Server Name on Hubs' + String get showServerNameOnHubs => 'Show Server Name on Hubs'; + + /// en: 'Always display the server name in hub titles. When off, only shows for duplicate hub names.' + String get showServerNameOnHubsDescription => 'Always display the server name in hub titles. When off, only shows for duplicate hub names.'; + + /// en: 'Hardware Decoding' + String get hardwareDecoding => 'Hardware Decoding'; + + /// en: 'Use hardware acceleration when available' + String get hardwareDecodingDescription => 'Use hardware acceleration when available'; + + /// en: 'Buffer Size' + String get bufferSize => 'Buffer Size'; + + /// en: '${size}MB' + String bufferSizeMB({required Object size}) => '${size}MB'; + + /// en: 'Subtitle Styling' + String get subtitleStyling => 'Subtitle Styling'; + + /// en: 'Customize subtitle appearance' + String get subtitleStylingDescription => 'Customize subtitle appearance'; + + /// en: 'Small Skip Duration' + String get smallSkipDuration => 'Small Skip Duration'; + + /// en: 'Large Skip Duration' + String get largeSkipDuration => 'Large Skip Duration'; + + /// en: '${seconds} seconds' + String secondsUnit({required Object seconds}) => '${seconds} seconds'; + + /// en: 'Default Sleep Timer' + String get defaultSleepTimer => 'Default Sleep Timer'; + + /// en: '${minutes} minutes' + String minutesUnit({required Object minutes}) => '${minutes} minutes'; + + /// en: 'Remember track selections per show/movie' + String get rememberTrackSelections => 'Remember track selections per show/movie'; + + /// en: 'Automatically save audio and subtitle language preferences when you change tracks during playback' + String get rememberTrackSelectionsDescription => 'Automatically save audio and subtitle language preferences when you change tracks during playback'; + + /// en: 'Video Player Controls' + String get videoPlayerControls => 'Video Player Controls'; + + /// en: 'Keyboard Shortcuts' + String get keyboardShortcuts => 'Keyboard Shortcuts'; + + /// en: 'Customize keyboard shortcuts' + String get keyboardShortcutsDescription => 'Customize keyboard shortcuts'; + + /// en: 'Video Player Navigation' + String get videoPlayerNavigation => 'Video Player Navigation'; + + /// en: 'Use arrow keys to navigate video player controls' + String get videoPlayerNavigationDescription => 'Use arrow keys to navigate video player controls'; + + /// en: 'Debug Logging' + String get debugLogging => 'Debug Logging'; + + /// en: 'Enable detailed logging for troubleshooting' + String get debugLoggingDescription => 'Enable detailed logging for troubleshooting'; + + /// en: 'View Logs' + String get viewLogs => 'View Logs'; + + /// en: 'View application logs' + String get viewLogsDescription => 'View application logs'; + + /// en: 'Clear Cache' + String get clearCache => 'Clear Cache'; + + /// en: 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.' + String get clearCacheDescription => 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; + + /// en: 'Cache cleared successfully' + String get clearCacheSuccess => 'Cache cleared successfully'; + + /// en: 'Reset Settings' + String get resetSettings => 'Reset Settings'; + + /// en: 'This will reset all settings to their default values. This action cannot be undone.' + String get resetSettingsDescription => 'This will reset all settings to their default values. This action cannot be undone.'; + + /// en: 'Settings reset successfully' + String get resetSettingsSuccess => 'Settings reset successfully'; + + /// en: 'Shortcuts reset to defaults' + String get shortcutsReset => 'Shortcuts reset to defaults'; + + /// en: 'About' + String get about => 'About'; + + /// en: 'App information and licenses' + String get aboutDescription => 'App information and licenses'; + + /// en: 'Updates' + String get updates => 'Updates'; + + /// en: 'Update Available' + String get updateAvailable => 'Update Available'; + + /// en: 'Check for Updates' + String get checkForUpdates => 'Check for Updates'; + + /// en: 'Please enter a valid number' + String get validationErrorEnterNumber => 'Please enter a valid number'; + + /// en: 'Duration must be between ${min} and ${max} ${unit}' + String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Duration must be between ${min} and ${max} ${unit}'; + + /// en: 'Shortcut already assigned to ${action}' + String shortcutAlreadyAssigned({required Object action}) => 'Shortcut already assigned to ${action}'; + + /// en: 'Shortcut updated for ${action}' + String shortcutUpdated({required Object action}) => 'Shortcut updated for ${action}'; + + /// en: 'Auto Skip' + String get autoSkip => 'Auto Skip'; + + /// en: 'Auto Skip Intro' + String get autoSkipIntro => 'Auto Skip Intro'; + + /// en: 'Automatically skip intro markers after a few seconds' + String get autoSkipIntroDescription => 'Automatically skip intro markers after a few seconds'; + + /// en: 'Auto Skip Credits' + String get autoSkipCredits => 'Auto Skip Credits'; + + /// en: 'Automatically skip credits and play next episode' + String get autoSkipCreditsDescription => 'Automatically skip credits and play next episode'; + + /// en: 'Auto Skip Delay' + String get autoSkipDelay => 'Auto Skip Delay'; + + /// en: 'Wait ${seconds} seconds before auto-skipping' + String autoSkipDelayDescription({required Object seconds}) => 'Wait ${seconds} seconds before auto-skipping'; + + /// en: 'Downloads' + String get downloads => 'Downloads'; + + /// en: 'Choose where to store downloaded content' + String get downloadLocationDescription => 'Choose where to store downloaded content'; + + /// en: 'Default (App Storage)' + String get downloadLocationDefault => 'Default (App Storage)'; + + /// en: 'Custom Location' + String get downloadLocationCustom => 'Custom Location'; + + /// en: 'Select Folder' + String get selectFolder => 'Select Folder'; + + /// en: 'Reset to Default' + String get resetToDefault => 'Reset to Default'; + + /// en: 'Current: ${path}' + String currentPath({required Object path}) => 'Current: ${path}'; + + /// en: 'Download location changed' + String get downloadLocationChanged => 'Download location changed'; + + /// en: 'Download location reset to default' + String get downloadLocationReset => 'Download location reset to default'; + + /// en: 'Selected folder is not writable' + String get downloadLocationInvalid => 'Selected folder is not writable'; + + /// en: 'Failed to select folder' + String get downloadLocationSelectError => 'Failed to select folder'; + + /// en: 'Download on WiFi only' + String get downloadOnWifiOnly => 'Download on WiFi only'; + + /// en: 'Prevent downloads when on cellular data' + String get downloadOnWifiOnlyDescription => 'Prevent downloads when on cellular data'; + + /// en: 'Downloads are disabled on cellular data. Connect to WiFi or change the setting.' + String get cellularDownloadBlocked => 'Downloads are disabled on cellular data. Connect to WiFi or change the setting.'; + + /// en: 'Maximum Volume' + String get maxVolume => 'Maximum Volume'; + + /// en: 'Allow volume boost above 100% for quiet media' + String get maxVolumeDescription => 'Allow volume boost above 100% for quiet media'; + + /// en: '${percent}%' + String maxVolumePercent({required Object percent}) => '${percent}%'; + + /// en: 'Enter max volume (100-300)' + String get maxVolumeHint => 'Enter max volume (100-300)'; + + /// en: 'Discord Rich Presence' + String get discordRichPresence => 'Discord Rich Presence'; + + /// en: 'Show what you're watching on Discord' + String get discordRichPresenceDescription => 'Show what you\'re watching on Discord'; + + /// en: 'Match Content Frame Rate' + String get matchContentFrameRate => 'Match Content Frame Rate'; + + /// en: 'Adjust display refresh rate to match video content, reducing judder and saving battery' + String get matchContentFrameRateDescription => 'Adjust display refresh rate to match video content, reducing judder and saving battery'; +} + +// Path: search +class TranslationsSearchEn { + TranslationsSearchEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Search movies, shows, music...' + String get hint => 'Search movies, shows, music...'; + + /// en: 'Try a different search term' + String get tryDifferentTerm => 'Try a different search term'; + + /// en: 'Search your media' + String get searchYourMedia => 'Search your media'; + + /// en: 'Enter a title, actor, or keyword' + String get enterTitleActorOrKeyword => 'Enter a title, actor, or keyword'; +} + +// Path: hotkeys +class TranslationsHotkeysEn { + TranslationsHotkeysEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Set Shortcut for ${actionName}' + String setShortcutFor({required Object actionName}) => 'Set Shortcut for ${actionName}'; + + /// en: 'Clear shortcut' + String get clearShortcut => 'Clear shortcut'; + + late final TranslationsHotkeysActionsEn actions = TranslationsHotkeysActionsEn._(_root); +} + +// Path: pinEntry +class TranslationsPinEntryEn { + TranslationsPinEntryEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Enter PIN' + String get enterPin => 'Enter PIN'; + + /// en: 'Show PIN' + String get showPin => 'Show PIN'; + + /// en: 'Hide PIN' + String get hidePin => 'Hide PIN'; +} + +// Path: fileInfo +class TranslationsFileInfoEn { + TranslationsFileInfoEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'File Info' + String get title => 'File Info'; + + /// en: 'Video' + String get video => 'Video'; + + /// en: 'Audio' + String get audio => 'Audio'; + + /// en: 'File' + String get file => 'File'; + + /// en: 'Advanced' + String get advanced => 'Advanced'; + + /// en: 'Codec' + String get codec => 'Codec'; + + /// en: 'Resolution' + String get resolution => 'Resolution'; + + /// en: 'Bitrate' + String get bitrate => 'Bitrate'; + + /// en: 'Frame Rate' + String get frameRate => 'Frame Rate'; + + /// en: 'Aspect Ratio' + String get aspectRatio => 'Aspect Ratio'; + + /// en: 'Profile' + String get profile => 'Profile'; + + /// en: 'Bit Depth' + String get bitDepth => 'Bit Depth'; + + /// en: 'Color Space' + String get colorSpace => 'Color Space'; + + /// en: 'Color Range' + String get colorRange => 'Color Range'; + + /// en: 'Color Primaries' + String get colorPrimaries => 'Color Primaries'; + + /// en: 'Chroma Subsampling' + String get chromaSubsampling => 'Chroma Subsampling'; + + /// en: 'Channels' + String get channels => 'Channels'; + + /// en: 'Path' + String get path => 'Path'; + + /// en: 'Size' + String get size => 'Size'; + + /// en: 'Container' + String get container => 'Container'; + + /// en: 'Duration' + String get duration => 'Duration'; + + /// en: 'Optimized for Streaming' + String get optimizedForStreaming => 'Optimized for Streaming'; + + /// en: '64-bit Offsets' + String get has64bitOffsets => '64-bit Offsets'; +} + +// Path: mediaMenu +class TranslationsMediaMenuEn { + TranslationsMediaMenuEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Mark as Watched' + String get markAsWatched => 'Mark as Watched'; + + /// en: 'Mark as Unwatched' + String get markAsUnwatched => 'Mark as Unwatched'; + + /// en: 'Remove from Continue Watching' + String get removeFromContinueWatching => 'Remove from Continue Watching'; + + /// en: 'Go to series' + String get goToSeries => 'Go to series'; + + /// en: 'Go to season' + String get goToSeason => 'Go to season'; + + /// en: 'Shuffle Play' + String get shufflePlay => 'Shuffle Play'; + + /// en: 'File Info' + String get fileInfo => 'File Info'; +} + +// Path: accessibility +class TranslationsAccessibilityEn { + TranslationsAccessibilityEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: '${title}, movie' + String mediaCardMovie({required Object title}) => '${title}, movie'; + + /// en: '${title}, TV show' + String mediaCardShow({required Object title}) => '${title}, TV show'; + + /// en: '${title}, ${episodeInfo}' + String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + + /// en: '${title}, ${seasonInfo}' + String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + + /// en: 'watched' + String get mediaCardWatched => 'watched'; + + /// en: '${percent} percent watched' + String mediaCardPartiallyWatched({required Object percent}) => '${percent} percent watched'; + + /// en: 'unwatched' + String get mediaCardUnwatched => 'unwatched'; + + /// en: 'Tap to play' + String get tapToPlay => 'Tap to play'; +} + +// Path: tooltips +class TranslationsTooltipsEn { + TranslationsTooltipsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Shuffle play' + String get shufflePlay => 'Shuffle play'; + + /// en: 'Mark as watched' + String get markAsWatched => 'Mark as watched'; + + /// en: 'Mark as unwatched' + String get markAsUnwatched => 'Mark as unwatched'; +} + +// Path: videoControls +class TranslationsVideoControlsEn { + TranslationsVideoControlsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Audio' + String get audioLabel => 'Audio'; + + /// en: 'Subtitles' + String get subtitlesLabel => 'Subtitles'; + + /// en: 'Reset to 0ms' + String get resetToZero => 'Reset to 0ms'; + + /// en: '+${amount}${unit}' + String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + + /// en: '-${amount}${unit}' + String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + + /// en: '${label} plays later' + String playsLater({required Object label}) => '${label} plays later'; + + /// en: '${label} plays earlier' + String playsEarlier({required Object label}) => '${label} plays earlier'; + + /// en: 'No offset' + String get noOffset => 'No offset'; + + /// en: 'Letterbox' + String get letterbox => 'Letterbox'; + + /// en: 'Fill screen' + String get fillScreen => 'Fill screen'; + + /// en: 'Stretch' + String get stretch => 'Stretch'; + + /// en: 'Lock rotation' + String get lockRotation => 'Lock rotation'; + + /// en: 'Unlock rotation' + String get unlockRotation => 'Unlock rotation'; + + /// en: 'Sleep Timer' + String get sleepTimer => 'Sleep Timer'; + + /// en: 'Timer Active' + String get timerActive => 'Timer Active'; + + /// en: 'Playback will pause in ${duration}' + String playbackWillPauseIn({required Object duration}) => 'Playback will pause in ${duration}'; + + /// en: 'Sleep timer completed - playback paused' + String get sleepTimerCompleted => 'Sleep timer completed - playback paused'; + + /// en: 'Auto-Play Next' + String get autoPlayNext => 'Auto-Play Next'; + + /// en: 'Play Next' + String get playNext => 'Play Next'; + + /// en: 'Play' + String get playButton => 'Play'; + + /// en: 'Pause' + String get pauseButton => 'Pause'; + + /// en: 'Seek backward ${seconds} seconds' + String seekBackwardButton({required Object seconds}) => 'Seek backward ${seconds} seconds'; + + /// en: 'Seek forward ${seconds} seconds' + String seekForwardButton({required Object seconds}) => 'Seek forward ${seconds} seconds'; + + /// en: 'Previous episode' + String get previousButton => 'Previous episode'; + + /// en: 'Next episode' + String get nextButton => 'Next episode'; + + /// en: 'Previous chapter' + String get previousChapterButton => 'Previous chapter'; + + /// en: 'Next chapter' + String get nextChapterButton => 'Next chapter'; + + /// en: 'Mute' + String get muteButton => 'Mute'; + + /// en: 'Unmute' + String get unmuteButton => 'Unmute'; + + /// en: 'Video settings' + String get settingsButton => 'Video settings'; + + /// en: 'Audio tracks' + String get audioTrackButton => 'Audio tracks'; + + /// en: 'Subtitles' + String get subtitlesButton => 'Subtitles'; + + /// en: 'Chapters' + String get chaptersButton => 'Chapters'; + + /// en: 'Video versions' + String get versionsButton => 'Video versions'; + + /// en: 'Picture-in-Picture mode' + String get pipButton => 'Picture-in-Picture mode'; + + /// en: 'Aspect ratio' + String get aspectRatioButton => 'Aspect ratio'; + + /// en: 'Enter fullscreen' + String get fullscreenButton => 'Enter fullscreen'; + + /// en: 'Exit fullscreen' + String get exitFullscreenButton => 'Exit fullscreen'; + + /// en: 'Always on top' + String get alwaysOnTopButton => 'Always on top'; + + /// en: 'Rotation lock' + String get rotationLockButton => 'Rotation lock'; + + /// en: 'Video timeline' + String get timelineSlider => 'Video timeline'; + + /// en: 'Volume level' + String get volumeSlider => 'Volume level'; + + /// en: 'Back' + String get backButton => 'Back'; +} + +// Path: userStatus +class TranslationsUserStatusEn { + TranslationsUserStatusEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Admin' + String get admin => 'Admin'; + + /// en: 'Restricted' + String get restricted => 'Restricted'; + + /// en: 'Protected' + String get protected => 'Protected'; + + /// en: 'CURRENT' + String get current => 'CURRENT'; +} + +// Path: messages +class TranslationsMessagesEn { + TranslationsMessagesEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Marked as watched' + String get markedAsWatched => 'Marked as watched'; + + /// en: 'Marked as unwatched' + String get markedAsUnwatched => 'Marked as unwatched'; + + /// en: 'Marked as watched (will sync when online)' + String get markedAsWatchedOffline => 'Marked as watched (will sync when online)'; + + /// en: 'Marked as unwatched (will sync when online)' + String get markedAsUnwatchedOffline => 'Marked as unwatched (will sync when online)'; + + /// en: 'Removed from Continue Watching' + String get removedFromContinueWatching => 'Removed from Continue Watching'; + + /// en: 'Error: ${error}' + String errorLoading({required Object error}) => 'Error: ${error}'; + + /// en: 'File information not available' + String get fileInfoNotAvailable => 'File information not available'; + + /// en: 'Error loading file info: ${error}' + String errorLoadingFileInfo({required Object error}) => 'Error loading file info: ${error}'; + + /// en: 'Error loading series' + String get errorLoadingSeries => 'Error loading series'; + + /// en: 'Error loading season' + String get errorLoadingSeason => 'Error loading season'; + + /// en: 'Music playback is not yet supported' + String get musicNotSupported => 'Music playback is not yet supported'; + + /// en: 'Logs cleared' + String get logsCleared => 'Logs cleared'; + + /// en: 'Logs copied to clipboard' + String get logsCopied => 'Logs copied to clipboard'; + + /// en: 'No logs available' + String get noLogsAvailable => 'No logs available'; + + /// en: 'Scanning "${title}"...' + String libraryScanning({required Object title}) => 'Scanning "${title}"...'; + + /// en: 'Library scan started for "${title}"' + String libraryScanStarted({required Object title}) => 'Library scan started for "${title}"'; + + /// en: 'Failed to scan library: ${error}' + String libraryScanFailed({required Object error}) => 'Failed to scan library: ${error}'; + + /// en: 'Refreshing metadata for "${title}"...' + String metadataRefreshing({required Object title}) => 'Refreshing metadata for "${title}"...'; + + /// en: 'Metadata refresh started for "${title}"' + String metadataRefreshStarted({required Object title}) => 'Metadata refresh started for "${title}"'; + + /// en: 'Failed to refresh metadata: ${error}' + String metadataRefreshFailed({required Object error}) => 'Failed to refresh metadata: ${error}'; + + /// en: 'Are you sure you want to logout?' + String get logoutConfirm => 'Are you sure you want to logout?'; + + /// en: 'No seasons found' + String get noSeasonsFound => 'No seasons found'; + + /// en: 'No episodes found in first season' + String get noEpisodesFound => 'No episodes found in first season'; + + /// en: 'No episodes found' + String get noEpisodesFoundGeneral => 'No episodes found'; + + /// en: 'No results found' + String get noResultsFound => 'No results found'; + + /// en: 'Sleep timer set for ${label}' + String sleepTimerSet({required Object label}) => 'Sleep timer set for ${label}'; + + /// en: 'No items available' + String get noItemsAvailable => 'No items available'; + + /// en: 'Failed to create play queue' + String get failedToCreatePlayQueue => 'Failed to create play queue'; + + /// en: 'Failed to create play queue - no items' + String get failedToCreatePlayQueueNoItems => 'Failed to create play queue - no items'; + + /// en: 'Failed to ${action}: ${error}' + String failedPlayback({required Object action, required Object error}) => 'Failed to ${action}: ${error}'; +} + +// Path: subtitlingStyling +class TranslationsSubtitlingStylingEn { + TranslationsSubtitlingStylingEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Styling Options' + String get stylingOptions => 'Styling Options'; + + /// en: 'Font Size' + String get fontSize => 'Font Size'; + + /// en: 'Text Color' + String get textColor => 'Text Color'; + + /// en: 'Border Size' + String get borderSize => 'Border Size'; + + /// en: 'Border Color' + String get borderColor => 'Border Color'; + + /// en: 'Background Opacity' + String get backgroundOpacity => 'Background Opacity'; + + /// en: 'Background Color' + String get backgroundColor => 'Background Color'; +} + +// Path: mpvConfig +class TranslationsMpvConfigEn { + TranslationsMpvConfigEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'MPV Configuration' + String get title => 'MPV Configuration'; + + /// en: 'Advanced video player settings' + String get description => 'Advanced video player settings'; + + /// en: 'Properties' + String get properties => 'Properties'; + + /// en: 'Presets' + String get presets => 'Presets'; + + /// en: 'No properties configured' + String get noProperties => 'No properties configured'; + + /// en: 'No saved presets' + String get noPresets => 'No saved presets'; + + /// en: 'Add Property' + String get addProperty => 'Add Property'; + + /// en: 'Edit Property' + String get editProperty => 'Edit Property'; + + /// en: 'Delete Property' + String get deleteProperty => 'Delete Property'; + + /// en: 'Property Key' + String get propertyKey => 'Property Key'; + + /// en: 'e.g., hwdec, demuxer-max-bytes' + String get propertyKeyHint => 'e.g., hwdec, demuxer-max-bytes'; + + /// en: 'Property Value' + String get propertyValue => 'Property Value'; + + /// en: 'e.g., auto, 256000000' + String get propertyValueHint => 'e.g., auto, 256000000'; + + /// en: 'Save as Preset...' + String get saveAsPreset => 'Save as Preset...'; + + /// en: 'Preset Name' + String get presetName => 'Preset Name'; + + /// en: 'Enter a name for this preset' + String get presetNameHint => 'Enter a name for this preset'; + + /// en: 'Load' + String get loadPreset => 'Load'; + + /// en: 'Delete' + String get deletePreset => 'Delete'; + + /// en: 'Preset saved' + String get presetSaved => 'Preset saved'; + + /// en: 'Preset loaded' + String get presetLoaded => 'Preset loaded'; + + /// en: 'Preset deleted' + String get presetDeleted => 'Preset deleted'; + + /// en: 'Are you sure you want to delete this preset?' + String get confirmDeletePreset => 'Are you sure you want to delete this preset?'; + + /// en: 'Are you sure you want to delete this property?' + String get confirmDeleteProperty => 'Are you sure you want to delete this property?'; + + /// en: '${count} entries' + String entriesCount({required Object count}) => '${count} entries'; +} + +// Path: dialog +class TranslationsDialogEn { + TranslationsDialogEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Confirm Action' + String get confirmAction => 'Confirm Action'; + + /// en: 'Cancel' + String get cancel => 'Cancel'; + + /// en: 'Play Now' + String get playNow => 'Play Now'; +} + +// Path: discover +class TranslationsDiscoverEn { + TranslationsDiscoverEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Discover' + String get title => 'Discover'; + + /// en: 'Switch Profile' + String get switchProfile => 'Switch Profile'; + + /// en: 'Logout' + String get logout => 'Logout'; + + /// en: 'No content available' + String get noContentAvailable => 'No content available'; + + /// en: 'Add some media to your libraries' + String get addMediaToLibraries => 'Add some media to your libraries'; + + /// en: 'Continue Watching' + String get continueWatching => 'Continue Watching'; + + /// en: 'Play' + String get play => 'Play'; + + /// en: 'S${season}E${episode}' + String playEpisode({required Object season, required Object episode}) => 'S${season}E${episode}'; + + /// en: 'Pause' + String get pause => 'Pause'; + + /// en: 'Overview' + String get overview => 'Overview'; + + /// en: 'Cast' + String get cast => 'Cast'; + + /// en: 'Seasons' + String get seasons => 'Seasons'; + + /// en: 'Studio' + String get studio => 'Studio'; + + /// en: 'Rating' + String get rating => 'Rating'; + + /// en: 'Watched' + String get watched => 'Watched'; + + /// en: '${count} episodes' + String episodeCount({required Object count}) => '${count} episodes'; + + /// en: '${watched}/${total} watched' + String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} watched'; + + /// en: 'Movie' + String get movie => 'Movie'; + + /// en: 'TV Show' + String get tvShow => 'TV Show'; + + /// en: '${minutes} min left' + String minutesLeft({required Object minutes}) => '${minutes} min left'; +} + +// Path: errors +class TranslationsErrorsEn { + TranslationsErrorsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Search failed: ${error}' + String searchFailed({required Object error}) => 'Search failed: ${error}'; + + /// en: 'Connection timeout while loading ${context}' + String connectionTimeout({required Object context}) => 'Connection timeout while loading ${context}'; + + /// en: 'Unable to connect to Plex server' + String get connectionFailed => 'Unable to connect to Plex server'; + + /// en: 'Failed to load ${context}: ${error}' + String failedToLoad({required Object context, required Object error}) => 'Failed to load ${context}: ${error}'; + + /// en: 'No client available' + String get noClientAvailable => 'No client available'; + + /// en: 'Authentication failed: ${error}' + String authenticationFailed({required Object error}) => 'Authentication failed: ${error}'; + + /// en: 'Could not launch auth URL' + String get couldNotLaunchUrl => 'Could not launch auth URL'; + + /// en: 'Please enter a token' + String get pleaseEnterToken => 'Please enter a token'; + + /// en: 'Invalid token' + String get invalidToken => 'Invalid token'; + + /// en: 'Failed to verify token: ${error}' + String failedToVerifyToken({required Object error}) => 'Failed to verify token: ${error}'; + + /// en: 'Failed to switch to ${displayName}' + String failedToSwitchProfile({required Object displayName}) => 'Failed to switch to ${displayName}'; +} + +// Path: libraries +class TranslationsLibrariesEn { + TranslationsLibrariesEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Libraries' + String get title => 'Libraries'; + + /// en: 'Scan Library Files' + String get scanLibraryFiles => 'Scan Library Files'; + + /// en: 'Scan Library' + String get scanLibrary => 'Scan Library'; + + /// en: 'Analyze' + String get analyze => 'Analyze'; + + /// en: 'Analyze Library' + String get analyzeLibrary => 'Analyze Library'; + + /// en: 'Refresh Metadata' + String get refreshMetadata => 'Refresh Metadata'; + + /// en: 'Empty Trash' + String get emptyTrash => 'Empty Trash'; + + /// en: 'Emptying trash for "${title}"...' + String emptyingTrash({required Object title}) => 'Emptying trash for "${title}"...'; + + /// en: 'Trash emptied for "${title}"' + String trashEmptied({required Object title}) => 'Trash emptied for "${title}"'; + + /// en: 'Failed to empty trash: ${error}' + String failedToEmptyTrash({required Object error}) => 'Failed to empty trash: ${error}'; + + /// en: 'Analyzing "${title}"...' + String analyzing({required Object title}) => 'Analyzing "${title}"...'; + + /// en: 'Analysis started for "${title}"' + String analysisStarted({required Object title}) => 'Analysis started for "${title}"'; + + /// en: 'Failed to analyze library: ${error}' + String failedToAnalyze({required Object error}) => 'Failed to analyze library: ${error}'; + + /// en: 'No libraries found' + String get noLibrariesFound => 'No libraries found'; + + /// en: 'This library is empty' + String get thisLibraryIsEmpty => 'This library is empty'; + + /// en: 'All' + String get all => 'All'; + + /// en: 'Clear All' + String get clearAll => 'Clear All'; + + /// en: 'Are you sure you want to scan "${title}"?' + String scanLibraryConfirm({required Object title}) => 'Are you sure you want to scan "${title}"?'; + + /// en: 'Are you sure you want to analyze "${title}"?' + String analyzeLibraryConfirm({required Object title}) => 'Are you sure you want to analyze "${title}"?'; + + /// en: 'Are you sure you want to refresh metadata for "${title}"?' + String refreshMetadataConfirm({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?'; + + /// en: 'Are you sure you want to empty trash for "${title}"?' + String emptyTrashConfirm({required Object title}) => 'Are you sure you want to empty trash for "${title}"?'; + + /// en: 'Manage Libraries' + String get manageLibraries => 'Manage Libraries'; + + /// en: 'Sort' + String get sort => 'Sort'; + + /// en: 'Sort By' + String get sortBy => 'Sort By'; + + /// en: 'Filters' + String get filters => 'Filters'; + + /// en: 'Are you sure you want to perform this action?' + String get confirmActionMessage => 'Are you sure you want to perform this action?'; + + /// en: 'Show library' + String get showLibrary => 'Show library'; + + /// en: 'Hide library' + String get hideLibrary => 'Hide library'; + + /// en: 'Library options' + String get libraryOptions => 'Library options'; + + /// en: 'library content' + String get content => 'library content'; + + /// en: 'Select library' + String get selectLibrary => 'Select library'; + + /// en: 'Filters (${count})' + String filtersWithCount({required Object count}) => 'Filters (${count})'; + + /// en: 'No recommendations available' + String get noRecommendations => 'No recommendations available'; + + /// en: 'No collections in this library' + String get noCollections => 'No collections in this library'; + + /// en: 'No folders found' + String get noFoldersFound => 'No folders found'; + + /// en: 'folders' + String get folders => 'folders'; + + late final TranslationsLibrariesTabsEn tabs = TranslationsLibrariesTabsEn._(_root); + late final TranslationsLibrariesGroupingsEn groupings = TranslationsLibrariesGroupingsEn._(_root); +} + +// Path: about +class TranslationsAboutEn { + TranslationsAboutEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'About' + String get title => 'About'; + + /// en: 'Open Source Licenses' + String get openSourceLicenses => 'Open Source Licenses'; + + /// en: 'Version ${version}' + String versionLabel({required Object version}) => 'Version ${version}'; + + /// en: 'A beautiful Plex client for Flutter' + String get appDescription => 'A beautiful Plex client for Flutter'; + + /// en: 'View licenses of third-party libraries' + String get viewLicensesDescription => 'View licenses of third-party libraries'; +} + +// Path: serverSelection +class TranslationsServerSelectionEn { + TranslationsServerSelectionEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Failed to connect to any servers. Please check your network and try again.' + String get allServerConnectionsFailed => 'Failed to connect to any servers. Please check your network and try again.'; + + /// en: 'No servers found' + String get noServersFound => 'No servers found'; + + /// en: 'No servers found for ${username} (${email})' + String noServersFoundForAccount({required Object username, required Object email}) => 'No servers found for ${username} (${email})'; + + /// en: 'Failed to load servers: ${error}' + String failedToLoadServers({required Object error}) => 'Failed to load servers: ${error}'; +} + +// Path: hubDetail +class TranslationsHubDetailEn { + TranslationsHubDetailEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Title' + String get title => 'Title'; + + /// en: 'Release Year' + String get releaseYear => 'Release Year'; + + /// en: 'Date Added' + String get dateAdded => 'Date Added'; + + /// en: 'Rating' + String get rating => 'Rating'; + + /// en: 'No items found' + String get noItemsFound => 'No items found'; +} + +// Path: logs +class TranslationsLogsEn { + TranslationsLogsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Clear Logs' + String get clearLogs => 'Clear Logs'; + + /// en: 'Copy Logs' + String get copyLogs => 'Copy Logs'; + + /// en: 'Error:' + String get error => 'Error:'; + + /// en: 'Stack Trace:' + String get stackTrace => 'Stack Trace:'; +} + +// Path: licenses +class TranslationsLicensesEn { + TranslationsLicensesEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Related Packages' + String get relatedPackages => 'Related Packages'; + + /// en: 'License' + String get license => 'License'; + + /// en: 'License ${number}' + String licenseNumber({required Object number}) => 'License ${number}'; + + /// en: '${count} licenses' + String licensesCount({required Object count}) => '${count} licenses'; +} + +// Path: navigation +class TranslationsNavigationEn { + TranslationsNavigationEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Home' + String get home => 'Home'; + + /// en: 'Search' + String get search => 'Search'; + + /// en: 'Libraries' + String get libraries => 'Libraries'; + + /// en: 'Settings' + String get settings => 'Settings'; + + /// en: 'Downloads' + String get downloads => 'Downloads'; +} + +// Path: collections +class TranslationsCollectionsEn { + TranslationsCollectionsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Collections' + String get title => 'Collections'; + + /// en: 'Collection' + String get collection => 'Collection'; + + /// en: 'Collection is empty' + String get empty => 'Collection is empty'; + + /// en: 'Cannot delete: Unknown library section' + String get unknownLibrarySection => 'Cannot delete: Unknown library section'; + + /// en: 'Delete Collection' + String get deleteCollection => 'Delete Collection'; + + /// en: 'Are you sure you want to delete "${title}"? This action cannot be undone.' + String deleteConfirm({required Object title}) => 'Are you sure you want to delete "${title}"? This action cannot be undone.'; + + /// en: 'Collection deleted' + String get deleted => 'Collection deleted'; + + /// en: 'Failed to delete collection' + String get deleteFailed => 'Failed to delete collection'; + + /// en: 'Failed to delete collection: ${error}' + String deleteFailedWithError({required Object error}) => 'Failed to delete collection: ${error}'; + + /// en: 'Failed to load collection items: ${error}' + String failedToLoadItems({required Object error}) => 'Failed to load collection items: ${error}'; + + /// en: 'Select Collection' + String get selectCollection => 'Select Collection'; + + /// en: 'Create New Collection' + String get createNewCollection => 'Create New Collection'; + + /// en: 'Collection Name' + String get collectionName => 'Collection Name'; + + /// en: 'Enter collection name' + String get enterCollectionName => 'Enter collection name'; + + /// en: 'Added to collection' + String get addedToCollection => 'Added to collection'; + + /// en: 'Failed to add to collection' + String get errorAddingToCollection => 'Failed to add to collection'; + + /// en: 'Collection created' + String get created => 'Collection created'; + + /// en: 'Remove from collection' + String get removeFromCollection => 'Remove from collection'; + + /// en: 'Remove "${title}" from this collection?' + String removeFromCollectionConfirm({required Object title}) => 'Remove "${title}" from this collection?'; + + /// en: 'Removed from collection' + String get removedFromCollection => 'Removed from collection'; + + /// en: 'Failed to remove from collection' + String get removeFromCollectionFailed => 'Failed to remove from collection'; + + /// en: 'Error removing from collection: ${error}' + String removeFromCollectionError({required Object error}) => 'Error removing from collection: ${error}'; +} + +// Path: playlists +class TranslationsPlaylistsEn { + TranslationsPlaylistsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Playlists' + String get title => 'Playlists'; + + /// en: 'Playlist' + String get playlist => 'Playlist'; + + /// en: 'No playlists found' + String get noPlaylists => 'No playlists found'; + + /// en: 'Create Playlist' + String get create => 'Create Playlist'; + + /// en: 'Playlist Name' + String get playlistName => 'Playlist Name'; + + /// en: 'Enter playlist name' + String get enterPlaylistName => 'Enter playlist name'; + + /// en: 'Delete Playlist' + String get delete => 'Delete Playlist'; + + /// en: 'Remove from Playlist' + String get removeItem => 'Remove from Playlist'; + + /// en: 'Smart Playlist' + String get smartPlaylist => 'Smart Playlist'; + + /// en: '${count} items' + String itemCount({required Object count}) => '${count} items'; + + /// en: '1 item' + String get oneItem => '1 item'; + + /// en: 'This playlist is empty' + String get emptyPlaylist => 'This playlist is empty'; + + /// en: 'Delete Playlist?' + String get deleteConfirm => 'Delete Playlist?'; + + /// en: 'Are you sure you want to delete "${name}"?' + String deleteMessage({required Object name}) => 'Are you sure you want to delete "${name}"?'; + + /// en: 'Playlist created' + String get created => 'Playlist created'; + + /// en: 'Playlist deleted' + String get deleted => 'Playlist deleted'; + + /// en: 'Added to playlist' + String get itemAdded => 'Added to playlist'; + + /// en: 'Removed from playlist' + String get itemRemoved => 'Removed from playlist'; + + /// en: 'Select Playlist' + String get selectPlaylist => 'Select Playlist'; + + /// en: 'Create New Playlist' + String get createNewPlaylist => 'Create New Playlist'; + + /// en: 'Failed to create playlist' + String get errorCreating => 'Failed to create playlist'; + + /// en: 'Failed to delete playlist' + String get errorDeleting => 'Failed to delete playlist'; + + /// en: 'Failed to load playlists' + String get errorLoading => 'Failed to load playlists'; + + /// en: 'Failed to add to playlist' + String get errorAdding => 'Failed to add to playlist'; + + /// en: 'Failed to reorder playlist item' + String get errorReordering => 'Failed to reorder playlist item'; + + /// en: 'Failed to remove from playlist' + String get errorRemoving => 'Failed to remove from playlist'; +} + +// Path: watchTogether +class TranslationsWatchTogetherEn { + TranslationsWatchTogetherEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Watch Together' + String get title => 'Watch Together'; + + /// en: 'Watch content in sync with friends and family' + String get description => 'Watch content in sync with friends and family'; + + /// en: 'Create Session' + String get createSession => 'Create Session'; + + /// en: 'Creating...' + String get creating => 'Creating...'; + + /// en: 'Join Session' + String get joinSession => 'Join Session'; + + /// en: 'Joining...' + String get joining => 'Joining...'; + + /// en: 'Control Mode' + String get controlMode => 'Control Mode'; + + /// en: 'Who can control playback?' + String get controlModeQuestion => 'Who can control playback?'; + + /// en: 'Host Only' + String get hostOnly => 'Host Only'; + + /// en: 'Anyone' + String get anyone => 'Anyone'; + + /// en: 'Hosting Session' + String get hostingSession => 'Hosting Session'; + + /// en: 'In Session' + String get inSession => 'In Session'; + + /// en: 'Session Code' + String get sessionCode => 'Session Code'; + + /// en: 'Host controls playback' + String get hostControlsPlayback => 'Host controls playback'; + + /// en: 'Anyone can control playback' + String get anyoneCanControl => 'Anyone can control playback'; + + /// en: 'Host controls' + String get hostControls => 'Host controls'; + + /// en: 'Anyone controls' + String get anyoneControls => 'Anyone controls'; + + /// en: 'Participants' + String get participants => 'Participants'; + + /// en: 'Host' + String get host => 'Host'; + + /// en: 'HOST' + String get hostBadge => 'HOST'; + + /// en: 'You are the host' + String get youAreHost => 'You are the host'; + + /// en: 'Watching with others' + String get watchingWithOthers => 'Watching with others'; + + /// en: 'End Session' + String get endSession => 'End Session'; + + /// en: 'Leave Session' + String get leaveSession => 'Leave Session'; + + /// en: 'End Session?' + String get endSessionQuestion => 'End Session?'; + + /// en: 'Leave Session?' + String get leaveSessionQuestion => 'Leave Session?'; + + /// en: 'This will end the session for all participants.' + String get endSessionConfirm => 'This will end the session for all participants.'; + + /// en: 'You will be removed from the session.' + String get leaveSessionConfirm => 'You will be removed from the session.'; + + /// en: 'This will end the watch session for all participants.' + String get endSessionConfirmOverlay => 'This will end the watch session for all participants.'; + + /// en: 'You will be disconnected from the watch session.' + String get leaveSessionConfirmOverlay => 'You will be disconnected from the watch session.'; + + /// en: 'End' + String get end => 'End'; + + /// en: 'Leave' + String get leave => 'Leave'; + + /// en: 'Syncing...' + String get syncing => 'Syncing...'; + + /// en: 'participant' + String get participant => 'participant'; + + /// en: 'Join Watch Session' + String get joinWatchSession => 'Join Watch Session'; + + /// en: 'Enter 8-character code' + String get enterCodeHint => 'Enter 8-character code'; + + /// en: 'Paste from clipboard' + String get pasteFromClipboard => 'Paste from clipboard'; + + /// en: 'Please enter a session code' + String get pleaseEnterCode => 'Please enter a session code'; + + /// en: 'Session code must be 8 characters' + String get codeMustBe8Chars => 'Session code must be 8 characters'; + + /// en: 'Enter the session code shared by the host to join their watch session.' + String get joinInstructions => 'Enter the session code shared by the host to join their watch session.'; + + /// en: 'Failed to create session' + String get failedToCreate => 'Failed to create session'; + + /// en: 'Failed to join session' + String get failedToJoin => 'Failed to join session'; + + /// en: 'Session code copied to clipboard' + String get sessionCodeCopied => 'Session code copied to clipboard'; +} + +// Path: downloads +class TranslationsDownloadsEn { + TranslationsDownloadsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Downloads' + String get title => 'Downloads'; + + /// en: 'Manage' + String get manage => 'Manage'; + + /// en: 'TV Shows' + String get tvShows => 'TV Shows'; + + /// en: 'Movies' + String get movies => 'Movies'; + + /// en: 'No downloads yet' + String get noDownloads => 'No downloads yet'; + + /// en: 'Downloaded content will appear here for offline viewing' + String get noDownloadsDescription => 'Downloaded content will appear here for offline viewing'; + + /// en: 'Download' + String get downloadNow => 'Download'; + + /// en: 'Delete download' + String get deleteDownload => 'Delete download'; + + /// en: 'Retry download' + String get retryDownload => 'Retry download'; + + /// en: 'Download queued' + String get downloadQueued => 'Download queued'; + + /// en: '${count} episodes queued for download' + String episodesQueued({required Object count}) => '${count} episodes queued for download'; + + /// en: 'Download deleted' + String get downloadDeleted => 'Download deleted'; + + /// en: 'Are you sure you want to delete "${title}"? This will remove the downloaded file from your device.' + String deleteConfirm({required Object title}) => 'Are you sure you want to delete "${title}"? This will remove the downloaded file from your device.'; + + /// en: 'Deleting ${title}... (${current} of ${total})' + String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Deleting ${title}... (${current} of ${total})'; +} + +// Path: hotkeys.actions +class TranslationsHotkeysActionsEn { + TranslationsHotkeysActionsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Play/Pause' + String get playPause => 'Play/Pause'; + + /// en: 'Volume Up' + String get volumeUp => 'Volume Up'; + + /// en: 'Volume Down' + String get volumeDown => 'Volume Down'; + + /// en: 'Seek Forward (${seconds}s)' + String seekForward({required Object seconds}) => 'Seek Forward (${seconds}s)'; + + /// en: 'Seek Backward (${seconds}s)' + String seekBackward({required Object seconds}) => 'Seek Backward (${seconds}s)'; + + /// en: 'Toggle Fullscreen' + String get fullscreenToggle => 'Toggle Fullscreen'; + + /// en: 'Toggle Mute' + String get muteToggle => 'Toggle Mute'; + + /// en: 'Toggle Subtitles' + String get subtitleToggle => 'Toggle Subtitles'; + + /// en: 'Next Audio Track' + String get audioTrackNext => 'Next Audio Track'; + + /// en: 'Next Subtitle Track' + String get subtitleTrackNext => 'Next Subtitle Track'; + + /// en: 'Next Chapter' + String get chapterNext => 'Next Chapter'; + + /// en: 'Previous Chapter' + String get chapterPrevious => 'Previous Chapter'; + + /// en: 'Increase Speed' + String get speedIncrease => 'Increase Speed'; + + /// en: 'Decrease Speed' + String get speedDecrease => 'Decrease Speed'; + + /// en: 'Reset Speed' + String get speedReset => 'Reset Speed'; + + /// en: 'Seek to Next Subtitle' + String get subSeekNext => 'Seek to Next Subtitle'; + + /// en: 'Seek to Previous Subtitle' + String get subSeekPrev => 'Seek to Previous Subtitle'; +} + +// Path: libraries.tabs +class TranslationsLibrariesTabsEn { + TranslationsLibrariesTabsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Recommended' + String get recommended => 'Recommended'; + + /// en: 'Browse' + String get browse => 'Browse'; + + /// en: 'Collections' + String get collections => 'Collections'; + + /// en: 'Playlists' + String get playlists => 'Playlists'; +} + +// Path: libraries.groupings +class TranslationsLibrariesGroupingsEn { + TranslationsLibrariesGroupingsEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'All' + String get all => 'All'; + + /// en: 'Movies' + String get movies => 'Movies'; + + /// en: 'TV Shows' + String get shows => 'TV Shows'; + + /// en: 'Seasons' + String get seasons => 'Seasons'; + + /// en: 'Episodes' + String get episodes => 'Episodes'; + + /// en: 'Folders' + String get folders => 'Folders'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on Translations { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => 'Loading...', + 'auth.signInWithPlex' => 'Sign in with Plex', + 'auth.showQRCode' => 'Show QR Code', + 'auth.cancel' => 'Cancel', + 'auth.authenticate' => 'Authenticate', + 'auth.retry' => 'Retry', + 'auth.debugEnterToken' => 'Debug: Enter Plex Token', + 'auth.plexTokenLabel' => 'Plex Auth Token', + 'auth.plexTokenHint' => 'Enter your Plex.tv token', + 'auth.authenticationTimeout' => 'Authentication timed out. Please try again.', + 'auth.scanQRCodeInstruction' => 'Scan this QR code with a device logged into Plex to authenticate.', + 'auth.waitingForAuth' => 'Waiting for authentication...\nPlease complete sign-in in your browser.', + 'common.cancel' => 'Cancel', + 'common.save' => 'Save', + 'common.close' => 'Close', + 'common.clear' => 'Clear', + 'common.reset' => 'Reset', + 'common.later' => 'Later', + 'common.submit' => 'Submit', + 'common.confirm' => 'Confirm', + 'common.retry' => 'Retry', + 'common.logout' => 'Logout', + 'common.unknown' => 'Unknown', + 'common.refresh' => 'Refresh', + 'common.yes' => 'Yes', + 'common.no' => 'No', + 'common.delete' => 'Delete', + 'common.shuffle' => 'Shuffle', + 'common.addTo' => 'Add to...', + 'screens.licenses' => 'Licenses', + 'screens.switchProfile' => 'Switch Profile', + 'screens.subtitleStyling' => 'Subtitle Styling', + 'screens.mpvConfig' => 'MPV Configuration', + 'screens.search' => 'Search', + 'screens.logs' => 'Logs', + 'update.available' => 'Update Available', + 'update.versionAvailable' => ({required Object version}) => 'Version ${version} is available', + 'update.currentVersion' => ({required Object version}) => 'Current: ${version}', + 'update.skipVersion' => 'Skip This Version', + 'update.viewRelease' => 'View Release', + 'update.latestVersion' => 'You are on the latest version', + 'update.checkFailed' => 'Failed to check for updates', + 'settings.title' => 'Settings', + 'settings.language' => 'Language', + 'settings.theme' => 'Theme', + 'settings.appearance' => 'Appearance', + 'settings.videoPlayback' => 'Video Playback', + 'settings.advanced' => 'Advanced', + 'settings.episodePosterMode' => 'Episode Poster Style', + 'settings.seriesPoster' => 'Series Poster', + 'settings.seriesPosterDescription' => 'Show the series poster for all episodes', + 'settings.seasonPoster' => 'Season Poster', + 'settings.seasonPosterDescription' => 'Show the season-specific poster for episodes', + 'settings.episodeThumbnail' => 'Episode Thumbnail', + 'settings.episodeThumbnailDescription' => 'Show 16:9 episode screenshot thumbnails', + 'settings.showHeroSectionDescription' => 'Display featured content carousel on home screen', + 'settings.secondsLabel' => 'Seconds', + 'settings.minutesLabel' => 'Minutes', + 'settings.secondsShort' => 's', + 'settings.minutesShort' => 'm', + 'settings.durationHint' => ({required Object min, required Object max}) => 'Enter duration (${min}-${max})', + 'settings.systemTheme' => 'System', + 'settings.systemThemeDescription' => 'Follow system settings', + 'settings.lightTheme' => 'Light', + 'settings.darkTheme' => 'Dark', + 'settings.libraryDensity' => 'Library Density', + 'settings.compact' => 'Compact', + 'settings.compactDescription' => 'Smaller cards, more items visible', + 'settings.normal' => 'Normal', + 'settings.normalDescription' => 'Default size', + 'settings.comfortable' => 'Comfortable', + 'settings.comfortableDescription' => 'Larger cards, fewer items visible', + 'settings.viewMode' => 'View Mode', + 'settings.gridView' => 'Grid', + 'settings.gridViewDescription' => 'Display items in a grid layout', + 'settings.listView' => 'List', + 'settings.listViewDescription' => 'Display items in a list layout', + 'settings.showHeroSection' => 'Show Hero Section', + 'settings.useGlobalHubs' => 'Use Plex Home Layout', + 'settings.useGlobalHubsDescription' => 'Show home page hubs like the official Plex client. When off, shows per-library recommendations instead.', + 'settings.showServerNameOnHubs' => 'Show Server Name on Hubs', + 'settings.showServerNameOnHubsDescription' => 'Always display the server name in hub titles. When off, only shows for duplicate hub names.', + 'settings.hardwareDecoding' => 'Hardware Decoding', + 'settings.hardwareDecodingDescription' => 'Use hardware acceleration when available', + 'settings.bufferSize' => 'Buffer Size', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => 'Subtitle Styling', + 'settings.subtitleStylingDescription' => 'Customize subtitle appearance', + 'settings.smallSkipDuration' => 'Small Skip Duration', + 'settings.largeSkipDuration' => 'Large Skip Duration', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds} seconds', + 'settings.defaultSleepTimer' => 'Default Sleep Timer', + 'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutes', + 'settings.rememberTrackSelections' => 'Remember track selections per show/movie', + 'settings.rememberTrackSelectionsDescription' => 'Automatically save audio and subtitle language preferences when you change tracks during playback', + 'settings.videoPlayerControls' => 'Video Player Controls', + 'settings.keyboardShortcuts' => 'Keyboard Shortcuts', + 'settings.keyboardShortcutsDescription' => 'Customize keyboard shortcuts', + 'settings.videoPlayerNavigation' => 'Video Player Navigation', + 'settings.videoPlayerNavigationDescription' => 'Use arrow keys to navigate video player controls', + 'settings.debugLogging' => 'Debug Logging', + 'settings.debugLoggingDescription' => 'Enable detailed logging for troubleshooting', + 'settings.viewLogs' => 'View Logs', + 'settings.viewLogsDescription' => 'View application logs', + 'settings.clearCache' => 'Clear Cache', + 'settings.clearCacheDescription' => 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.', + 'settings.clearCacheSuccess' => 'Cache cleared successfully', + 'settings.resetSettings' => 'Reset Settings', + 'settings.resetSettingsDescription' => 'This will reset all settings to their default values. This action cannot be undone.', + 'settings.resetSettingsSuccess' => 'Settings reset successfully', + 'settings.shortcutsReset' => 'Shortcuts reset to defaults', + 'settings.about' => 'About', + 'settings.aboutDescription' => 'App information and licenses', + 'settings.updates' => 'Updates', + 'settings.updateAvailable' => 'Update Available', + 'settings.checkForUpdates' => 'Check for Updates', + 'settings.validationErrorEnterNumber' => 'Please enter a valid number', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Duration must be between ${min} and ${max} ${unit}', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Shortcut already assigned to ${action}', + 'settings.shortcutUpdated' => ({required Object action}) => 'Shortcut updated for ${action}', + 'settings.autoSkip' => 'Auto Skip', + 'settings.autoSkipIntro' => 'Auto Skip Intro', + 'settings.autoSkipIntroDescription' => 'Automatically skip intro markers after a few seconds', + 'settings.autoSkipCredits' => 'Auto Skip Credits', + 'settings.autoSkipCreditsDescription' => 'Automatically skip credits and play next episode', + 'settings.autoSkipDelay' => 'Auto Skip Delay', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => 'Wait ${seconds} seconds before auto-skipping', + 'settings.downloads' => 'Downloads', + 'settings.downloadLocationDescription' => 'Choose where to store downloaded content', + 'settings.downloadLocationDefault' => 'Default (App Storage)', + 'settings.downloadLocationCustom' => 'Custom Location', + 'settings.selectFolder' => 'Select Folder', + 'settings.resetToDefault' => 'Reset to Default', + 'settings.currentPath' => ({required Object path}) => 'Current: ${path}', + 'settings.downloadLocationChanged' => 'Download location changed', + 'settings.downloadLocationReset' => 'Download location reset to default', + 'settings.downloadLocationInvalid' => 'Selected folder is not writable', + 'settings.downloadLocationSelectError' => 'Failed to select folder', + 'settings.downloadOnWifiOnly' => 'Download on WiFi only', + 'settings.downloadOnWifiOnlyDescription' => 'Prevent downloads when on cellular data', + 'settings.cellularDownloadBlocked' => 'Downloads are disabled on cellular data. Connect to WiFi or change the setting.', + 'settings.maxVolume' => 'Maximum Volume', + 'settings.maxVolumeDescription' => 'Allow volume boost above 100% for quiet media', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => 'Enter max volume (100-300)', + 'settings.discordRichPresence' => 'Discord Rich Presence', + 'settings.discordRichPresenceDescription' => 'Show what you\'re watching on Discord', + 'settings.matchContentFrameRate' => 'Match Content Frame Rate', + 'settings.matchContentFrameRateDescription' => 'Adjust display refresh rate to match video content, reducing judder and saving battery', + 'search.hint' => 'Search movies, shows, music...', + 'search.tryDifferentTerm' => 'Try a different search term', + 'search.searchYourMedia' => 'Search your media', + 'search.enterTitleActorOrKeyword' => 'Enter a title, actor, or keyword', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => 'Set Shortcut for ${actionName}', + 'hotkeys.clearShortcut' => 'Clear shortcut', + 'hotkeys.actions.playPause' => 'Play/Pause', + 'hotkeys.actions.volumeUp' => 'Volume Up', + 'hotkeys.actions.volumeDown' => 'Volume Down', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => 'Seek Forward (${seconds}s)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => 'Seek Backward (${seconds}s)', + 'hotkeys.actions.fullscreenToggle' => 'Toggle Fullscreen', + 'hotkeys.actions.muteToggle' => 'Toggle Mute', + 'hotkeys.actions.subtitleToggle' => 'Toggle Subtitles', + 'hotkeys.actions.audioTrackNext' => 'Next Audio Track', + 'hotkeys.actions.subtitleTrackNext' => 'Next Subtitle Track', + 'hotkeys.actions.chapterNext' => 'Next Chapter', + 'hotkeys.actions.chapterPrevious' => 'Previous Chapter', + 'hotkeys.actions.speedIncrease' => 'Increase Speed', + 'hotkeys.actions.speedDecrease' => 'Decrease Speed', + 'hotkeys.actions.speedReset' => 'Reset Speed', + 'hotkeys.actions.subSeekNext' => 'Seek to Next Subtitle', + 'hotkeys.actions.subSeekPrev' => 'Seek to Previous Subtitle', + 'pinEntry.enterPin' => 'Enter PIN', + 'pinEntry.showPin' => 'Show PIN', + 'pinEntry.hidePin' => 'Hide PIN', + 'fileInfo.title' => 'File Info', + 'fileInfo.video' => 'Video', + 'fileInfo.audio' => 'Audio', + 'fileInfo.file' => 'File', + 'fileInfo.advanced' => 'Advanced', + 'fileInfo.codec' => 'Codec', + 'fileInfo.resolution' => 'Resolution', + 'fileInfo.bitrate' => 'Bitrate', + 'fileInfo.frameRate' => 'Frame Rate', + 'fileInfo.aspectRatio' => 'Aspect Ratio', + 'fileInfo.profile' => 'Profile', + 'fileInfo.bitDepth' => 'Bit Depth', + 'fileInfo.colorSpace' => 'Color Space', + 'fileInfo.colorRange' => 'Color Range', + 'fileInfo.colorPrimaries' => 'Color Primaries', + 'fileInfo.chromaSubsampling' => 'Chroma Subsampling', + 'fileInfo.channels' => 'Channels', + 'fileInfo.path' => 'Path', + 'fileInfo.size' => 'Size', + 'fileInfo.container' => 'Container', + 'fileInfo.duration' => 'Duration', + 'fileInfo.optimizedForStreaming' => 'Optimized for Streaming', + 'fileInfo.has64bitOffsets' => '64-bit Offsets', + 'mediaMenu.markAsWatched' => 'Mark as Watched', + 'mediaMenu.markAsUnwatched' => 'Mark as Unwatched', + 'mediaMenu.removeFromContinueWatching' => 'Remove from Continue Watching', + 'mediaMenu.goToSeries' => 'Go to series', + 'mediaMenu.goToSeason' => 'Go to season', + 'mediaMenu.shufflePlay' => 'Shuffle Play', + 'mediaMenu.fileInfo' => 'File Info', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, movie', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV show', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => 'watched', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} percent watched', + 'accessibility.mediaCardUnwatched' => 'unwatched', + 'accessibility.tapToPlay' => 'Tap to play', + 'tooltips.shufflePlay' => 'Shuffle play', + 'tooltips.markAsWatched' => 'Mark as watched', + 'tooltips.markAsUnwatched' => 'Mark as unwatched', + 'videoControls.audioLabel' => 'Audio', + 'videoControls.subtitlesLabel' => 'Subtitles', + 'videoControls.resetToZero' => 'Reset to 0ms', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} plays later', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} plays earlier', + 'videoControls.noOffset' => 'No offset', + 'videoControls.letterbox' => 'Letterbox', + 'videoControls.fillScreen' => 'Fill screen', + 'videoControls.stretch' => 'Stretch', + 'videoControls.lockRotation' => 'Lock rotation', + 'videoControls.unlockRotation' => 'Unlock rotation', + 'videoControls.sleepTimer' => 'Sleep Timer', + 'videoControls.timerActive' => 'Timer Active', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => 'Playback will pause in ${duration}', + 'videoControls.sleepTimerCompleted' => 'Sleep timer completed - playback paused', + 'videoControls.autoPlayNext' => 'Auto-Play Next', + 'videoControls.playNext' => 'Play Next', + 'videoControls.playButton' => 'Play', + 'videoControls.pauseButton' => 'Pause', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Seek backward ${seconds} seconds', + 'videoControls.seekForwardButton' => ({required Object seconds}) => 'Seek forward ${seconds} seconds', + 'videoControls.previousButton' => 'Previous episode', + 'videoControls.nextButton' => 'Next episode', + 'videoControls.previousChapterButton' => 'Previous chapter', + 'videoControls.nextChapterButton' => 'Next chapter', + 'videoControls.muteButton' => 'Mute', + 'videoControls.unmuteButton' => 'Unmute', + 'videoControls.settingsButton' => 'Video settings', + 'videoControls.audioTrackButton' => 'Audio tracks', + 'videoControls.subtitlesButton' => 'Subtitles', + 'videoControls.chaptersButton' => 'Chapters', + 'videoControls.versionsButton' => 'Video versions', + 'videoControls.pipButton' => 'Picture-in-Picture mode', + 'videoControls.aspectRatioButton' => 'Aspect ratio', + 'videoControls.fullscreenButton' => 'Enter fullscreen', + 'videoControls.exitFullscreenButton' => 'Exit fullscreen', + 'videoControls.alwaysOnTopButton' => 'Always on top', + 'videoControls.rotationLockButton' => 'Rotation lock', + 'videoControls.timelineSlider' => 'Video timeline', + 'videoControls.volumeSlider' => 'Volume level', + 'videoControls.backButton' => 'Back', + 'userStatus.admin' => 'Admin', + 'userStatus.restricted' => 'Restricted', + 'userStatus.protected' => 'Protected', + 'userStatus.current' => 'CURRENT', + 'messages.markedAsWatched' => 'Marked as watched', + 'messages.markedAsUnwatched' => 'Marked as unwatched', + 'messages.markedAsWatchedOffline' => 'Marked as watched (will sync when online)', + 'messages.markedAsUnwatchedOffline' => 'Marked as unwatched (will sync when online)', + 'messages.removedFromContinueWatching' => 'Removed from Continue Watching', + 'messages.errorLoading' => ({required Object error}) => 'Error: ${error}', + 'messages.fileInfoNotAvailable' => 'File information not available', + 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Error loading file info: ${error}', + 'messages.errorLoadingSeries' => 'Error loading series', + 'messages.errorLoadingSeason' => 'Error loading season', + 'messages.musicNotSupported' => 'Music playback is not yet supported', + 'messages.logsCleared' => 'Logs cleared', + 'messages.logsCopied' => 'Logs copied to clipboard', + 'messages.noLogsAvailable' => 'No logs available', + 'messages.libraryScanning' => ({required Object title}) => 'Scanning "${title}"...', + 'messages.libraryScanStarted' => ({required Object title}) => 'Library scan started for "${title}"', + 'messages.libraryScanFailed' => ({required Object error}) => 'Failed to scan library: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => 'Refreshing metadata for "${title}"...', + 'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadata refresh started for "${title}"', + 'messages.metadataRefreshFailed' => ({required Object error}) => 'Failed to refresh metadata: ${error}', + 'messages.logoutConfirm' => 'Are you sure you want to logout?', + 'messages.noSeasonsFound' => 'No seasons found', + 'messages.noEpisodesFound' => 'No episodes found in first season', + 'messages.noEpisodesFoundGeneral' => 'No episodes found', + 'messages.noResultsFound' => 'No results found', + 'messages.sleepTimerSet' => ({required Object label}) => 'Sleep timer set for ${label}', + 'messages.noItemsAvailable' => 'No items available', + 'messages.failedToCreatePlayQueue' => 'Failed to create play queue', + 'messages.failedToCreatePlayQueueNoItems' => 'Failed to create play queue - no items', + 'messages.failedPlayback' => ({required Object action, required Object error}) => 'Failed to ${action}: ${error}', + 'subtitlingStyling.stylingOptions' => 'Styling Options', + 'subtitlingStyling.fontSize' => 'Font Size', + 'subtitlingStyling.textColor' => 'Text Color', + 'subtitlingStyling.borderSize' => 'Border Size', + 'subtitlingStyling.borderColor' => 'Border Color', + 'subtitlingStyling.backgroundOpacity' => 'Background Opacity', + 'subtitlingStyling.backgroundColor' => 'Background Color', + 'mpvConfig.title' => 'MPV Configuration', + 'mpvConfig.description' => 'Advanced video player settings', + 'mpvConfig.properties' => 'Properties', + 'mpvConfig.presets' => 'Presets', + 'mpvConfig.noProperties' => 'No properties configured', + 'mpvConfig.noPresets' => 'No saved presets', + 'mpvConfig.addProperty' => 'Add Property', + 'mpvConfig.editProperty' => 'Edit Property', + 'mpvConfig.deleteProperty' => 'Delete Property', + 'mpvConfig.propertyKey' => 'Property Key', + 'mpvConfig.propertyKeyHint' => 'e.g., hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => 'Property Value', + 'mpvConfig.propertyValueHint' => 'e.g., auto, 256000000', + 'mpvConfig.saveAsPreset' => 'Save as Preset...', + 'mpvConfig.presetName' => 'Preset Name', + 'mpvConfig.presetNameHint' => 'Enter a name for this preset', + 'mpvConfig.loadPreset' => 'Load', + 'mpvConfig.deletePreset' => 'Delete', + 'mpvConfig.presetSaved' => 'Preset saved', + 'mpvConfig.presetLoaded' => 'Preset loaded', + 'mpvConfig.presetDeleted' => 'Preset deleted', + 'mpvConfig.confirmDeletePreset' => 'Are you sure you want to delete this preset?', + 'mpvConfig.confirmDeleteProperty' => 'Are you sure you want to delete this property?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} entries', + 'dialog.confirmAction' => 'Confirm Action', + 'dialog.cancel' => 'Cancel', + 'dialog.playNow' => 'Play Now', + 'discover.title' => 'Discover', + 'discover.switchProfile' => 'Switch Profile', + 'discover.logout' => 'Logout', + 'discover.noContentAvailable' => 'No content available', + 'discover.addMediaToLibraries' => 'Add some media to your libraries', + 'discover.continueWatching' => 'Continue Watching', + 'discover.play' => 'Play', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => 'Pause', + 'discover.overview' => 'Overview', + 'discover.cast' => 'Cast', + 'discover.seasons' => 'Seasons', + 'discover.studio' => 'Studio', + 'discover.rating' => 'Rating', + 'discover.watched' => 'Watched', + 'discover.episodeCount' => ({required Object count}) => '${count} episodes', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '${watched}/${total} watched', + 'discover.movie' => 'Movie', + 'discover.tvShow' => 'TV Show', + 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min left', + 'errors.searchFailed' => ({required Object error}) => 'Search failed: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => 'Connection timeout while loading ${context}', + 'errors.connectionFailed' => 'Unable to connect to Plex server', + 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Failed to load ${context}: ${error}', + 'errors.noClientAvailable' => 'No client available', + 'errors.authenticationFailed' => ({required Object error}) => 'Authentication failed: ${error}', + 'errors.couldNotLaunchUrl' => 'Could not launch auth URL', + 'errors.pleaseEnterToken' => 'Please enter a token', + 'errors.invalidToken' => 'Invalid token', + 'errors.failedToVerifyToken' => ({required Object error}) => 'Failed to verify token: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => 'Failed to switch to ${displayName}', + 'libraries.title' => 'Libraries', + 'libraries.scanLibraryFiles' => 'Scan Library Files', + 'libraries.scanLibrary' => 'Scan Library', + 'libraries.analyze' => 'Analyze', + 'libraries.analyzeLibrary' => 'Analyze Library', + 'libraries.refreshMetadata' => 'Refresh Metadata', + 'libraries.emptyTrash' => 'Empty Trash', + 'libraries.emptyingTrash' => ({required Object title}) => 'Emptying trash for "${title}"...', + 'libraries.trashEmptied' => ({required Object title}) => 'Trash emptied for "${title}"', + 'libraries.failedToEmptyTrash' => ({required Object error}) => 'Failed to empty trash: ${error}', + 'libraries.analyzing' => ({required Object title}) => 'Analyzing "${title}"...', + 'libraries.analysisStarted' => ({required Object title}) => 'Analysis started for "${title}"', + 'libraries.failedToAnalyze' => ({required Object error}) => 'Failed to analyze library: ${error}', + 'libraries.noLibrariesFound' => 'No libraries found', + 'libraries.thisLibraryIsEmpty' => 'This library is empty', + 'libraries.all' => 'All', + 'libraries.clearAll' => 'Clear All', + 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Are you sure you want to scan "${title}"?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => 'Are you sure you want to analyze "${title}"?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => 'Are you sure you want to empty trash for "${title}"?', + 'libraries.manageLibraries' => 'Manage Libraries', + 'libraries.sort' => 'Sort', + 'libraries.sortBy' => 'Sort By', + 'libraries.filters' => 'Filters', + 'libraries.confirmActionMessage' => 'Are you sure you want to perform this action?', + 'libraries.showLibrary' => 'Show library', + 'libraries.hideLibrary' => 'Hide library', + 'libraries.libraryOptions' => 'Library options', + 'libraries.content' => 'library content', + 'libraries.selectLibrary' => 'Select library', + 'libraries.filtersWithCount' => ({required Object count}) => 'Filters (${count})', + 'libraries.noRecommendations' => 'No recommendations available', + 'libraries.noCollections' => 'No collections in this library', + 'libraries.noFoldersFound' => 'No folders found', + 'libraries.folders' => 'folders', + 'libraries.tabs.recommended' => 'Recommended', + 'libraries.tabs.browse' => 'Browse', + 'libraries.tabs.collections' => 'Collections', + 'libraries.tabs.playlists' => 'Playlists', + 'libraries.groupings.all' => 'All', + 'libraries.groupings.movies' => 'Movies', + 'libraries.groupings.shows' => 'TV Shows', + 'libraries.groupings.seasons' => 'Seasons', + 'libraries.groupings.episodes' => 'Episodes', + 'libraries.groupings.folders' => 'Folders', + 'about.title' => 'About', + 'about.openSourceLicenses' => 'Open Source Licenses', + 'about.versionLabel' => ({required Object version}) => 'Version ${version}', + 'about.appDescription' => 'A beautiful Plex client for Flutter', + 'about.viewLicensesDescription' => 'View licenses of third-party libraries', + 'serverSelection.allServerConnectionsFailed' => 'Failed to connect to any servers. Please check your network and try again.', + 'serverSelection.noServersFound' => 'No servers found', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No servers found for ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Failed to load servers: ${error}', + 'hubDetail.title' => 'Title', + 'hubDetail.releaseYear' => 'Release Year', + 'hubDetail.dateAdded' => 'Date Added', + 'hubDetail.rating' => 'Rating', + 'hubDetail.noItemsFound' => 'No items found', + 'logs.clearLogs' => 'Clear Logs', + 'logs.copyLogs' => 'Copy Logs', + 'logs.error' => 'Error:', + 'logs.stackTrace' => 'Stack Trace:', + 'licenses.relatedPackages' => 'Related Packages', + 'licenses.license' => 'License', + 'licenses.licenseNumber' => ({required Object number}) => 'License ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} licenses', + 'navigation.home' => 'Home', + 'navigation.search' => 'Search', + 'navigation.libraries' => 'Libraries', + 'navigation.settings' => 'Settings', + 'navigation.downloads' => 'Downloads', + 'collections.title' => 'Collections', + 'collections.collection' => 'Collection', + 'collections.empty' => 'Collection is empty', + 'collections.unknownLibrarySection' => 'Cannot delete: Unknown library section', + 'collections.deleteCollection' => 'Delete Collection', + 'collections.deleteConfirm' => ({required Object title}) => 'Are you sure you want to delete "${title}"? This action cannot be undone.', + 'collections.deleted' => 'Collection deleted', + 'collections.deleteFailed' => 'Failed to delete collection', + 'collections.deleteFailedWithError' => ({required Object error}) => 'Failed to delete collection: ${error}', + 'collections.failedToLoadItems' => ({required Object error}) => 'Failed to load collection items: ${error}', + 'collections.selectCollection' => 'Select Collection', + 'collections.createNewCollection' => 'Create New Collection', + 'collections.collectionName' => 'Collection Name', + 'collections.enterCollectionName' => 'Enter collection name', + 'collections.addedToCollection' => 'Added to collection', + 'collections.errorAddingToCollection' => 'Failed to add to collection', + 'collections.created' => 'Collection created', + 'collections.removeFromCollection' => 'Remove from collection', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => 'Remove "${title}" from this collection?', + 'collections.removedFromCollection' => 'Removed from collection', + 'collections.removeFromCollectionFailed' => 'Failed to remove from collection', + 'collections.removeFromCollectionError' => ({required Object error}) => 'Error removing from collection: ${error}', + 'playlists.title' => 'Playlists', + 'playlists.playlist' => 'Playlist', + 'playlists.noPlaylists' => 'No playlists found', + 'playlists.create' => 'Create Playlist', + 'playlists.playlistName' => 'Playlist Name', + 'playlists.enterPlaylistName' => 'Enter playlist name', + 'playlists.delete' => 'Delete Playlist', + 'playlists.removeItem' => 'Remove from Playlist', + 'playlists.smartPlaylist' => 'Smart Playlist', + 'playlists.itemCount' => ({required Object count}) => '${count} items', + 'playlists.oneItem' => '1 item', + 'playlists.emptyPlaylist' => 'This playlist is empty', + 'playlists.deleteConfirm' => 'Delete Playlist?', + 'playlists.deleteMessage' => ({required Object name}) => 'Are you sure you want to delete "${name}"?', + 'playlists.created' => 'Playlist created', + 'playlists.deleted' => 'Playlist deleted', + 'playlists.itemAdded' => 'Added to playlist', + 'playlists.itemRemoved' => 'Removed from playlist', + 'playlists.selectPlaylist' => 'Select Playlist', + 'playlists.createNewPlaylist' => 'Create New Playlist', + 'playlists.errorCreating' => 'Failed to create playlist', + 'playlists.errorDeleting' => 'Failed to delete playlist', + 'playlists.errorLoading' => 'Failed to load playlists', + 'playlists.errorAdding' => 'Failed to add to playlist', + 'playlists.errorReordering' => 'Failed to reorder playlist item', + 'playlists.errorRemoving' => 'Failed to remove from playlist', + 'watchTogether.title' => 'Watch Together', + 'watchTogether.description' => 'Watch content in sync with friends and family', + 'watchTogether.createSession' => 'Create Session', + 'watchTogether.creating' => 'Creating...', + 'watchTogether.joinSession' => 'Join Session', + 'watchTogether.joining' => 'Joining...', + 'watchTogether.controlMode' => 'Control Mode', + 'watchTogether.controlModeQuestion' => 'Who can control playback?', + 'watchTogether.hostOnly' => 'Host Only', + 'watchTogether.anyone' => 'Anyone', + 'watchTogether.hostingSession' => 'Hosting Session', + 'watchTogether.inSession' => 'In Session', + 'watchTogether.sessionCode' => 'Session Code', + 'watchTogether.hostControlsPlayback' => 'Host controls playback', + 'watchTogether.anyoneCanControl' => 'Anyone can control playback', + 'watchTogether.hostControls' => 'Host controls', + 'watchTogether.anyoneControls' => 'Anyone controls', + 'watchTogether.participants' => 'Participants', + 'watchTogether.host' => 'Host', + 'watchTogether.hostBadge' => 'HOST', + 'watchTogether.youAreHost' => 'You are the host', + 'watchTogether.watchingWithOthers' => 'Watching with others', + 'watchTogether.endSession' => 'End Session', + 'watchTogether.leaveSession' => 'Leave Session', + 'watchTogether.endSessionQuestion' => 'End Session?', + 'watchTogether.leaveSessionQuestion' => 'Leave Session?', + 'watchTogether.endSessionConfirm' => 'This will end the session for all participants.', + 'watchTogether.leaveSessionConfirm' => 'You will be removed from the session.', + 'watchTogether.endSessionConfirmOverlay' => 'This will end the watch session for all participants.', + 'watchTogether.leaveSessionConfirmOverlay' => 'You will be disconnected from the watch session.', + 'watchTogether.end' => 'End', + 'watchTogether.leave' => 'Leave', + _ => null, + } ?? switch (path) { + 'watchTogether.syncing' => 'Syncing...', + 'watchTogether.participant' => 'participant', + 'watchTogether.joinWatchSession' => 'Join Watch Session', + 'watchTogether.enterCodeHint' => 'Enter 8-character code', + 'watchTogether.pasteFromClipboard' => 'Paste from clipboard', + 'watchTogether.pleaseEnterCode' => 'Please enter a session code', + 'watchTogether.codeMustBe8Chars' => 'Session code must be 8 characters', + 'watchTogether.joinInstructions' => 'Enter the session code shared by the host to join their watch session.', + 'watchTogether.failedToCreate' => 'Failed to create session', + 'watchTogether.failedToJoin' => 'Failed to join session', + 'watchTogether.sessionCodeCopied' => 'Session code copied to clipboard', + 'downloads.title' => 'Downloads', + 'downloads.manage' => 'Manage', + 'downloads.tvShows' => 'TV Shows', + 'downloads.movies' => 'Movies', + 'downloads.noDownloads' => 'No downloads yet', + 'downloads.noDownloadsDescription' => 'Downloaded content will appear here for offline viewing', + 'downloads.downloadNow' => 'Download', + 'downloads.deleteDownload' => 'Delete download', + 'downloads.retryDownload' => 'Retry download', + 'downloads.downloadQueued' => 'Download queued', + 'downloads.episodesQueued' => ({required Object count}) => '${count} episodes queued for download', + 'downloads.downloadDeleted' => 'Download deleted', + 'downloads.deleteConfirm' => ({required Object title}) => 'Are you sure you want to delete "${title}"? This will remove the downloaded file from your device.', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => 'Deleting ${title}... (${current} of ${total})', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart new file mode 100644 index 00000000..1449f5f7 --- /dev/null +++ b/lib/i18n/strings_fr.g.dart @@ -0,0 +1,1479 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsFr with BaseTranslations implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsFr({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.fr, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsFr _root = this; // ignore: unused_field + + @override + TranslationsFr $copyWith({TranslationMetadata? meta}) => TranslationsFr(meta: meta ?? this.$meta); + + // Translations + @override late final _TranslationsAppFr app = _TranslationsAppFr._(_root); + @override late final _TranslationsAuthFr auth = _TranslationsAuthFr._(_root); + @override late final _TranslationsCommonFr common = _TranslationsCommonFr._(_root); + @override late final _TranslationsScreensFr screens = _TranslationsScreensFr._(_root); + @override late final _TranslationsUpdateFr update = _TranslationsUpdateFr._(_root); + @override late final _TranslationsSettingsFr settings = _TranslationsSettingsFr._(_root); + @override late final _TranslationsSearchFr search = _TranslationsSearchFr._(_root); + @override late final _TranslationsHotkeysFr hotkeys = _TranslationsHotkeysFr._(_root); + @override late final _TranslationsPinEntryFr pinEntry = _TranslationsPinEntryFr._(_root); + @override late final _TranslationsFileInfoFr fileInfo = _TranslationsFileInfoFr._(_root); + @override late final _TranslationsMediaMenuFr mediaMenu = _TranslationsMediaMenuFr._(_root); + @override late final _TranslationsAccessibilityFr accessibility = _TranslationsAccessibilityFr._(_root); + @override late final _TranslationsTooltipsFr tooltips = _TranslationsTooltipsFr._(_root); + @override late final _TranslationsVideoControlsFr videoControls = _TranslationsVideoControlsFr._(_root); + @override late final _TranslationsUserStatusFr userStatus = _TranslationsUserStatusFr._(_root); + @override late final _TranslationsMessagesFr messages = _TranslationsMessagesFr._(_root); + @override late final _TranslationsSubtitlingStylingFr subtitlingStyling = _TranslationsSubtitlingStylingFr._(_root); + @override late final _TranslationsMpvConfigFr mpvConfig = _TranslationsMpvConfigFr._(_root); + @override late final _TranslationsDialogFr dialog = _TranslationsDialogFr._(_root); + @override late final _TranslationsDiscoverFr discover = _TranslationsDiscoverFr._(_root); + @override late final _TranslationsErrorsFr errors = _TranslationsErrorsFr._(_root); + @override late final _TranslationsLibrariesFr libraries = _TranslationsLibrariesFr._(_root); + @override late final _TranslationsAboutFr about = _TranslationsAboutFr._(_root); + @override late final _TranslationsServerSelectionFr serverSelection = _TranslationsServerSelectionFr._(_root); + @override late final _TranslationsHubDetailFr hubDetail = _TranslationsHubDetailFr._(_root); + @override late final _TranslationsLogsFr logs = _TranslationsLogsFr._(_root); + @override late final _TranslationsLicensesFr licenses = _TranslationsLicensesFr._(_root); + @override late final _TranslationsNavigationFr navigation = _TranslationsNavigationFr._(_root); + @override late final _TranslationsCollectionsFr collections = _TranslationsCollectionsFr._(_root); + @override late final _TranslationsPlaylistsFr playlists = _TranslationsPlaylistsFr._(_root); + @override late final _TranslationsWatchTogetherFr watchTogether = _TranslationsWatchTogetherFr._(_root); + @override late final _TranslationsDownloadsFr downloads = _TranslationsDownloadsFr._(_root); +} + +// Path: app +class _TranslationsAppFr implements TranslationsAppEn { + _TranslationsAppFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Chargement...'; +} + +// Path: auth +class _TranslationsAuthFr implements TranslationsAuthEn { + _TranslationsAuthFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get signInWithPlex => 'S\'inscrire avec Plex'; + @override String get showQRCode => 'Afficher le QR Code'; + @override String get cancel => 'Annuler'; + @override String get authenticate => 'S\'authentifier'; + @override String get retry => 'Réessayer'; + @override String get debugEnterToken => 'Debug: Entrez votre token Plex'; + @override String get plexTokenLabel => 'Token d\'authentification Plex'; + @override String get plexTokenHint => 'Entrez votre token Plex.tv'; + @override String get authenticationTimeout => 'Délai d\'authentification expiré. Veuillez réessayer.'; + @override String get scanQRCodeInstruction => 'Scannez ce code QR avec un appareil connecté à Plex pour vous authentifier.'; + @override String get waitingForAuth => 'En attente d\'authentification...\nVeuillez vous connecter dans votre navigateur.'; +} + +// Path: common +class _TranslationsCommonFr implements TranslationsCommonEn { + _TranslationsCommonFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get cancel => 'Annuler'; + @override String get save => 'Sauvegarder'; + @override String get close => 'Fermer'; + @override String get clear => 'Nettoyer'; + @override String get reset => 'Réinitialiser'; + @override String get later => 'Plus tard'; + @override String get submit => 'Soumettre'; + @override String get confirm => 'Confirmer'; + @override String get retry => 'Réessayer'; + @override String get logout => 'Se déconnecter'; + @override String get unknown => 'Inconnu'; + @override String get refresh => 'Rafraichir'; + @override String get yes => 'Oui'; + @override String get no => 'Non'; + @override String get delete => 'Supprimer'; + @override String get shuffle => 'Mélanger'; + @override String get addTo => 'Ajouter à...'; +} + +// Path: screens +class _TranslationsScreensFr implements TranslationsScreensEn { + _TranslationsScreensFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get licenses => 'Licenses'; + @override String get switchProfile => 'Changer de profil'; + @override String get subtitleStyling => 'Configuration des sous-titres'; + @override String get mpvConfig => 'Configuration MPV'; + @override String get search => 'Recherche'; + @override String get logs => 'Logs'; +} + +// Path: update +class _TranslationsUpdateFr implements TranslationsUpdateEn { + _TranslationsUpdateFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get available => 'Mise à jour disponible'; + @override String versionAvailable({required Object version}) => 'Version ${version} disponible'; + @override String currentVersion({required Object version}) => 'Installé: ${version}'; + @override String get skipVersion => 'Ignorer cette version'; + @override String get viewRelease => 'Voir la Release'; + @override String get latestVersion => 'Vous utilisez la dernière version'; + @override String get checkFailed => 'Échec de la vérification des mises à jour'; +} + +// Path: settings +class _TranslationsSettingsFr implements TranslationsSettingsEn { + _TranslationsSettingsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Paramètres'; + @override String get language => 'Langue'; + @override String get theme => 'Thème'; + @override String get appearance => 'Apparence'; + @override String get videoPlayback => 'Lecture vidéo'; + @override String get advanced => 'Avancé'; + @override String get episodePosterMode => 'Style du Poster d\'épisode'; + @override String get seriesPoster => 'Poster de série'; + @override String get seriesPosterDescription => 'Afficher le poster de série pour tous les épisodes'; + @override String get seasonPoster => 'Poster de saison'; + @override String get seasonPosterDescription => 'Afficher le poster spécifique à la saison pour les épisodes'; + @override String get episodeThumbnail => 'Mignature d\'épisode'; + @override String get episodeThumbnailDescription => 'Afficher les vignettes des captures d\'écran des épisodes au format 16:9'; + @override String get showHeroSectionDescription => 'Afficher le carrousel de contenu en vedette sur l\'écran d\'accueil'; + @override String get secondsLabel => 'Secondes'; + @override String get minutesLabel => 'Minutes'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Entrez la durée (${min}-${max})'; + @override String get systemTheme => 'Système'; + @override String get systemThemeDescription => 'Suivre les paramètres système'; + @override String get lightTheme => 'Light'; + @override String get darkTheme => 'Dark'; + @override String get libraryDensity => 'Densité des bibliothèques'; + @override String get compact => 'Compact'; + @override String get compactDescription => 'Cartes plus petites, plus d\'éléments visibles'; + @override String get normal => 'Normal'; + @override String get normalDescription => 'Taille par défaut'; + @override String get comfortable => 'Confortable'; + @override String get comfortableDescription => 'Cartes plus grandes, moins d\'éléments visibles'; + @override String get viewMode => 'Mode d\'affichage'; + @override String get gridView => 'Grille'; + @override String get gridViewDescription => 'Afficher les éléments dans une disposition en grille'; + @override String get listView => 'Liste'; + @override String get listViewDescription => 'Afficher les éléments dans une liste'; + @override String get showHeroSection => 'Afficher la section Hero'; + @override String get useGlobalHubs => 'Utiliser la disposition Plex Home'; + @override String get useGlobalHubsDescription => 'Afficher les hubs de la page d\'accueil comme le client Plex officiel. Lorsque cette option est désactivée, affiche à la place les recommandations par bibliothèque.'; + @override String get showServerNameOnHubs => 'Afficher le nom du serveur sur les hubs'; + @override String get showServerNameOnHubsDescription => 'Toujours afficher le nom du serveur dans les titres des hubs. Lorsque cette option est désactivée, seuls les noms de hubs en double s\'affichent.'; + @override String get hardwareDecoding => 'Décodage matériel'; + @override String get hardwareDecodingDescription => 'Utilisez l\'accélération matérielle lorsqu\'elle est disponible.'; + @override String get bufferSize => 'Taille du Buffer'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Stylisation des sous-titres'; + @override String get subtitleStylingDescription => 'Personnaliser l\'apparence des sous-titres'; + @override String get smallSkipDuration => 'Small Skip Duration'; + @override String get largeSkipDuration => 'Large Skip Duration'; + @override String secondsUnit({required Object seconds}) => '${seconds} secondes'; + @override String get defaultSleepTimer => 'Minuterie de mise en veille par défaut'; + @override String minutesUnit({required Object minutes}) => '${minutes} minutes'; + @override String get rememberTrackSelections => 'Mémoriser les sélections de pistes par émission/film'; + @override String get rememberTrackSelectionsDescription => 'Enregistrer automatiquement les préférences linguistiques pour l\'audio et les sous-titres lorsque vous changez de piste pendant la lecture'; + @override String get videoPlayerControls => 'Commandes du lecteur vidéo'; + @override String get keyboardShortcuts => 'Raccourcis clavier'; + @override String get keyboardShortcutsDescription => 'Personnaliser les raccourcis clavier'; + @override String get videoPlayerNavigation => 'Navigation dans le lecteur vidéo'; + @override String get videoPlayerNavigationDescription => 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.'; + @override String get debugLogging => 'Journalisation de débogage'; + @override String get debugLoggingDescription => 'Activer la journalisation détaillée pour le dépannage'; + @override String get viewLogs => 'Voir les logs'; + @override String get viewLogsDescription => 'Voir les logs d\'application'; + @override String get clearCache => 'Vider le cache'; + @override String get clearCacheDescription => 'Cela effacera toutes les images et données mises en cache. Le chargement du contenu de l\'application peut prendre plus de temps après avoir effacé le cache.'; + @override String get clearCacheSuccess => 'Cache effacé avec succès'; + @override String get resetSettings => 'Réinitialiser les paramètres'; + @override String get resetSettingsDescription => 'Cela réinitialisera tous les paramètres à leurs valeurs par défaut. Cette action ne peut pas être annulée.'; + @override String get resetSettingsSuccess => 'Réinitialisation des paramètres réussie'; + @override String get shortcutsReset => 'Raccourcis réinitialisés aux valeurs par défaut'; + @override String get about => 'À propos'; + @override String get aboutDescription => 'Informations sur l\'application et licences'; + @override String get updates => 'Mises à jour'; + @override String get updateAvailable => 'Mise à jour disponible'; + @override String get checkForUpdates => 'Vérifier les mises à jour'; + @override String get validationErrorEnterNumber => 'Veuillez saisir un numéro valide'; + @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'La durée doit être comprise entre ${min} et ${max} ${unit}'; + @override String shortcutAlreadyAssigned({required Object action}) => 'Raccourci déjà attribué à ${action}'; + @override String shortcutUpdated({required Object action}) => 'Raccourci mis à jour pour ${action}'; + @override String get autoSkip => 'Skip automatique'; + @override String get autoSkipIntro => 'Skip automatique de l\'introduction'; + @override String get autoSkipIntroDescription => 'Skipper automatiquement l\'introduction après quelques secondes'; + @override String get autoSkipCredits => 'Skip automatique des crédits'; + @override String get autoSkipCreditsDescription => 'Passer les crédits et passer à l\'épisode suivant automatiquement'; + @override String get autoSkipDelay => 'Délai avant skip automatique'; + @override String autoSkipDelayDescription({required Object seconds}) => 'Attendre ${seconds} secondes avant l\'auto-skip'; + @override String get downloads => 'Téléchargement'; + @override String get downloadLocationDescription => 'Choisissez où stocker le contenu téléchargé'; + @override String get downloadLocationDefault => 'Par défaut (stockage de l\'application)'; + @override String get downloadLocationCustom => 'Emplacement personnalisé'; + @override String get selectFolder => 'Sélectionner un dossier'; + @override String get resetToDefault => 'Réinitialiser les paramètres par défaut'; + @override String currentPath({required Object path}) => 'Actuel: ${path}'; + @override String get downloadLocationChanged => 'Emplacement de téléchargement modifié'; + @override String get downloadLocationReset => 'Emplacement de téléchargement réinitialisé à la valeur par défaut'; + @override String get downloadLocationInvalid => 'Le dossier sélectionné n\'est pas accessible en écriture'; + @override String get downloadLocationSelectError => 'Échec de la sélection du dossier'; + @override String get downloadOnWifiOnly => 'Télécharger uniquement via WiFi'; + @override String get downloadOnWifiOnlyDescription => 'Empêcher les téléchargements lorsque vous utilisez les données cellulaires'; + @override String get cellularDownloadBlocked => 'Les téléchargements sont désactivés sur les données cellulaires. Connectez-vous au Wi-Fi ou modifiez le paramètre.'; + @override String get maxVolume => 'Volume maximal'; + @override String get maxVolumeDescription => 'Autoriser l\'augmentation du volume au-delà de 100 % pour les médias silencieux'; + @override String maxVolumePercent({required Object percent}) => '${percent}%'; + @override String get maxVolumeHint => 'Entrez le volume maximal (100-300)'; + @override String get discordRichPresence => 'Discord Rich Presence'; + @override String get discordRichPresenceDescription => 'Montrez ce que vous regardez sur Discord'; + @override String get matchContentFrameRate => 'Fréquence d\'images du contenu correspondant'; + @override String get matchContentFrameRateDescription => 'Ajustez la fréquence de rafraîchissement de l\'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie'; +} + +// Path: search +class _TranslationsSearchFr implements TranslationsSearchEn { + _TranslationsSearchFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get hint => 'Rechercher des films, des séries, de la musique...'; + @override String get tryDifferentTerm => 'Essayez un autre terme de recherche'; + @override String get searchYourMedia => 'Rechercher dans vos médias'; + @override String get enterTitleActorOrKeyword => 'Entrez un titre, un acteur ou un mot-clé'; +} + +// Path: hotkeys +class _TranslationsHotkeysFr implements TranslationsHotkeysEn { + _TranslationsHotkeysFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String setShortcutFor({required Object actionName}) => 'Définir un raccourci pour ${actionName}'; + @override String get clearShortcut => 'Effacer le raccourci'; + @override late final _TranslationsHotkeysActionsFr actions = _TranslationsHotkeysActionsFr._(_root); +} + +// Path: pinEntry +class _TranslationsPinEntryFr implements TranslationsPinEntryEn { + _TranslationsPinEntryFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get enterPin => 'Entrer le code PIN'; + @override String get showPin => 'Afficher le code PIN'; + @override String get hidePin => 'Masquer le code PIN'; +} + +// Path: fileInfo +class _TranslationsFileInfoFr implements TranslationsFileInfoEn { + _TranslationsFileInfoFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Informations sur le fichier'; + @override String get video => 'Vidéo'; + @override String get audio => 'Audio'; + @override String get file => 'Fichier'; + @override String get advanced => 'Avancé'; + @override String get codec => 'Codec'; + @override String get resolution => 'Résolution'; + @override String get bitrate => 'Bitrate'; + @override String get frameRate => 'Fréquence d\'images'; + @override String get aspectRatio => 'Format d\'image'; + @override String get profile => 'Profil'; + @override String get bitDepth => 'Profondeur de bits'; + @override String get colorSpace => 'Espace colorimétrique'; + @override String get colorRange => 'Gamme de couleurs'; + @override String get colorPrimaries => 'Couleurs primaires'; + @override String get chromaSubsampling => 'Sous-échantillonnage chromatique'; + @override String get channels => 'Channels'; + @override String get path => 'Chemin'; + @override String get size => 'Taille'; + @override String get container => 'Conteneur'; + @override String get duration => 'Durée'; + @override String get optimizedForStreaming => 'Optimisé pour le streaming'; + @override String get has64bitOffsets => 'Décalages 64 bits'; +} + +// Path: mediaMenu +class _TranslationsMediaMenuFr implements TranslationsMediaMenuEn { + _TranslationsMediaMenuFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get markAsWatched => 'Marquer comme vu'; + @override String get markAsUnwatched => 'Marquer comme non visionné'; + @override String get removeFromContinueWatching => 'Supprimer de la liste "Continuer à regarder"'; + @override String get goToSeries => 'Aller à la série'; + @override String get goToSeason => 'Aller à la saison'; + @override String get shufflePlay => 'Lecture aléatoire'; + @override String get fileInfo => 'Informations sur le fichier'; +} + +// Path: accessibility +class _TranslationsAccessibilityFr implements TranslationsAccessibilityEn { + _TranslationsAccessibilityFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, film'; + @override String mediaCardShow({required Object title}) => '${title}, show 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 => 'visionné'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} pourcentage visionné'; + @override String get mediaCardUnwatched => 'non visionné'; + @override String get tapToPlay => 'Appuyez pour lire'; +} + +// Path: tooltips +class _TranslationsTooltipsFr implements TranslationsTooltipsEn { + _TranslationsTooltipsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get shufflePlay => 'Lecture aléatoire'; + @override String get markAsWatched => 'Marqué comme vu'; + @override String get markAsUnwatched => 'Marqué comme non vu'; +} + +// Path: videoControls +class _TranslationsVideoControlsFr implements TranslationsVideoControlsEn { + _TranslationsVideoControlsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get audioLabel => 'Audio'; + @override String get subtitlesLabel => 'Sous-titres'; + @override String get resetToZero => 'Réinitialiser à 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} lire plus tard'; + @override String playsEarlier({required Object label}) => '${label} lire plus tôt'; + @override String get noOffset => 'Pas de décalage'; + @override String get letterbox => 'Boîte aux lettres'; + @override String get fillScreen => 'Remplir l\'écran'; + @override String get stretch => 'Etirer'; + @override String get lockRotation => 'Verrouillage de la rotation'; + @override String get unlockRotation => 'Déverrouiller la rotation'; + @override String get sleepTimer => 'Minuterie de mise en veille'; + @override String get timerActive => 'Minuterie active'; + @override String playbackWillPauseIn({required Object duration}) => 'La lecture sera mise en pause dans ${duration}'; + @override String get sleepTimerCompleted => 'Minuterie de mise en veille terminée - lecture en pause'; + @override String get autoPlayNext => 'Lecture automatique suivante'; + @override String get playNext => 'Lire l\'épisode suivant'; + @override String get playButton => 'Lire'; + @override String get pauseButton => 'Pause'; + @override String seekBackwardButton({required Object seconds}) => 'Reculer de ${seconds} secondes'; + @override String seekForwardButton({required Object seconds}) => 'Avancer de ${seconds} secondes'; + @override String get previousButton => 'Épisode précédent'; + @override String get nextButton => 'Épisode suivant'; + @override String get previousChapterButton => 'Chapitre précédent'; + @override String get nextChapterButton => 'Chapitre suivant'; + @override String get muteButton => 'Mute'; + @override String get unmuteButton => 'Dé-mute'; + @override String get settingsButton => 'Paramètres vidéo'; + @override String get audioTrackButton => 'Pistes audio'; + @override String get subtitlesButton => 'Sous-titres'; + @override String get chaptersButton => 'Chapitres'; + @override String get versionsButton => 'Versions vidéo'; + @override String get pipButton => 'Mode PiP (Picture-in-Picture)'; + @override String get aspectRatioButton => 'Format d\'image'; + @override String get fullscreenButton => 'Passer en mode plein écran'; + @override String get exitFullscreenButton => 'Quitter le mode plein écran'; + @override String get alwaysOnTopButton => 'Always on top'; + @override String get rotationLockButton => 'Verrouillage de rotation'; + @override String get timelineSlider => 'Timeline vidéo'; + @override String get volumeSlider => 'Niveau sonore'; + @override String get backButton => 'Retour'; +} + +// Path: userStatus +class _TranslationsUserStatusFr implements TranslationsUserStatusEn { + _TranslationsUserStatusFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get admin => 'Admin'; + @override String get restricted => 'Restreint'; + @override String get protected => 'Protégé'; + @override String get current => 'ACTUEL'; +} + +// Path: messages +class _TranslationsMessagesFr implements TranslationsMessagesEn { + _TranslationsMessagesFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get markedAsWatched => 'Marqué comme vu'; + @override String get markedAsUnwatched => 'Marqué comme non vu'; + @override String get markedAsWatchedOffline => 'Marqué comme vu (se synchronisera lorsque vous serez en ligne)'; + @override String get markedAsUnwatchedOffline => 'Marqué comme non vu (sera synchronisé lorsque vous serez en ligne)'; + @override String get removedFromContinueWatching => 'Supprimer de "Continuer à regarder"'; + @override String errorLoading({required Object error}) => 'Erreur: ${error}'; + @override String get fileInfoNotAvailable => 'Informations sur le fichier non disponibles'; + @override String errorLoadingFileInfo({required Object error}) => 'Erreur lors du chargement des informations sur le fichier: ${error}'; + @override String get errorLoadingSeries => 'Erreur lors du chargement de la série'; + @override String get errorLoadingSeason => 'Erreur lors du chargement de la saison'; + @override String get musicNotSupported => 'La lecture de musique n\'est pas encore prise en charge'; + @override String get logsCleared => 'Logs effacés'; + @override String get logsCopied => 'Logs copiés dans le presse-papier'; + @override String get noLogsAvailable => 'Aucun log disponible'; + @override String libraryScanning({required Object title}) => 'Scan de "${title}"...'; + @override String libraryScanStarted({required Object title}) => 'Scan de la bibliothèque démarrée pour "${title}"'; + @override String libraryScanFailed({required Object error}) => 'Échec du scan de la bibliothèque: ${error}'; + @override String metadataRefreshing({required Object title}) => 'Actualisation des métadonnées pour "${title}"...'; + @override String metadataRefreshStarted({required Object title}) => 'Actualisation des métadonnées lancée pour "${title}"'; + @override String metadataRefreshFailed({required Object error}) => 'Échec de l\'actualisation des métadonnées: ${error}'; + @override String get logoutConfirm => 'Êtes-vous sûr de vouloir vous déconnecter ?'; + @override String get noSeasonsFound => 'Aucune saison trouvée'; + @override String get noEpisodesFound => 'Aucun épisode trouvé dans la première saison'; + @override String get noEpisodesFoundGeneral => 'Aucun épisode trouvé'; + @override String get noResultsFound => 'Aucun résultat trouvé'; + @override String sleepTimerSet({required Object label}) => 'Minuterie de mise en veille réglée sur ${label}'; + @override String get noItemsAvailable => 'Aucun élément disponible'; + @override String get failedToCreatePlayQueue => 'Échec de la création de la file d\'attente de lecture'; + @override String get failedToCreatePlayQueueNoItems => 'Échec de la création de la file d\'attente de lecture - aucun élément'; + @override String failedPlayback({required Object action, required Object error}) => 'Echec de ${action}: ${error}'; +} + +// Path: subtitlingStyling +class _TranslationsSubtitlingStylingFr implements TranslationsSubtitlingStylingEn { + _TranslationsSubtitlingStylingFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get stylingOptions => 'Options de style'; + @override String get fontSize => 'Taille de la police'; + @override String get textColor => 'Couleur du texte'; + @override String get borderSize => 'Taille de la bordure'; + @override String get borderColor => 'Couleur de la bordure'; + @override String get backgroundOpacity => 'Opacité d\'arrière-plan'; + @override String get backgroundColor => 'Couleur d\'arrière-plan'; +} + +// Path: mpvConfig +class _TranslationsMpvConfigFr implements TranslationsMpvConfigEn { + _TranslationsMpvConfigFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Configuration MPV'; + @override String get description => 'Paramètres avancés du lecteur vidéo'; + @override String get properties => 'Propriétés'; + @override String get presets => 'Préréglages'; + @override String get noProperties => 'Aucune propriété configurée'; + @override String get noPresets => 'Aucun préréglage enregistré'; + @override String get addProperty => 'Ajouter une propriété'; + @override String get editProperty => 'Modifier la propriété'; + @override String get deleteProperty => 'Supprimer la propriété'; + @override String get propertyKey => 'Clé'; + @override String get propertyKeyHint => 'e.g., hwdec, demuxer-max-bytes'; + @override String get propertyValue => 'Valeur'; + @override String get propertyValueHint => 'e.g., auto, 256000000'; + @override String get saveAsPreset => 'Enregistrer comme préréglage...'; + @override String get presetName => 'Nom du préréglage'; + @override String get presetNameHint => 'Entrez un nom pour ce préréglage'; + @override String get loadPreset => 'Charger'; + @override String get deletePreset => 'Supprimer'; + @override String get presetSaved => 'Préréglage enregistré'; + @override String get presetLoaded => 'Préréglage chargé'; + @override String get presetDeleted => 'Préréglage supprimé'; + @override String get confirmDeletePreset => 'Êtes-vous sûr de vouloir supprimer ce préréglage ?'; + @override String get confirmDeleteProperty => 'Êtes-vous sûr de vouloir supprimer cette propriété ?'; + @override String entriesCount({required Object count}) => '${count} entrées'; +} + +// Path: dialog +class _TranslationsDialogFr implements TranslationsDialogEn { + _TranslationsDialogFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get confirmAction => 'Confirmer l\'action'; + @override String get cancel => 'Annuler'; + @override String get playNow => 'Lire maintenant'; +} + +// Path: discover +class _TranslationsDiscoverFr implements TranslationsDiscoverEn { + _TranslationsDiscoverFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Découvrez'; + @override String get switchProfile => 'Changer de profil'; + @override String get logout => 'Déconnexion'; + @override String get noContentAvailable => 'Aucun contenu disponible'; + @override String get addMediaToLibraries => 'Ajoutez des médias à votre bibliothèque'; + @override String get continueWatching => 'Continuer à regarder'; + @override String get play => 'Lire'; + @override String playEpisode({required Object season, required Object episode}) => 'S${season}E${episode}'; + @override String get pause => 'Pause'; + @override String get overview => 'Aperçu'; + @override String get cast => 'Cast'; + @override String get seasons => 'Saisons'; + @override String get studio => 'Studio'; + @override String get rating => 'Évaluation'; + @override String get watched => 'Vu'; + @override String episodeCount({required Object count}) => '${count} épisodes'; + @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} vu'; + @override String get movie => 'Film'; + @override String get tvShow => 'Show TV'; + @override String minutesLeft({required Object minutes}) => '${minutes} min restantes'; +} + +// Path: errors +class _TranslationsErrorsFr implements TranslationsErrorsEn { + _TranslationsErrorsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String searchFailed({required Object error}) => 'Recherche échouée: ${error}'; + @override String connectionTimeout({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}'; + @override String get connectionFailed => 'Impossible de se connecter au serveur Plex'; + @override String failedToLoad({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}'; + @override String get noClientAvailable => 'Aucun client disponible'; + @override String authenticationFailed({required Object error}) => 'Échec de l\'authentification: ${error}'; + @override String get couldNotLaunchUrl => 'Impossible de lancer l\'URL d\'authentification'; + @override String get pleaseEnterToken => 'Veuillez saisir un token'; + @override String get invalidToken => 'Token invalide'; + @override String failedToVerifyToken({required Object error}) => 'Échec de la vérification du token: ${error}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Impossible de changer de profil vers ${displayName}'; +} + +// Path: libraries +class _TranslationsLibrariesFr implements TranslationsLibrariesEn { + _TranslationsLibrariesFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Bibliothèques'; + @override String get scanLibraryFiles => 'Scanner les fichiers de la bibliothèque'; + @override String get scanLibrary => 'Scanner la bibliothèque'; + @override String get analyze => 'Analyser'; + @override String get analyzeLibrary => 'Analyser la bibliothèque'; + @override String get refreshMetadata => 'Actualiser les métadonnées'; + @override String get emptyTrash => 'Vider la corbeille'; + @override String emptyingTrash({required Object title}) => 'Vider les poubelles pour "${title}"...'; + @override String trashEmptied({required Object title}) => 'Poubelles vidées pour "${title}"'; + @override String failedToEmptyTrash({required Object error}) => 'Échec de la suppression des éléments supprimés: ${error}'; + @override String analyzing({required Object title}) => 'Analyse de "${title}"...'; + @override String analysisStarted({required Object title}) => 'L\'analyse a commencé pour "${title}"'; + @override String failedToAnalyze({required Object error}) => 'Échec de l\'analyse de la bibliothèque: ${error}'; + @override String get noLibrariesFound => 'Aucune bibliothèque trouvée'; + @override String get thisLibraryIsEmpty => 'Cette bibliothèque est vide'; + @override String get all => 'Tout'; + @override String get clearAll => 'Tout effacer'; + @override String scanLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?'; + @override String analyzeLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir analyser "${title}"?'; + @override String refreshMetadataConfirm({required Object title}) => 'Êtes-vous sûr de vouloir actualiser les métadonnées pour "${title}"?'; + @override String emptyTrashConfirm({required Object title}) => 'Êtes-vous sûr de vouloir vider la corbeille pour "${title}"?'; + @override String get manageLibraries => 'Gérer les bibliothèques'; + @override String get sort => 'Trier'; + @override String get sortBy => 'Trier par'; + @override String get filters => 'Filtres'; + @override String get confirmActionMessage => 'Êtes-vous sûr de vouloir effectuer cette action ?'; + @override String get showLibrary => 'Afficher la bibliothèque'; + @override String get hideLibrary => 'Masquer la bibliothèque'; + @override String get libraryOptions => 'Options de bibliothèque'; + @override String get content => 'contenu de la bibliothèque'; + @override String get selectLibrary => 'Sélectionner la bibliothèque'; + @override String filtersWithCount({required Object count}) => 'Filtres (${count})'; + @override String get noRecommendations => 'Aucune recommandation disponible'; + @override String get noCollections => 'Aucune collection dans cette bibliothèque'; + @override String get noFoldersFound => 'Aucun dossier trouvé'; + @override String get folders => 'dossiers'; + @override late final _TranslationsLibrariesTabsFr tabs = _TranslationsLibrariesTabsFr._(_root); + @override late final _TranslationsLibrariesGroupingsFr groupings = _TranslationsLibrariesGroupingsFr._(_root); +} + +// Path: about +class _TranslationsAboutFr implements TranslationsAboutEn { + _TranslationsAboutFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'À propos'; + @override String get openSourceLicenses => 'Licences Open Source'; + @override String versionLabel({required Object version}) => 'Version ${version}'; + @override String get appDescription => 'Un magnifique client Plex pour Flutter'; + @override String get viewLicensesDescription => 'Afficher les licences des bibliothèques tierces'; +} + +// Path: serverSelection +class _TranslationsServerSelectionFr implements TranslationsServerSelectionEn { + _TranslationsServerSelectionFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get allServerConnectionsFailed => 'Impossible de se connecter à un serveur. Veuillez vérifier votre connexion réseau et réessayer.'; + @override String get noServersFound => 'Aucun serveur trouvé'; + @override String noServersFoundForAccount({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})'; + @override String failedToLoadServers({required Object error}) => 'Échec du chargement des serveurs: ${error}'; +} + +// Path: hubDetail +class _TranslationsHubDetailFr implements TranslationsHubDetailEn { + _TranslationsHubDetailFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Titre'; + @override String get releaseYear => 'Année de sortie'; + @override String get dateAdded => 'Date d\'ajout'; + @override String get rating => 'Évaluation'; + @override String get noItemsFound => 'Aucun élément trouvé'; +} + +// Path: logs +class _TranslationsLogsFr implements TranslationsLogsEn { + _TranslationsLogsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get clearLogs => 'Effacer les logs'; + @override String get copyLogs => 'Copier les logs'; + @override String get error => 'Erreur:'; + @override String get stackTrace => 'Liste des appels:'; +} + +// Path: licenses +class _TranslationsLicensesFr implements TranslationsLicensesEn { + _TranslationsLicensesFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get relatedPackages => 'Package associés'; + @override String get license => 'Licence'; + @override String licenseNumber({required Object number}) => 'Licence ${number}'; + @override String licensesCount({required Object count}) => '${count} licences'; +} + +// Path: navigation +class _TranslationsNavigationFr implements TranslationsNavigationEn { + _TranslationsNavigationFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get home => 'Accueil'; + @override String get search => 'Rechercher'; + @override String get libraries => 'Bibliothèques'; + @override String get settings => 'Paramètres'; + @override String get downloads => 'Téléchargements'; +} + +// Path: collections +class _TranslationsCollectionsFr implements TranslationsCollectionsEn { + _TranslationsCollectionsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Collections'; + @override String get collection => 'Collection'; + @override String get empty => 'La collection est vide'; + @override String get unknownLibrarySection => 'Impossible de supprimer : section de bibliothèque inconnue'; + @override String get deleteCollection => 'Supprimer la collection'; + @override String deleteConfirm({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cette action ne peut pas être annulée.'; + @override String get deleted => 'Collection supprimée'; + @override String get deleteFailed => 'Échec de la suppression de la collection'; + @override String deleteFailedWithError({required Object error}) => 'Échec de la suppression de la collection: ${error}'; + @override String failedToLoadItems({required Object error}) => 'Échec du chargement des éléments de la collection: ${error}'; + @override String get selectCollection => 'Sélectionner une collection'; + @override String get createNewCollection => 'Créer une nouvelle collection'; + @override String get collectionName => 'Nom de la collection'; + @override String get enterCollectionName => 'Entrez le nom de la collection'; + @override String get addedToCollection => 'Ajouté à la collection'; + @override String get errorAddingToCollection => 'Échec de l\'ajout à la collection'; + @override String get created => 'Collection créée'; + @override String get removeFromCollection => 'Supprimer de la collection'; + @override String removeFromCollectionConfirm({required Object title}) => 'Retirer "${title}" de cette collection ?'; + @override String get removedFromCollection => 'Retiré de la collection'; + @override String get removeFromCollectionFailed => 'Impossible de supprimer de la collection'; + @override String removeFromCollectionError({required Object error}) => 'Erreur lors de la suppression de la collection: ${error}'; +} + +// Path: playlists +class _TranslationsPlaylistsFr implements TranslationsPlaylistsEn { + _TranslationsPlaylistsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Playlists'; + @override String get playlist => 'Playlist'; + @override String get noPlaylists => 'Aucune playlist trouvée'; + @override String get create => 'Créer une playlist'; + @override String get playlistName => 'Nom de playlist'; + @override String get enterPlaylistName => 'Entrer le nom de playlist'; + @override String get delete => 'Supprimer la playlist'; + @override String get removeItem => 'Retirer de la playlist'; + @override String get smartPlaylist => 'Smart playlist'; + @override String itemCount({required Object count}) => '${count} éléments'; + @override String get oneItem => '1 élément'; + @override String get emptyPlaylist => 'Cette playlist est vide'; + @override String get deleteConfirm => 'Supprimer la playlist ?'; + @override String deleteMessage({required Object name}) => 'Êtes-vous sûr de vouloir supprimer "${name}"?'; + @override String get created => 'Playlist créée'; + @override String get deleted => 'Playlist supprimée'; + @override String get itemAdded => 'Ajouté à la playlist'; + @override String get itemRemoved => 'Retiré de la playlist'; + @override String get selectPlaylist => 'Select Playlist'; + @override String get createNewPlaylist => 'Créer une nouvelle playlist'; + @override String get errorCreating => 'Échec de la création de playlist'; + @override String get errorDeleting => 'Échec de suppression de playlist'; + @override String get errorLoading => 'Échec de chargement de playlists'; + @override String get errorAdding => 'Échec d\'ajout dans la playlist'; + @override String get errorReordering => 'Échec de réordonnacement d\'élément de playlist'; + @override String get errorRemoving => 'Échec de suppression depuis la playlist'; +} + +// Path: watchTogether +class _TranslationsWatchTogetherFr implements TranslationsWatchTogetherEn { + _TranslationsWatchTogetherFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Regarder ensemble'; + @override String get description => 'Regardez du contenu en synchronisation avec vos amis et votre famille'; + @override String get createSession => 'Créer une session'; + @override String get creating => 'Création...'; + @override String get joinSession => 'Rejoindre la session'; + @override String get joining => 'Rejoindre...'; + @override String get controlMode => 'Mode de contrôle'; + @override String get controlModeQuestion => 'Qui peut contrôler la lecture ?'; + @override String get hostOnly => 'Hôte uniquement'; + @override String get anyone => 'N\'importe qui'; + @override String get hostingSession => 'Session d\'hébergement'; + @override String get inSession => 'En session'; + @override String get sessionCode => 'Code de session'; + @override String get hostControlsPlayback => 'L\'hôte contrôle la lecture'; + @override String get anyoneCanControl => 'Tout le monde peut contrôler la lecture'; + @override String get hostControls => 'Commandes de l\'hôte'; + @override String get anyoneControls => 'Tout le monde contrôle'; + @override String get participants => 'Participants'; + @override String get host => 'Hôte'; + @override String get hostBadge => 'HOST'; + @override String get youAreHost => 'Vous êtes l\'hôte'; + @override String get watchingWithOthers => 'Regarder avec d\'autres personnes'; + @override String get endSession => 'Fin de session'; + @override String get leaveSession => 'Quitter la session'; + @override String get endSessionQuestion => 'Terminer la session ?'; + @override String get leaveSessionQuestion => 'Quitter la session ?'; + @override String get endSessionConfirm => 'Cela mettra fin à la session pour tous les participants.'; + @override String get leaveSessionConfirm => 'Vous allez être déconnecté de la session.'; + @override String get endSessionConfirmOverlay => 'Cela mettra fin à la session de visionnage pour tous les participants.'; + @override String get leaveSessionConfirmOverlay => 'Vous serez déconnecté de la session de visionnage.'; + @override String get end => 'Terminer'; + @override String get leave => 'Fin'; + @override String get syncing => 'Synchronisation...'; + @override String get participant => 'participant'; + @override String get joinWatchSession => 'Rejoindre la session de visionnage'; + @override String get enterCodeHint => 'Entrez le code à 8 caractères'; + @override String get pasteFromClipboard => 'Coller depuis le presse-papiers'; + @override String get pleaseEnterCode => 'Veuillez saisir un code de session'; + @override String get codeMustBe8Chars => 'Le code de session doit comporter 8 caractères'; + @override String get joinInstructions => 'Entrez le code de session partagé par l\'hôte pour rejoindre sa session de visionnage.'; + @override String get failedToCreate => 'Échec de la création de la session'; + @override String get failedToJoin => 'Échec de la connexion à la session'; + @override String get sessionCodeCopied => 'Code de session copié dans le presse-papiers'; +} + +// Path: downloads +class _TranslationsDownloadsFr implements TranslationsDownloadsEn { + _TranslationsDownloadsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get title => 'Téléchargements'; + @override String get manage => 'Gérer'; + @override String get tvShows => 'Show TV'; + @override String get movies => 'Films'; + @override String get noDownloads => 'Aucun téléchargement pour le moment'; + @override String get noDownloadsDescription => 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.'; + @override String get downloadNow => 'Télécharger'; + @override String get deleteDownload => 'Supprimer le téléchargement'; + @override String get retryDownload => 'Réessayer le téléchargement'; + @override String get downloadQueued => 'Téléchargement en attente'; + @override String episodesQueued({required Object count}) => '${count} épisodes en attente de téléchargement'; + @override String get downloadDeleted => 'Télécharger supprimé'; + @override String deleteConfirm({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cela supprimera le fichier téléchargé de votre appareil.'; + @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Suppression de ${title}... (${current} sur ${total})'; +} + +// Path: hotkeys.actions +class _TranslationsHotkeysActionsFr implements TranslationsHotkeysActionsEn { + _TranslationsHotkeysActionsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get playPause => 'Lecture/Pause'; + @override String get volumeUp => 'Augmenter le volume'; + @override String get volumeDown => 'Baisser le volume'; + @override String seekForward({required Object seconds}) => 'Avancer (${seconds}s)'; + @override String seekBackward({required Object seconds}) => 'Reculer (${seconds}s)'; + @override String get fullscreenToggle => 'Basculer en mode plein écran'; + @override String get muteToggle => 'Activer/désactiver le mode silencieux'; + @override String get subtitleToggle => 'Activer/désactiver les sous-titres'; + @override String get audioTrackNext => 'Piste audio suivante'; + @override String get subtitleTrackNext => 'Piste de sous-titres suivante'; + @override String get chapterNext => 'Chapitre suivant'; + @override String get chapterPrevious => 'Chapitre précédent'; + @override String get speedIncrease => 'Augmenter la vitesse'; + @override String get speedDecrease => 'Réduire la vitesse'; + @override String get speedReset => 'Réinitialiser la vitesse'; + @override String get subSeekNext => 'Rechercher le sous-titre suivant'; + @override String get subSeekPrev => 'Rechercher le sous-titre précédent'; +} + +// Path: libraries.tabs +class _TranslationsLibrariesTabsFr implements TranslationsLibrariesTabsEn { + _TranslationsLibrariesTabsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get recommended => 'Recommandé'; + @override String get browse => 'Parcourir'; + @override String get collections => 'Collections'; + @override String get playlists => 'Playlists'; +} + +// Path: libraries.groupings +class _TranslationsLibrariesGroupingsFr implements TranslationsLibrariesGroupingsEn { + _TranslationsLibrariesGroupingsFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get all => 'Tous'; + @override String get movies => 'Films'; + @override String get shows => 'Show TV'; + @override String get seasons => 'Saisons'; + @override String get episodes => 'Épisodes'; + @override String get folders => 'Dossiers'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsFr { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => 'Chargement...', + 'auth.signInWithPlex' => 'S\'inscrire avec Plex', + 'auth.showQRCode' => 'Afficher le QR Code', + 'auth.cancel' => 'Annuler', + 'auth.authenticate' => 'S\'authentifier', + 'auth.retry' => 'Réessayer', + 'auth.debugEnterToken' => 'Debug: Entrez votre token Plex', + 'auth.plexTokenLabel' => 'Token d\'authentification Plex', + 'auth.plexTokenHint' => 'Entrez votre token Plex.tv', + 'auth.authenticationTimeout' => 'Délai d\'authentification expiré. Veuillez réessayer.', + 'auth.scanQRCodeInstruction' => 'Scannez ce code QR avec un appareil connecté à Plex pour vous authentifier.', + 'auth.waitingForAuth' => 'En attente d\'authentification...\nVeuillez vous connecter dans votre navigateur.', + 'common.cancel' => 'Annuler', + 'common.save' => 'Sauvegarder', + 'common.close' => 'Fermer', + 'common.clear' => 'Nettoyer', + 'common.reset' => 'Réinitialiser', + 'common.later' => 'Plus tard', + 'common.submit' => 'Soumettre', + 'common.confirm' => 'Confirmer', + 'common.retry' => 'Réessayer', + 'common.logout' => 'Se déconnecter', + 'common.unknown' => 'Inconnu', + 'common.refresh' => 'Rafraichir', + 'common.yes' => 'Oui', + 'common.no' => 'Non', + 'common.delete' => 'Supprimer', + 'common.shuffle' => 'Mélanger', + 'common.addTo' => 'Ajouter à...', + 'screens.licenses' => 'Licenses', + 'screens.switchProfile' => 'Changer de profil', + 'screens.subtitleStyling' => 'Configuration des sous-titres', + 'screens.mpvConfig' => 'Configuration MPV', + 'screens.search' => 'Recherche', + 'screens.logs' => 'Logs', + 'update.available' => 'Mise à jour disponible', + 'update.versionAvailable' => ({required Object version}) => 'Version ${version} disponible', + 'update.currentVersion' => ({required Object version}) => 'Installé: ${version}', + 'update.skipVersion' => 'Ignorer cette version', + 'update.viewRelease' => 'Voir la Release', + 'update.latestVersion' => 'Vous utilisez la dernière version', + 'update.checkFailed' => 'Échec de la vérification des mises à jour', + 'settings.title' => 'Paramètres', + 'settings.language' => 'Langue', + 'settings.theme' => 'Thème', + 'settings.appearance' => 'Apparence', + 'settings.videoPlayback' => 'Lecture vidéo', + 'settings.advanced' => 'Avancé', + 'settings.episodePosterMode' => 'Style du Poster d\'épisode', + 'settings.seriesPoster' => 'Poster de série', + 'settings.seriesPosterDescription' => 'Afficher le poster de série pour tous les épisodes', + 'settings.seasonPoster' => 'Poster de saison', + 'settings.seasonPosterDescription' => 'Afficher le poster spécifique à la saison pour les épisodes', + 'settings.episodeThumbnail' => 'Mignature d\'épisode', + 'settings.episodeThumbnailDescription' => 'Afficher les vignettes des captures d\'écran des épisodes au format 16:9', + 'settings.showHeroSectionDescription' => 'Afficher le carrousel de contenu en vedette sur l\'écran d\'accueil', + 'settings.secondsLabel' => 'Secondes', + 'settings.minutesLabel' => 'Minutes', + 'settings.secondsShort' => 's', + 'settings.minutesShort' => 'm', + 'settings.durationHint' => ({required Object min, required Object max}) => 'Entrez la durée (${min}-${max})', + 'settings.systemTheme' => 'Système', + 'settings.systemThemeDescription' => 'Suivre les paramètres système', + 'settings.lightTheme' => 'Light', + 'settings.darkTheme' => 'Dark', + 'settings.libraryDensity' => 'Densité des bibliothèques', + 'settings.compact' => 'Compact', + 'settings.compactDescription' => 'Cartes plus petites, plus d\'éléments visibles', + 'settings.normal' => 'Normal', + 'settings.normalDescription' => 'Taille par défaut', + 'settings.comfortable' => 'Confortable', + 'settings.comfortableDescription' => 'Cartes plus grandes, moins d\'éléments visibles', + 'settings.viewMode' => 'Mode d\'affichage', + 'settings.gridView' => 'Grille', + 'settings.gridViewDescription' => 'Afficher les éléments dans une disposition en grille', + 'settings.listView' => 'Liste', + 'settings.listViewDescription' => 'Afficher les éléments dans une liste', + 'settings.showHeroSection' => 'Afficher la section Hero', + 'settings.useGlobalHubs' => 'Utiliser la disposition Plex Home', + 'settings.useGlobalHubsDescription' => 'Afficher les hubs de la page d\'accueil comme le client Plex officiel. Lorsque cette option est désactivée, affiche à la place les recommandations par bibliothèque.', + 'settings.showServerNameOnHubs' => 'Afficher le nom du serveur sur les hubs', + 'settings.showServerNameOnHubsDescription' => 'Toujours afficher le nom du serveur dans les titres des hubs. Lorsque cette option est désactivée, seuls les noms de hubs en double s\'affichent.', + 'settings.hardwareDecoding' => 'Décodage matériel', + 'settings.hardwareDecodingDescription' => 'Utilisez l\'accélération matérielle lorsqu\'elle est disponible.', + 'settings.bufferSize' => 'Taille du Buffer', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => 'Stylisation des sous-titres', + 'settings.subtitleStylingDescription' => 'Personnaliser l\'apparence des sous-titres', + 'settings.smallSkipDuration' => 'Small Skip Duration', + 'settings.largeSkipDuration' => 'Large Skip Duration', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds} secondes', + 'settings.defaultSleepTimer' => 'Minuterie de mise en veille par défaut', + 'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutes', + 'settings.rememberTrackSelections' => 'Mémoriser les sélections de pistes par émission/film', + 'settings.rememberTrackSelectionsDescription' => 'Enregistrer automatiquement les préférences linguistiques pour l\'audio et les sous-titres lorsque vous changez de piste pendant la lecture', + 'settings.videoPlayerControls' => 'Commandes du lecteur vidéo', + 'settings.keyboardShortcuts' => 'Raccourcis clavier', + 'settings.keyboardShortcutsDescription' => 'Personnaliser les raccourcis clavier', + 'settings.videoPlayerNavigation' => 'Navigation dans le lecteur vidéo', + 'settings.videoPlayerNavigationDescription' => 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.', + 'settings.debugLogging' => 'Journalisation de débogage', + 'settings.debugLoggingDescription' => 'Activer la journalisation détaillée pour le dépannage', + 'settings.viewLogs' => 'Voir les logs', + 'settings.viewLogsDescription' => 'Voir les logs d\'application', + 'settings.clearCache' => 'Vider le cache', + 'settings.clearCacheDescription' => 'Cela effacera toutes les images et données mises en cache. Le chargement du contenu de l\'application peut prendre plus de temps après avoir effacé le cache.', + 'settings.clearCacheSuccess' => 'Cache effacé avec succès', + 'settings.resetSettings' => 'Réinitialiser les paramètres', + 'settings.resetSettingsDescription' => 'Cela réinitialisera tous les paramètres à leurs valeurs par défaut. Cette action ne peut pas être annulée.', + 'settings.resetSettingsSuccess' => 'Réinitialisation des paramètres réussie', + 'settings.shortcutsReset' => 'Raccourcis réinitialisés aux valeurs par défaut', + 'settings.about' => 'À propos', + 'settings.aboutDescription' => 'Informations sur l\'application et licences', + 'settings.updates' => 'Mises à jour', + 'settings.updateAvailable' => 'Mise à jour disponible', + 'settings.checkForUpdates' => 'Vérifier les mises à jour', + 'settings.validationErrorEnterNumber' => 'Veuillez saisir un numéro valide', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'La durée doit être comprise entre ${min} et ${max} ${unit}', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Raccourci déjà attribué à ${action}', + 'settings.shortcutUpdated' => ({required Object action}) => 'Raccourci mis à jour pour ${action}', + 'settings.autoSkip' => 'Skip automatique', + 'settings.autoSkipIntro' => 'Skip automatique de l\'introduction', + 'settings.autoSkipIntroDescription' => 'Skipper automatiquement l\'introduction après quelques secondes', + 'settings.autoSkipCredits' => 'Skip automatique des crédits', + 'settings.autoSkipCreditsDescription' => 'Passer les crédits et passer à l\'épisode suivant automatiquement', + 'settings.autoSkipDelay' => 'Délai avant skip automatique', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => 'Attendre ${seconds} secondes avant l\'auto-skip', + 'settings.downloads' => 'Téléchargement', + 'settings.downloadLocationDescription' => 'Choisissez où stocker le contenu téléchargé', + 'settings.downloadLocationDefault' => 'Par défaut (stockage de l\'application)', + 'settings.downloadLocationCustom' => 'Emplacement personnalisé', + 'settings.selectFolder' => 'Sélectionner un dossier', + 'settings.resetToDefault' => 'Réinitialiser les paramètres par défaut', + 'settings.currentPath' => ({required Object path}) => 'Actuel: ${path}', + 'settings.downloadLocationChanged' => 'Emplacement de téléchargement modifié', + 'settings.downloadLocationReset' => 'Emplacement de téléchargement réinitialisé à la valeur par défaut', + 'settings.downloadLocationInvalid' => 'Le dossier sélectionné n\'est pas accessible en écriture', + 'settings.downloadLocationSelectError' => 'Échec de la sélection du dossier', + 'settings.downloadOnWifiOnly' => 'Télécharger uniquement via WiFi', + 'settings.downloadOnWifiOnlyDescription' => 'Empêcher les téléchargements lorsque vous utilisez les données cellulaires', + 'settings.cellularDownloadBlocked' => 'Les téléchargements sont désactivés sur les données cellulaires. Connectez-vous au Wi-Fi ou modifiez le paramètre.', + 'settings.maxVolume' => 'Volume maximal', + 'settings.maxVolumeDescription' => 'Autoriser l\'augmentation du volume au-delà de 100 % pour les médias silencieux', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => 'Entrez le volume maximal (100-300)', + 'settings.discordRichPresence' => 'Discord Rich Presence', + 'settings.discordRichPresenceDescription' => 'Montrez ce que vous regardez sur Discord', + 'settings.matchContentFrameRate' => 'Fréquence d\'images du contenu correspondant', + 'settings.matchContentFrameRateDescription' => 'Ajustez la fréquence de rafraîchissement de l\'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie', + 'search.hint' => 'Rechercher des films, des séries, de la musique...', + 'search.tryDifferentTerm' => 'Essayez un autre terme de recherche', + 'search.searchYourMedia' => 'Rechercher dans vos médias', + 'search.enterTitleActorOrKeyword' => 'Entrez un titre, un acteur ou un mot-clé', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => 'Définir un raccourci pour ${actionName}', + 'hotkeys.clearShortcut' => 'Effacer le raccourci', + 'hotkeys.actions.playPause' => 'Lecture/Pause', + 'hotkeys.actions.volumeUp' => 'Augmenter le volume', + 'hotkeys.actions.volumeDown' => 'Baisser le volume', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => 'Avancer (${seconds}s)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => 'Reculer (${seconds}s)', + 'hotkeys.actions.fullscreenToggle' => 'Basculer en mode plein écran', + 'hotkeys.actions.muteToggle' => 'Activer/désactiver le mode silencieux', + 'hotkeys.actions.subtitleToggle' => 'Activer/désactiver les sous-titres', + 'hotkeys.actions.audioTrackNext' => 'Piste audio suivante', + 'hotkeys.actions.subtitleTrackNext' => 'Piste de sous-titres suivante', + 'hotkeys.actions.chapterNext' => 'Chapitre suivant', + 'hotkeys.actions.chapterPrevious' => 'Chapitre précédent', + 'hotkeys.actions.speedIncrease' => 'Augmenter la vitesse', + 'hotkeys.actions.speedDecrease' => 'Réduire la vitesse', + 'hotkeys.actions.speedReset' => 'Réinitialiser la vitesse', + 'hotkeys.actions.subSeekNext' => 'Rechercher le sous-titre suivant', + 'hotkeys.actions.subSeekPrev' => 'Rechercher le sous-titre précédent', + 'pinEntry.enterPin' => 'Entrer le code PIN', + 'pinEntry.showPin' => 'Afficher le code PIN', + 'pinEntry.hidePin' => 'Masquer le code PIN', + 'fileInfo.title' => 'Informations sur le fichier', + 'fileInfo.video' => 'Vidéo', + 'fileInfo.audio' => 'Audio', + 'fileInfo.file' => 'Fichier', + 'fileInfo.advanced' => 'Avancé', + 'fileInfo.codec' => 'Codec', + 'fileInfo.resolution' => 'Résolution', + 'fileInfo.bitrate' => 'Bitrate', + 'fileInfo.frameRate' => 'Fréquence d\'images', + 'fileInfo.aspectRatio' => 'Format d\'image', + 'fileInfo.profile' => 'Profil', + 'fileInfo.bitDepth' => 'Profondeur de bits', + 'fileInfo.colorSpace' => 'Espace colorimétrique', + 'fileInfo.colorRange' => 'Gamme de couleurs', + 'fileInfo.colorPrimaries' => 'Couleurs primaires', + 'fileInfo.chromaSubsampling' => 'Sous-échantillonnage chromatique', + 'fileInfo.channels' => 'Channels', + 'fileInfo.path' => 'Chemin', + 'fileInfo.size' => 'Taille', + 'fileInfo.container' => 'Conteneur', + 'fileInfo.duration' => 'Durée', + 'fileInfo.optimizedForStreaming' => 'Optimisé pour le streaming', + 'fileInfo.has64bitOffsets' => 'Décalages 64 bits', + 'mediaMenu.markAsWatched' => 'Marquer comme vu', + 'mediaMenu.markAsUnwatched' => 'Marquer comme non visionné', + 'mediaMenu.removeFromContinueWatching' => 'Supprimer de la liste "Continuer à regarder"', + 'mediaMenu.goToSeries' => 'Aller à la série', + 'mediaMenu.goToSeason' => 'Aller à la saison', + 'mediaMenu.shufflePlay' => 'Lecture aléatoire', + 'mediaMenu.fileInfo' => 'Informations sur le fichier', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, show TV', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => 'visionné', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} pourcentage visionné', + 'accessibility.mediaCardUnwatched' => 'non visionné', + 'accessibility.tapToPlay' => 'Appuyez pour lire', + 'tooltips.shufflePlay' => 'Lecture aléatoire', + 'tooltips.markAsWatched' => 'Marqué comme vu', + 'tooltips.markAsUnwatched' => 'Marqué comme non vu', + 'videoControls.audioLabel' => 'Audio', + 'videoControls.subtitlesLabel' => 'Sous-titres', + 'videoControls.resetToZero' => 'Réinitialiser à 0ms', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} lire plus tard', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} lire plus tôt', + 'videoControls.noOffset' => 'Pas de décalage', + 'videoControls.letterbox' => 'Boîte aux lettres', + 'videoControls.fillScreen' => 'Remplir l\'écran', + 'videoControls.stretch' => 'Etirer', + 'videoControls.lockRotation' => 'Verrouillage de la rotation', + 'videoControls.unlockRotation' => 'Déverrouiller la rotation', + 'videoControls.sleepTimer' => 'Minuterie de mise en veille', + 'videoControls.timerActive' => 'Minuterie active', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => 'La lecture sera mise en pause dans ${duration}', + 'videoControls.sleepTimerCompleted' => 'Minuterie de mise en veille terminée - lecture en pause', + 'videoControls.autoPlayNext' => 'Lecture automatique suivante', + 'videoControls.playNext' => 'Lire l\'épisode suivant', + 'videoControls.playButton' => 'Lire', + 'videoControls.pauseButton' => 'Pause', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Reculer de ${seconds} secondes', + 'videoControls.seekForwardButton' => ({required Object seconds}) => 'Avancer de ${seconds} secondes', + 'videoControls.previousButton' => 'Épisode précédent', + 'videoControls.nextButton' => 'Épisode suivant', + 'videoControls.previousChapterButton' => 'Chapitre précédent', + 'videoControls.nextChapterButton' => 'Chapitre suivant', + 'videoControls.muteButton' => 'Mute', + 'videoControls.unmuteButton' => 'Dé-mute', + 'videoControls.settingsButton' => 'Paramètres vidéo', + 'videoControls.audioTrackButton' => 'Pistes audio', + 'videoControls.subtitlesButton' => 'Sous-titres', + 'videoControls.chaptersButton' => 'Chapitres', + 'videoControls.versionsButton' => 'Versions vidéo', + 'videoControls.pipButton' => 'Mode PiP (Picture-in-Picture)', + 'videoControls.aspectRatioButton' => 'Format d\'image', + 'videoControls.fullscreenButton' => 'Passer en mode plein écran', + 'videoControls.exitFullscreenButton' => 'Quitter le mode plein écran', + 'videoControls.alwaysOnTopButton' => 'Always on top', + 'videoControls.rotationLockButton' => 'Verrouillage de rotation', + 'videoControls.timelineSlider' => 'Timeline vidéo', + 'videoControls.volumeSlider' => 'Niveau sonore', + 'videoControls.backButton' => 'Retour', + 'userStatus.admin' => 'Admin', + 'userStatus.restricted' => 'Restreint', + 'userStatus.protected' => 'Protégé', + 'userStatus.current' => 'ACTUEL', + 'messages.markedAsWatched' => 'Marqué comme vu', + 'messages.markedAsUnwatched' => 'Marqué comme non vu', + 'messages.markedAsWatchedOffline' => 'Marqué comme vu (se synchronisera lorsque vous serez en ligne)', + 'messages.markedAsUnwatchedOffline' => 'Marqué comme non vu (sera synchronisé lorsque vous serez en ligne)', + 'messages.removedFromContinueWatching' => 'Supprimer de "Continuer à regarder"', + 'messages.errorLoading' => ({required Object error}) => 'Erreur: ${error}', + 'messages.fileInfoNotAvailable' => 'Informations sur le fichier non disponibles', + 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Erreur lors du chargement des informations sur le fichier: ${error}', + 'messages.errorLoadingSeries' => 'Erreur lors du chargement de la série', + 'messages.errorLoadingSeason' => 'Erreur lors du chargement de la saison', + 'messages.musicNotSupported' => 'La lecture de musique n\'est pas encore prise en charge', + 'messages.logsCleared' => 'Logs effacés', + 'messages.logsCopied' => 'Logs copiés dans le presse-papier', + 'messages.noLogsAvailable' => 'Aucun log disponible', + 'messages.libraryScanning' => ({required Object title}) => 'Scan de "${title}"...', + 'messages.libraryScanStarted' => ({required Object title}) => 'Scan de la bibliothèque démarrée pour "${title}"', + 'messages.libraryScanFailed' => ({required Object error}) => 'Échec du scan de la bibliothèque: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => 'Actualisation des métadonnées pour "${title}"...', + 'messages.metadataRefreshStarted' => ({required Object title}) => 'Actualisation des métadonnées lancée pour "${title}"', + 'messages.metadataRefreshFailed' => ({required Object error}) => 'Échec de l\'actualisation des métadonnées: ${error}', + 'messages.logoutConfirm' => 'Êtes-vous sûr de vouloir vous déconnecter ?', + 'messages.noSeasonsFound' => 'Aucune saison trouvée', + 'messages.noEpisodesFound' => 'Aucun épisode trouvé dans la première saison', + 'messages.noEpisodesFoundGeneral' => 'Aucun épisode trouvé', + 'messages.noResultsFound' => 'Aucun résultat trouvé', + 'messages.sleepTimerSet' => ({required Object label}) => 'Minuterie de mise en veille réglée sur ${label}', + 'messages.noItemsAvailable' => 'Aucun élément disponible', + 'messages.failedToCreatePlayQueue' => 'Échec de la création de la file d\'attente de lecture', + 'messages.failedToCreatePlayQueueNoItems' => 'Échec de la création de la file d\'attente de lecture - aucun élément', + 'messages.failedPlayback' => ({required Object action, required Object error}) => 'Echec de ${action}: ${error}', + 'subtitlingStyling.stylingOptions' => 'Options de style', + 'subtitlingStyling.fontSize' => 'Taille de la police', + 'subtitlingStyling.textColor' => 'Couleur du texte', + 'subtitlingStyling.borderSize' => 'Taille de la bordure', + 'subtitlingStyling.borderColor' => 'Couleur de la bordure', + 'subtitlingStyling.backgroundOpacity' => 'Opacité d\'arrière-plan', + 'subtitlingStyling.backgroundColor' => 'Couleur d\'arrière-plan', + 'mpvConfig.title' => 'Configuration MPV', + 'mpvConfig.description' => 'Paramètres avancés du lecteur vidéo', + 'mpvConfig.properties' => 'Propriétés', + 'mpvConfig.presets' => 'Préréglages', + 'mpvConfig.noProperties' => 'Aucune propriété configurée', + 'mpvConfig.noPresets' => 'Aucun préréglage enregistré', + 'mpvConfig.addProperty' => 'Ajouter une propriété', + 'mpvConfig.editProperty' => 'Modifier la propriété', + 'mpvConfig.deleteProperty' => 'Supprimer la propriété', + 'mpvConfig.propertyKey' => 'Clé', + 'mpvConfig.propertyKeyHint' => 'e.g., hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => 'Valeur', + 'mpvConfig.propertyValueHint' => 'e.g., auto, 256000000', + 'mpvConfig.saveAsPreset' => 'Enregistrer comme préréglage...', + 'mpvConfig.presetName' => 'Nom du préréglage', + 'mpvConfig.presetNameHint' => 'Entrez un nom pour ce préréglage', + 'mpvConfig.loadPreset' => 'Charger', + 'mpvConfig.deletePreset' => 'Supprimer', + 'mpvConfig.presetSaved' => 'Préréglage enregistré', + 'mpvConfig.presetLoaded' => 'Préréglage chargé', + 'mpvConfig.presetDeleted' => 'Préréglage supprimé', + 'mpvConfig.confirmDeletePreset' => 'Êtes-vous sûr de vouloir supprimer ce préréglage ?', + 'mpvConfig.confirmDeleteProperty' => 'Êtes-vous sûr de vouloir supprimer cette propriété ?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} entrées', + 'dialog.confirmAction' => 'Confirmer l\'action', + 'dialog.cancel' => 'Annuler', + 'dialog.playNow' => 'Lire maintenant', + 'discover.title' => 'Découvrez', + 'discover.switchProfile' => 'Changer de profil', + 'discover.logout' => 'Déconnexion', + 'discover.noContentAvailable' => 'Aucun contenu disponible', + 'discover.addMediaToLibraries' => 'Ajoutez des médias à votre bibliothèque', + 'discover.continueWatching' => 'Continuer à regarder', + 'discover.play' => 'Lire', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => 'Pause', + 'discover.overview' => 'Aperçu', + 'discover.cast' => 'Cast', + 'discover.seasons' => 'Saisons', + 'discover.studio' => 'Studio', + 'discover.rating' => 'Évaluation', + 'discover.watched' => 'Vu', + 'discover.episodeCount' => ({required Object count}) => '${count} épisodes', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '${watched}/${total} vu', + 'discover.movie' => 'Film', + 'discover.tvShow' => 'Show TV', + 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min restantes', + 'errors.searchFailed' => ({required Object error}) => 'Recherche échouée: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}', + 'errors.connectionFailed' => 'Impossible de se connecter au serveur Plex', + 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}', + 'errors.noClientAvailable' => 'Aucun client disponible', + 'errors.authenticationFailed' => ({required Object error}) => 'Échec de l\'authentification: ${error}', + 'errors.couldNotLaunchUrl' => 'Impossible de lancer l\'URL d\'authentification', + 'errors.pleaseEnterToken' => 'Veuillez saisir un token', + 'errors.invalidToken' => 'Token invalide', + 'errors.failedToVerifyToken' => ({required Object error}) => 'Échec de la vérification du token: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => 'Impossible de changer de profil vers ${displayName}', + 'libraries.title' => 'Bibliothèques', + 'libraries.scanLibraryFiles' => 'Scanner les fichiers de la bibliothèque', + 'libraries.scanLibrary' => 'Scanner la bibliothèque', + 'libraries.analyze' => 'Analyser', + 'libraries.analyzeLibrary' => 'Analyser la bibliothèque', + 'libraries.refreshMetadata' => 'Actualiser les métadonnées', + 'libraries.emptyTrash' => 'Vider la corbeille', + 'libraries.emptyingTrash' => ({required Object title}) => 'Vider les poubelles pour "${title}"...', + 'libraries.trashEmptied' => ({required Object title}) => 'Poubelles vidées pour "${title}"', + 'libraries.failedToEmptyTrash' => ({required Object error}) => 'Échec de la suppression des éléments supprimés: ${error}', + 'libraries.analyzing' => ({required Object title}) => 'Analyse de "${title}"...', + 'libraries.analysisStarted' => ({required Object title}) => 'L\'analyse a commencé pour "${title}"', + 'libraries.failedToAnalyze' => ({required Object error}) => 'Échec de l\'analyse de la bibliothèque: ${error}', + 'libraries.noLibrariesFound' => 'Aucune bibliothèque trouvée', + 'libraries.thisLibraryIsEmpty' => 'Cette bibliothèque est vide', + 'libraries.all' => 'Tout', + 'libraries.clearAll' => 'Tout effacer', + 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir analyser "${title}"?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir actualiser les métadonnées pour "${title}"?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir vider la corbeille pour "${title}"?', + 'libraries.manageLibraries' => 'Gérer les bibliothèques', + 'libraries.sort' => 'Trier', + 'libraries.sortBy' => 'Trier par', + 'libraries.filters' => 'Filtres', + 'libraries.confirmActionMessage' => 'Êtes-vous sûr de vouloir effectuer cette action ?', + 'libraries.showLibrary' => 'Afficher la bibliothèque', + 'libraries.hideLibrary' => 'Masquer la bibliothèque', + 'libraries.libraryOptions' => 'Options de bibliothèque', + 'libraries.content' => 'contenu de la bibliothèque', + 'libraries.selectLibrary' => 'Sélectionner la bibliothèque', + 'libraries.filtersWithCount' => ({required Object count}) => 'Filtres (${count})', + 'libraries.noRecommendations' => 'Aucune recommandation disponible', + 'libraries.noCollections' => 'Aucune collection dans cette bibliothèque', + 'libraries.noFoldersFound' => 'Aucun dossier trouvé', + 'libraries.folders' => 'dossiers', + 'libraries.tabs.recommended' => 'Recommandé', + 'libraries.tabs.browse' => 'Parcourir', + 'libraries.tabs.collections' => 'Collections', + 'libraries.tabs.playlists' => 'Playlists', + 'libraries.groupings.all' => 'Tous', + 'libraries.groupings.movies' => 'Films', + 'libraries.groupings.shows' => 'Show TV', + 'libraries.groupings.seasons' => 'Saisons', + 'libraries.groupings.episodes' => 'Épisodes', + 'libraries.groupings.folders' => 'Dossiers', + 'about.title' => 'À propos', + 'about.openSourceLicenses' => 'Licences Open Source', + 'about.versionLabel' => ({required Object version}) => 'Version ${version}', + 'about.appDescription' => 'Un magnifique client Plex pour Flutter', + 'about.viewLicensesDescription' => 'Afficher les licences des bibliothèques tierces', + 'serverSelection.allServerConnectionsFailed' => 'Impossible de se connecter à un serveur. Veuillez vérifier votre connexion réseau et réessayer.', + 'serverSelection.noServersFound' => 'Aucun serveur trouvé', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Échec du chargement des serveurs: ${error}', + 'hubDetail.title' => 'Titre', + 'hubDetail.releaseYear' => 'Année de sortie', + 'hubDetail.dateAdded' => 'Date d\'ajout', + 'hubDetail.rating' => 'Évaluation', + 'hubDetail.noItemsFound' => 'Aucun élément trouvé', + 'logs.clearLogs' => 'Effacer les logs', + 'logs.copyLogs' => 'Copier les logs', + 'logs.error' => 'Erreur:', + 'logs.stackTrace' => 'Liste des appels:', + 'licenses.relatedPackages' => 'Package associés', + 'licenses.license' => 'Licence', + 'licenses.licenseNumber' => ({required Object number}) => 'Licence ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} licences', + 'navigation.home' => 'Accueil', + 'navigation.search' => 'Rechercher', + 'navigation.libraries' => 'Bibliothèques', + 'navigation.settings' => 'Paramètres', + 'navigation.downloads' => 'Téléchargements', + 'collections.title' => 'Collections', + 'collections.collection' => 'Collection', + 'collections.empty' => 'La collection est vide', + 'collections.unknownLibrarySection' => 'Impossible de supprimer : section de bibliothèque inconnue', + 'collections.deleteCollection' => 'Supprimer la collection', + 'collections.deleteConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cette action ne peut pas être annulée.', + 'collections.deleted' => 'Collection supprimée', + 'collections.deleteFailed' => 'Échec de la suppression de la collection', + 'collections.deleteFailedWithError' => ({required Object error}) => 'Échec de la suppression de la collection: ${error}', + 'collections.failedToLoadItems' => ({required Object error}) => 'Échec du chargement des éléments de la collection: ${error}', + 'collections.selectCollection' => 'Sélectionner une collection', + 'collections.createNewCollection' => 'Créer une nouvelle collection', + 'collections.collectionName' => 'Nom de la collection', + 'collections.enterCollectionName' => 'Entrez le nom de la collection', + 'collections.addedToCollection' => 'Ajouté à la collection', + 'collections.errorAddingToCollection' => 'Échec de l\'ajout à la collection', + 'collections.created' => 'Collection créée', + 'collections.removeFromCollection' => 'Supprimer de la collection', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => 'Retirer "${title}" de cette collection ?', + 'collections.removedFromCollection' => 'Retiré de la collection', + 'collections.removeFromCollectionFailed' => 'Impossible de supprimer de la collection', + 'collections.removeFromCollectionError' => ({required Object error}) => 'Erreur lors de la suppression de la collection: ${error}', + 'playlists.title' => 'Playlists', + 'playlists.playlist' => 'Playlist', + 'playlists.noPlaylists' => 'Aucune playlist trouvée', + 'playlists.create' => 'Créer une playlist', + 'playlists.playlistName' => 'Nom de playlist', + 'playlists.enterPlaylistName' => 'Entrer le nom de playlist', + 'playlists.delete' => 'Supprimer la playlist', + 'playlists.removeItem' => 'Retirer de la playlist', + 'playlists.smartPlaylist' => 'Smart playlist', + 'playlists.itemCount' => ({required Object count}) => '${count} éléments', + 'playlists.oneItem' => '1 élément', + 'playlists.emptyPlaylist' => 'Cette playlist est vide', + 'playlists.deleteConfirm' => 'Supprimer la playlist ?', + 'playlists.deleteMessage' => ({required Object name}) => 'Êtes-vous sûr de vouloir supprimer "${name}"?', + 'playlists.created' => 'Playlist créée', + 'playlists.deleted' => 'Playlist supprimée', + 'playlists.itemAdded' => 'Ajouté à la playlist', + 'playlists.itemRemoved' => 'Retiré de la playlist', + 'playlists.selectPlaylist' => 'Select Playlist', + 'playlists.createNewPlaylist' => 'Créer une nouvelle playlist', + 'playlists.errorCreating' => 'Échec de la création de playlist', + 'playlists.errorDeleting' => 'Échec de suppression de playlist', + 'playlists.errorLoading' => 'Échec de chargement de playlists', + 'playlists.errorAdding' => 'Échec d\'ajout dans la playlist', + 'playlists.errorReordering' => 'Échec de réordonnacement d\'élément de playlist', + 'playlists.errorRemoving' => 'Échec de suppression depuis la playlist', + 'watchTogether.title' => 'Regarder ensemble', + 'watchTogether.description' => 'Regardez du contenu en synchronisation avec vos amis et votre famille', + 'watchTogether.createSession' => 'Créer une session', + 'watchTogether.creating' => 'Création...', + 'watchTogether.joinSession' => 'Rejoindre la session', + 'watchTogether.joining' => 'Rejoindre...', + 'watchTogether.controlMode' => 'Mode de contrôle', + 'watchTogether.controlModeQuestion' => 'Qui peut contrôler la lecture ?', + 'watchTogether.hostOnly' => 'Hôte uniquement', + 'watchTogether.anyone' => 'N\'importe qui', + 'watchTogether.hostingSession' => 'Session d\'hébergement', + 'watchTogether.inSession' => 'En session', + 'watchTogether.sessionCode' => 'Code de session', + 'watchTogether.hostControlsPlayback' => 'L\'hôte contrôle la lecture', + 'watchTogether.anyoneCanControl' => 'Tout le monde peut contrôler la lecture', + 'watchTogether.hostControls' => 'Commandes de l\'hôte', + 'watchTogether.anyoneControls' => 'Tout le monde contrôle', + 'watchTogether.participants' => 'Participants', + 'watchTogether.host' => 'Hôte', + 'watchTogether.hostBadge' => 'HOST', + 'watchTogether.youAreHost' => 'Vous êtes l\'hôte', + 'watchTogether.watchingWithOthers' => 'Regarder avec d\'autres personnes', + 'watchTogether.endSession' => 'Fin de session', + 'watchTogether.leaveSession' => 'Quitter la session', + 'watchTogether.endSessionQuestion' => 'Terminer la session ?', + 'watchTogether.leaveSessionQuestion' => 'Quitter la session ?', + 'watchTogether.endSessionConfirm' => 'Cela mettra fin à la session pour tous les participants.', + 'watchTogether.leaveSessionConfirm' => 'Vous allez être déconnecté de la session.', + 'watchTogether.endSessionConfirmOverlay' => 'Cela mettra fin à la session de visionnage pour tous les participants.', + 'watchTogether.leaveSessionConfirmOverlay' => 'Vous serez déconnecté de la session de visionnage.', + 'watchTogether.end' => 'Terminer', + 'watchTogether.leave' => 'Fin', + _ => null, + } ?? switch (path) { + 'watchTogether.syncing' => 'Synchronisation...', + 'watchTogether.participant' => 'participant', + 'watchTogether.joinWatchSession' => 'Rejoindre la session de visionnage', + 'watchTogether.enterCodeHint' => 'Entrez le code à 8 caractères', + 'watchTogether.pasteFromClipboard' => 'Coller depuis le presse-papiers', + 'watchTogether.pleaseEnterCode' => 'Veuillez saisir un code de session', + 'watchTogether.codeMustBe8Chars' => 'Le code de session doit comporter 8 caractères', + 'watchTogether.joinInstructions' => 'Entrez le code de session partagé par l\'hôte pour rejoindre sa session de visionnage.', + 'watchTogether.failedToCreate' => 'Échec de la création de la session', + 'watchTogether.failedToJoin' => 'Échec de la connexion à la session', + 'watchTogether.sessionCodeCopied' => 'Code de session copié dans le presse-papiers', + 'downloads.title' => 'Téléchargements', + 'downloads.manage' => 'Gérer', + 'downloads.tvShows' => 'Show TV', + 'downloads.movies' => 'Films', + 'downloads.noDownloads' => 'Aucun téléchargement pour le moment', + 'downloads.noDownloadsDescription' => 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.', + 'downloads.downloadNow' => 'Télécharger', + 'downloads.deleteDownload' => 'Supprimer le téléchargement', + 'downloads.retryDownload' => 'Réessayer le téléchargement', + 'downloads.downloadQueued' => 'Téléchargement en attente', + 'downloads.episodesQueued' => ({required Object count}) => '${count} épisodes en attente de téléchargement', + 'downloads.downloadDeleted' => 'Télécharger supprimé', + 'downloads.deleteConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cela supprimera le fichier téléchargé de votre appareil.', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => 'Suppression de ${title}... (${current} sur ${total})', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart new file mode 100644 index 00000000..21b03bbd --- /dev/null +++ b/lib/i18n/strings_it.g.dart @@ -0,0 +1,1483 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsIt with BaseTranslations implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsIt({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.it, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsIt _root = this; // ignore: unused_field + + @override + TranslationsIt $copyWith({TranslationMetadata? meta}) => TranslationsIt(meta: meta ?? this.$meta); + + // Translations + @override late final _TranslationsAppIt app = _TranslationsAppIt._(_root); + @override late final _TranslationsAuthIt auth = _TranslationsAuthIt._(_root); + @override late final _TranslationsCommonIt common = _TranslationsCommonIt._(_root); + @override late final _TranslationsScreensIt screens = _TranslationsScreensIt._(_root); + @override late final _TranslationsUpdateIt update = _TranslationsUpdateIt._(_root); + @override late final _TranslationsSettingsIt settings = _TranslationsSettingsIt._(_root); + @override late final _TranslationsSearchIt search = _TranslationsSearchIt._(_root); + @override late final _TranslationsHotkeysIt hotkeys = _TranslationsHotkeysIt._(_root); + @override late final _TranslationsPinEntryIt pinEntry = _TranslationsPinEntryIt._(_root); + @override late final _TranslationsFileInfoIt fileInfo = _TranslationsFileInfoIt._(_root); + @override late final _TranslationsMediaMenuIt mediaMenu = _TranslationsMediaMenuIt._(_root); + @override late final _TranslationsAccessibilityIt accessibility = _TranslationsAccessibilityIt._(_root); + @override late final _TranslationsTooltipsIt tooltips = _TranslationsTooltipsIt._(_root); + @override late final _TranslationsVideoControlsIt videoControls = _TranslationsVideoControlsIt._(_root); + @override late final _TranslationsUserStatusIt userStatus = _TranslationsUserStatusIt._(_root); + @override late final _TranslationsMessagesIt messages = _TranslationsMessagesIt._(_root); + @override late final _TranslationsSubtitlingStylingIt subtitlingStyling = _TranslationsSubtitlingStylingIt._(_root); + @override late final _TranslationsMpvConfigIt mpvConfig = _TranslationsMpvConfigIt._(_root); + @override late final _TranslationsDialogIt dialog = _TranslationsDialogIt._(_root); + @override late final _TranslationsDiscoverIt discover = _TranslationsDiscoverIt._(_root); + @override late final _TranslationsErrorsIt errors = _TranslationsErrorsIt._(_root); + @override late final _TranslationsLibrariesIt libraries = _TranslationsLibrariesIt._(_root); + @override late final _TranslationsAboutIt about = _TranslationsAboutIt._(_root); + @override late final _TranslationsServerSelectionIt serverSelection = _TranslationsServerSelectionIt._(_root); + @override late final _TranslationsHubDetailIt hubDetail = _TranslationsHubDetailIt._(_root); + @override late final _TranslationsLogsIt logs = _TranslationsLogsIt._(_root); + @override late final _TranslationsLicensesIt licenses = _TranslationsLicensesIt._(_root); + @override late final _TranslationsNavigationIt navigation = _TranslationsNavigationIt._(_root); + @override late final _TranslationsDownloadsIt downloads = _TranslationsDownloadsIt._(_root); + @override late final _TranslationsPlaylistsIt playlists = _TranslationsPlaylistsIt._(_root); + @override late final _TranslationsCollectionsIt collections = _TranslationsCollectionsIt._(_root); + @override late final _TranslationsWatchTogetherIt watchTogether = _TranslationsWatchTogetherIt._(_root); +} + +// Path: app +class _TranslationsAppIt implements TranslationsAppEn { + _TranslationsAppIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Caricamento...'; +} + +// Path: auth +class _TranslationsAuthIt implements TranslationsAuthEn { + _TranslationsAuthIt._(this._root); + + final TranslationsIt _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.'; +} + +// Path: common +class _TranslationsCommonIt implements TranslationsCommonEn { + _TranslationsCommonIt._(this._root); + + final TranslationsIt _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 logout => 'Disconnetti'; + @override String get unknown => 'Sconosciuto'; + @override String get refresh => 'Aggiorna'; + @override String get yes => 'Sì'; + @override String get no => 'No'; + @override String get delete => 'Elimina'; + @override String get shuffle => 'Casuale'; + @override String get addTo => 'Aggiungi a...'; +} + +// Path: screens +class _TranslationsScreensIt implements TranslationsScreensEn { + _TranslationsScreensIt._(this._root); + + final TranslationsIt _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 mpvConfig => 'Configurazione MPV'; + @override String get search => 'Cerca'; + @override String get logs => 'Registro'; +} + +// Path: update +class _TranslationsUpdateIt implements TranslationsUpdateEn { + _TranslationsUpdateIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: settings +class _TranslationsSettingsIt implements TranslationsSettingsEn { + _TranslationsSettingsIt._(this._root); + + final TranslationsIt _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 advanced => 'Avanzate'; + @override String get episodePosterMode => 'Stile poster episodio'; + @override String get seriesPoster => 'Poster della serie'; + @override String get seriesPosterDescription => 'Mostra il poster della serie per tutti gli episodi'; + @override String get seasonPoster => 'Poster della stagione'; + @override String get seasonPosterDescription => 'Mostra il poster specifico della stagione per gli episodi'; + @override String get episodeThumbnail => 'Miniatura episodio'; + @override String get episodeThumbnailDescription => 'Mostra miniature 16:9 degli 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 showHeroSection => 'Mostra sezione principale'; + @override String get useGlobalHubs => 'Usa layout Home di Plex'; + @override String get useGlobalHubsDescription => 'Mostra gli hub della home page come il client Plex ufficiale. Se disattivato, mostra invece i suggerimenti per libreria.'; + @override String get showServerNameOnHubs => 'Mostra nome server sugli hub'; + @override String get showServerNameOnHubsDescription => 'Mostra sempre il nome del server nei titoli degli hub. Se disattivato, solo per nomi hub duplicati.'; + @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 videoPlayerControls => 'Controlli del lettore video'; + @override String get keyboardShortcuts => 'Scorciatoie da tastiera'; + @override String get keyboardShortcutsDescription => 'Personalizza le scorciatoie da tastiera'; + @override String get videoPlayerNavigation => 'Navigazione del lettore video'; + @override String get videoPlayerNavigationDescription => 'Usa i tasti freccia per navigare nei controlli del lettore video'; + @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'; + @override String get downloads => 'Download'; + @override String get downloadLocationDescription => 'Scegli dove salvare i contenuti scaricati'; + @override String get downloadLocationDefault => 'Predefinita (Archiviazione App)'; + @override String get downloadLocationCustom => 'Posizione Personalizzata'; + @override String get selectFolder => 'Seleziona Cartella'; + @override String get resetToDefault => 'Ripristina Predefinita'; + @override String currentPath({required Object path}) => 'Corrente: ${path}'; + @override String get downloadLocationChanged => 'Posizione di download modificata'; + @override String get downloadLocationReset => 'Posizione di download ripristinata a predefinita'; + @override String get downloadLocationInvalid => 'La cartella selezionata non è scrivibile'; + @override String get downloadLocationSelectError => 'Impossibile selezionare la cartella'; + @override String get downloadOnWifiOnly => 'Scarica solo con WiFi'; + @override String get downloadOnWifiOnlyDescription => 'Impedisci i download quando si utilizza la rete dati cellulare'; + @override String get cellularDownloadBlocked => 'I download sono disabilitati sulla rete dati cellulare. Connettiti al WiFi o modifica l\'impostazione.'; + @override String get maxVolume => 'Volume massimo'; + @override String get maxVolumeDescription => 'Consenti volume superiore al 100% per contenuti audio bassi'; + @override String maxVolumePercent({required Object percent}) => '${percent}%'; + @override String get maxVolumeHint => 'Inserisci volume massimo (100-300)'; + @override String get discordRichPresence => 'Discord Rich Presence'; + @override String get discordRichPresenceDescription => 'Mostra su Discord cosa stai guardando'; + @override String get matchContentFrameRate => 'Adatta frequenza fotogrammi'; + @override String get matchContentFrameRateDescription => 'Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria'; +} + +// Path: search +class _TranslationsSearchIt implements TranslationsSearchEn { + _TranslationsSearchIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: hotkeys +class _TranslationsHotkeysIt implements TranslationsHotkeysEn { + _TranslationsHotkeysIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String setShortcutFor({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; + @override String get clearShortcut => 'Elimina scorciatoia'; + @override late final _TranslationsHotkeysActionsIt actions = _TranslationsHotkeysActionsIt._(_root); +} + +// Path: pinEntry +class _TranslationsPinEntryIt implements TranslationsPinEntryEn { + _TranslationsPinEntryIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get enterPin => 'Inserisci PIN'; + @override String get showPin => 'Mostra PIN'; + @override String get hidePin => 'Nascondi PIN'; +} + +// Path: fileInfo +class _TranslationsFileInfoIt implements TranslationsFileInfoEn { + _TranslationsFileInfoIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: mediaMenu +class _TranslationsMediaMenuIt implements TranslationsMediaMenuEn { + _TranslationsMediaMenuIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: accessibility +class _TranslationsAccessibilityIt implements TranslationsAccessibilityEn { + _TranslationsAccessibilityIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: tooltips +class _TranslationsTooltipsIt implements TranslationsTooltipsEn { + _TranslationsTooltipsIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: videoControls +class _TranslationsVideoControlsIt implements TranslationsVideoControlsEn { + _TranslationsVideoControlsIt._(this._root); + + final TranslationsIt _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 autoPlayNext => 'Riproduzione automatica successivo'; + @override String get playNext => 'Riproduci successivo'; + @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 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 pipButton => 'Modalità Picture-in-Picture'; + @override String get aspectRatioButton => 'Proporzioni'; + @override String get fullscreenButton => 'Attiva schermo intero'; + @override String get exitFullscreenButton => 'Esci da schermo intero'; + @override String get alwaysOnTopButton => 'Sempre in primo piano'; + @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 _TranslationsUserStatusIt implements TranslationsUserStatusEn { + _TranslationsUserStatusIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: messages +class _TranslationsMessagesIt implements TranslationsMessagesEn { + _TranslationsMessagesIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get markedAsWatched => 'Segna come visto'; + @override String get markedAsUnwatched => 'Segna come non visto'; + @override String get markedAsWatchedOffline => 'Segnato come visto (sincronizzato online)'; + @override String get markedAsUnwatchedOffline => 'Segnato come non visto (sincronizzato online)'; + @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 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 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: subtitlingStyling +class _TranslationsSubtitlingStylingIt implements TranslationsSubtitlingStylingEn { + _TranslationsSubtitlingStylingIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: mpvConfig +class _TranslationsMpvConfigIt implements TranslationsMpvConfigEn { + _TranslationsMpvConfigIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get title => 'Configurazione MPV'; + @override String get description => 'Impostazioni avanzate del lettore video'; + @override String get properties => 'Proprietà'; + @override String get presets => 'Preset'; + @override String get noProperties => 'Nessuna proprietà configurata'; + @override String get noPresets => 'Nessun preset salvato'; + @override String get addProperty => 'Aggiungi proprietà'; + @override String get editProperty => 'Modifica proprietà'; + @override String get deleteProperty => 'Elimina proprietà'; + @override String get propertyKey => 'Chiave proprietà'; + @override String get propertyKeyHint => 'es. hwdec, demuxer-max-bytes'; + @override String get propertyValue => 'Valore proprietà'; + @override String get propertyValueHint => 'es. auto, 256000000'; + @override String get saveAsPreset => 'Salva come preset...'; + @override String get presetName => 'Nome preset'; + @override String get presetNameHint => 'Inserisci un nome per questo preset'; + @override String get loadPreset => 'Carica'; + @override String get deletePreset => 'Elimina'; + @override String get presetSaved => 'Preset salvato'; + @override String get presetLoaded => 'Preset caricato'; + @override String get presetDeleted => 'Preset eliminato'; + @override String get confirmDeletePreset => 'Sei sicuro di voler eliminare questo preset?'; + @override String get confirmDeleteProperty => 'Sei sicuro di voler eliminare questa proprietà?'; + @override String entriesCount({required Object count}) => '${count} voci'; +} + +// Path: dialog +class _TranslationsDialogIt implements TranslationsDialogEn { + _TranslationsDialogIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get confirmAction => 'Conferma azione'; + @override String get cancel => 'Cancella'; + @override String get playNow => 'Riproduci ora'; +} + +// Path: discover +class _TranslationsDiscoverIt implements TranslationsDiscoverEn { + _TranslationsDiscoverIt._(this._root); + + final TranslationsIt _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 play => 'Riproduci'; + @override String playEpisode({required Object season, required Object episode}) => '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 _TranslationsErrorsIt implements TranslationsErrorsEn { + _TranslationsErrorsIt._(this._root); + + final TranslationsIt _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}'; +} + +// Path: libraries +class _TranslationsLibrariesIt implements TranslationsLibrariesEn { + _TranslationsLibrariesIt._(this._root); + + final TranslationsIt _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 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 _TranslationsLibrariesTabsIt tabs = _TranslationsLibrariesTabsIt._(_root); + @override late final _TranslationsLibrariesGroupingsIt groupings = _TranslationsLibrariesGroupingsIt._(_root); +} + +// Path: about +class _TranslationsAboutIt implements TranslationsAboutEn { + _TranslationsAboutIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: serverSelection +class _TranslationsServerSelectionIt implements TranslationsServerSelectionEn { + _TranslationsServerSelectionIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get allServerConnectionsFailed => 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; + @override String get noServersFound => 'Nessun server trovato'; + @override String noServersFoundForAccount({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})'; + @override String failedToLoadServers({required Object error}) => 'Impossibile caricare i server: ${error}'; +} + +// Path: hubDetail +class _TranslationsHubDetailIt implements TranslationsHubDetailEn { + _TranslationsHubDetailIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: logs +class _TranslationsLogsIt implements TranslationsLogsEn { + _TranslationsLogsIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get clearLogs => 'Cancella log'; + @override String get copyLogs => 'Copia log'; + @override String get error => 'Errore:'; + @override String get stackTrace => 'Traccia dello stack:'; +} + +// Path: licenses +class _TranslationsLicensesIt implements TranslationsLicensesEn { + _TranslationsLicensesIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: navigation +class _TranslationsNavigationIt implements TranslationsNavigationEn { + _TranslationsNavigationIt._(this._root); + + final TranslationsIt _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'; + @override String get downloads => 'Download'; +} + +// Path: downloads +class _TranslationsDownloadsIt implements TranslationsDownloadsEn { + _TranslationsDownloadsIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get title => 'Download'; + @override String get manage => 'Gestisci'; + @override String get tvShows => 'Serie TV'; + @override String get movies => 'Film'; + @override String get noDownloads => 'Nessun download'; + @override String get noDownloadsDescription => 'I contenuti scaricati appariranno qui per la visualizzazione offline'; + @override String get downloadNow => 'Scarica'; + @override String get deleteDownload => 'Elimina download'; + @override String get retryDownload => 'Riprova download'; + @override String get downloadQueued => 'Download in coda'; + @override String episodesQueued({required Object count}) => '${count} episodi in coda per il download'; + @override String get downloadDeleted => 'Download eliminato'; + @override String deleteConfirm({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Il file scaricato verrà rimosso dal tuo dispositivo.'; + @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Eliminazione di ${title}... (${current} di ${total})'; +} + +// Path: playlists +class _TranslationsPlaylistsIt implements TranslationsPlaylistsEn { + _TranslationsPlaylistsIt._(this._root); + + final TranslationsIt _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 playlistName => 'Nome playlist'; + @override String get enterPlaylistName => 'Inserisci nome playlist'; + @override String get delete => 'Elimina playlist'; + @override String get removeItem => 'Rimuovi da playlist'; + @override String get smartPlaylist => 'Playlist intelligente'; + @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 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 _TranslationsCollectionsIt implements TranslationsCollectionsEn { + _TranslationsCollectionsIt._(this._root); + + final TranslationsIt _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 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 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: watchTogether +class _TranslationsWatchTogetherIt implements TranslationsWatchTogetherEn { + _TranslationsWatchTogetherIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get title => 'Guarda Insieme'; + @override String get description => 'Guarda contenuti in sincronia con amici e familiari'; + @override String get createSession => 'Crea Sessione'; + @override String get creating => 'Creazione...'; + @override String get joinSession => 'Unisciti alla Sessione'; + @override String get joining => 'Connessione...'; + @override String get controlMode => 'Modalità di Controllo'; + @override String get controlModeQuestion => 'Chi può controllare la riproduzione?'; + @override String get hostOnly => 'Solo Host'; + @override String get anyone => 'Tutti'; + @override String get hostingSession => 'Hosting Sessione'; + @override String get inSession => 'In Sessione'; + @override String get sessionCode => 'Codice Sessione'; + @override String get hostControlsPlayback => 'L\'host controlla la riproduzione'; + @override String get anyoneCanControl => 'Tutti possono controllare la riproduzione'; + @override String get hostControls => 'Controllo host'; + @override String get anyoneControls => 'Controllo di tutti'; + @override String get participants => 'Partecipanti'; + @override String get host => 'Host'; + @override String get hostBadge => 'HOST'; + @override String get youAreHost => 'Sei l\'host'; + @override String get watchingWithOthers => 'Guardando con altri'; + @override String get endSession => 'Termina Sessione'; + @override String get leaveSession => 'Lascia Sessione'; + @override String get endSessionQuestion => 'Terminare la Sessione?'; + @override String get leaveSessionQuestion => 'Lasciare la Sessione?'; + @override String get endSessionConfirm => 'Questo terminerà la sessione per tutti i partecipanti.'; + @override String get leaveSessionConfirm => 'Sarai rimosso dalla sessione.'; + @override String get endSessionConfirmOverlay => 'Questo terminerà la sessione di visione per tutti i partecipanti.'; + @override String get leaveSessionConfirmOverlay => 'Sarai disconnesso dalla sessione di visione.'; + @override String get end => 'Termina'; + @override String get leave => 'Lascia'; + @override String get syncing => 'Sincronizzazione...'; + @override String get participant => 'partecipante'; + @override String get joinWatchSession => 'Unisciti alla Sessione di Visione'; + @override String get enterCodeHint => 'Inserisci codice di 8 caratteri'; + @override String get pasteFromClipboard => 'Incolla dagli appunti'; + @override String get pleaseEnterCode => 'Inserisci un codice sessione'; + @override String get codeMustBe8Chars => 'Il codice sessione deve essere di 8 caratteri'; + @override String get joinInstructions => 'Inserisci il codice sessione condiviso dall\'host per unirti alla loro sessione di visione.'; + @override String get failedToCreate => 'Impossibile creare la sessione'; + @override String get failedToJoin => 'Impossibile unirsi alla sessione'; + @override String get sessionCodeCopied => 'Codice sessione copiato negli appunti'; +} + +// Path: hotkeys.actions +class _TranslationsHotkeysActionsIt implements TranslationsHotkeysActionsEn { + _TranslationsHotkeysActionsIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get playPause => 'Riproduci/Pausa'; + @override String get volumeUp => 'Alza volume'; + @override String get volumeDown => 'Abbassa volume'; + @override String seekForward({required Object seconds}) => 'Avanti (${seconds}s)'; + @override String seekBackward({required Object seconds}) => 'Indietro (${seconds}s)'; + @override String get fullscreenToggle => 'Schermo intero'; + @override String get muteToggle => 'Muto'; + @override String get subtitleToggle => 'Sottotitoli'; + @override String get audioTrackNext => 'Traccia audio successiva'; + @override String get subtitleTrackNext => 'Sottotitoli successivi'; + @override String get chapterNext => 'Capitolo successivo'; + @override String get chapterPrevious => 'Capitolo precedente'; + @override String get speedIncrease => 'Aumenta velocità'; + @override String get speedDecrease => 'Diminuisci velocità'; + @override String get speedReset => 'Ripristina velocità'; + @override String get subSeekNext => 'Vai al sottotitolo successivo'; + @override String get subSeekPrev => 'Vai al sottotitolo precedente'; +} + +// Path: libraries.tabs +class _TranslationsLibrariesTabsIt implements TranslationsLibrariesTabsEn { + _TranslationsLibrariesTabsIt._(this._root); + + final TranslationsIt _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'; +} + +// Path: libraries.groupings +class _TranslationsLibrariesGroupingsIt implements TranslationsLibrariesGroupingsEn { + _TranslationsLibrariesGroupingsIt._(this._root); + + final TranslationsIt _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'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsIt { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => 'Caricamento...', + 'auth.signInWithPlex' => 'Accedi con Plex', + 'auth.showQRCode' => 'Mostra QR Code', + 'auth.cancel' => 'Cancella', + 'auth.authenticate' => 'Autenticazione', + 'auth.retry' => 'Riprova', + 'auth.debugEnterToken' => 'Debug: Inserisci Token Plex', + 'auth.plexTokenLabel' => 'Token Auth Plex', + 'auth.plexTokenHint' => 'Inserisci il tuo token di Plex.tv', + 'auth.authenticationTimeout' => 'Autenticazione scaduta. Riprova.', + 'auth.scanQRCodeInstruction' => 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.', + 'auth.waitingForAuth' => 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.', + 'common.cancel' => 'Cancella', + 'common.save' => 'Salva', + 'common.close' => 'Chiudi', + 'common.clear' => 'Pulisci', + 'common.reset' => 'Ripristina', + 'common.later' => 'Più tardi', + 'common.submit' => 'Invia', + 'common.confirm' => 'Conferma', + 'common.retry' => 'Riprova', + 'common.logout' => 'Disconnetti', + 'common.unknown' => 'Sconosciuto', + 'common.refresh' => 'Aggiorna', + 'common.yes' => 'Sì', + 'common.no' => 'No', + 'common.delete' => 'Elimina', + 'common.shuffle' => 'Casuale', + 'common.addTo' => 'Aggiungi a...', + 'screens.licenses' => 'Licenze', + 'screens.selectServer' => 'Seleziona server', + 'screens.switchProfile' => 'Cambia profilo', + 'screens.subtitleStyling' => 'Stile sottotitoli', + 'screens.mpvConfig' => 'Configurazione MPV', + 'screens.search' => 'Cerca', + 'screens.logs' => 'Registro', + 'update.available' => 'Aggiornamento disponibile', + 'update.versionAvailable' => ({required Object version}) => 'Versione ${version} disponibile', + 'update.currentVersion' => ({required Object version}) => 'Corrente: ${version}', + 'update.skipVersion' => 'Salta questa versione', + 'update.viewRelease' => 'Visualizza dettagli release', + 'update.latestVersion' => 'La versione installata è l\'ultima disponibile', + 'update.checkFailed' => 'Impossibile controllare gli aggiornamenti', + 'settings.title' => 'Impostazioni', + 'settings.language' => 'Lingua', + 'settings.theme' => 'Tema', + 'settings.appearance' => 'Aspetto', + 'settings.videoPlayback' => 'Riproduzione video', + 'settings.advanced' => 'Avanzate', + 'settings.episodePosterMode' => 'Stile poster episodio', + 'settings.seriesPoster' => 'Poster della serie', + 'settings.seriesPosterDescription' => 'Mostra il poster della serie per tutti gli episodi', + 'settings.seasonPoster' => 'Poster della stagione', + 'settings.seasonPosterDescription' => 'Mostra il poster specifico della stagione per gli episodi', + 'settings.episodeThumbnail' => 'Miniatura episodio', + 'settings.episodeThumbnailDescription' => 'Mostra miniature 16:9 degli episodi', + 'settings.showHeroSectionDescription' => 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale', + 'settings.secondsLabel' => 'Secondi', + 'settings.minutesLabel' => 'Minuti', + 'settings.secondsShort' => 's', + 'settings.minutesShort' => 'm', + 'settings.durationHint' => ({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})', + 'settings.systemTheme' => 'Sistema', + 'settings.systemThemeDescription' => 'Segui le impostazioni di sistema', + 'settings.lightTheme' => 'Chiaro', + 'settings.darkTheme' => 'Scuro', + 'settings.libraryDensity' => 'Densità libreria', + 'settings.compact' => 'Compatta', + 'settings.compactDescription' => 'Schede più piccole, più elementi visibili', + 'settings.normal' => 'Normale', + 'settings.normalDescription' => 'Dimensione predefinita', + 'settings.comfortable' => 'Comoda', + 'settings.comfortableDescription' => 'Schede più grandi, meno elementi visibili', + 'settings.viewMode' => 'Modalità di visualizzazione', + 'settings.gridView' => 'Griglia', + 'settings.gridViewDescription' => 'Visualizza gli elementi in un layout a griglia', + 'settings.listView' => 'Elenco', + 'settings.listViewDescription' => 'Visualizza gli elementi in un layout a elenco', + 'settings.showHeroSection' => 'Mostra sezione principale', + 'settings.useGlobalHubs' => 'Usa layout Home di Plex', + 'settings.useGlobalHubsDescription' => 'Mostra gli hub della home page come il client Plex ufficiale. Se disattivato, mostra invece i suggerimenti per libreria.', + 'settings.showServerNameOnHubs' => 'Mostra nome server sugli hub', + 'settings.showServerNameOnHubsDescription' => 'Mostra sempre il nome del server nei titoli degli hub. Se disattivato, solo per nomi hub duplicati.', + 'settings.hardwareDecoding' => 'Decodifica Hardware', + 'settings.hardwareDecodingDescription' => 'Utilizza l\'accelerazione hardware quando disponibile', + 'settings.bufferSize' => 'Dimensione buffer', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => 'Stile sottotitoli', + 'settings.subtitleStylingDescription' => 'Personalizza l\'aspetto dei sottotitoli', + 'settings.smallSkipDuration' => 'Durata skip breve', + 'settings.largeSkipDuration' => 'Durata skip lungo', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds} secondi', + 'settings.defaultSleepTimer' => 'Timer spegnimento predefinito', + 'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minuti', + 'settings.rememberTrackSelections' => 'Ricorda selezioni tracce per serie/film', + 'settings.rememberTrackSelectionsDescription' => 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione', + 'settings.videoPlayerControls' => 'Controlli del lettore video', + 'settings.keyboardShortcuts' => 'Scorciatoie da tastiera', + 'settings.keyboardShortcutsDescription' => 'Personalizza le scorciatoie da tastiera', + 'settings.videoPlayerNavigation' => 'Navigazione del lettore video', + 'settings.videoPlayerNavigationDescription' => 'Usa i tasti freccia per navigare nei controlli del lettore video', + 'settings.debugLogging' => 'Log di debug', + 'settings.debugLoggingDescription' => 'Abilita il logging dettagliato per la risoluzione dei problemi', + 'settings.viewLogs' => 'Visualizza log', + 'settings.viewLogsDescription' => 'Visualizza i log dell\'applicazione', + 'settings.clearCache' => 'Svuota cache', + 'settings.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.', + 'settings.clearCacheSuccess' => 'Cache cancellata correttamente', + 'settings.resetSettings' => 'Ripristina impostazioni', + 'settings.resetSettingsDescription' => 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.', + 'settings.resetSettingsSuccess' => 'Impostazioni ripristinate correttamente', + 'settings.shortcutsReset' => 'Scorciatoie ripristinate alle impostazioni predefinite', + 'settings.about' => 'Informazioni', + 'settings.aboutDescription' => 'Informazioni sull\'app e le licenze', + 'settings.updates' => 'Aggiornamenti', + 'settings.updateAvailable' => 'Aggiornamento disponibile', + 'settings.checkForUpdates' => 'Controlla aggiornamenti', + 'settings.validationErrorEnterNumber' => 'Inserisci un numero valido', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Scorciatoia già assegnata a ${action}', + 'settings.shortcutUpdated' => ({required Object action}) => 'Scorciatoia aggiornata per ${action}', + 'settings.autoSkip' => 'Salto Automatico', + 'settings.autoSkipIntro' => 'Salta Intro Automaticamente', + 'settings.autoSkipIntroDescription' => 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi', + 'settings.autoSkipCredits' => 'Salta Crediti Automaticamente', + 'settings.autoSkipCreditsDescription' => 'Salta automaticamente i crediti e riproduci l\'episodio successivo', + 'settings.autoSkipDelay' => 'Ritardo Salto Automatico', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => 'Aspetta ${seconds} secondi prima del salto automatico', + 'settings.downloads' => 'Download', + 'settings.downloadLocationDescription' => 'Scegli dove salvare i contenuti scaricati', + 'settings.downloadLocationDefault' => 'Predefinita (Archiviazione App)', + 'settings.downloadLocationCustom' => 'Posizione Personalizzata', + 'settings.selectFolder' => 'Seleziona Cartella', + 'settings.resetToDefault' => 'Ripristina Predefinita', + 'settings.currentPath' => ({required Object path}) => 'Corrente: ${path}', + 'settings.downloadLocationChanged' => 'Posizione di download modificata', + 'settings.downloadLocationReset' => 'Posizione di download ripristinata a predefinita', + 'settings.downloadLocationInvalid' => 'La cartella selezionata non è scrivibile', + 'settings.downloadLocationSelectError' => 'Impossibile selezionare la cartella', + 'settings.downloadOnWifiOnly' => 'Scarica solo con WiFi', + 'settings.downloadOnWifiOnlyDescription' => 'Impedisci i download quando si utilizza la rete dati cellulare', + 'settings.cellularDownloadBlocked' => 'I download sono disabilitati sulla rete dati cellulare. Connettiti al WiFi o modifica l\'impostazione.', + 'settings.maxVolume' => 'Volume massimo', + 'settings.maxVolumeDescription' => 'Consenti volume superiore al 100% per contenuti audio bassi', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => 'Inserisci volume massimo (100-300)', + 'settings.discordRichPresence' => 'Discord Rich Presence', + 'settings.discordRichPresenceDescription' => 'Mostra su Discord cosa stai guardando', + 'settings.matchContentFrameRate' => 'Adatta frequenza fotogrammi', + 'settings.matchContentFrameRateDescription' => 'Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria', + 'search.hint' => 'Cerca film. spettacoli, musica...', + 'search.tryDifferentTerm' => 'Prova altri termini di ricerca', + 'search.searchYourMedia' => 'Cerca nei tuoi media', + 'search.enterTitleActorOrKeyword' => 'Inserisci un titolo, attore o parola chiave', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => 'Imposta scorciatoia per ${actionName}', + 'hotkeys.clearShortcut' => 'Elimina scorciatoia', + 'hotkeys.actions.playPause' => 'Riproduci/Pausa', + 'hotkeys.actions.volumeUp' => 'Alza volume', + 'hotkeys.actions.volumeDown' => 'Abbassa volume', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => 'Avanti (${seconds}s)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => 'Indietro (${seconds}s)', + 'hotkeys.actions.fullscreenToggle' => 'Schermo intero', + 'hotkeys.actions.muteToggle' => 'Muto', + 'hotkeys.actions.subtitleToggle' => 'Sottotitoli', + 'hotkeys.actions.audioTrackNext' => 'Traccia audio successiva', + 'hotkeys.actions.subtitleTrackNext' => 'Sottotitoli successivi', + 'hotkeys.actions.chapterNext' => 'Capitolo successivo', + 'hotkeys.actions.chapterPrevious' => 'Capitolo precedente', + 'hotkeys.actions.speedIncrease' => 'Aumenta velocità', + 'hotkeys.actions.speedDecrease' => 'Diminuisci velocità', + 'hotkeys.actions.speedReset' => 'Ripristina velocità', + 'hotkeys.actions.subSeekNext' => 'Vai al sottotitolo successivo', + 'hotkeys.actions.subSeekPrev' => 'Vai al sottotitolo precedente', + 'pinEntry.enterPin' => 'Inserisci PIN', + 'pinEntry.showPin' => 'Mostra PIN', + 'pinEntry.hidePin' => 'Nascondi PIN', + 'fileInfo.title' => 'Info sul file', + 'fileInfo.video' => 'Video', + 'fileInfo.audio' => 'Audio', + 'fileInfo.file' => 'File', + 'fileInfo.advanced' => 'Avanzate', + 'fileInfo.codec' => 'Codec', + 'fileInfo.resolution' => 'Risoluzione', + 'fileInfo.bitrate' => 'Bitrate', + 'fileInfo.frameRate' => 'Frame Rate', + 'fileInfo.aspectRatio' => 'Aspect Ratio', + 'fileInfo.profile' => 'Profilo', + 'fileInfo.bitDepth' => 'Profondità colore', + 'fileInfo.colorSpace' => 'Spazio colore', + 'fileInfo.colorRange' => 'Gamma colori', + 'fileInfo.colorPrimaries' => 'Colori primari', + 'fileInfo.chromaSubsampling' => 'Sottocampionamento cromatico', + 'fileInfo.channels' => 'Canali', + 'fileInfo.path' => 'Percorso', + 'fileInfo.size' => 'Dimensione', + 'fileInfo.container' => 'Contenitore', + 'fileInfo.duration' => 'Durata', + 'fileInfo.optimizedForStreaming' => 'Ottimizzato per lo streaming', + 'fileInfo.has64bitOffsets' => 'Offset a 64-bit', + 'mediaMenu.markAsWatched' => 'Segna come visto', + 'mediaMenu.markAsUnwatched' => 'Segna come non visto', + 'mediaMenu.removeFromContinueWatching' => 'Rimuovi da Continua a guardare', + 'mediaMenu.goToSeries' => 'Vai alle serie', + 'mediaMenu.goToSeason' => 'Vai alla stagione', + 'mediaMenu.shufflePlay' => 'Riproduzione casuale', + 'mediaMenu.fileInfo' => 'Info sul file', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, serie TV', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => 'visto', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} percento visto', + 'accessibility.mediaCardUnwatched' => 'non visto', + 'accessibility.tapToPlay' => 'Tocca per riprodurre', + 'tooltips.shufflePlay' => 'Riproduzione casuale', + 'tooltips.markAsWatched' => 'Segna come visto', + 'tooltips.markAsUnwatched' => 'Segna come non visto', + 'videoControls.audioLabel' => 'Audio', + 'videoControls.subtitlesLabel' => 'Sottotitoli', + 'videoControls.resetToZero' => 'Riporta a 0ms', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} riprodotto dopo', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} riprodotto prima', + 'videoControls.noOffset' => 'Nessun offset', + 'videoControls.letterbox' => 'Letterbox', + 'videoControls.fillScreen' => 'Riempi schermo', + 'videoControls.stretch' => 'Allunga', + 'videoControls.lockRotation' => 'Blocca rotazione', + 'videoControls.unlockRotation' => 'Sblocca rotazione', + 'videoControls.sleepTimer' => 'Timer di spegnimento', + 'videoControls.timerActive' => 'Timer attivo', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => 'La riproduzione si interromperà tra ${duration}', + 'videoControls.sleepTimerCompleted' => 'Timer di spegnimento completato - riproduzione in pausa', + 'videoControls.autoPlayNext' => 'Riproduzione automatica successivo', + 'videoControls.playNext' => 'Riproduci successivo', + 'videoControls.playButton' => 'Riproduci', + 'videoControls.pauseButton' => 'Pausa', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi', + 'videoControls.seekForwardButton' => ({required Object seconds}) => 'Avanza di ${seconds} secondi', + 'videoControls.previousButton' => 'Episodio precedente', + 'videoControls.nextButton' => 'Episodio successivo', + 'videoControls.previousChapterButton' => 'Capitolo precedente', + 'videoControls.nextChapterButton' => 'Capitolo successivo', + 'videoControls.muteButton' => 'Silenzia', + 'videoControls.unmuteButton' => 'Riattiva audio', + 'videoControls.settingsButton' => 'Impostazioni video', + 'videoControls.audioTrackButton' => 'Tracce audio', + 'videoControls.subtitlesButton' => 'Sottotitoli', + 'videoControls.chaptersButton' => 'Capitoli', + 'videoControls.versionsButton' => 'Versioni video', + 'videoControls.pipButton' => 'Modalità Picture-in-Picture', + 'videoControls.aspectRatioButton' => 'Proporzioni', + 'videoControls.fullscreenButton' => 'Attiva schermo intero', + 'videoControls.exitFullscreenButton' => 'Esci da schermo intero', + 'videoControls.alwaysOnTopButton' => 'Sempre in primo piano', + 'videoControls.rotationLockButton' => 'Blocco rotazione', + 'videoControls.timelineSlider' => 'Timeline video', + 'videoControls.volumeSlider' => 'Livello volume', + 'videoControls.backButton' => 'Indietro', + 'userStatus.admin' => 'Admin', + 'userStatus.restricted' => 'Limitato', + 'userStatus.protected' => 'Protetto', + 'userStatus.current' => 'ATTUALE', + 'messages.markedAsWatched' => 'Segna come visto', + 'messages.markedAsUnwatched' => 'Segna come non visto', + 'messages.markedAsWatchedOffline' => 'Segnato come visto (sincronizzato online)', + 'messages.markedAsUnwatchedOffline' => 'Segnato come non visto (sincronizzato online)', + 'messages.removedFromContinueWatching' => 'Rimosso da Continua a guardare', + 'messages.errorLoading' => ({required Object error}) => 'Errore: ${error}', + 'messages.fileInfoNotAvailable' => 'Informazioni sul file non disponibili', + 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Errore caricamento informazioni sul file: ${error}', + 'messages.errorLoadingSeries' => 'Errore caricamento serie', + 'messages.errorLoadingSeason' => 'Errore caricamento stagione', + 'messages.musicNotSupported' => 'La riproduzione musicale non è ancora supportata', + 'messages.logsCleared' => 'Log eliminati', + 'messages.logsCopied' => 'Log copiati negli appunti', + 'messages.noLogsAvailable' => 'Nessun log disponibile', + 'messages.libraryScanning' => ({required Object title}) => 'Scansione "${title}"...', + 'messages.libraryScanStarted' => ({required Object title}) => 'Scansione libreria iniziata per "${title}"', + 'messages.libraryScanFailed' => ({required Object error}) => 'Impossibile eseguire scansione della libreria: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => 'Aggiornamento metadati per "${title}"...', + 'messages.metadataRefreshStarted' => ({required Object title}) => 'Aggiornamento metadati per "${title}"', + 'messages.metadataRefreshFailed' => ({required Object error}) => 'Errore aggiornamento metadati: ${error}', + 'messages.logoutConfirm' => 'Sei sicuro di volerti disconnettere?', + 'messages.noSeasonsFound' => 'Nessuna stagione trovata', + 'messages.noEpisodesFound' => 'Nessun episodio trovato nella prima stagione', + 'messages.noEpisodesFoundGeneral' => 'Nessun episodio trovato', + 'messages.noResultsFound' => 'Nessun risultato', + 'messages.sleepTimerSet' => ({required Object label}) => 'Imposta timer spegnimento per ${label}', + 'messages.noItemsAvailable' => 'Nessun elemento disponibile', + 'messages.failedToCreatePlayQueue' => 'Impossibile creare la coda di riproduzione', + 'messages.failedToCreatePlayQueueNoItems' => 'Impossibile creare la coda di riproduzione - nessun elemento', + 'messages.failedPlayback' => ({required Object action, required Object error}) => 'Impossibile ${action}: ${error}', + 'subtitlingStyling.stylingOptions' => 'Opzioni stile', + 'subtitlingStyling.fontSize' => 'Dimensione', + 'subtitlingStyling.textColor' => 'Colore testo', + 'subtitlingStyling.borderSize' => 'Dimensione bordo', + 'subtitlingStyling.borderColor' => 'Colore bordo', + 'subtitlingStyling.backgroundOpacity' => 'Opacità sfondo', + 'subtitlingStyling.backgroundColor' => 'Colore sfondo', + 'mpvConfig.title' => 'Configurazione MPV', + 'mpvConfig.description' => 'Impostazioni avanzate del lettore video', + 'mpvConfig.properties' => 'Proprietà', + 'mpvConfig.presets' => 'Preset', + 'mpvConfig.noProperties' => 'Nessuna proprietà configurata', + 'mpvConfig.noPresets' => 'Nessun preset salvato', + 'mpvConfig.addProperty' => 'Aggiungi proprietà', + 'mpvConfig.editProperty' => 'Modifica proprietà', + 'mpvConfig.deleteProperty' => 'Elimina proprietà', + 'mpvConfig.propertyKey' => 'Chiave proprietà', + 'mpvConfig.propertyKeyHint' => 'es. hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => 'Valore proprietà', + 'mpvConfig.propertyValueHint' => 'es. auto, 256000000', + 'mpvConfig.saveAsPreset' => 'Salva come preset...', + 'mpvConfig.presetName' => 'Nome preset', + 'mpvConfig.presetNameHint' => 'Inserisci un nome per questo preset', + 'mpvConfig.loadPreset' => 'Carica', + 'mpvConfig.deletePreset' => 'Elimina', + 'mpvConfig.presetSaved' => 'Preset salvato', + 'mpvConfig.presetLoaded' => 'Preset caricato', + 'mpvConfig.presetDeleted' => 'Preset eliminato', + 'mpvConfig.confirmDeletePreset' => 'Sei sicuro di voler eliminare questo preset?', + 'mpvConfig.confirmDeleteProperty' => 'Sei sicuro di voler eliminare questa proprietà?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} voci', + 'dialog.confirmAction' => 'Conferma azione', + 'dialog.cancel' => 'Cancella', + 'dialog.playNow' => 'Riproduci ora', + 'discover.title' => 'Esplora', + 'discover.switchProfile' => 'Cambia profilo', + 'discover.switchServer' => 'Cambia server', + 'discover.logout' => 'Disconnetti', + 'discover.noContentAvailable' => 'Nessun contenuto disponibile', + 'discover.addMediaToLibraries' => 'Aggiungi alcuni file multimediali alle tue librerie', + 'discover.continueWatching' => 'Continua a guardare', + 'discover.play' => 'Riproduci', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => 'Pausa', + 'discover.overview' => 'Panoramica', + 'discover.cast' => 'Attori', + 'discover.seasons' => 'Stagioni', + 'discover.studio' => 'Studio', + 'discover.rating' => 'Classificazione', + 'discover.watched' => 'Guardato', + 'discover.episodeCount' => ({required Object count}) => '${count} episodi', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '${watched}/${total} guardati', + 'discover.movie' => 'Film', + 'discover.tvShow' => 'Serie TV', + 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} minuti rimanenti', + 'errors.searchFailed' => ({required Object error}) => 'Ricerca fallita: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => 'Timeout connessione durante caricamento di ${context}', + 'errors.connectionFailed' => 'Impossibile connettersi al server Plex.', + 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}', + 'errors.noClientAvailable' => 'Nessun client disponibile', + 'errors.authenticationFailed' => ({required Object error}) => 'Autenticazione fallita: ${error}', + 'errors.couldNotLaunchUrl' => 'Impossibile avviare URL di autenticazione', + 'errors.pleaseEnterToken' => 'Inserisci token', + 'errors.invalidToken' => 'Token non valido', + 'errors.failedToVerifyToken' => ({required Object error}) => 'Verifica token fallita: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => 'Impossibile passare a ${displayName}', + 'libraries.title' => 'Librerie', + 'libraries.scanLibraryFiles' => 'Scansiona file libreria', + 'libraries.scanLibrary' => 'Scansiona libreria', + 'libraries.analyze' => 'Analizza', + 'libraries.analyzeLibrary' => 'Analizza libreria', + 'libraries.refreshMetadata' => 'Aggiorna metadati', + 'libraries.emptyTrash' => 'Svuota cestino', + 'libraries.emptyingTrash' => ({required Object title}) => 'Svuotamento cestino per "${title}"...', + 'libraries.trashEmptied' => ({required Object title}) => 'Cestino svuotato per "${title}"', + 'libraries.failedToEmptyTrash' => ({required Object error}) => 'Impossibile svuotare cestino: ${error}', + 'libraries.analyzing' => ({required Object title}) => 'Analisi "${title}"...', + 'libraries.analysisStarted' => ({required Object title}) => 'Analisi iniziata per "${title}"', + 'libraries.failedToAnalyze' => ({required Object error}) => 'Impossibile analizzare libreria: ${error}', + 'libraries.noLibrariesFound' => 'Nessuna libreria trovata', + 'libraries.thisLibraryIsEmpty' => 'Questa libreria è vuota', + 'libraries.all' => 'Tutto', + 'libraries.clearAll' => 'Cancella tutto', + 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => 'Sei sicuro di voler analizzare "${title}"?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Sei sicuro di voler aggiornare i metadati per "${title}"?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => 'Sei sicuro di voler svuotare il cestino per "${title}"?', + 'libraries.manageLibraries' => 'Gestisci librerie', + 'libraries.sort' => 'Ordina', + 'libraries.sortBy' => 'Ordina per', + 'libraries.filters' => 'Filtri', + 'libraries.confirmActionMessage' => 'Sei sicuro di voler eseguire questa azione?', + 'libraries.showLibrary' => 'Mostra libreria', + 'libraries.hideLibrary' => 'Nascondi libreria', + 'libraries.libraryOptions' => 'Opzioni libreria', + 'libraries.content' => 'contenuto della libreria', + 'libraries.selectLibrary' => 'Seleziona libreria', + 'libraries.filtersWithCount' => ({required Object count}) => 'Filtri (${count})', + 'libraries.noRecommendations' => 'Nessun consiglio disponibile', + 'libraries.noCollections' => 'Nessuna raccolta in questa libreria', + 'libraries.noFoldersFound' => 'Nessuna cartella trovata', + 'libraries.folders' => 'cartelle', + 'libraries.tabs.recommended' => 'Consigliati', + 'libraries.tabs.browse' => 'Esplora', + 'libraries.tabs.collections' => 'Raccolte', + 'libraries.tabs.playlists' => 'Playlist', + 'libraries.groupings.all' => 'Tutti', + 'libraries.groupings.movies' => 'Film', + 'libraries.groupings.shows' => 'Serie TV', + 'libraries.groupings.seasons' => 'Stagioni', + 'libraries.groupings.episodes' => 'Episodi', + 'libraries.groupings.folders' => 'Cartelle', + 'about.title' => 'Informazioni', + 'about.openSourceLicenses' => 'Licenze Open Source', + 'about.versionLabel' => ({required Object version}) => 'Versione ${version}', + 'about.appDescription' => 'Un bellissimo client Plex per Flutter', + 'about.viewLicensesDescription' => 'Visualizza le licenze delle librerie di terze parti', + 'serverSelection.allServerConnectionsFailed' => 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.', + 'serverSelection.noServersFound' => 'Nessun server trovato', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Impossibile caricare i server: ${error}', + 'hubDetail.title' => 'Titolo', + 'hubDetail.releaseYear' => 'Anno rilascio', + 'hubDetail.dateAdded' => 'Data aggiunta', + 'hubDetail.rating' => 'Valutazione', + 'hubDetail.noItemsFound' => 'Nessun elemento trovato', + 'logs.clearLogs' => 'Cancella log', + 'logs.copyLogs' => 'Copia log', + 'logs.error' => 'Errore:', + 'logs.stackTrace' => 'Traccia dello stack:', + 'licenses.relatedPackages' => 'Pacchetti correlati', + 'licenses.license' => 'Licenza', + 'licenses.licenseNumber' => ({required Object number}) => 'Licenza ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} licenze', + 'navigation.home' => 'Home', + 'navigation.search' => 'Cerca', + 'navigation.libraries' => 'Librerie', + 'navigation.settings' => 'Impostazioni', + 'navigation.downloads' => 'Download', + 'downloads.title' => 'Download', + 'downloads.manage' => 'Gestisci', + 'downloads.tvShows' => 'Serie TV', + 'downloads.movies' => 'Film', + 'downloads.noDownloads' => 'Nessun download', + 'downloads.noDownloadsDescription' => 'I contenuti scaricati appariranno qui per la visualizzazione offline', + 'downloads.downloadNow' => 'Scarica', + 'downloads.deleteDownload' => 'Elimina download', + 'downloads.retryDownload' => 'Riprova download', + 'downloads.downloadQueued' => 'Download in coda', + 'downloads.episodesQueued' => ({required Object count}) => '${count} episodi in coda per il download', + 'downloads.downloadDeleted' => 'Download eliminato', + 'downloads.deleteConfirm' => ({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Il file scaricato verrà rimosso dal tuo dispositivo.', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => 'Eliminazione di ${title}... (${current} di ${total})', + 'playlists.title' => 'Playlist', + 'playlists.noPlaylists' => 'Nessuna playlist trovata', + 'playlists.create' => 'Crea playlist', + 'playlists.playlistName' => 'Nome playlist', + 'playlists.enterPlaylistName' => 'Inserisci nome playlist', + 'playlists.delete' => 'Elimina playlist', + 'playlists.removeItem' => 'Rimuovi da playlist', + 'playlists.smartPlaylist' => 'Playlist intelligente', + 'playlists.itemCount' => ({required Object count}) => '${count} elementi', + 'playlists.oneItem' => '1 elemento', + 'playlists.emptyPlaylist' => 'Questa playlist è vuota', + 'playlists.deleteConfirm' => 'Eliminare playlist?', + 'playlists.deleteMessage' => ({required Object name}) => 'Sei sicuro di voler eliminare "${name}"?', + 'playlists.created' => 'Playlist creata', + 'playlists.deleted' => 'Playlist eliminata', + 'playlists.itemAdded' => 'Aggiunto alla playlist', + 'playlists.itemRemoved' => 'Rimosso dalla playlist', + 'playlists.selectPlaylist' => 'Seleziona playlist', + 'playlists.createNewPlaylist' => 'Crea nuova playlist', + 'playlists.errorCreating' => 'Errore durante la creazione della playlist', + 'playlists.errorDeleting' => 'Errore durante l\'eliminazione della playlist', + 'playlists.errorLoading' => 'Errore durante il caricamento delle playlist', + 'playlists.errorAdding' => 'Errore durante l\'aggiunta alla playlist', + 'playlists.errorReordering' => 'Errore durante il riordino dell\'elemento della playlist', + 'playlists.errorRemoving' => 'Errore durante la rimozione dalla playlist', + 'playlists.playlist' => 'Playlist', + 'collections.title' => 'Raccolte', + 'collections.collection' => 'Raccolta', + 'collections.empty' => 'La raccolta è vuota', + 'collections.unknownLibrarySection' => 'Impossibile eliminare: sezione libreria sconosciuta', + 'collections.deleteCollection' => 'Elimina raccolta', + 'collections.deleteConfirm' => ({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.', + 'collections.deleted' => 'Raccolta eliminata', + 'collections.deleteFailed' => 'Impossibile eliminare la raccolta', + 'collections.deleteFailedWithError' => ({required Object error}) => 'Impossibile eliminare la raccolta: ${error}', + 'collections.failedToLoadItems' => ({required Object error}) => 'Impossibile caricare gli elementi della raccolta: ${error}', + 'collections.selectCollection' => 'Seleziona raccolta', + 'collections.createNewCollection' => 'Crea nuova raccolta', + 'collections.collectionName' => 'Nome raccolta', + 'collections.enterCollectionName' => 'Inserisci nome raccolta', + 'collections.addedToCollection' => 'Aggiunto alla raccolta', + 'collections.errorAddingToCollection' => 'Errore nell\'aggiunta alla raccolta', + 'collections.created' => 'Raccolta creata', + 'collections.removeFromCollection' => 'Rimuovi dalla raccolta', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => 'Rimuovere "${title}" da questa raccolta?', + 'collections.removedFromCollection' => 'Rimosso dalla raccolta', + 'collections.removeFromCollectionFailed' => 'Impossibile rimuovere dalla raccolta', + 'collections.removeFromCollectionError' => ({required Object error}) => 'Errore durante la rimozione dalla raccolta: ${error}', + 'watchTogether.title' => 'Guarda Insieme', + 'watchTogether.description' => 'Guarda contenuti in sincronia con amici e familiari', + 'watchTogether.createSession' => 'Crea Sessione', + 'watchTogether.creating' => 'Creazione...', + 'watchTogether.joinSession' => 'Unisciti alla Sessione', + 'watchTogether.joining' => 'Connessione...', + 'watchTogether.controlMode' => 'Modalità di Controllo', + 'watchTogether.controlModeQuestion' => 'Chi può controllare la riproduzione?', + 'watchTogether.hostOnly' => 'Solo Host', + 'watchTogether.anyone' => 'Tutti', + 'watchTogether.hostingSession' => 'Hosting Sessione', + 'watchTogether.inSession' => 'In Sessione', + 'watchTogether.sessionCode' => 'Codice Sessione', + 'watchTogether.hostControlsPlayback' => 'L\'host controlla la riproduzione', + 'watchTogether.anyoneCanControl' => 'Tutti possono controllare la riproduzione', + 'watchTogether.hostControls' => 'Controllo host', + _ => null, + } ?? switch (path) { + 'watchTogether.anyoneControls' => 'Controllo di tutti', + 'watchTogether.participants' => 'Partecipanti', + 'watchTogether.host' => 'Host', + 'watchTogether.hostBadge' => 'HOST', + 'watchTogether.youAreHost' => 'Sei l\'host', + 'watchTogether.watchingWithOthers' => 'Guardando con altri', + 'watchTogether.endSession' => 'Termina Sessione', + 'watchTogether.leaveSession' => 'Lascia Sessione', + 'watchTogether.endSessionQuestion' => 'Terminare la Sessione?', + 'watchTogether.leaveSessionQuestion' => 'Lasciare la Sessione?', + 'watchTogether.endSessionConfirm' => 'Questo terminerà la sessione per tutti i partecipanti.', + 'watchTogether.leaveSessionConfirm' => 'Sarai rimosso dalla sessione.', + 'watchTogether.endSessionConfirmOverlay' => 'Questo terminerà la sessione di visione per tutti i partecipanti.', + 'watchTogether.leaveSessionConfirmOverlay' => 'Sarai disconnesso dalla sessione di visione.', + 'watchTogether.end' => 'Termina', + 'watchTogether.leave' => 'Lascia', + 'watchTogether.syncing' => 'Sincronizzazione...', + 'watchTogether.participant' => 'partecipante', + 'watchTogether.joinWatchSession' => 'Unisciti alla Sessione di Visione', + 'watchTogether.enterCodeHint' => 'Inserisci codice di 8 caratteri', + 'watchTogether.pasteFromClipboard' => 'Incolla dagli appunti', + 'watchTogether.pleaseEnterCode' => 'Inserisci un codice sessione', + 'watchTogether.codeMustBe8Chars' => 'Il codice sessione deve essere di 8 caratteri', + 'watchTogether.joinInstructions' => 'Inserisci il codice sessione condiviso dall\'host per unirti alla loro sessione di visione.', + 'watchTogether.failedToCreate' => 'Impossibile creare la sessione', + 'watchTogether.failedToJoin' => 'Impossibile unirsi alla sessione', + 'watchTogether.sessionCodeCopied' => 'Codice sessione copiato negli appunti', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart new file mode 100644 index 00000000..05cc6f5e --- /dev/null +++ b/lib/i18n/strings_ko.g.dart @@ -0,0 +1,1483 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsKo with BaseTranslations implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsKo({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ko, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsKo _root = this; // ignore: unused_field + + @override + TranslationsKo $copyWith({TranslationMetadata? meta}) => TranslationsKo(meta: meta ?? this.$meta); + + // Translations + @override late final _TranslationsAppKo app = _TranslationsAppKo._(_root); + @override late final _TranslationsAuthKo auth = _TranslationsAuthKo._(_root); + @override late final _TranslationsCommonKo common = _TranslationsCommonKo._(_root); + @override late final _TranslationsScreensKo screens = _TranslationsScreensKo._(_root); + @override late final _TranslationsUpdateKo update = _TranslationsUpdateKo._(_root); + @override late final _TranslationsSettingsKo settings = _TranslationsSettingsKo._(_root); + @override late final _TranslationsSearchKo search = _TranslationsSearchKo._(_root); + @override late final _TranslationsHotkeysKo hotkeys = _TranslationsHotkeysKo._(_root); + @override late final _TranslationsPinEntryKo pinEntry = _TranslationsPinEntryKo._(_root); + @override late final _TranslationsFileInfoKo fileInfo = _TranslationsFileInfoKo._(_root); + @override late final _TranslationsMediaMenuKo mediaMenu = _TranslationsMediaMenuKo._(_root); + @override late final _TranslationsAccessibilityKo accessibility = _TranslationsAccessibilityKo._(_root); + @override late final _TranslationsTooltipsKo tooltips = _TranslationsTooltipsKo._(_root); + @override late final _TranslationsVideoControlsKo videoControls = _TranslationsVideoControlsKo._(_root); + @override late final _TranslationsUserStatusKo userStatus = _TranslationsUserStatusKo._(_root); + @override late final _TranslationsMessagesKo messages = _TranslationsMessagesKo._(_root); + @override late final _TranslationsSubtitlingStylingKo subtitlingStyling = _TranslationsSubtitlingStylingKo._(_root); + @override late final _TranslationsMpvConfigKo mpvConfig = _TranslationsMpvConfigKo._(_root); + @override late final _TranslationsDialogKo dialog = _TranslationsDialogKo._(_root); + @override late final _TranslationsDiscoverKo discover = _TranslationsDiscoverKo._(_root); + @override late final _TranslationsErrorsKo errors = _TranslationsErrorsKo._(_root); + @override late final _TranslationsLibrariesKo libraries = _TranslationsLibrariesKo._(_root); + @override late final _TranslationsAboutKo about = _TranslationsAboutKo._(_root); + @override late final _TranslationsServerSelectionKo serverSelection = _TranslationsServerSelectionKo._(_root); + @override late final _TranslationsHubDetailKo hubDetail = _TranslationsHubDetailKo._(_root); + @override late final _TranslationsLogsKo logs = _TranslationsLogsKo._(_root); + @override late final _TranslationsLicensesKo licenses = _TranslationsLicensesKo._(_root); + @override late final _TranslationsNavigationKo navigation = _TranslationsNavigationKo._(_root); + @override late final _TranslationsCollectionsKo collections = _TranslationsCollectionsKo._(_root); + @override late final _TranslationsPlaylistsKo playlists = _TranslationsPlaylistsKo._(_root); + @override late final _TranslationsWatchTogetherKo watchTogether = _TranslationsWatchTogetherKo._(_root); + @override late final _TranslationsDownloadsKo downloads = _TranslationsDownloadsKo._(_root); +} + +// Path: app +class _TranslationsAppKo implements TranslationsAppEn { + _TranslationsAppKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get title => 'Plezy'; + @override String get loading => '로딩 중...'; +} + +// Path: auth +class _TranslationsAuthKo implements TranslationsAuthEn { + _TranslationsAuthKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get signInWithPlex => 'Plex 계정으로 로그인'; + @override String get showQRCode => 'QR 코드'; + @override String get cancel => '취소'; + @override String get authenticate => '인증'; + @override String get retry => '재시도'; + @override String get debugEnterToken => '디버깅을 위해 Plex 토큰을 입력하세요.'; + @override String get plexTokenLabel => 'Plex 인증 토큰'; + @override String get plexTokenHint => 'Plex.tv 토큰을 입력하세요'; + @override String get authenticationTimeout => '인증 시간이 초과되었습니다. 다시 시도해 주세요.'; + @override String get scanQRCodeInstruction => 'Plex 계정에 로그인된 기기에서 이 QR 코드를 스캔하여 본인 인증을 해주세요.'; + @override String get waitingForAuth => '인증 대기 중... 브라우저에서 로그인을 완료해 주세요.'; +} + +// Path: common +class _TranslationsCommonKo implements TranslationsCommonEn { + _TranslationsCommonKo._(this._root); + + final TranslationsKo _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 logout => '로그아웃'; + @override String get unknown => '알 수 없는'; + @override String get refresh => '새로고침'; + @override String get yes => '예'; + @override String get no => '아니오'; + @override String get delete => '삭제'; + @override String get shuffle => '무작위 재생'; + @override String get addTo => '추가하기...'; +} + +// Path: screens +class _TranslationsScreensKo implements TranslationsScreensEn { + _TranslationsScreensKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get licenses => '라이선스'; + @override String get selectServer => '서버 선택'; + @override String get switchProfile => '프로필 전환'; + @override String get subtitleStyling => '자막 스타일 설정'; + @override String get mpvConfig => 'MPV 설정'; + @override String get search => '검색'; + @override String get logs => '로그'; +} + +// Path: update +class _TranslationsUpdateKo implements TranslationsUpdateEn { + _TranslationsUpdateKo._(this._root); + + final TranslationsKo _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 => '업데이트 확인 실패'; +} + +// Path: settings +class _TranslationsSettingsKo implements TranslationsSettingsEn { + _TranslationsSettingsKo._(this._root); + + final TranslationsKo _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 advanced => '고급'; + @override String get episodePosterMode => '에피소드 포스터 스타일'; + @override String get seriesPoster => '시리즈 포스터'; + @override String get seriesPosterDescription => '모든 에피소드에 시리즈 포스터 표시'; + @override String get seasonPoster => '시즌 포스터'; + @override String get seasonPosterDescription => '에피소드에 시즌별 포스터 표시'; + @override String get episodeThumbnail => '에피소드 썸네일'; + @override String get episodeThumbnailDescription => '16:9 에피소드 스크린샷 썸네일 표시'; + @override String get showHeroSectionDescription => '홈 화면에 주요 콘텐츠 캐러셀(슬라이드) 표시'; + @override String get secondsLabel => '초'; + @override String get minutesLabel => '분'; + @override String get secondsShort => '초'; + @override String get minutesShort => '분'; + @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 showHeroSection => '주요 추천 영역 표시'; + @override String get useGlobalHubs => 'Plex 홈 레이아웃 사용'; + @override String get useGlobalHubsDescription => '공식 Plex 클라이언트처럼 홈 페이지 허브를 표시합니다. 끄면 라이브러리별 추천이 대신 표시됩니다.'; + @override String get showServerNameOnHubs => '허브에 서버 이름 표시'; + @override String get showServerNameOnHubsDescription => '허브 제목에 항상 서버 이름을 표시합니다. 끄면 중복된 허브 이름에만 표시됩니다.'; + @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 videoPlayerControls => '비디오 플레이어 컨트롤'; + @override String get keyboardShortcuts => '키보드 단축키'; + @override String get keyboardShortcutsDescription => '사용자 정의 키보드 단축키'; + @override String get videoPlayerNavigation => '비디오 플레이어 탐색'; + @override String get videoPlayerNavigationDescription => '방향 키를 사용하여 비디오 플레이어 컨트롤 탐색'; + @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} 초 대기'; + @override String get downloads => '다운로드'; + @override String get downloadLocationDescription => '다운로드 콘텐츠 저장 위치 선택'; + @override String get downloadLocationDefault => '기본값 (앱 저장소)'; + @override String get downloadLocationCustom => '사용자 지정 위치'; + @override String get selectFolder => '폴더 선택'; + @override String get resetToDefault => '기본값으로 재설정'; + @override String currentPath({required Object path}) => '현재: ${path}'; + @override String get downloadLocationChanged => '다운로드 위치가 변경 되었습니다'; + @override String get downloadLocationReset => '다운로드 위치가 기본값으로 재설정 되었습니다'; + @override String get downloadLocationInvalid => '선택한 폴더에 쓰기 권한이 없습니다'; + @override String get downloadLocationSelectError => '폴더 선택 실패'; + @override String get downloadOnWifiOnly => 'WiFi 연결 시에만 다운로드'; + @override String get downloadOnWifiOnlyDescription => '셀룰러 데이터 사용 시 다운로드 불가'; + @override String get cellularDownloadBlocked => '셀룰러 데이터에서 다운로드가 차단 되었습니다. WiFi에 연결하거나 설정을 변경하세요.'; + @override String get maxVolume => '최대 볼륨'; + @override String get maxVolumeDescription => '조용한 미디어를 위해 100% 이상의 볼륨 허용'; + @override String maxVolumePercent({required Object percent}) => '${percent}%'; + @override String get maxVolumeHint => '최대 볼륨 입력 (100-300)'; + @override String get discordRichPresence => 'Discord Rich Presence'; + @override String get discordRichPresenceDescription => 'Discord에서 시청 중인 콘텐츠 표시'; + @override String get matchContentFrameRate => '콘텐츠 프레임 레이트 맞춤'; + @override String get matchContentFrameRateDescription => '비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다'; +} + +// Path: search +class _TranslationsSearchKo implements TranslationsSearchEn { + _TranslationsSearchKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get hint => '영화, 시리즈, 음악 등을 검색하세요...'; + @override String get tryDifferentTerm => '다른 검색어를 시도해 보세요'; + @override String get searchYourMedia => '미디어 검색'; + @override String get enterTitleActorOrKeyword => '제목, 배우 또는 키워드를 입력하세요'; +} + +// Path: hotkeys +class _TranslationsHotkeysKo implements TranslationsHotkeysEn { + _TranslationsHotkeysKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String setShortcutFor({required Object actionName}) => '${actionName}에 대한 단축키 설정'; + @override String get clearShortcut => '단축키 삭제'; + @override late final _TranslationsHotkeysActionsKo actions = _TranslationsHotkeysActionsKo._(_root); +} + +// Path: pinEntry +class _TranslationsPinEntryKo implements TranslationsPinEntryEn { + _TranslationsPinEntryKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get enterPin => 'PIN 입력'; + @override String get showPin => 'PIN 표시'; + @override String get hidePin => 'PIN 숨기기'; +} + +// Path: fileInfo +class _TranslationsFileInfoKo implements TranslationsFileInfoEn { + _TranslationsFileInfoKo._(this._root); + + final TranslationsKo _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비트 오프셋'; +} + +// Path: mediaMenu +class _TranslationsMediaMenuKo implements TranslationsMediaMenuEn { + _TranslationsMediaMenuKo._(this._root); + + final TranslationsKo _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 => '파일 정보'; +} + +// Path: accessibility +class _TranslationsAccessibilityKo implements TranslationsAccessibilityEn { + _TranslationsAccessibilityKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, 영화'; + @override String mediaCardShow({required Object title}) => '${title}, 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 => '시청 완료'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} 퍼센트 시청 완료'; + @override String get mediaCardUnwatched => '미시청'; + @override String get tapToPlay => '터치 하여 재생'; +} + +// Path: tooltips +class _TranslationsTooltipsKo implements TranslationsTooltipsEn { + _TranslationsTooltipsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get shufflePlay => '무작위 재생'; + @override String get markAsWatched => '시청 완료로 표시'; + @override String get markAsUnwatched => '시청 안 함으로 표시'; +} + +// Path: videoControls +class _TranslationsVideoControlsKo implements TranslationsVideoControlsEn { + _TranslationsVideoControlsKo._(this._root); + + final TranslationsKo _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 => '레터박스 모드'; + @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 autoPlayNext => '다음 자동 재생'; + @override String get playNext => '다음 재생'; + @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 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 pipButton => '픽처 인 픽처 모드'; + @override String get aspectRatioButton => '화면비율'; + @override String get fullscreenButton => '전체화면'; + @override String get exitFullscreenButton => '전체화면 종료'; + @override String get alwaysOnTopButton => '창 최상위 고정'; + @override String get rotationLockButton => '회전 잠금'; + @override String get timelineSlider => '타임라인'; + @override String get volumeSlider => '볼륨 조절'; + @override String get backButton => '뒤로 가기'; +} + +// Path: userStatus +class _TranslationsUserStatusKo implements TranslationsUserStatusEn { + _TranslationsUserStatusKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get admin => '관리자'; + @override String get restricted => '제한됨'; + @override String get protected => '보호됨'; + @override String get current => '현재'; +} + +// Path: messages +class _TranslationsMessagesKo implements TranslationsMessagesEn { + _TranslationsMessagesKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get markedAsWatched => '시청 완료로 표시됨'; + @override String get markedAsUnwatched => '시청 안 함으로 표시됨'; + @override String get markedAsWatchedOffline => '시청 완료로 표시됨 (연결 시 동기화됨)'; + @override String get markedAsUnwatchedOffline => '미시청으로 표시됨 (연결 시 동기화됨)'; + @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 logoutConfirm => '로그아웃 하시겠습니까?'; + @override String get noSeasonsFound => '시즌을 찾을 수 없음'; + @override String get noEpisodesFound => '시즌 1에서 에피소드를 찾을 수 없습니다'; + @override String get noEpisodesFoundGeneral => '에피소드를 찾을 수 없습니다'; + @override String get noResultsFound => '결과를 찾을 수 없습니다'; + @override String sleepTimerSet({required Object label}) => '수면 타이머가 ${label}로 설정 되었습니다'; + @override String get noItemsAvailable => '사용 가능한 항목이 없습니다'; + @override String get failedToCreatePlayQueue => '재생 대기열 생성 실패'; + @override String get failedToCreatePlayQueueNoItems => '재생 대기열 생성 실패 - 항목 없음'; + @override String failedPlayback({required Object action, required Object error}) => '${action}을(를) 수행할 수 없습니다: ${error}'; +} + +// Path: subtitlingStyling +class _TranslationsSubtitlingStylingKo implements TranslationsSubtitlingStylingEn { + _TranslationsSubtitlingStylingKo._(this._root); + + final TranslationsKo _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 => '배경색'; +} + +// Path: mpvConfig +class _TranslationsMpvConfigKo implements TranslationsMpvConfigEn { + _TranslationsMpvConfigKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get title => 'MPV 설정'; + @override String get description => '고급 비디오 플레이어 설정'; + @override String get properties => '속성'; + @override String get presets => '사전 설정'; + @override String get noProperties => '설정된 속성이 없습니다'; + @override String get noPresets => '저장된 사전 설정이 없습니다'; + @override String get addProperty => '속성 추가'; + @override String get editProperty => '속성 편집'; + @override String get deleteProperty => '속성 삭제'; + @override String get propertyKey => '속성 키'; + @override String get propertyKeyHint => '예: hwdec, demuxer-max-bytes'; + @override String get propertyValue => '속성값'; + @override String get propertyValueHint => '예: auto, 256000000'; + @override String get saveAsPreset => '프리셋으로 저장...'; + @override String get presetName => '프리셋 이름'; + @override String get presetNameHint => '이 프리셋의 이름을 입력하세요'; + @override String get loadPreset => '로드'; + @override String get deletePreset => '삭제'; + @override String get presetSaved => '프리셋이 저장 되었습니다'; + @override String get presetLoaded => '프리셋이 로드 되었습니다'; + @override String get presetDeleted => '프리셋이 삭제 되었습니다'; + @override String get confirmDeletePreset => '이 프리셋을 삭제 하시겠습니까?'; + @override String get confirmDeleteProperty => '이 속성을 삭제 하시겠습니까?'; + @override String entriesCount({required Object count}) => '${count} 항목'; +} + +// Path: dialog +class _TranslationsDialogKo implements TranslationsDialogEn { + _TranslationsDialogKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get confirmAction => '확인'; + @override String get cancel => '취소'; + @override String get playNow => '지금 재생'; +} + +// Path: discover +class _TranslationsDiscoverKo implements TranslationsDiscoverEn { + _TranslationsDiscoverKo._(this._root); + + final TranslationsKo _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 play => '재생'; + @override String playEpisode({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 => 'TV 시리즈'; + @override String minutesLeft({required Object minutes}) => '${minutes}분 남음'; +} + +// Path: errors +class _TranslationsErrorsKo implements TranslationsErrorsEn { + _TranslationsErrorsKo._(this._root); + + final TranslationsKo _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}으로 전환할 수 없습니다'; +} + +// Path: libraries +class _TranslationsLibrariesKo implements TranslationsLibrariesEn { + _TranslationsLibrariesKo._(this._root); + + final TranslationsKo _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 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 _TranslationsLibrariesTabsKo tabs = _TranslationsLibrariesTabsKo._(_root); + @override late final _TranslationsLibrariesGroupingsKo groupings = _TranslationsLibrariesGroupingsKo._(_root); +} + +// Path: about +class _TranslationsAboutKo implements TranslationsAboutEn { + _TranslationsAboutKo._(this._root); + + final TranslationsKo _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 => '타사 라이브러리 라이선스 보기'; +} + +// Path: serverSelection +class _TranslationsServerSelectionKo implements TranslationsServerSelectionEn { + _TranslationsServerSelectionKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get allServerConnectionsFailed => '어떤 서버에도 연결할 수 없습니다. 네트워크를 확인하고 다시 시도하세요.'; + @override String get noServersFound => '서버를 찾을 수 없습니다.'; + @override String noServersFoundForAccount({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.'; + @override String failedToLoadServers({required Object error}) => '서버를 로드할 수 없습니다: ${error}'; +} + +// Path: hubDetail +class _TranslationsHubDetailKo implements TranslationsHubDetailEn { + _TranslationsHubDetailKo._(this._root); + + final TranslationsKo _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 => '항목이 없습니다'; +} + +// Path: logs +class _TranslationsLogsKo implements TranslationsLogsEn { + _TranslationsLogsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get clearLogs => '로그 지우기'; + @override String get copyLogs => '로그 복사'; + @override String get error => '오류:'; + @override String get stackTrace => '스택 추적 (Stack Trace):'; +} + +// Path: licenses +class _TranslationsLicensesKo implements TranslationsLicensesEn { + _TranslationsLicensesKo._(this._root); + + final TranslationsKo _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} 개의 라이선스'; +} + +// Path: navigation +class _TranslationsNavigationKo implements TranslationsNavigationEn { + _TranslationsNavigationKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get home => '홈'; + @override String get search => '검색'; + @override String get libraries => '미디어 라이브러리'; + @override String get settings => '설정'; + @override String get downloads => '다운로드'; +} + +// Path: collections +class _TranslationsCollectionsKo implements TranslationsCollectionsEn { + _TranslationsCollectionsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get title => '컬렉션'; + @override String get collection => '컬렉션'; + @override String get empty => '컬렉션이 비어 있습니다'; + @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 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: playlists +class _TranslationsPlaylistsKo implements TranslationsPlaylistsEn { + _TranslationsPlaylistsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get title => '플레이리스트'; + @override String get playlist => '재생 목록'; + @override String get noPlaylists => '재생 목록을 찾을 수 없습니다'; + @override String get create => '재생 목록 생성'; + @override String get playlistName => '재생 목록 이름'; + @override String get enterPlaylistName => '재생 목록 이름 입력'; + @override String get delete => '재생 목록 삭제'; + @override String get removeItem => '재생 목록에서 항목 제거'; + @override String get smartPlaylist => '스마트 재생 목록'; + @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 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 => '재생 목록에서 제거 실패'; +} + +// Path: watchTogether +class _TranslationsWatchTogetherKo implements TranslationsWatchTogetherEn { + _TranslationsWatchTogetherKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get title => '함께 보기'; + @override String get description => '친구 및 가족과 콘텐츠를 동시에 시청하세요'; + @override String get createSession => '세션 생성'; + @override String get creating => '생성 중...'; + @override String get joinSession => '세션 참여'; + @override String get joining => '참가 중...'; + @override String get controlMode => '제어 모드'; + @override String get controlModeQuestion => '누가 재생을 제어할 수 있나요?'; + @override String get hostOnly => '호스트만'; + @override String get anyone => '누구나'; + @override String get hostingSession => '세션 호스팅'; + @override String get inSession => '세션 중'; + @override String get sessionCode => '세션 코드'; + @override String get hostControlsPlayback => '호스트 재생 제어'; + @override String get anyoneCanControl => '누구나 재생 제어 가능'; + @override String get hostControls => '호스트 제어'; + @override String get anyoneControls => '누구나 제어'; + @override String get participants => '참가자'; + @override String get host => '호스트'; + @override String get hostBadge => '호스트'; + @override String get youAreHost => '당신은 호스트 입니다'; + @override String get watchingWithOthers => '다른 사람과 함께 시청 중'; + @override String get endSession => '세션 종료'; + @override String get leaveSession => '세션 탈퇴'; + @override String get endSessionQuestion => '세션을 종료 하시겠습니까?'; + @override String get leaveSessionQuestion => '세션을 탈퇴 하시겠습니까?'; + @override String get endSessionConfirm => '이 작업은 모든 참가자의 세션을 종료합니다.'; + @override String get leaveSessionConfirm => '당신은 세션에서 제거됩니다.'; + @override String get endSessionConfirmOverlay => '이것은 모든 참가자의 시청 세션을 종료합니다.'; + @override String get leaveSessionConfirmOverlay => '시청 세션 연결이 끊어집니다.'; + @override String get end => '종료'; + @override String get leave => '이탈'; + @override String get syncing => '동기화 중...'; + @override String get participant => '참여자'; + @override String get joinWatchSession => '시청 세션에 참여'; + @override String get enterCodeHint => '8자리 코드 입력'; + @override String get pasteFromClipboard => '클립보드에서 붙여넣기'; + @override String get pleaseEnterCode => '세션 코드를 입력하세요'; + @override String get codeMustBe8Chars => '세션 코드는 반드시 8자리여야 합니다'; + @override String get joinInstructions => '호스트가 공유한 세션 코드를 입력하여 시청 세션에 참여하세요.'; + @override String get failedToCreate => '세션 생성 실패'; + @override String get failedToJoin => '세션 참여 실패'; + @override String get sessionCodeCopied => '세션 코드가 클립보드에 복사되었습니다'; +} + +// Path: downloads +class _TranslationsDownloadsKo implements TranslationsDownloadsEn { + _TranslationsDownloadsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get title => '다운로드'; + @override String get manage => '관리'; + @override String get tvShows => 'TV 프로그램'; + @override String get movies => '영화'; + @override String get noDownloads => '다운로드 없음'; + @override String get noDownloadsDescription => '다운로드한 콘텐츠는 오프라인 시청을 위해 여기에 표시됩니다'; + @override String get downloadNow => '다운로드'; + @override String get deleteDownload => '다운로드 삭제'; + @override String get retryDownload => '다운로드 재시도'; + @override String get downloadQueued => '다운로드 대기 중'; + @override String episodesQueued({required Object count}) => '${count} 에피소드가 다운로드 대기열에 추가 되었습니다'; + @override String get downloadDeleted => '다운로드 삭제됨'; + @override String deleteConfirm({required Object title}) => '"${title}"를 삭제 하시겠습니까? 다운로드한 파일이 기기에서 삭제됩니다.'; + @override String deletingWithProgress({required Object title, required Object current, required Object total}) => '${title} 삭제 중... (${current}/${total})'; +} + +// Path: hotkeys.actions +class _TranslationsHotkeysActionsKo implements TranslationsHotkeysActionsEn { + _TranslationsHotkeysActionsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get playPause => '재생/일시정지'; + @override String get volumeUp => '볼륨 높이기'; + @override String get volumeDown => '볼륨 낮추기'; + @override String seekForward({required Object seconds}) => '앞으로 이동 (${seconds}초)'; + @override String seekBackward({required Object seconds}) => '뒤로 이동 (${seconds}초)'; + @override String get fullscreenToggle => '전체 화면 전환'; + @override String get muteToggle => '음소거 전환'; + @override String get subtitleToggle => '자막 전환'; + @override String get audioTrackNext => '다음 오디오 트랙'; + @override String get subtitleTrackNext => '다음 자막 트랙'; + @override String get chapterNext => '다음 챕터'; + @override String get chapterPrevious => '이전 챕터'; + @override String get speedIncrease => '속도 높이기'; + @override String get speedDecrease => '속도 낮추기'; + @override String get speedReset => '속도 초기화'; + @override String get subSeekNext => '다음 자막으로 이동'; + @override String get subSeekPrev => '이전 자막으로 이동'; +} + +// Path: libraries.tabs +class _TranslationsLibrariesTabsKo implements TranslationsLibrariesTabsEn { + _TranslationsLibrariesTabsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get recommended => '추천'; + @override String get browse => '찾아보기'; + @override String get collections => '컬렉션'; + @override String get playlists => '재생 목록'; +} + +// Path: libraries.groupings +class _TranslationsLibrariesGroupingsKo implements TranslationsLibrariesGroupingsEn { + _TranslationsLibrariesGroupingsKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get all => '전체'; + @override String get movies => '영화'; + @override String get shows => 'TV 프로그램'; + @override String get seasons => '시즌'; + @override String get episodes => '화'; + @override String get folders => '폴더'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsKo { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => '로딩 중...', + 'auth.signInWithPlex' => 'Plex 계정으로 로그인', + 'auth.showQRCode' => 'QR 코드', + 'auth.cancel' => '취소', + 'auth.authenticate' => '인증', + 'auth.retry' => '재시도', + 'auth.debugEnterToken' => '디버깅을 위해 Plex 토큰을 입력하세요.', + 'auth.plexTokenLabel' => 'Plex 인증 토큰', + 'auth.plexTokenHint' => 'Plex.tv 토큰을 입력하세요', + 'auth.authenticationTimeout' => '인증 시간이 초과되었습니다. 다시 시도해 주세요.', + 'auth.scanQRCodeInstruction' => 'Plex 계정에 로그인된 기기에서 이 QR 코드를 스캔하여 본인 인증을 해주세요.', + 'auth.waitingForAuth' => '인증 대기 중... 브라우저에서 로그인을 완료해 주세요.', + 'common.cancel' => '취소', + 'common.save' => '저장', + 'common.close' => '닫기', + 'common.clear' => '지우기', + 'common.reset' => '초기화', + 'common.later' => '나중에', + 'common.submit' => '보내기', + 'common.confirm' => '확인', + 'common.retry' => '재시도', + 'common.logout' => '로그아웃', + 'common.unknown' => '알 수 없는', + 'common.refresh' => '새로고침', + 'common.yes' => '예', + 'common.no' => '아니오', + 'common.delete' => '삭제', + 'common.shuffle' => '무작위 재생', + 'common.addTo' => '추가하기...', + 'screens.licenses' => '라이선스', + 'screens.selectServer' => '서버 선택', + 'screens.switchProfile' => '프로필 전환', + 'screens.subtitleStyling' => '자막 스타일 설정', + 'screens.mpvConfig' => 'MPV 설정', + 'screens.search' => '검색', + 'screens.logs' => '로그', + 'update.available' => '사용 가능한 업데이트', + 'update.versionAvailable' => ({required Object version}) => '버전 ${version} 출시됨', + 'update.currentVersion' => ({required Object version}) => '현재 버전: ${version}', + 'update.skipVersion' => '이 버전 건너뛰기', + 'update.viewRelease' => '릴리스 정보 보기', + 'update.latestVersion' => '최신 버전을 사용 중입니다', + 'update.checkFailed' => '업데이트 확인 실패', + 'settings.title' => '설정', + 'settings.language' => '언어', + 'settings.theme' => '테마', + 'settings.appearance' => '외관', + 'settings.videoPlayback' => '비디오 재생', + 'settings.advanced' => '고급', + 'settings.episodePosterMode' => '에피소드 포스터 스타일', + 'settings.seriesPoster' => '시리즈 포스터', + 'settings.seriesPosterDescription' => '모든 에피소드에 시리즈 포스터 표시', + 'settings.seasonPoster' => '시즌 포스터', + 'settings.seasonPosterDescription' => '에피소드에 시즌별 포스터 표시', + 'settings.episodeThumbnail' => '에피소드 썸네일', + 'settings.episodeThumbnailDescription' => '16:9 에피소드 스크린샷 썸네일 표시', + 'settings.showHeroSectionDescription' => '홈 화면에 주요 콘텐츠 캐러셀(슬라이드) 표시', + 'settings.secondsLabel' => '초', + 'settings.minutesLabel' => '분', + 'settings.secondsShort' => '초', + 'settings.minutesShort' => '분', + 'settings.durationHint' => ({required Object min, required Object max}) => '기간 입력 (${min}-${max})', + 'settings.systemTheme' => '시스템 설정', + 'settings.systemThemeDescription' => '시스템 설정에 따름', + 'settings.lightTheme' => '라이트 모드', + 'settings.darkTheme' => '다크 모드', + 'settings.libraryDensity' => '라이브러리 표시 밀도', + 'settings.compact' => '좁게', + 'settings.compactDescription' => '카드를 작게 표시하여 더 많은 항목을 보여줍니다.', + 'settings.normal' => '보통', + 'settings.normalDescription' => '기본 크기', + 'settings.comfortable' => '넓게', + 'settings.comfortableDescription' => '카드를 크게 표시하여 더 적은 항목을 보여줍니다.', + 'settings.viewMode' => '보기 모드', + 'settings.gridView' => '그리드 보기', + 'settings.gridViewDescription' => '항목을 그리드 레이아웃으로 표시합니다', + 'settings.listView' => '목록 보기', + 'settings.listViewDescription' => '항목을 목록 레이아웃으로 표시합니다', + 'settings.showHeroSection' => '주요 추천 영역 표시', + 'settings.useGlobalHubs' => 'Plex 홈 레이아웃 사용', + 'settings.useGlobalHubsDescription' => '공식 Plex 클라이언트처럼 홈 페이지 허브를 표시합니다. 끄면 라이브러리별 추천이 대신 표시됩니다.', + 'settings.showServerNameOnHubs' => '허브에 서버 이름 표시', + 'settings.showServerNameOnHubsDescription' => '허브 제목에 항상 서버 이름을 표시합니다. 끄면 중복된 허브 이름에만 표시됩니다.', + 'settings.hardwareDecoding' => '하드웨어 디코딩', + 'settings.hardwareDecodingDescription' => '가능한 경우 하드웨어 가속을 사용합니다', + 'settings.bufferSize' => '버퍼 크기', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => '자막 스타일', + 'settings.subtitleStylingDescription' => '자막의 외형을 사용자 설정', + 'settings.smallSkipDuration' => '짧은 건너뛰기 시간', + 'settings.largeSkipDuration' => '긴 건너뛰기 시간', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds}초', + 'settings.defaultSleepTimer' => '기본 취침 타이머', + 'settings.minutesUnit' => ({required Object minutes}) => '${minutes}분', + 'settings.rememberTrackSelections' => '에피소드/영화별 트랙 선택 기억', + 'settings.rememberTrackSelectionsDescription' => '재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다', + 'settings.videoPlayerControls' => '비디오 플레이어 컨트롤', + 'settings.keyboardShortcuts' => '키보드 단축키', + 'settings.keyboardShortcutsDescription' => '사용자 정의 키보드 단축키', + 'settings.videoPlayerNavigation' => '비디오 플레이어 탐색', + 'settings.videoPlayerNavigationDescription' => '방향 키를 사용하여 비디오 플레이어 컨트롤 탐색', + 'settings.debugLogging' => '디버그 로깅', + 'settings.debugLoggingDescription' => '문제 해결을 위해 상세 로깅 활성화', + 'settings.viewLogs' => '로그 보기', + 'settings.viewLogsDescription' => '애플리케이션 로그 확인', + 'settings.clearCache' => '캐시 삭제', + 'settings.clearCacheDescription' => '모든 캐시된 이미지와 데이터를 지웁니다. 캐시를 지우면 애플리케이션 콘텐츠 로딩 속도가 느려질 수 있습니다.', + 'settings.clearCacheSuccess' => '캐시 삭제 성공', + 'settings.resetSettings' => '설정 재설정', + 'settings.resetSettingsDescription' => '모든 설정을 기본값으로 재설정합니다. 이 작업은 되돌릴 수 없습니다.', + 'settings.resetSettingsSuccess' => '설정 재설정 성공', + 'settings.shortcutsReset' => '단축키가 기본값으로 재설정되었습니다', + 'settings.about' => '정보', + 'settings.aboutDescription' => '응용 프로그램 정보 및 라이선스', + 'settings.updates' => '업데이트', + 'settings.updateAvailable' => '사용 가능한 업데이트 있음', + 'settings.checkForUpdates' => '업데이트 확인', + 'settings.validationErrorEnterNumber' => '유효한 숫자를 입력하세요', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => '기간은 ${min}과 ${max} ${unit} 사이여야 합니다', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => '단축키가 이미 ${action}에 할당 되었습니다', + 'settings.shortcutUpdated' => ({required Object action}) => '단축키가 ${action}에 대해 업데이트 되었습니다', + 'settings.autoSkip' => '자동 건너뛰기', + 'settings.autoSkipIntro' => '자동으로 오프닝 건너뛰기', + 'settings.autoSkipIntroDescription' => '몇 초 후 오프닝을 자동으로 건너뛰기', + 'settings.autoSkipCredits' => '자동으로 엔딩 건너뛰기', + 'settings.autoSkipCreditsDescription' => '엔딩 크레딧 자동 건너뛰기 후 다음 에피소드 재생', + 'settings.autoSkipDelay' => '자동 건너뛰기 지연', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => '자동 건너뛰기 전 ${seconds} 초 대기', + 'settings.downloads' => '다운로드', + 'settings.downloadLocationDescription' => '다운로드 콘텐츠 저장 위치 선택', + 'settings.downloadLocationDefault' => '기본값 (앱 저장소)', + 'settings.downloadLocationCustom' => '사용자 지정 위치', + 'settings.selectFolder' => '폴더 선택', + 'settings.resetToDefault' => '기본값으로 재설정', + 'settings.currentPath' => ({required Object path}) => '현재: ${path}', + 'settings.downloadLocationChanged' => '다운로드 위치가 변경 되었습니다', + 'settings.downloadLocationReset' => '다운로드 위치가 기본값으로 재설정 되었습니다', + 'settings.downloadLocationInvalid' => '선택한 폴더에 쓰기 권한이 없습니다', + 'settings.downloadLocationSelectError' => '폴더 선택 실패', + 'settings.downloadOnWifiOnly' => 'WiFi 연결 시에만 다운로드', + 'settings.downloadOnWifiOnlyDescription' => '셀룰러 데이터 사용 시 다운로드 불가', + 'settings.cellularDownloadBlocked' => '셀룰러 데이터에서 다운로드가 차단 되었습니다. WiFi에 연결하거나 설정을 변경하세요.', + 'settings.maxVolume' => '최대 볼륨', + 'settings.maxVolumeDescription' => '조용한 미디어를 위해 100% 이상의 볼륨 허용', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => '최대 볼륨 입력 (100-300)', + 'settings.discordRichPresence' => 'Discord Rich Presence', + 'settings.discordRichPresenceDescription' => 'Discord에서 시청 중인 콘텐츠 표시', + 'settings.matchContentFrameRate' => '콘텐츠 프레임 레이트 맞춤', + 'settings.matchContentFrameRateDescription' => '비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다', + 'search.hint' => '영화, 시리즈, 음악 등을 검색하세요...', + 'search.tryDifferentTerm' => '다른 검색어를 시도해 보세요', + 'search.searchYourMedia' => '미디어 검색', + 'search.enterTitleActorOrKeyword' => '제목, 배우 또는 키워드를 입력하세요', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => '${actionName}에 대한 단축키 설정', + 'hotkeys.clearShortcut' => '단축키 삭제', + 'hotkeys.actions.playPause' => '재생/일시정지', + 'hotkeys.actions.volumeUp' => '볼륨 높이기', + 'hotkeys.actions.volumeDown' => '볼륨 낮추기', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => '앞으로 이동 (${seconds}초)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => '뒤로 이동 (${seconds}초)', + 'hotkeys.actions.fullscreenToggle' => '전체 화면 전환', + 'hotkeys.actions.muteToggle' => '음소거 전환', + 'hotkeys.actions.subtitleToggle' => '자막 전환', + 'hotkeys.actions.audioTrackNext' => '다음 오디오 트랙', + 'hotkeys.actions.subtitleTrackNext' => '다음 자막 트랙', + 'hotkeys.actions.chapterNext' => '다음 챕터', + 'hotkeys.actions.chapterPrevious' => '이전 챕터', + 'hotkeys.actions.speedIncrease' => '속도 높이기', + 'hotkeys.actions.speedDecrease' => '속도 낮추기', + 'hotkeys.actions.speedReset' => '속도 초기화', + 'hotkeys.actions.subSeekNext' => '다음 자막으로 이동', + 'hotkeys.actions.subSeekPrev' => '이전 자막으로 이동', + 'pinEntry.enterPin' => 'PIN 입력', + 'pinEntry.showPin' => 'PIN 표시', + 'pinEntry.hidePin' => 'PIN 숨기기', + 'fileInfo.title' => '파일 정보', + 'fileInfo.video' => '비디오', + 'fileInfo.audio' => '오디오', + 'fileInfo.file' => '파일', + 'fileInfo.advanced' => '고급', + 'fileInfo.codec' => '코덱', + 'fileInfo.resolution' => '해상도', + 'fileInfo.bitrate' => '비트레이트', + 'fileInfo.frameRate' => '프레임 속도', + 'fileInfo.aspectRatio' => '종횡비', + 'fileInfo.profile' => '프로파일', + 'fileInfo.bitDepth' => '비트 심도', + 'fileInfo.colorSpace' => '색 공간', + 'fileInfo.colorRange' => '색 범위', + 'fileInfo.colorPrimaries' => '색상 원색', + 'fileInfo.chromaSubsampling' => '채도 서브샘플링', + 'fileInfo.channels' => '채널', + 'fileInfo.path' => '경로', + 'fileInfo.size' => '크기', + 'fileInfo.container' => '컨테이너', + 'fileInfo.duration' => '재생 시간', + 'fileInfo.optimizedForStreaming' => '스트리밍 최적화', + 'fileInfo.has64bitOffsets' => '64비트 오프셋', + 'mediaMenu.markAsWatched' => '시청 완료로 표시', + 'mediaMenu.markAsUnwatched' => '시청 안 함으로 표시', + 'mediaMenu.removeFromContinueWatching' => '계속 보기에서 제거', + 'mediaMenu.goToSeries' => '시리즈로 이동', + 'mediaMenu.goToSeason' => '시즌으로 이동', + 'mediaMenu.shufflePlay' => '무작위 재생', + 'mediaMenu.fileInfo' => '파일 정보', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, 영화', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV 프로그램', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => '시청 완료', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} 퍼센트 시청 완료', + 'accessibility.mediaCardUnwatched' => '미시청', + 'accessibility.tapToPlay' => '터치 하여 재생', + 'tooltips.shufflePlay' => '무작위 재생', + 'tooltips.markAsWatched' => '시청 완료로 표시', + 'tooltips.markAsUnwatched' => '시청 안 함으로 표시', + 'videoControls.audioLabel' => '오디오', + 'videoControls.subtitlesLabel' => '자막', + 'videoControls.resetToZero' => '0ms로 재설정', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} 나중에 재생됨', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} 더 먼저 재생됨', + 'videoControls.noOffset' => '오프셋 없음', + 'videoControls.letterbox' => '레터박스 모드', + 'videoControls.fillScreen' => '화면 채우기', + 'videoControls.stretch' => '확장', + 'videoControls.lockRotation' => '회전 잠금', + 'videoControls.unlockRotation' => '회전 잠금 해제', + 'videoControls.sleepTimer' => '수면 타이머', + 'videoControls.timerActive' => '타이머 활성화됨', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => '재생이 ${duration} 후에 일시 중지 됩니다', + 'videoControls.sleepTimerCompleted' => '수면 타이머 완료됨 - 재생이 일시 중지되었습니다', + 'videoControls.autoPlayNext' => '다음 자동 재생', + 'videoControls.playNext' => '다음 재생', + 'videoControls.playButton' => '재생', + 'videoControls.pauseButton' => '일시정지', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} 초 뒤로', + 'videoControls.seekForwardButton' => ({required Object seconds}) => '${seconds} 초 앞으로', + 'videoControls.previousButton' => '이전 에피소드', + 'videoControls.nextButton' => '다음 에피소드', + 'videoControls.previousChapterButton' => '이전 챕터', + 'videoControls.nextChapterButton' => '다음 챕터', + 'videoControls.muteButton' => '음소거', + 'videoControls.unmuteButton' => '음소거 해제', + 'videoControls.settingsButton' => '동영상 설정', + 'videoControls.audioTrackButton' => '음원 트랙', + 'videoControls.subtitlesButton' => '자막', + 'videoControls.chaptersButton' => '챕터', + 'videoControls.versionsButton' => '동영상 버전', + 'videoControls.pipButton' => '픽처 인 픽처 모드', + 'videoControls.aspectRatioButton' => '화면비율', + 'videoControls.fullscreenButton' => '전체화면', + 'videoControls.exitFullscreenButton' => '전체화면 종료', + 'videoControls.alwaysOnTopButton' => '창 최상위 고정', + 'videoControls.rotationLockButton' => '회전 잠금', + 'videoControls.timelineSlider' => '타임라인', + 'videoControls.volumeSlider' => '볼륨 조절', + 'videoControls.backButton' => '뒤로 가기', + 'userStatus.admin' => '관리자', + 'userStatus.restricted' => '제한됨', + 'userStatus.protected' => '보호됨', + 'userStatus.current' => '현재', + 'messages.markedAsWatched' => '시청 완료로 표시됨', + 'messages.markedAsUnwatched' => '시청 안 함으로 표시됨', + 'messages.markedAsWatchedOffline' => '시청 완료로 표시됨 (연결 시 동기화됨)', + 'messages.markedAsUnwatchedOffline' => '미시청으로 표시됨 (연결 시 동기화됨)', + 'messages.removedFromContinueWatching' => '계속 시청 목록에서 제거됨', + 'messages.errorLoading' => ({required Object error}) => '오류: ${error}', + 'messages.fileInfoNotAvailable' => '파일 정보가 없습니다', + 'messages.errorLoadingFileInfo' => ({required Object error}) => '파일 정보 로딩 중 오류: ${error}', + 'messages.errorLoadingSeries' => '시리즈 로딩 중 오류', + 'messages.errorLoadingSeason' => '시즌 로딩 중 오류', + 'messages.musicNotSupported' => '음악 재생 미지원', + 'messages.logsCleared' => '로그가 삭제 되었습니다', + 'messages.logsCopied' => '로그가 클립보드에 복사 되었습니다', + 'messages.noLogsAvailable' => '사용 가능한 로그가 없습니다', + 'messages.libraryScanning' => ({required Object title}) => '"${title}"을(를) 스캔 중입니다...', + 'messages.libraryScanStarted' => ({required Object title}) => '"${title}" 미디어 라이브러리 스캔 시작', + 'messages.libraryScanFailed' => ({required Object error}) => '미디어 라이브러리 스캔 실패: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => '"${title}" 메타데이터 새로고침 중...', + 'messages.metadataRefreshStarted' => ({required Object title}) => '"${title}" 메타데이터 새로고침 시작됨', + 'messages.metadataRefreshFailed' => ({required Object error}) => '메타데이터 새로고침 실패: ${error}', + 'messages.logoutConfirm' => '로그아웃 하시겠습니까?', + 'messages.noSeasonsFound' => '시즌을 찾을 수 없음', + 'messages.noEpisodesFound' => '시즌 1에서 에피소드를 찾을 수 없습니다', + 'messages.noEpisodesFoundGeneral' => '에피소드를 찾을 수 없습니다', + 'messages.noResultsFound' => '결과를 찾을 수 없습니다', + 'messages.sleepTimerSet' => ({required Object label}) => '수면 타이머가 ${label}로 설정 되었습니다', + 'messages.noItemsAvailable' => '사용 가능한 항목이 없습니다', + 'messages.failedToCreatePlayQueue' => '재생 대기열 생성 실패', + 'messages.failedToCreatePlayQueueNoItems' => '재생 대기열 생성 실패 - 항목 없음', + 'messages.failedPlayback' => ({required Object action, required Object error}) => '${action}을(를) 수행할 수 없습니다: ${error}', + 'subtitlingStyling.stylingOptions' => '스타일 옵션', + 'subtitlingStyling.fontSize' => '글자 크기', + 'subtitlingStyling.textColor' => '텍스트 색상', + 'subtitlingStyling.borderSize' => '테두리 크기', + 'subtitlingStyling.borderColor' => '테두리 색상', + 'subtitlingStyling.backgroundOpacity' => '배경 불투명도', + 'subtitlingStyling.backgroundColor' => '배경색', + 'mpvConfig.title' => 'MPV 설정', + 'mpvConfig.description' => '고급 비디오 플레이어 설정', + 'mpvConfig.properties' => '속성', + 'mpvConfig.presets' => '사전 설정', + 'mpvConfig.noProperties' => '설정된 속성이 없습니다', + 'mpvConfig.noPresets' => '저장된 사전 설정이 없습니다', + 'mpvConfig.addProperty' => '속성 추가', + 'mpvConfig.editProperty' => '속성 편집', + 'mpvConfig.deleteProperty' => '속성 삭제', + 'mpvConfig.propertyKey' => '속성 키', + 'mpvConfig.propertyKeyHint' => '예: hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => '속성값', + 'mpvConfig.propertyValueHint' => '예: auto, 256000000', + 'mpvConfig.saveAsPreset' => '프리셋으로 저장...', + 'mpvConfig.presetName' => '프리셋 이름', + 'mpvConfig.presetNameHint' => '이 프리셋의 이름을 입력하세요', + 'mpvConfig.loadPreset' => '로드', + 'mpvConfig.deletePreset' => '삭제', + 'mpvConfig.presetSaved' => '프리셋이 저장 되었습니다', + 'mpvConfig.presetLoaded' => '프리셋이 로드 되었습니다', + 'mpvConfig.presetDeleted' => '프리셋이 삭제 되었습니다', + 'mpvConfig.confirmDeletePreset' => '이 프리셋을 삭제 하시겠습니까?', + 'mpvConfig.confirmDeleteProperty' => '이 속성을 삭제 하시겠습니까?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} 항목', + 'dialog.confirmAction' => '확인', + 'dialog.cancel' => '취소', + 'dialog.playNow' => '지금 재생', + 'discover.title' => '발견', + 'discover.switchProfile' => '사용자 전환', + 'discover.switchServer' => '서버 전환', + 'discover.logout' => '로그아웃', + 'discover.noContentAvailable' => '사용 가능한 콘텐츠가 없습니다', + 'discover.addMediaToLibraries' => '미디어 라이브러리에 미디어를 추가해 주세요', + 'discover.continueWatching' => '계속 시청', + 'discover.play' => '재생', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => '일시정지', + 'discover.overview' => '개요', + 'discover.cast' => '출연진', + 'discover.seasons' => '시즌 수', + 'discover.studio' => '제작사', + 'discover.rating' => '연령 등급', + 'discover.watched' => '시청 완료', + 'discover.episodeCount' => ({required Object count}) => '${count} 편', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '${watched}/${total} 편 시청 완료', + 'discover.movie' => '영화', + 'discover.tvShow' => 'TV 시리즈', + 'discover.minutesLeft' => ({required Object minutes}) => '${minutes}분 남음', + 'errors.searchFailed' => ({required Object error}) => '검색 실패: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => '${context} 로드 중 연결 시간 초과', + 'errors.connectionFailed' => 'Plex 서버에 연결할 수 없음', + 'errors.failedToLoad' => ({required Object context, required Object error}) => '${context} 로드 실패: ${error}', + 'errors.noClientAvailable' => '사용 가능한 클라이언트가 없습니다', + 'errors.authenticationFailed' => ({required Object error}) => '인증 실패: ${error}', + 'errors.couldNotLaunchUrl' => '인증 URL을 열 수 없습니다', + 'errors.pleaseEnterToken' => '토큰을 입력해 주세요', + 'errors.invalidToken' => '토큰이 유효하지 않습니다', + 'errors.failedToVerifyToken' => ({required Object error}) => '토큰을 확인할 수 없습니다: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => '${displayName}으로 전환할 수 없습니다', + 'libraries.title' => '미디어 라이브러리', + 'libraries.scanLibraryFiles' => '미디어 라이브러리 파일 스캔', + 'libraries.scanLibrary' => '미디어 라이브러리 스캔', + 'libraries.analyze' => '분석', + 'libraries.analyzeLibrary' => '미디어 라이브러리 분석', + 'libraries.refreshMetadata' => '메타데이터 새로 고침', + 'libraries.emptyTrash' => '휴지통 비우기', + 'libraries.emptyingTrash' => ({required Object title}) => '「${title}」의 휴지통을 비우고 있습니다...', + 'libraries.trashEmptied' => ({required Object title}) => '「${title}」의 휴지통을 비웠습니다', + 'libraries.failedToEmptyTrash' => ({required Object error}) => '휴지통 비우기 실패: ${error}', + 'libraries.analyzing' => ({required Object title}) => '"${title}" 분석 중...', + 'libraries.analysisStarted' => ({required Object title}) => '"${title}" 분석 시작됨', + 'libraries.failedToAnalyze' => ({required Object error}) => '미디어 라이브러리 분석 실패: ${error}', + 'libraries.noLibrariesFound' => '미디어 라이브러리 없음', + 'libraries.thisLibraryIsEmpty' => '이 미디어 라이브러리는 비어 있습니다', + 'libraries.all' => '전체', + 'libraries.clearAll' => '모두 삭제', + 'libraries.scanLibraryConfirm' => ({required Object title}) => '「${title}」를 스캔 하시겠습니까?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => '「${title}」를 분석 하시겠습니까?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => '「${title}」의 메타데이터를 새로고침 하시겠습니까?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => '${title}의 휴지통을 비우시겠습니까?', + 'libraries.manageLibraries' => '미디어 라이브러리 관리', + 'libraries.sort' => '정렬', + 'libraries.sortBy' => '정렬 기준', + 'libraries.filters' => '필터', + 'libraries.confirmActionMessage' => '이 작업을 실행 하시겠습니까?', + 'libraries.showLibrary' => '미디어 라이브러리 표시', + 'libraries.hideLibrary' => '미디어 라이브러리 숨기기', + 'libraries.libraryOptions' => '미디어 라이브러리 옵션', + 'libraries.content' => '미디어 라이브러리 콘텐츠', + 'libraries.selectLibrary' => '미디어 라이브러리 선택', + 'libraries.filtersWithCount' => ({required Object count}) => '필터 (${count})', + 'libraries.noRecommendations' => '추천 없음', + 'libraries.noCollections' => '이 미디어 라이브러리에는 컬렉션이 없습니다', + 'libraries.noFoldersFound' => '폴더를 찾을 수 없습니다', + 'libraries.folders' => '폴더', + 'libraries.tabs.recommended' => '추천', + 'libraries.tabs.browse' => '찾아보기', + 'libraries.tabs.collections' => '컬렉션', + 'libraries.tabs.playlists' => '재생 목록', + 'libraries.groupings.all' => '전체', + 'libraries.groupings.movies' => '영화', + 'libraries.groupings.shows' => 'TV 프로그램', + 'libraries.groupings.seasons' => '시즌', + 'libraries.groupings.episodes' => '화', + 'libraries.groupings.folders' => '폴더', + 'about.title' => '소개', + 'about.openSourceLicenses' => '오픈소스 라이선스', + 'about.versionLabel' => ({required Object version}) => '버전 ${version}', + 'about.appDescription' => '아름다운 Flutter Plex 클라이언트', + 'about.viewLicensesDescription' => '타사 라이브러리 라이선스 보기', + 'serverSelection.allServerConnectionsFailed' => '어떤 서버에도 연결할 수 없습니다. 네트워크를 확인하고 다시 시도하세요.', + 'serverSelection.noServersFound' => '서버를 찾을 수 없습니다.', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.', + 'serverSelection.failedToLoadServers' => ({required Object error}) => '서버를 로드할 수 없습니다: ${error}', + 'hubDetail.title' => '제목', + 'hubDetail.releaseYear' => '출시 연도', + 'hubDetail.dateAdded' => '추가 날짜', + 'hubDetail.rating' => '평점', + 'hubDetail.noItemsFound' => '항목이 없습니다', + 'logs.clearLogs' => '로그 지우기', + 'logs.copyLogs' => '로그 복사', + 'logs.error' => '오류:', + 'logs.stackTrace' => '스택 추적 (Stack Trace):', + 'licenses.relatedPackages' => '관련 소프트웨어 패키지', + 'licenses.license' => '라이선스', + 'licenses.licenseNumber' => ({required Object number}) => '라이선스 ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} 개의 라이선스', + 'navigation.home' => '홈', + 'navigation.search' => '검색', + 'navigation.libraries' => '미디어 라이브러리', + 'navigation.settings' => '설정', + 'navigation.downloads' => '다운로드', + 'collections.title' => '컬렉션', + 'collections.collection' => '컬렉션', + 'collections.empty' => '컬렉션이 비어 있습니다', + 'collections.unknownLibrarySection' => '삭제할 수 없습니다: 알 수 없는 미디어 라이브러리 섹션입니다', + 'collections.deleteCollection' => '컬렉션 삭제', + 'collections.deleteConfirm' => ({required Object title}) => '"${title}"을(를) 삭제 하시겠습니까? 이 작업은 되돌릴 수 없습니다.', + 'collections.deleted' => '컬렉션 삭제됨', + 'collections.deleteFailed' => '컬렉션 삭제 실패', + 'collections.deleteFailedWithError' => ({required Object error}) => '컬렉션 삭제 실패: ${error}', + 'collections.failedToLoadItems' => ({required Object error}) => '컬렉션 항목 로드 실패: ${error}', + 'collections.selectCollection' => '컬렉션 선택', + 'collections.createNewCollection' => '새 컬렉션 생성', + 'collections.collectionName' => '컬렉션 이름', + 'collections.enterCollectionName' => '컬렉션 이름 입력', + 'collections.addedToCollection' => '컬렉션에 추가됨', + 'collections.errorAddingToCollection' => '컬렉션에 추가 실패', + 'collections.created' => '컬렉션 생성됨', + 'collections.removeFromCollection' => '컬렉션에서 제거', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => '${title}을/를 이 컬렉션에서 제거 하시겠습니까?', + 'collections.removedFromCollection' => '컬렉션에서 제거됨', + 'collections.removeFromCollectionFailed' => '컬렉션에서 제거 실패', + 'collections.removeFromCollectionError' => ({required Object error}) => '컬렉션에서 제거 중 오류 발생: ${error}', + 'playlists.title' => '플레이리스트', + 'playlists.playlist' => '재생 목록', + 'playlists.noPlaylists' => '재생 목록을 찾을 수 없습니다', + 'playlists.create' => '재생 목록 생성', + 'playlists.playlistName' => '재생 목록 이름', + 'playlists.enterPlaylistName' => '재생 목록 이름 입력', + 'playlists.delete' => '재생 목록 삭제', + 'playlists.removeItem' => '재생 목록에서 항목 제거', + 'playlists.smartPlaylist' => '스마트 재생 목록', + 'playlists.itemCount' => ({required Object count}) => '${count}개 항목', + 'playlists.oneItem' => '1개 항목', + 'playlists.emptyPlaylist' => '이 재생 목록은 비어 있습니다', + 'playlists.deleteConfirm' => '재생 목록을 삭제 하시겠습니까?', + 'playlists.deleteMessage' => ({required Object name}) => '"${name}"을(를) 삭제 하시겠습니까?', + 'playlists.created' => '재생 목록이 생성 되었습니다', + 'playlists.deleted' => '재생 목록이 삭제 되었습니다', + 'playlists.itemAdded' => '재생 목록에 추가 되었습니다', + 'playlists.itemRemoved' => '재생 목록에서 제거됨', + 'playlists.selectPlaylist' => '재생 목록 선택', + 'playlists.createNewPlaylist' => '새 재생 목록 생성', + 'playlists.errorCreating' => '재생 목록 생성 실패', + 'playlists.errorDeleting' => '재생 목록 삭제 실패', + 'playlists.errorLoading' => '재생 목록 로드 실패', + 'playlists.errorAdding' => '재생 목록에 추가 실패', + 'playlists.errorReordering' => '재생 목록 항목 재정렬 실패', + 'playlists.errorRemoving' => '재생 목록에서 제거 실패', + 'watchTogether.title' => '함께 보기', + 'watchTogether.description' => '친구 및 가족과 콘텐츠를 동시에 시청하세요', + 'watchTogether.createSession' => '세션 생성', + 'watchTogether.creating' => '생성 중...', + 'watchTogether.joinSession' => '세션 참여', + 'watchTogether.joining' => '참가 중...', + 'watchTogether.controlMode' => '제어 모드', + 'watchTogether.controlModeQuestion' => '누가 재생을 제어할 수 있나요?', + 'watchTogether.hostOnly' => '호스트만', + 'watchTogether.anyone' => '누구나', + 'watchTogether.hostingSession' => '세션 호스팅', + 'watchTogether.inSession' => '세션 중', + 'watchTogether.sessionCode' => '세션 코드', + 'watchTogether.hostControlsPlayback' => '호스트 재생 제어', + 'watchTogether.anyoneCanControl' => '누구나 재생 제어 가능', + 'watchTogether.hostControls' => '호스트 제어', + 'watchTogether.anyoneControls' => '누구나 제어', + 'watchTogether.participants' => '참가자', + 'watchTogether.host' => '호스트', + 'watchTogether.hostBadge' => '호스트', + 'watchTogether.youAreHost' => '당신은 호스트 입니다', + 'watchTogether.watchingWithOthers' => '다른 사람과 함께 시청 중', + 'watchTogether.endSession' => '세션 종료', + 'watchTogether.leaveSession' => '세션 탈퇴', + 'watchTogether.endSessionQuestion' => '세션을 종료 하시겠습니까?', + 'watchTogether.leaveSessionQuestion' => '세션을 탈퇴 하시겠습니까?', + 'watchTogether.endSessionConfirm' => '이 작업은 모든 참가자의 세션을 종료합니다.', + 'watchTogether.leaveSessionConfirm' => '당신은 세션에서 제거됩니다.', + 'watchTogether.endSessionConfirmOverlay' => '이것은 모든 참가자의 시청 세션을 종료합니다.', + 'watchTogether.leaveSessionConfirmOverlay' => '시청 세션 연결이 끊어집니다.', + _ => null, + } ?? switch (path) { + 'watchTogether.end' => '종료', + 'watchTogether.leave' => '이탈', + 'watchTogether.syncing' => '동기화 중...', + 'watchTogether.participant' => '참여자', + 'watchTogether.joinWatchSession' => '시청 세션에 참여', + 'watchTogether.enterCodeHint' => '8자리 코드 입력', + 'watchTogether.pasteFromClipboard' => '클립보드에서 붙여넣기', + 'watchTogether.pleaseEnterCode' => '세션 코드를 입력하세요', + 'watchTogether.codeMustBe8Chars' => '세션 코드는 반드시 8자리여야 합니다', + 'watchTogether.joinInstructions' => '호스트가 공유한 세션 코드를 입력하여 시청 세션에 참여하세요.', + 'watchTogether.failedToCreate' => '세션 생성 실패', + 'watchTogether.failedToJoin' => '세션 참여 실패', + 'watchTogether.sessionCodeCopied' => '세션 코드가 클립보드에 복사되었습니다', + 'downloads.title' => '다운로드', + 'downloads.manage' => '관리', + 'downloads.tvShows' => 'TV 프로그램', + 'downloads.movies' => '영화', + 'downloads.noDownloads' => '다운로드 없음', + 'downloads.noDownloadsDescription' => '다운로드한 콘텐츠는 오프라인 시청을 위해 여기에 표시됩니다', + 'downloads.downloadNow' => '다운로드', + 'downloads.deleteDownload' => '다운로드 삭제', + 'downloads.retryDownload' => '다운로드 재시도', + 'downloads.downloadQueued' => '다운로드 대기 중', + 'downloads.episodesQueued' => ({required Object count}) => '${count} 에피소드가 다운로드 대기열에 추가 되었습니다', + 'downloads.downloadDeleted' => '다운로드 삭제됨', + 'downloads.deleteConfirm' => ({required Object title}) => '"${title}"를 삭제 하시겠습니까? 다운로드한 파일이 기기에서 삭제됩니다.', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => '${title} 삭제 중... (${current}/${total})', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart new file mode 100644 index 00000000..62b9824d --- /dev/null +++ b/lib/i18n/strings_nl.g.dart @@ -0,0 +1,1483 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsNl with BaseTranslations implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsNl({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.nl, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsNl _root = this; // ignore: unused_field + + @override + TranslationsNl $copyWith({TranslationMetadata? meta}) => TranslationsNl(meta: meta ?? this.$meta); + + // Translations + @override late final _TranslationsAppNl app = _TranslationsAppNl._(_root); + @override late final _TranslationsAuthNl auth = _TranslationsAuthNl._(_root); + @override late final _TranslationsCommonNl common = _TranslationsCommonNl._(_root); + @override late final _TranslationsScreensNl screens = _TranslationsScreensNl._(_root); + @override late final _TranslationsUpdateNl update = _TranslationsUpdateNl._(_root); + @override late final _TranslationsSettingsNl settings = _TranslationsSettingsNl._(_root); + @override late final _TranslationsSearchNl search = _TranslationsSearchNl._(_root); + @override late final _TranslationsHotkeysNl hotkeys = _TranslationsHotkeysNl._(_root); + @override late final _TranslationsPinEntryNl pinEntry = _TranslationsPinEntryNl._(_root); + @override late final _TranslationsFileInfoNl fileInfo = _TranslationsFileInfoNl._(_root); + @override late final _TranslationsMediaMenuNl mediaMenu = _TranslationsMediaMenuNl._(_root); + @override late final _TranslationsAccessibilityNl accessibility = _TranslationsAccessibilityNl._(_root); + @override late final _TranslationsTooltipsNl tooltips = _TranslationsTooltipsNl._(_root); + @override late final _TranslationsVideoControlsNl videoControls = _TranslationsVideoControlsNl._(_root); + @override late final _TranslationsUserStatusNl userStatus = _TranslationsUserStatusNl._(_root); + @override late final _TranslationsMessagesNl messages = _TranslationsMessagesNl._(_root); + @override late final _TranslationsSubtitlingStylingNl subtitlingStyling = _TranslationsSubtitlingStylingNl._(_root); + @override late final _TranslationsMpvConfigNl mpvConfig = _TranslationsMpvConfigNl._(_root); + @override late final _TranslationsDialogNl dialog = _TranslationsDialogNl._(_root); + @override late final _TranslationsDiscoverNl discover = _TranslationsDiscoverNl._(_root); + @override late final _TranslationsErrorsNl errors = _TranslationsErrorsNl._(_root); + @override late final _TranslationsLibrariesNl libraries = _TranslationsLibrariesNl._(_root); + @override late final _TranslationsAboutNl about = _TranslationsAboutNl._(_root); + @override late final _TranslationsServerSelectionNl serverSelection = _TranslationsServerSelectionNl._(_root); + @override late final _TranslationsHubDetailNl hubDetail = _TranslationsHubDetailNl._(_root); + @override late final _TranslationsLogsNl logs = _TranslationsLogsNl._(_root); + @override late final _TranslationsLicensesNl licenses = _TranslationsLicensesNl._(_root); + @override late final _TranslationsNavigationNl navigation = _TranslationsNavigationNl._(_root); + @override late final _TranslationsDownloadsNl downloads = _TranslationsDownloadsNl._(_root); + @override late final _TranslationsPlaylistsNl playlists = _TranslationsPlaylistsNl._(_root); + @override late final _TranslationsCollectionsNl collections = _TranslationsCollectionsNl._(_root); + @override late final _TranslationsWatchTogetherNl watchTogether = _TranslationsWatchTogetherNl._(_root); +} + +// Path: app +class _TranslationsAppNl implements TranslationsAppEn { + _TranslationsAppNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Laden...'; +} + +// Path: auth +class _TranslationsAuthNl implements TranslationsAuthEn { + _TranslationsAuthNl._(this._root); + + final TranslationsNl _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.'; +} + +// Path: common +class _TranslationsCommonNl implements TranslationsCommonEn { + _TranslationsCommonNl._(this._root); + + final TranslationsNl _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 logout => 'Uitloggen'; + @override String get unknown => 'Onbekend'; + @override String get refresh => 'Vernieuwen'; + @override String get yes => 'Ja'; + @override String get no => 'Nee'; + @override String get delete => 'Verwijderen'; + @override String get shuffle => 'Willekeurig'; + @override String get addTo => 'Toevoegen aan...'; +} + +// Path: screens +class _TranslationsScreensNl implements TranslationsScreensEn { + _TranslationsScreensNl._(this._root); + + final TranslationsNl _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 mpvConfig => 'MPV-configuratie'; + @override String get search => 'Zoeken'; + @override String get logs => 'Logbestanden'; +} + +// Path: update +class _TranslationsUpdateNl implements TranslationsUpdateEn { + _TranslationsUpdateNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: settings +class _TranslationsSettingsNl implements TranslationsSettingsEn { + _TranslationsSettingsNl._(this._root); + + final TranslationsNl _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 advanced => 'Geavanceerd'; + @override String get episodePosterMode => 'Aflevering poster stijl'; + @override String get seriesPoster => 'Serie poster'; + @override String get seriesPosterDescription => 'Toon de serie poster voor alle afleveringen'; + @override String get seasonPoster => 'Seizoen poster'; + @override String get seasonPosterDescription => 'Toon de seizoensspecifieke poster voor afleveringen'; + @override String get episodeThumbnail => 'Aflevering miniatuur'; + @override String get episodeThumbnailDescription => 'Toon 16:9 aflevering miniaturen'; + @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 showHeroSection => 'Toon hoofdsectie'; + @override String get useGlobalHubs => 'Plex Home-indeling gebruiken'; + @override String get useGlobalHubsDescription => 'Toon startpagina-hubs zoals de officiële Plex-client. Indien uitgeschakeld, worden in plaats daarvan aanbevelingen per bibliotheek getoond.'; + @override String get showServerNameOnHubs => 'Servernaam tonen bij hubs'; + @override String get showServerNameOnHubsDescription => 'Toon altijd de servernaam in hub-titels. Indien uitgeschakeld, alleen bij dubbele hub-namen.'; + @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 videoPlayerControls => 'Videospeler bediening'; + @override String get keyboardShortcuts => 'Toetsenbord sneltoetsen'; + @override String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; + @override String get videoPlayerNavigation => 'Videospeler navigatie'; + @override String get videoPlayerNavigationDescription => 'Gebruik pijltjestoetsen om door de videospeler bediening te navigeren'; + @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'; + @override String get downloads => 'Downloads'; + @override String get downloadLocationDescription => 'Kies waar gedownloade content wordt opgeslagen'; + @override String get downloadLocationDefault => 'Standaard (App-opslag)'; + @override String get downloadLocationCustom => 'Aangepaste Locatie'; + @override String get selectFolder => 'Selecteer Map'; + @override String get resetToDefault => 'Herstel naar Standaard'; + @override String currentPath({required Object path}) => 'Huidig: ${path}'; + @override String get downloadLocationChanged => 'Downloadlocatie gewijzigd'; + @override String get downloadLocationReset => 'Downloadlocatie hersteld naar standaard'; + @override String get downloadLocationInvalid => 'Geselecteerde map is niet beschrijfbaar'; + @override String get downloadLocationSelectError => 'Kan map niet selecteren'; + @override String get downloadOnWifiOnly => 'Alleen via WiFi downloaden'; + @override String get downloadOnWifiOnlyDescription => 'Voorkom downloads bij gebruik van mobiele data'; + @override String get cellularDownloadBlocked => 'Downloads zijn uitgeschakeld bij mobiele data. Maak verbinding met WiFi of wijzig de instelling.'; + @override String get maxVolume => 'Maximaal volume'; + @override String get maxVolumeDescription => 'Volume boven 100% toestaan voor stille media'; + @override String maxVolumePercent({required Object percent}) => '${percent}%'; + @override String get maxVolumeHint => 'Voer maximaal volume in (100-300)'; + @override String get discordRichPresence => 'Discord Rich Presence'; + @override String get discordRichPresenceDescription => 'Toon op Discord wat je aan het kijken bent'; + @override String get matchContentFrameRate => 'Inhoudsframesnelheid afstemmen'; + @override String get matchContentFrameRateDescription => 'Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij'; +} + +// Path: search +class _TranslationsSearchNl implements TranslationsSearchEn { + _TranslationsSearchNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: hotkeys +class _TranslationsHotkeysNl implements TranslationsHotkeysEn { + _TranslationsHotkeysNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String setShortcutFor({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; + @override String get clearShortcut => 'Wis sneltoets'; + @override late final _TranslationsHotkeysActionsNl actions = _TranslationsHotkeysActionsNl._(_root); +} + +// Path: pinEntry +class _TranslationsPinEntryNl implements TranslationsPinEntryEn { + _TranslationsPinEntryNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get enterPin => 'Voer PIN in'; + @override String get showPin => 'Toon PIN'; + @override String get hidePin => 'Verberg PIN'; +} + +// Path: fileInfo +class _TranslationsFileInfoNl implements TranslationsFileInfoEn { + _TranslationsFileInfoNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: mediaMenu +class _TranslationsMediaMenuNl implements TranslationsMediaMenuEn { + _TranslationsMediaMenuNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: accessibility +class _TranslationsAccessibilityNl implements TranslationsAccessibilityEn { + _TranslationsAccessibilityNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: tooltips +class _TranslationsTooltipsNl implements TranslationsTooltipsEn { + _TranslationsTooltipsNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: videoControls +class _TranslationsVideoControlsNl implements TranslationsVideoControlsEn { + _TranslationsVideoControlsNl._(this._root); + + final TranslationsNl _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 autoPlayNext => 'Automatisch volgende afspelen'; + @override String get playNext => 'Volgende afspelen'; + @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 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 pipButton => 'Beeld-in-beeld modus'; + @override String get aspectRatioButton => 'Beeldverhouding'; + @override String get fullscreenButton => 'Volledig scherm activeren'; + @override String get exitFullscreenButton => 'Volledig scherm verlaten'; + @override String get alwaysOnTopButton => 'Altijd bovenop'; + @override String get rotationLockButton => 'Rotatievergrendeling'; + @override String get timelineSlider => 'Videotijdlijn'; + @override String get volumeSlider => 'Volumeniveau'; + @override String get backButton => 'Terug'; +} + +// Path: userStatus +class _TranslationsUserStatusNl implements TranslationsUserStatusEn { + _TranslationsUserStatusNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: messages +class _TranslationsMessagesNl implements TranslationsMessagesEn { + _TranslationsMessagesNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get markedAsWatched => 'Gemarkeerd als gekeken'; + @override String get markedAsUnwatched => 'Gemarkeerd als ongekeken'; + @override String get markedAsWatchedOffline => 'Gemarkeerd als gekeken (sync wanneer online)'; + @override String get markedAsUnwatchedOffline => 'Gemarkeerd als ongekeken (sync wanneer online)'; + @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 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 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: subtitlingStyling +class _TranslationsSubtitlingStylingNl implements TranslationsSubtitlingStylingEn { + _TranslationsSubtitlingStylingNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: mpvConfig +class _TranslationsMpvConfigNl implements TranslationsMpvConfigEn { + _TranslationsMpvConfigNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get title => 'MPV-configuratie'; + @override String get description => 'Geavanceerde videospeler-instellingen'; + @override String get properties => 'Eigenschappen'; + @override String get presets => 'Voorinstellingen'; + @override String get noProperties => 'Geen eigenschappen geconfigureerd'; + @override String get noPresets => 'Geen opgeslagen voorinstellingen'; + @override String get addProperty => 'Eigenschap toevoegen'; + @override String get editProperty => 'Eigenschap bewerken'; + @override String get deleteProperty => 'Eigenschap verwijderen'; + @override String get propertyKey => 'Eigenschapssleutel'; + @override String get propertyKeyHint => 'bijv. hwdec, demuxer-max-bytes'; + @override String get propertyValue => 'Eigenschapswaarde'; + @override String get propertyValueHint => 'bijv. auto, 256000000'; + @override String get saveAsPreset => 'Opslaan als voorinstelling...'; + @override String get presetName => 'Naam voorinstelling'; + @override String get presetNameHint => 'Voer een naam in voor deze voorinstelling'; + @override String get loadPreset => 'Laden'; + @override String get deletePreset => 'Verwijderen'; + @override String get presetSaved => 'Voorinstelling opgeslagen'; + @override String get presetLoaded => 'Voorinstelling geladen'; + @override String get presetDeleted => 'Voorinstelling verwijderd'; + @override String get confirmDeletePreset => 'Weet je zeker dat je deze voorinstelling wilt verwijderen?'; + @override String get confirmDeleteProperty => 'Weet je zeker dat je deze eigenschap wilt verwijderen?'; + @override String entriesCount({required Object count}) => '${count} items'; +} + +// Path: dialog +class _TranslationsDialogNl implements TranslationsDialogEn { + _TranslationsDialogNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get confirmAction => 'Bevestig actie'; + @override String get cancel => 'Annuleren'; + @override String get playNow => 'Nu afspelen'; +} + +// Path: discover +class _TranslationsDiscoverNl implements TranslationsDiscoverEn { + _TranslationsDiscoverNl._(this._root); + + final TranslationsNl _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 play => 'Afspelen'; + @override String playEpisode({required Object season, required Object episode}) => '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 _TranslationsErrorsNl implements TranslationsErrorsEn { + _TranslationsErrorsNl._(this._root); + + final TranslationsNl _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}'; +} + +// Path: libraries +class _TranslationsLibrariesNl implements TranslationsLibrariesEn { + _TranslationsLibrariesNl._(this._root); + + final TranslationsNl _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 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 _TranslationsLibrariesTabsNl tabs = _TranslationsLibrariesTabsNl._(_root); + @override late final _TranslationsLibrariesGroupingsNl groupings = _TranslationsLibrariesGroupingsNl._(_root); +} + +// Path: about +class _TranslationsAboutNl implements TranslationsAboutEn { + _TranslationsAboutNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: serverSelection +class _TranslationsServerSelectionNl implements TranslationsServerSelectionEn { + _TranslationsServerSelectionNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get allServerConnectionsFailed => 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; + @override String get noServersFound => 'Geen servers gevonden'; + @override String noServersFoundForAccount({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})'; + @override String failedToLoadServers({required Object error}) => 'Kon servers niet laden: ${error}'; +} + +// Path: hubDetail +class _TranslationsHubDetailNl implements TranslationsHubDetailEn { + _TranslationsHubDetailNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: logs +class _TranslationsLogsNl implements TranslationsLogsEn { + _TranslationsLogsNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get clearLogs => 'Wis logs'; + @override String get copyLogs => 'Kopieer logs'; + @override String get error => 'Fout:'; + @override String get stackTrace => 'Stacktracering:'; +} + +// Path: licenses +class _TranslationsLicensesNl implements TranslationsLicensesEn { + _TranslationsLicensesNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: navigation +class _TranslationsNavigationNl implements TranslationsNavigationEn { + _TranslationsNavigationNl._(this._root); + + final TranslationsNl _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'; + @override String get downloads => 'Downloads'; +} + +// Path: downloads +class _TranslationsDownloadsNl implements TranslationsDownloadsEn { + _TranslationsDownloadsNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get title => 'Downloads'; + @override String get manage => 'Beheren'; + @override String get tvShows => 'Series'; + @override String get movies => 'Films'; + @override String get noDownloads => 'Nog geen downloads'; + @override String get noDownloadsDescription => 'Gedownloade content verschijnt hier voor offline weergave'; + @override String get downloadNow => 'Download'; + @override String get deleteDownload => 'Download verwijderen'; + @override String get retryDownload => 'Download opnieuw proberen'; + @override String get downloadQueued => 'Download in wachtrij'; + @override String episodesQueued({required Object count}) => '${count} afleveringen in wachtrij voor download'; + @override String get downloadDeleted => 'Download verwijderd'; + @override String deleteConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Het gedownloade bestand wordt van je apparaat verwijderd.'; + @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Verwijderen van ${title}... (${current} van ${total})'; +} + +// Path: playlists +class _TranslationsPlaylistsNl implements TranslationsPlaylistsEn { + _TranslationsPlaylistsNl._(this._root); + + final TranslationsNl _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 playlistName => 'Naam afspeellijst'; + @override String get enterPlaylistName => 'Voer naam afspeellijst in'; + @override String get delete => 'Afspeellijst verwijderen'; + @override String get removeItem => 'Verwijderen uit afspeellijst'; + @override String get smartPlaylist => 'Slimme 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 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 _TranslationsCollectionsNl implements TranslationsCollectionsEn { + _TranslationsCollectionsNl._(this._root); + + final TranslationsNl _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 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 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: watchTogether +class _TranslationsWatchTogetherNl implements TranslationsWatchTogetherEn { + _TranslationsWatchTogetherNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get title => 'Samen Kijken'; + @override String get description => 'Kijk synchroon met vrienden en familie'; + @override String get createSession => 'Sessie Maken'; + @override String get creating => 'Maken...'; + @override String get joinSession => 'Sessie Deelnemen'; + @override String get joining => 'Deelnemen...'; + @override String get controlMode => 'Controlemodus'; + @override String get controlModeQuestion => 'Wie kan het afspelen bedienen?'; + @override String get hostOnly => 'Alleen Host'; + @override String get anyone => 'Iedereen'; + @override String get hostingSession => 'Sessie Hosten'; + @override String get inSession => 'In Sessie'; + @override String get sessionCode => 'Sessiecode'; + @override String get hostControlsPlayback => 'Host bedient het afspelen'; + @override String get anyoneCanControl => 'Iedereen kan het afspelen bedienen'; + @override String get hostControls => 'Host bedient'; + @override String get anyoneControls => 'Iedereen bedient'; + @override String get participants => 'Deelnemers'; + @override String get host => 'Host'; + @override String get hostBadge => 'HOST'; + @override String get youAreHost => 'Jij bent de host'; + @override String get watchingWithOthers => 'Kijken met anderen'; + @override String get endSession => 'Sessie Beëindigen'; + @override String get leaveSession => 'Sessie Verlaten'; + @override String get endSessionQuestion => 'Sessie Beëindigen?'; + @override String get leaveSessionQuestion => 'Sessie Verlaten?'; + @override String get endSessionConfirm => 'Dit beëindigt de sessie voor alle deelnemers.'; + @override String get leaveSessionConfirm => 'Je wordt uit de sessie verwijderd.'; + @override String get endSessionConfirmOverlay => 'Dit beëindigt de kijksessie voor alle deelnemers.'; + @override String get leaveSessionConfirmOverlay => 'Je wordt losgekoppeld van de kijksessie.'; + @override String get end => 'Beëindigen'; + @override String get leave => 'Verlaten'; + @override String get syncing => 'Synchroniseren...'; + @override String get participant => 'deelnemer'; + @override String get joinWatchSession => 'Kijksessie Deelnemen'; + @override String get enterCodeHint => 'Voer 8-teken code in'; + @override String get pasteFromClipboard => 'Plakken van klembord'; + @override String get pleaseEnterCode => 'Voer een sessiecode in'; + @override String get codeMustBe8Chars => 'Sessiecode moet 8 tekens zijn'; + @override String get joinInstructions => 'Voer de sessiecode in die door de host is gedeeld om deel te nemen aan hun kijksessie.'; + @override String get failedToCreate => 'Sessie maken mislukt'; + @override String get failedToJoin => 'Sessie deelnemen mislukt'; + @override String get sessionCodeCopied => 'Sessiecode gekopieerd naar klembord'; +} + +// Path: hotkeys.actions +class _TranslationsHotkeysActionsNl implements TranslationsHotkeysActionsEn { + _TranslationsHotkeysActionsNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get playPause => 'Afspelen/Pauzeren'; + @override String get volumeUp => 'Volume omhoog'; + @override String get volumeDown => 'Volume omlaag'; + @override String seekForward({required Object seconds}) => 'Vooruitspoelen (${seconds}s)'; + @override String seekBackward({required Object seconds}) => 'Terugspoelen (${seconds}s)'; + @override String get fullscreenToggle => 'Volledig scherm'; + @override String get muteToggle => 'Dempen'; + @override String get subtitleToggle => 'Ondertiteling'; + @override String get audioTrackNext => 'Volgende audiotrack'; + @override String get subtitleTrackNext => 'Volgende ondertiteltrack'; + @override String get chapterNext => 'Volgend hoofdstuk'; + @override String get chapterPrevious => 'Vorig hoofdstuk'; + @override String get speedIncrease => 'Snelheid verhogen'; + @override String get speedDecrease => 'Snelheid verlagen'; + @override String get speedReset => 'Snelheid resetten'; + @override String get subSeekNext => 'Naar volgende ondertitel'; + @override String get subSeekPrev => 'Naar vorige ondertitel'; +} + +// Path: libraries.tabs +class _TranslationsLibrariesTabsNl implements TranslationsLibrariesTabsEn { + _TranslationsLibrariesTabsNl._(this._root); + + final TranslationsNl _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'; +} + +// Path: libraries.groupings +class _TranslationsLibrariesGroupingsNl implements TranslationsLibrariesGroupingsEn { + _TranslationsLibrariesGroupingsNl._(this._root); + + final TranslationsNl _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'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsNl { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => 'Laden...', + 'auth.signInWithPlex' => 'Inloggen met Plex', + 'auth.showQRCode' => 'Toon QR-code', + 'auth.cancel' => 'Annuleren', + 'auth.authenticate' => 'Authenticeren', + 'auth.retry' => 'Opnieuw proberen', + 'auth.debugEnterToken' => 'Debug: Voer Plex Token in', + 'auth.plexTokenLabel' => 'Plex Authenticatietoken', + 'auth.plexTokenHint' => 'Voer je Plex.tv token in', + 'auth.authenticationTimeout' => 'Authenticatie verlopen. Probeer opnieuw.', + 'auth.scanQRCodeInstruction' => 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.', + 'auth.waitingForAuth' => 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.', + 'common.cancel' => 'Annuleren', + 'common.save' => 'Opslaan', + 'common.close' => 'Sluiten', + 'common.clear' => 'Wissen', + 'common.reset' => 'Resetten', + 'common.later' => 'Later', + 'common.submit' => 'Verzenden', + 'common.confirm' => 'Bevestigen', + 'common.retry' => 'Opnieuw proberen', + 'common.logout' => 'Uitloggen', + 'common.unknown' => 'Onbekend', + 'common.refresh' => 'Vernieuwen', + 'common.yes' => 'Ja', + 'common.no' => 'Nee', + 'common.delete' => 'Verwijderen', + 'common.shuffle' => 'Willekeurig', + 'common.addTo' => 'Toevoegen aan...', + 'screens.licenses' => 'Licenties', + 'screens.selectServer' => 'Selecteer server', + 'screens.switchProfile' => 'Wissel van profiel', + 'screens.subtitleStyling' => 'Ondertitel opmaak', + 'screens.mpvConfig' => 'MPV-configuratie', + 'screens.search' => 'Zoeken', + 'screens.logs' => 'Logbestanden', + 'update.available' => 'Update beschikbaar', + 'update.versionAvailable' => ({required Object version}) => 'Versie ${version} is beschikbaar', + 'update.currentVersion' => ({required Object version}) => 'Huidig: ${version}', + 'update.skipVersion' => 'Deze versie overslaan', + 'update.viewRelease' => 'Bekijk release', + 'update.latestVersion' => 'Je hebt de nieuwste versie', + 'update.checkFailed' => 'Kon niet controleren op updates', + 'settings.title' => 'Instellingen', + 'settings.language' => 'Taal', + 'settings.theme' => 'Thema', + 'settings.appearance' => 'Uiterlijk', + 'settings.videoPlayback' => 'Video afspelen', + 'settings.advanced' => 'Geavanceerd', + 'settings.episodePosterMode' => 'Aflevering poster stijl', + 'settings.seriesPoster' => 'Serie poster', + 'settings.seriesPosterDescription' => 'Toon de serie poster voor alle afleveringen', + 'settings.seasonPoster' => 'Seizoen poster', + 'settings.seasonPosterDescription' => 'Toon de seizoensspecifieke poster voor afleveringen', + 'settings.episodeThumbnail' => 'Aflevering miniatuur', + 'settings.episodeThumbnailDescription' => 'Toon 16:9 aflevering miniaturen', + 'settings.showHeroSectionDescription' => 'Toon uitgelichte inhoud carrousel op startscherm', + 'settings.secondsLabel' => 'Seconden', + 'settings.minutesLabel' => 'Minuten', + 'settings.secondsShort' => 's', + 'settings.minutesShort' => 'm', + 'settings.durationHint' => ({required Object min, required Object max}) => 'Voer duur in (${min}-${max})', + 'settings.systemTheme' => 'Systeem', + 'settings.systemThemeDescription' => 'Volg systeeminstellingen', + 'settings.lightTheme' => 'Licht', + 'settings.darkTheme' => 'Donker', + 'settings.libraryDensity' => 'Bibliotheek dichtheid', + 'settings.compact' => 'Compact', + 'settings.compactDescription' => 'Kleinere kaarten, meer items zichtbaar', + 'settings.normal' => 'Normaal', + 'settings.normalDescription' => 'Standaard grootte', + 'settings.comfortable' => 'Comfortabel', + 'settings.comfortableDescription' => 'Grotere kaarten, minder items zichtbaar', + 'settings.viewMode' => 'Weergavemodus', + 'settings.gridView' => 'Raster', + 'settings.gridViewDescription' => 'Items weergeven in een rasterindeling', + 'settings.listView' => 'Lijst', + 'settings.listViewDescription' => 'Items weergeven in een lijstindeling', + 'settings.showHeroSection' => 'Toon hoofdsectie', + 'settings.useGlobalHubs' => 'Plex Home-indeling gebruiken', + 'settings.useGlobalHubsDescription' => 'Toon startpagina-hubs zoals de officiële Plex-client. Indien uitgeschakeld, worden in plaats daarvan aanbevelingen per bibliotheek getoond.', + 'settings.showServerNameOnHubs' => 'Servernaam tonen bij hubs', + 'settings.showServerNameOnHubsDescription' => 'Toon altijd de servernaam in hub-titels. Indien uitgeschakeld, alleen bij dubbele hub-namen.', + 'settings.hardwareDecoding' => 'Hardware decodering', + 'settings.hardwareDecodingDescription' => 'Gebruik hardware versnelling indien beschikbaar', + 'settings.bufferSize' => 'Buffer grootte', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => 'Ondertitel opmaak', + 'settings.subtitleStylingDescription' => 'Pas ondertitel uiterlijk aan', + 'settings.smallSkipDuration' => 'Korte skip duur', + 'settings.largeSkipDuration' => 'Lange skip duur', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds} seconden', + 'settings.defaultSleepTimer' => 'Standaard slaap timer', + 'settings.minutesUnit' => ({required Object minutes}) => 'bij ${minutes} minuten', + 'settings.rememberTrackSelections' => 'Onthoud track selecties per serie/film', + 'settings.rememberTrackSelectionsDescription' => 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen', + 'settings.videoPlayerControls' => 'Videospeler bediening', + 'settings.keyboardShortcuts' => 'Toetsenbord sneltoetsen', + 'settings.keyboardShortcutsDescription' => 'Pas toetsenbord sneltoetsen aan', + 'settings.videoPlayerNavigation' => 'Videospeler navigatie', + 'settings.videoPlayerNavigationDescription' => 'Gebruik pijltjestoetsen om door de videospeler bediening te navigeren', + 'settings.debugLogging' => 'Debug logging', + 'settings.debugLoggingDescription' => 'Schakel gedetailleerde logging in voor probleemoplossing', + 'settings.viewLogs' => 'Bekijk logs', + 'settings.viewLogsDescription' => 'Bekijk applicatie logs', + 'settings.clearCache' => 'Cache wissen', + 'settings.clearCacheDescription' => 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.', + 'settings.clearCacheSuccess' => 'Cache succesvol gewist', + 'settings.resetSettings' => 'Instellingen resetten', + 'settings.resetSettingsDescription' => 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.', + 'settings.resetSettingsSuccess' => 'Instellingen succesvol gereset', + 'settings.shortcutsReset' => 'Sneltoetsen gereset naar standaard', + 'settings.about' => 'Over', + 'settings.aboutDescription' => 'App informatie en licenties', + 'settings.updates' => 'Updates', + 'settings.updateAvailable' => 'Update beschikbaar', + 'settings.checkForUpdates' => 'Controleer op updates', + 'settings.validationErrorEnterNumber' => 'Voer een geldig nummer in', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Duur moet tussen ${min} en ${max} ${unit} zijn', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Sneltoets al toegewezen aan ${action}', + 'settings.shortcutUpdated' => ({required Object action}) => 'Sneltoets bijgewerkt voor ${action}', + 'settings.autoSkip' => 'Automatisch Overslaan', + 'settings.autoSkipIntro' => 'Intro Automatisch Overslaan', + 'settings.autoSkipIntroDescription' => 'Intro-markeringen na enkele seconden automatisch overslaan', + 'settings.autoSkipCredits' => 'Credits Automatisch Overslaan', + 'settings.autoSkipCreditsDescription' => 'Credits automatisch overslaan en volgende aflevering afspelen', + 'settings.autoSkipDelay' => 'Vertraging Automatisch Overslaan', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => '${seconds} seconden wachten voor automatisch overslaan', + 'settings.downloads' => 'Downloads', + 'settings.downloadLocationDescription' => 'Kies waar gedownloade content wordt opgeslagen', + 'settings.downloadLocationDefault' => 'Standaard (App-opslag)', + 'settings.downloadLocationCustom' => 'Aangepaste Locatie', + 'settings.selectFolder' => 'Selecteer Map', + 'settings.resetToDefault' => 'Herstel naar Standaard', + 'settings.currentPath' => ({required Object path}) => 'Huidig: ${path}', + 'settings.downloadLocationChanged' => 'Downloadlocatie gewijzigd', + 'settings.downloadLocationReset' => 'Downloadlocatie hersteld naar standaard', + 'settings.downloadLocationInvalid' => 'Geselecteerde map is niet beschrijfbaar', + 'settings.downloadLocationSelectError' => 'Kan map niet selecteren', + 'settings.downloadOnWifiOnly' => 'Alleen via WiFi downloaden', + 'settings.downloadOnWifiOnlyDescription' => 'Voorkom downloads bij gebruik van mobiele data', + 'settings.cellularDownloadBlocked' => 'Downloads zijn uitgeschakeld bij mobiele data. Maak verbinding met WiFi of wijzig de instelling.', + 'settings.maxVolume' => 'Maximaal volume', + 'settings.maxVolumeDescription' => 'Volume boven 100% toestaan voor stille media', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => 'Voer maximaal volume in (100-300)', + 'settings.discordRichPresence' => 'Discord Rich Presence', + 'settings.discordRichPresenceDescription' => 'Toon op Discord wat je aan het kijken bent', + 'settings.matchContentFrameRate' => 'Inhoudsframesnelheid afstemmen', + 'settings.matchContentFrameRateDescription' => 'Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij', + 'search.hint' => 'Zoek films, series, muziek...', + 'search.tryDifferentTerm' => 'Probeer een andere zoekterm', + 'search.searchYourMedia' => 'Zoek in je media', + 'search.enterTitleActorOrKeyword' => 'Voer een titel, acteur of trefwoord in', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => 'Stel sneltoets in voor ${actionName}', + 'hotkeys.clearShortcut' => 'Wis sneltoets', + 'hotkeys.actions.playPause' => 'Afspelen/Pauzeren', + 'hotkeys.actions.volumeUp' => 'Volume omhoog', + 'hotkeys.actions.volumeDown' => 'Volume omlaag', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => 'Vooruitspoelen (${seconds}s)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => 'Terugspoelen (${seconds}s)', + 'hotkeys.actions.fullscreenToggle' => 'Volledig scherm', + 'hotkeys.actions.muteToggle' => 'Dempen', + 'hotkeys.actions.subtitleToggle' => 'Ondertiteling', + 'hotkeys.actions.audioTrackNext' => 'Volgende audiotrack', + 'hotkeys.actions.subtitleTrackNext' => 'Volgende ondertiteltrack', + 'hotkeys.actions.chapterNext' => 'Volgend hoofdstuk', + 'hotkeys.actions.chapterPrevious' => 'Vorig hoofdstuk', + 'hotkeys.actions.speedIncrease' => 'Snelheid verhogen', + 'hotkeys.actions.speedDecrease' => 'Snelheid verlagen', + 'hotkeys.actions.speedReset' => 'Snelheid resetten', + 'hotkeys.actions.subSeekNext' => 'Naar volgende ondertitel', + 'hotkeys.actions.subSeekPrev' => 'Naar vorige ondertitel', + 'pinEntry.enterPin' => 'Voer PIN in', + 'pinEntry.showPin' => 'Toon PIN', + 'pinEntry.hidePin' => 'Verberg PIN', + 'fileInfo.title' => 'Bestand info', + 'fileInfo.video' => 'Video', + 'fileInfo.audio' => 'Audio', + 'fileInfo.file' => 'Bestand', + 'fileInfo.advanced' => 'Geavanceerd', + 'fileInfo.codec' => 'Codec', + 'fileInfo.resolution' => 'Resolutie', + 'fileInfo.bitrate' => 'Bitrate', + 'fileInfo.frameRate' => 'Frame rate', + 'fileInfo.aspectRatio' => 'Beeldverhouding', + 'fileInfo.profile' => 'Profiel', + 'fileInfo.bitDepth' => 'Bit diepte', + 'fileInfo.colorSpace' => 'Kleurruimte', + 'fileInfo.colorRange' => 'Kleurbereik', + 'fileInfo.colorPrimaries' => 'Kleurprimaires', + 'fileInfo.chromaSubsampling' => 'Chroma subsampling', + 'fileInfo.channels' => 'Kanalen', + 'fileInfo.path' => 'Pad', + 'fileInfo.size' => 'Grootte', + 'fileInfo.container' => 'Container', + 'fileInfo.duration' => 'Duur', + 'fileInfo.optimizedForStreaming' => 'Geoptimaliseerd voor streaming', + 'fileInfo.has64bitOffsets' => '64-bit Offsets', + 'mediaMenu.markAsWatched' => 'Markeer als gekeken', + 'mediaMenu.markAsUnwatched' => 'Markeer als ongekeken', + 'mediaMenu.removeFromContinueWatching' => 'Verwijder uit Doorgaan met kijken', + 'mediaMenu.goToSeries' => 'Ga naar serie', + 'mediaMenu.goToSeason' => 'Ga naar seizoen', + 'mediaMenu.shufflePlay' => 'Willekeurig afspelen', + 'mediaMenu.fileInfo' => 'Bestand info', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => 'bekeken', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} procent bekeken', + 'accessibility.mediaCardUnwatched' => 'niet bekeken', + 'accessibility.tapToPlay' => 'Tik om af te spelen', + 'tooltips.shufflePlay' => 'Willekeurig afspelen', + 'tooltips.markAsWatched' => 'Markeer als gekeken', + 'tooltips.markAsUnwatched' => 'Markeer als ongekeken', + 'videoControls.audioLabel' => 'Audio', + 'videoControls.subtitlesLabel' => 'Ondertitels', + 'videoControls.resetToZero' => 'Reset naar 0ms', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} speelt later af', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} speelt eerder af', + 'videoControls.noOffset' => 'Geen offset', + 'videoControls.letterbox' => 'Letterbox', + 'videoControls.fillScreen' => 'Vul scherm', + 'videoControls.stretch' => 'Uitrekken', + 'videoControls.lockRotation' => 'Vergrendel rotatie', + 'videoControls.unlockRotation' => 'Ontgrendel rotatie', + 'videoControls.sleepTimer' => 'Slaaptimer', + 'videoControls.timerActive' => 'Timer actief', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}', + 'videoControls.sleepTimerCompleted' => 'Slaaptimer voltooid - afspelen gepauzeerd', + 'videoControls.autoPlayNext' => 'Automatisch volgende afspelen', + 'videoControls.playNext' => 'Volgende afspelen', + 'videoControls.playButton' => 'Afspelen', + 'videoControls.pauseButton' => 'Pauzeren', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Terugspoelen ${seconds} seconden', + 'videoControls.seekForwardButton' => ({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden', + 'videoControls.previousButton' => 'Vorige aflevering', + 'videoControls.nextButton' => 'Volgende aflevering', + 'videoControls.previousChapterButton' => 'Vorig hoofdstuk', + 'videoControls.nextChapterButton' => 'Volgend hoofdstuk', + 'videoControls.muteButton' => 'Dempen', + 'videoControls.unmuteButton' => 'Dempen opheffen', + 'videoControls.settingsButton' => 'Video-instellingen', + 'videoControls.audioTrackButton' => 'Audiosporen', + 'videoControls.subtitlesButton' => 'Ondertitels', + 'videoControls.chaptersButton' => 'Hoofdstukken', + 'videoControls.versionsButton' => 'Videoversies', + 'videoControls.pipButton' => 'Beeld-in-beeld modus', + 'videoControls.aspectRatioButton' => 'Beeldverhouding', + 'videoControls.fullscreenButton' => 'Volledig scherm activeren', + 'videoControls.exitFullscreenButton' => 'Volledig scherm verlaten', + 'videoControls.alwaysOnTopButton' => 'Altijd bovenop', + 'videoControls.rotationLockButton' => 'Rotatievergrendeling', + 'videoControls.timelineSlider' => 'Videotijdlijn', + 'videoControls.volumeSlider' => 'Volumeniveau', + 'videoControls.backButton' => 'Terug', + 'userStatus.admin' => 'Beheerder', + 'userStatus.restricted' => 'Beperkt', + 'userStatus.protected' => 'Beschermd', + 'userStatus.current' => 'HUIDIG', + 'messages.markedAsWatched' => 'Gemarkeerd als gekeken', + 'messages.markedAsUnwatched' => 'Gemarkeerd als ongekeken', + 'messages.markedAsWatchedOffline' => 'Gemarkeerd als gekeken (sync wanneer online)', + 'messages.markedAsUnwatchedOffline' => 'Gemarkeerd als ongekeken (sync wanneer online)', + 'messages.removedFromContinueWatching' => 'Verwijderd uit Doorgaan met kijken', + 'messages.errorLoading' => ({required Object error}) => 'Fout: ${error}', + 'messages.fileInfoNotAvailable' => 'Bestand informatie niet beschikbaar', + 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fout bij laden bestand info: ${error}', + 'messages.errorLoadingSeries' => 'Fout bij laden serie', + 'messages.errorLoadingSeason' => 'Fout bij laden seizoen', + 'messages.musicNotSupported' => 'Muziek afspelen wordt nog niet ondersteund', + 'messages.logsCleared' => 'Logs gewist', + 'messages.logsCopied' => 'Logs gekopieerd naar klembord', + 'messages.noLogsAvailable' => 'Geen logs beschikbaar', + 'messages.libraryScanning' => ({required Object title}) => 'Scannen "${title}"...', + 'messages.libraryScanStarted' => ({required Object title}) => 'Bibliotheek scan gestart voor "${title}"', + 'messages.libraryScanFailed' => ({required Object error}) => 'Kon bibliotheek niet scannen: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => 'Metadata vernieuwen voor "${title}"...', + 'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadata vernieuwen gestart voor "${title}"', + 'messages.metadataRefreshFailed' => ({required Object error}) => 'Kon metadata niet vernieuwen: ${error}', + 'messages.logoutConfirm' => 'Weet je zeker dat je wilt uitloggen?', + 'messages.noSeasonsFound' => 'Geen seizoenen gevonden', + 'messages.noEpisodesFound' => 'Geen afleveringen gevonden in eerste seizoen', + 'messages.noEpisodesFoundGeneral' => 'Geen afleveringen gevonden', + 'messages.noResultsFound' => 'Geen resultaten gevonden', + 'messages.sleepTimerSet' => ({required Object label}) => 'Slaap timer ingesteld voor ${label}', + 'messages.noItemsAvailable' => 'Geen items beschikbaar', + 'messages.failedToCreatePlayQueue' => 'Kan afspeelwachtrij niet maken', + 'messages.failedToCreatePlayQueueNoItems' => 'Kan afspeelwachtrij niet maken - geen items', + 'messages.failedPlayback' => ({required Object action, required Object error}) => 'Afspelen van ${action} mislukt: ${error}', + 'subtitlingStyling.stylingOptions' => 'Opmaak opties', + 'subtitlingStyling.fontSize' => 'Lettergrootte', + 'subtitlingStyling.textColor' => 'Tekstkleur', + 'subtitlingStyling.borderSize' => 'Rand grootte', + 'subtitlingStyling.borderColor' => 'Randkleur', + 'subtitlingStyling.backgroundOpacity' => 'Achtergrond transparantie', + 'subtitlingStyling.backgroundColor' => 'Achtergrondkleur', + 'mpvConfig.title' => 'MPV-configuratie', + 'mpvConfig.description' => 'Geavanceerde videospeler-instellingen', + 'mpvConfig.properties' => 'Eigenschappen', + 'mpvConfig.presets' => 'Voorinstellingen', + 'mpvConfig.noProperties' => 'Geen eigenschappen geconfigureerd', + 'mpvConfig.noPresets' => 'Geen opgeslagen voorinstellingen', + 'mpvConfig.addProperty' => 'Eigenschap toevoegen', + 'mpvConfig.editProperty' => 'Eigenschap bewerken', + 'mpvConfig.deleteProperty' => 'Eigenschap verwijderen', + 'mpvConfig.propertyKey' => 'Eigenschapssleutel', + 'mpvConfig.propertyKeyHint' => 'bijv. hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => 'Eigenschapswaarde', + 'mpvConfig.propertyValueHint' => 'bijv. auto, 256000000', + 'mpvConfig.saveAsPreset' => 'Opslaan als voorinstelling...', + 'mpvConfig.presetName' => 'Naam voorinstelling', + 'mpvConfig.presetNameHint' => 'Voer een naam in voor deze voorinstelling', + 'mpvConfig.loadPreset' => 'Laden', + 'mpvConfig.deletePreset' => 'Verwijderen', + 'mpvConfig.presetSaved' => 'Voorinstelling opgeslagen', + 'mpvConfig.presetLoaded' => 'Voorinstelling geladen', + 'mpvConfig.presetDeleted' => 'Voorinstelling verwijderd', + 'mpvConfig.confirmDeletePreset' => 'Weet je zeker dat je deze voorinstelling wilt verwijderen?', + 'mpvConfig.confirmDeleteProperty' => 'Weet je zeker dat je deze eigenschap wilt verwijderen?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} items', + 'dialog.confirmAction' => 'Bevestig actie', + 'dialog.cancel' => 'Annuleren', + 'dialog.playNow' => 'Nu afspelen', + 'discover.title' => 'Ontdekken', + 'discover.switchProfile' => 'Wissel van profiel', + 'discover.switchServer' => 'Wissel van server', + 'discover.logout' => 'Uitloggen', + 'discover.noContentAvailable' => 'Geen inhoud beschikbaar', + 'discover.addMediaToLibraries' => 'Voeg wat media toe aan je bibliotheken', + 'discover.continueWatching' => 'Verder kijken', + 'discover.play' => 'Afspelen', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => 'Pauzeren', + 'discover.overview' => 'Overzicht', + 'discover.cast' => 'Acteurs', + 'discover.seasons' => 'Seizoenen', + 'discover.studio' => 'Studio', + 'discover.rating' => 'Leeftijd', + 'discover.watched' => 'Bekeken', + 'discover.episodeCount' => ({required Object count}) => '${count} afleveringen', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '${watched}/${total} gekeken', + 'discover.movie' => 'Film', + 'discover.tvShow' => 'TV Serie', + 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min over', + 'errors.searchFailed' => ({required Object error}) => 'Zoeken mislukt: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => 'Verbinding time-out tijdens laden ${context}', + 'errors.connectionFailed' => 'Kan geen verbinding maken met Plex server', + 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}', + 'errors.noClientAvailable' => 'Geen client beschikbaar', + 'errors.authenticationFailed' => ({required Object error}) => 'Authenticatie mislukt: ${error}', + 'errors.couldNotLaunchUrl' => 'Kon auth URL niet openen', + 'errors.pleaseEnterToken' => 'Voer een token in', + 'errors.invalidToken' => 'Ongeldig token', + 'errors.failedToVerifyToken' => ({required Object error}) => 'Kon token niet verifiëren: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => 'Kon niet wisselen naar ${displayName}', + 'libraries.title' => 'Bibliotheken', + 'libraries.scanLibraryFiles' => 'Scan bibliotheek bestanden', + 'libraries.scanLibrary' => 'Scan bibliotheek', + 'libraries.analyze' => 'Analyseren', + 'libraries.analyzeLibrary' => 'Analyseer bibliotheek', + 'libraries.refreshMetadata' => 'Vernieuw metadata', + 'libraries.emptyTrash' => 'Prullenbak legen', + 'libraries.emptyingTrash' => ({required Object title}) => 'Prullenbak legen voor "${title}"...', + 'libraries.trashEmptied' => ({required Object title}) => 'Prullenbak geleegd voor "${title}"', + 'libraries.failedToEmptyTrash' => ({required Object error}) => 'Kon prullenbak niet legen: ${error}', + 'libraries.analyzing' => ({required Object title}) => 'Analyseren "${title}"...', + 'libraries.analysisStarted' => ({required Object title}) => 'Analyse gestart voor "${title}"', + 'libraries.failedToAnalyze' => ({required Object error}) => 'Kon bibliotheek niet analyseren: ${error}', + 'libraries.noLibrariesFound' => 'Geen bibliotheken gevonden', + 'libraries.thisLibraryIsEmpty' => 'Deze bibliotheek is leeg', + 'libraries.all' => 'Alles', + 'libraries.clearAll' => 'Alles wissen', + 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => 'Weet je zeker dat je "${title}" wilt analyseren?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?', + 'libraries.manageLibraries' => 'Beheer bibliotheken', + 'libraries.sort' => 'Sorteren', + 'libraries.sortBy' => 'Sorteer op', + 'libraries.filters' => 'Filters', + 'libraries.confirmActionMessage' => 'Weet je zeker dat je deze actie wilt uitvoeren?', + 'libraries.showLibrary' => 'Toon bibliotheek', + 'libraries.hideLibrary' => 'Verberg bibliotheek', + 'libraries.libraryOptions' => 'Bibliotheek opties', + 'libraries.content' => 'bibliotheekinhoud', + 'libraries.selectLibrary' => 'Bibliotheek kiezen', + 'libraries.filtersWithCount' => ({required Object count}) => 'Filters (${count})', + 'libraries.noRecommendations' => 'Geen aanbevelingen beschikbaar', + 'libraries.noCollections' => 'Geen collecties in deze bibliotheek', + 'libraries.noFoldersFound' => 'Geen mappen gevonden', + 'libraries.folders' => 'mappen', + 'libraries.tabs.recommended' => 'Aanbevolen', + 'libraries.tabs.browse' => 'Bladeren', + 'libraries.tabs.collections' => 'Collecties', + 'libraries.tabs.playlists' => 'Afspeellijsten', + 'libraries.groupings.all' => 'Alles', + 'libraries.groupings.movies' => 'Films', + 'libraries.groupings.shows' => 'Series', + 'libraries.groupings.seasons' => 'Seizoenen', + 'libraries.groupings.episodes' => 'Afleveringen', + 'libraries.groupings.folders' => 'Mappen', + 'about.title' => 'Over', + 'about.openSourceLicenses' => 'Open Source licenties', + 'about.versionLabel' => ({required Object version}) => 'Versie ${version}', + 'about.appDescription' => 'Een mooie Plex client voor Flutter', + 'about.viewLicensesDescription' => 'Bekijk licenties van third-party bibliotheken', + 'serverSelection.allServerConnectionsFailed' => 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.', + 'serverSelection.noServersFound' => 'Geen servers gevonden', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kon servers niet laden: ${error}', + 'hubDetail.title' => 'Titel', + 'hubDetail.releaseYear' => 'Uitgavejaar', + 'hubDetail.dateAdded' => 'Datum toegevoegd', + 'hubDetail.rating' => 'Beoordeling', + 'hubDetail.noItemsFound' => 'Geen items gevonden', + 'logs.clearLogs' => 'Wis logs', + 'logs.copyLogs' => 'Kopieer logs', + 'logs.error' => 'Fout:', + 'logs.stackTrace' => 'Stacktracering:', + 'licenses.relatedPackages' => 'Gerelateerde pakketten', + 'licenses.license' => 'Licentie', + 'licenses.licenseNumber' => ({required Object number}) => 'Licentie ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} licenties', + 'navigation.home' => 'Thuis', + 'navigation.search' => 'Zoeken', + 'navigation.libraries' => 'Bibliotheken', + 'navigation.settings' => 'Instellingen', + 'navigation.downloads' => 'Downloads', + 'downloads.title' => 'Downloads', + 'downloads.manage' => 'Beheren', + 'downloads.tvShows' => 'Series', + 'downloads.movies' => 'Films', + 'downloads.noDownloads' => 'Nog geen downloads', + 'downloads.noDownloadsDescription' => 'Gedownloade content verschijnt hier voor offline weergave', + 'downloads.downloadNow' => 'Download', + 'downloads.deleteDownload' => 'Download verwijderen', + 'downloads.retryDownload' => 'Download opnieuw proberen', + 'downloads.downloadQueued' => 'Download in wachtrij', + 'downloads.episodesQueued' => ({required Object count}) => '${count} afleveringen in wachtrij voor download', + 'downloads.downloadDeleted' => 'Download verwijderd', + 'downloads.deleteConfirm' => ({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Het gedownloade bestand wordt van je apparaat verwijderd.', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => 'Verwijderen van ${title}... (${current} van ${total})', + 'playlists.title' => 'Afspeellijsten', + 'playlists.noPlaylists' => 'Geen afspeellijsten gevonden', + 'playlists.create' => 'Afspeellijst maken', + 'playlists.playlistName' => 'Naam afspeellijst', + 'playlists.enterPlaylistName' => 'Voer naam afspeellijst in', + 'playlists.delete' => 'Afspeellijst verwijderen', + 'playlists.removeItem' => 'Verwijderen uit afspeellijst', + 'playlists.smartPlaylist' => 'Slimme afspeellijst', + 'playlists.itemCount' => ({required Object count}) => '${count} items', + 'playlists.oneItem' => '1 item', + 'playlists.emptyPlaylist' => 'Deze afspeellijst is leeg', + 'playlists.deleteConfirm' => 'Afspeellijst verwijderen?', + 'playlists.deleteMessage' => ({required Object name}) => 'Weet je zeker dat je "${name}" wilt verwijderen?', + 'playlists.created' => 'Afspeellijst gemaakt', + 'playlists.deleted' => 'Afspeellijst verwijderd', + 'playlists.itemAdded' => 'Toegevoegd aan afspeellijst', + 'playlists.itemRemoved' => 'Verwijderd uit afspeellijst', + 'playlists.selectPlaylist' => 'Selecteer afspeellijst', + 'playlists.createNewPlaylist' => 'Nieuwe afspeellijst maken', + 'playlists.errorCreating' => 'Fout bij maken afspeellijst', + 'playlists.errorDeleting' => 'Fout bij verwijderen afspeellijst', + 'playlists.errorLoading' => 'Fout bij laden afspeellijsten', + 'playlists.errorAdding' => 'Fout bij toevoegen aan afspeellijst', + 'playlists.errorReordering' => 'Fout bij herschikken van afspeellijstitem', + 'playlists.errorRemoving' => 'Fout bij verwijderen uit afspeellijst', + 'playlists.playlist' => 'Afspeellijst', + 'collections.title' => 'Collecties', + 'collections.collection' => 'Collectie', + 'collections.empty' => 'Collectie is leeg', + 'collections.unknownLibrarySection' => 'Kan niet verwijderen: onbekende bibliotheeksectie', + 'collections.deleteCollection' => 'Collectie verwijderen', + 'collections.deleteConfirm' => ({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + 'collections.deleted' => 'Collectie verwijderd', + 'collections.deleteFailed' => 'Collectie verwijderen mislukt', + 'collections.deleteFailedWithError' => ({required Object error}) => 'Collectie verwijderen mislukt: ${error}', + 'collections.failedToLoadItems' => ({required Object error}) => 'Collectie-items laden mislukt: ${error}', + 'collections.selectCollection' => 'Selecteer collectie', + 'collections.createNewCollection' => 'Nieuwe collectie maken', + 'collections.collectionName' => 'Collectienaam', + 'collections.enterCollectionName' => 'Voer collectienaam in', + 'collections.addedToCollection' => 'Toegevoegd aan collectie', + 'collections.errorAddingToCollection' => 'Fout bij toevoegen aan collectie', + 'collections.created' => 'Collectie gemaakt', + 'collections.removeFromCollection' => 'Verwijderen uit collectie', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => '"${title}" uit deze collectie verwijderen?', + 'collections.removedFromCollection' => 'Uit collectie verwijderd', + 'collections.removeFromCollectionFailed' => 'Verwijderen uit collectie mislukt', + 'collections.removeFromCollectionError' => ({required Object error}) => 'Fout bij verwijderen uit collectie: ${error}', + 'watchTogether.title' => 'Samen Kijken', + 'watchTogether.description' => 'Kijk synchroon met vrienden en familie', + 'watchTogether.createSession' => 'Sessie Maken', + 'watchTogether.creating' => 'Maken...', + 'watchTogether.joinSession' => 'Sessie Deelnemen', + 'watchTogether.joining' => 'Deelnemen...', + 'watchTogether.controlMode' => 'Controlemodus', + 'watchTogether.controlModeQuestion' => 'Wie kan het afspelen bedienen?', + 'watchTogether.hostOnly' => 'Alleen Host', + 'watchTogether.anyone' => 'Iedereen', + 'watchTogether.hostingSession' => 'Sessie Hosten', + 'watchTogether.inSession' => 'In Sessie', + 'watchTogether.sessionCode' => 'Sessiecode', + 'watchTogether.hostControlsPlayback' => 'Host bedient het afspelen', + 'watchTogether.anyoneCanControl' => 'Iedereen kan het afspelen bedienen', + 'watchTogether.hostControls' => 'Host bedient', + _ => null, + } ?? switch (path) { + 'watchTogether.anyoneControls' => 'Iedereen bedient', + 'watchTogether.participants' => 'Deelnemers', + 'watchTogether.host' => 'Host', + 'watchTogether.hostBadge' => 'HOST', + 'watchTogether.youAreHost' => 'Jij bent de host', + 'watchTogether.watchingWithOthers' => 'Kijken met anderen', + 'watchTogether.endSession' => 'Sessie Beëindigen', + 'watchTogether.leaveSession' => 'Sessie Verlaten', + 'watchTogether.endSessionQuestion' => 'Sessie Beëindigen?', + 'watchTogether.leaveSessionQuestion' => 'Sessie Verlaten?', + 'watchTogether.endSessionConfirm' => 'Dit beëindigt de sessie voor alle deelnemers.', + 'watchTogether.leaveSessionConfirm' => 'Je wordt uit de sessie verwijderd.', + 'watchTogether.endSessionConfirmOverlay' => 'Dit beëindigt de kijksessie voor alle deelnemers.', + 'watchTogether.leaveSessionConfirmOverlay' => 'Je wordt losgekoppeld van de kijksessie.', + 'watchTogether.end' => 'Beëindigen', + 'watchTogether.leave' => 'Verlaten', + 'watchTogether.syncing' => 'Synchroniseren...', + 'watchTogether.participant' => 'deelnemer', + 'watchTogether.joinWatchSession' => 'Kijksessie Deelnemen', + 'watchTogether.enterCodeHint' => 'Voer 8-teken code in', + 'watchTogether.pasteFromClipboard' => 'Plakken van klembord', + 'watchTogether.pleaseEnterCode' => 'Voer een sessiecode in', + 'watchTogether.codeMustBe8Chars' => 'Sessiecode moet 8 tekens zijn', + 'watchTogether.joinInstructions' => 'Voer de sessiecode in die door de host is gedeeld om deel te nemen aan hun kijksessie.', + 'watchTogether.failedToCreate' => 'Sessie maken mislukt', + 'watchTogether.failedToJoin' => 'Sessie deelnemen mislukt', + 'watchTogether.sessionCodeCopied' => 'Sessiecode gekopieerd naar klembord', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart new file mode 100644 index 00000000..2374e34b --- /dev/null +++ b/lib/i18n/strings_sv.g.dart @@ -0,0 +1,1483 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsSv with BaseTranslations implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsSv({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.sv, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsSv _root = this; // ignore: unused_field + + @override + TranslationsSv $copyWith({TranslationMetadata? meta}) => TranslationsSv(meta: meta ?? this.$meta); + + // Translations + @override late final _TranslationsAppSv app = _TranslationsAppSv._(_root); + @override late final _TranslationsAuthSv auth = _TranslationsAuthSv._(_root); + @override late final _TranslationsCommonSv common = _TranslationsCommonSv._(_root); + @override late final _TranslationsScreensSv screens = _TranslationsScreensSv._(_root); + @override late final _TranslationsUpdateSv update = _TranslationsUpdateSv._(_root); + @override late final _TranslationsSettingsSv settings = _TranslationsSettingsSv._(_root); + @override late final _TranslationsSearchSv search = _TranslationsSearchSv._(_root); + @override late final _TranslationsHotkeysSv hotkeys = _TranslationsHotkeysSv._(_root); + @override late final _TranslationsPinEntrySv pinEntry = _TranslationsPinEntrySv._(_root); + @override late final _TranslationsFileInfoSv fileInfo = _TranslationsFileInfoSv._(_root); + @override late final _TranslationsMediaMenuSv mediaMenu = _TranslationsMediaMenuSv._(_root); + @override late final _TranslationsAccessibilitySv accessibility = _TranslationsAccessibilitySv._(_root); + @override late final _TranslationsTooltipsSv tooltips = _TranslationsTooltipsSv._(_root); + @override late final _TranslationsVideoControlsSv videoControls = _TranslationsVideoControlsSv._(_root); + @override late final _TranslationsUserStatusSv userStatus = _TranslationsUserStatusSv._(_root); + @override late final _TranslationsMessagesSv messages = _TranslationsMessagesSv._(_root); + @override late final _TranslationsSubtitlingStylingSv subtitlingStyling = _TranslationsSubtitlingStylingSv._(_root); + @override late final _TranslationsMpvConfigSv mpvConfig = _TranslationsMpvConfigSv._(_root); + @override late final _TranslationsDialogSv dialog = _TranslationsDialogSv._(_root); + @override late final _TranslationsDiscoverSv discover = _TranslationsDiscoverSv._(_root); + @override late final _TranslationsErrorsSv errors = _TranslationsErrorsSv._(_root); + @override late final _TranslationsLibrariesSv libraries = _TranslationsLibrariesSv._(_root); + @override late final _TranslationsAboutSv about = _TranslationsAboutSv._(_root); + @override late final _TranslationsServerSelectionSv serverSelection = _TranslationsServerSelectionSv._(_root); + @override late final _TranslationsHubDetailSv hubDetail = _TranslationsHubDetailSv._(_root); + @override late final _TranslationsLogsSv logs = _TranslationsLogsSv._(_root); + @override late final _TranslationsLicensesSv licenses = _TranslationsLicensesSv._(_root); + @override late final _TranslationsNavigationSv navigation = _TranslationsNavigationSv._(_root); + @override late final _TranslationsDownloadsSv downloads = _TranslationsDownloadsSv._(_root); + @override late final _TranslationsPlaylistsSv playlists = _TranslationsPlaylistsSv._(_root); + @override late final _TranslationsCollectionsSv collections = _TranslationsCollectionsSv._(_root); + @override late final _TranslationsWatchTogetherSv watchTogether = _TranslationsWatchTogetherSv._(_root); +} + +// Path: app +class _TranslationsAppSv implements TranslationsAppEn { + _TranslationsAppSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Laddar...'; +} + +// Path: auth +class _TranslationsAuthSv implements TranslationsAuthEn { + _TranslationsAuthSv._(this._root); + + final TranslationsSv _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.'; +} + +// Path: common +class _TranslationsCommonSv implements TranslationsCommonEn { + _TranslationsCommonSv._(this._root); + + final TranslationsSv _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 logout => 'Logga ut'; + @override String get unknown => 'Okänd'; + @override String get refresh => 'Uppdatera'; + @override String get yes => 'Ja'; + @override String get no => 'Nej'; + @override String get delete => 'Ta bort'; + @override String get shuffle => 'Blanda'; + @override String get addTo => 'Lägg till i...'; +} + +// Path: screens +class _TranslationsScreensSv implements TranslationsScreensEn { + _TranslationsScreensSv._(this._root); + + final TranslationsSv _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 mpvConfig => 'MPV-konfiguration'; + @override String get search => 'Sök'; + @override String get logs => 'Loggar'; +} + +// Path: update +class _TranslationsUpdateSv implements TranslationsUpdateEn { + _TranslationsUpdateSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: settings +class _TranslationsSettingsSv implements TranslationsSettingsEn { + _TranslationsSettingsSv._(this._root); + + final TranslationsSv _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 advanced => 'Avancerat'; + @override String get episodePosterMode => 'Avsnittsaffisch-stil'; + @override String get seriesPoster => 'Serieaffisch'; + @override String get seriesPosterDescription => 'Visa seriens affisch för alla avsnitt'; + @override String get seasonPoster => 'Säsongsaffisch'; + @override String get seasonPosterDescription => 'Visa säsongens affisch för avsnitt'; + @override String get episodeThumbnail => 'Avsnittsminiatyr'; + @override String get episodeThumbnailDescription => 'Visa 16:9 skärmbild från avsnittet'; + @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 showHeroSection => 'Visa hjältesektion'; + @override String get useGlobalHubs => 'Använd Plex hem-layout'; + @override String get useGlobalHubsDescription => 'Visar startsidans hubbar som den officiella Plex-klienten. När av visas rekommendationer per bibliotek istället.'; + @override String get showServerNameOnHubs => 'Visa servernamn på hubbar'; + @override String get showServerNameOnHubsDescription => 'Visa alltid servernamnet i hubbtitlar. När av visas endast för duplicerade hubbnamn.'; + @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 videoPlayerControls => 'Videospelar-kontroller'; + @override String get keyboardShortcuts => 'Tangentbordsgenvägar'; + @override String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; + @override String get videoPlayerNavigation => 'Navigering i videospelaren'; + @override String get videoPlayerNavigationDescription => 'Använd piltangenter för att navigera videospelarens kontroller'; + @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'; + @override String get downloads => 'Nedladdningar'; + @override String get downloadLocationDescription => 'Välj var nedladdat innehåll ska lagras'; + @override String get downloadLocationDefault => 'Standard (App-lagring)'; + @override String get downloadLocationCustom => 'Anpassad Plats'; + @override String get selectFolder => 'Välj Mapp'; + @override String get resetToDefault => 'Återställ till Standard'; + @override String currentPath({required Object path}) => 'Nuvarande: ${path}'; + @override String get downloadLocationChanged => 'Nedladdningsplats ändrad'; + @override String get downloadLocationReset => 'Nedladdningsplats återställd till standard'; + @override String get downloadLocationInvalid => 'Vald mapp är inte skrivbar'; + @override String get downloadLocationSelectError => 'Kunde inte välja mapp'; + @override String get downloadOnWifiOnly => 'Ladda ner endast på WiFi'; + @override String get downloadOnWifiOnlyDescription => 'Förhindra nedladdningar vid användning av mobildata'; + @override String get cellularDownloadBlocked => 'Nedladdningar är inaktiverade på mobildata. Anslut till WiFi eller ändra inställningen.'; + @override String get maxVolume => 'Maximal volym'; + @override String get maxVolumeDescription => 'Tillåt volym över 100% för tyst media'; + @override String maxVolumePercent({required Object percent}) => '${percent}%'; + @override String get maxVolumeHint => 'Ange maximal volym (100-300)'; + @override String get discordRichPresence => 'Discord Rich Presence'; + @override String get discordRichPresenceDescription => 'Visa vad du tittar på i Discord'; + @override String get matchContentFrameRate => 'Matcha innehållets bildfrekvens'; + @override String get matchContentFrameRateDescription => 'Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri'; +} + +// Path: search +class _TranslationsSearchSv implements TranslationsSearchEn { + _TranslationsSearchSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: hotkeys +class _TranslationsHotkeysSv implements TranslationsHotkeysEn { + _TranslationsHotkeysSv._(this._root); + + final TranslationsSv _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'; + @override late final _TranslationsHotkeysActionsSv actions = _TranslationsHotkeysActionsSv._(_root); +} + +// Path: pinEntry +class _TranslationsPinEntrySv implements TranslationsPinEntryEn { + _TranslationsPinEntrySv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get enterPin => 'Ange PIN'; + @override String get showPin => 'Visa PIN'; + @override String get hidePin => 'Dölj PIN'; +} + +// Path: fileInfo +class _TranslationsFileInfoSv implements TranslationsFileInfoEn { + _TranslationsFileInfoSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: mediaMenu +class _TranslationsMediaMenuSv implements TranslationsMediaMenuEn { + _TranslationsMediaMenuSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: accessibility +class _TranslationsAccessibilitySv implements TranslationsAccessibilityEn { + _TranslationsAccessibilitySv._(this._root); + + final TranslationsSv _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'; +} + +// Path: tooltips +class _TranslationsTooltipsSv implements TranslationsTooltipsEn { + _TranslationsTooltipsSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: videoControls +class _TranslationsVideoControlsSv implements TranslationsVideoControlsEn { + _TranslationsVideoControlsSv._(this._root); + + final TranslationsSv _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 autoPlayNext => 'Spela nästa automatiskt'; + @override String get playNext => 'Spela nästa'; + @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 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 pipButton => 'Bild-i-bild läge'; + @override String get aspectRatioButton => 'Bildförhållande'; + @override String get fullscreenButton => 'Aktivera helskärm'; + @override String get exitFullscreenButton => 'Avsluta helskärm'; + @override String get alwaysOnTopButton => 'Alltid överst'; + @override String get rotationLockButton => 'Rotationslås'; + @override String get timelineSlider => 'Videotidslinje'; + @override String get volumeSlider => 'Volymnivå'; + @override String get backButton => 'Tillbaka'; +} + +// Path: userStatus +class _TranslationsUserStatusSv implements TranslationsUserStatusEn { + _TranslationsUserStatusSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: messages +class _TranslationsMessagesSv implements TranslationsMessagesEn { + _TranslationsMessagesSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get markedAsWatched => 'Markerad som sedd'; + @override String get markedAsUnwatched => 'Markerad som osedd'; + @override String get markedAsWatchedOffline => 'Markerad som sedd (synkroniseras när online)'; + @override String get markedAsUnwatchedOffline => 'Markerad som osedd (synkroniseras när online)'; + @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 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 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: subtitlingStyling +class _TranslationsSubtitlingStylingSv implements TranslationsSubtitlingStylingEn { + _TranslationsSubtitlingStylingSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: mpvConfig +class _TranslationsMpvConfigSv implements TranslationsMpvConfigEn { + _TranslationsMpvConfigSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get title => 'MPV-konfiguration'; + @override String get description => 'Avancerade videospelares inställningar'; + @override String get properties => 'Egenskaper'; + @override String get presets => 'Förval'; + @override String get noProperties => 'Inga egenskaper konfigurerade'; + @override String get noPresets => 'Inga sparade förval'; + @override String get addProperty => 'Lägg till egenskap'; + @override String get editProperty => 'Redigera egenskap'; + @override String get deleteProperty => 'Ta bort egenskap'; + @override String get propertyKey => 'Egenskapsnyckel'; + @override String get propertyKeyHint => 't.ex. hwdec, demuxer-max-bytes'; + @override String get propertyValue => 'Egenskapsvärde'; + @override String get propertyValueHint => 't.ex. auto, 256000000'; + @override String get saveAsPreset => 'Spara som förval...'; + @override String get presetName => 'Förvalnamn'; + @override String get presetNameHint => 'Ange ett namn för detta förval'; + @override String get loadPreset => 'Ladda'; + @override String get deletePreset => 'Ta bort'; + @override String get presetSaved => 'Förval sparat'; + @override String get presetLoaded => 'Förval laddat'; + @override String get presetDeleted => 'Förval borttaget'; + @override String get confirmDeletePreset => 'Är du säker på att du vill ta bort detta förval?'; + @override String get confirmDeleteProperty => 'Är du säker på att du vill ta bort denna egenskap?'; + @override String entriesCount({required Object count}) => '${count} poster'; +} + +// Path: dialog +class _TranslationsDialogSv implements TranslationsDialogEn { + _TranslationsDialogSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get confirmAction => 'Bekräfta åtgärd'; + @override String get cancel => 'Avbryt'; + @override String get playNow => 'Spela nu'; +} + +// Path: discover +class _TranslationsDiscoverSv implements TranslationsDiscoverEn { + _TranslationsDiscoverSv._(this._root); + + final TranslationsSv _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 play => 'Spela'; + @override String playEpisode({required Object season, required Object episode}) => '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 _TranslationsErrorsSv implements TranslationsErrorsEn { + _TranslationsErrorsSv._(this._root); + + final TranslationsSv _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}'; +} + +// Path: libraries +class _TranslationsLibrariesSv implements TranslationsLibrariesEn { + _TranslationsLibrariesSv._(this._root); + + final TranslationsSv _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 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 _TranslationsLibrariesTabsSv tabs = _TranslationsLibrariesTabsSv._(_root); + @override late final _TranslationsLibrariesGroupingsSv groupings = _TranslationsLibrariesGroupingsSv._(_root); +} + +// Path: about +class _TranslationsAboutSv implements TranslationsAboutEn { + _TranslationsAboutSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: serverSelection +class _TranslationsServerSelectionSv implements TranslationsServerSelectionEn { + _TranslationsServerSelectionSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get allServerConnectionsFailed => 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; + @override String get noServersFound => 'Inga servrar hittades'; + @override String noServersFoundForAccount({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})'; + @override String failedToLoadServers({required Object error}) => 'Misslyckades att ladda servrar: ${error}'; +} + +// Path: hubDetail +class _TranslationsHubDetailSv implements TranslationsHubDetailEn { + _TranslationsHubDetailSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: logs +class _TranslationsLogsSv implements TranslationsLogsEn { + _TranslationsLogsSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get clearLogs => 'Rensa loggar'; + @override String get copyLogs => 'Kopiera loggar'; + @override String get error => 'Fel:'; + @override String get stackTrace => 'Stack trace:'; +} + +// Path: licenses +class _TranslationsLicensesSv implements TranslationsLicensesEn { + _TranslationsLicensesSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: navigation +class _TranslationsNavigationSv implements TranslationsNavigationEn { + _TranslationsNavigationSv._(this._root); + + final TranslationsSv _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'; + @override String get downloads => 'Nedladdningar'; +} + +// Path: downloads +class _TranslationsDownloadsSv implements TranslationsDownloadsEn { + _TranslationsDownloadsSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get title => 'Nedladdningar'; + @override String get manage => 'Hantera'; + @override String get tvShows => 'TV-serier'; + @override String get movies => 'Filmer'; + @override String get noDownloads => 'Inga nedladdningar ännu'; + @override String get noDownloadsDescription => 'Nedladdat innehåll visas här för offline-visning'; + @override String get downloadNow => 'Ladda ner'; + @override String get deleteDownload => 'Ta bort nedladdning'; + @override String get retryDownload => 'Försök igen'; + @override String get downloadQueued => 'Nedladdning köad'; + @override String episodesQueued({required Object count}) => '${count} avsnitt köade för nedladdning'; + @override String get downloadDeleted => 'Nedladdning borttagen'; + @override String deleteConfirm({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Den nedladdade filen kommer att tas bort från din enhet.'; + @override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Tar bort ${title}... (${current} av ${total})'; +} + +// Path: playlists +class _TranslationsPlaylistsSv implements TranslationsPlaylistsEn { + _TranslationsPlaylistsSv._(this._root); + + final TranslationsSv _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 playlistName => 'Spellistans namn'; + @override String get enterPlaylistName => 'Ange spellistans namn'; + @override String get delete => 'Ta bort spellista'; + @override String get removeItem => 'Ta bort från spellista'; + @override String get smartPlaylist => 'Smart 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 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 _TranslationsCollectionsSv implements TranslationsCollectionsEn { + _TranslationsCollectionsSv._(this._root); + + final TranslationsSv _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 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 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: watchTogether +class _TranslationsWatchTogetherSv implements TranslationsWatchTogetherEn { + _TranslationsWatchTogetherSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get title => 'Titta Tillsammans'; + @override String get description => 'Titta på innehåll synkroniserat med vänner och familj'; + @override String get createSession => 'Skapa Session'; + @override String get creating => 'Skapar...'; + @override String get joinSession => 'Gå med i Session'; + @override String get joining => 'Ansluter...'; + @override String get controlMode => 'Kontrollläge'; + @override String get controlModeQuestion => 'Vem kan styra uppspelningen?'; + @override String get hostOnly => 'Endast Värd'; + @override String get anyone => 'Alla'; + @override String get hostingSession => 'Värd för Session'; + @override String get inSession => 'I Session'; + @override String get sessionCode => 'Sessionskod'; + @override String get hostControlsPlayback => 'Värden styr uppspelningen'; + @override String get anyoneCanControl => 'Alla kan styra uppspelningen'; + @override String get hostControls => 'Värd styr'; + @override String get anyoneControls => 'Alla styr'; + @override String get participants => 'Deltagare'; + @override String get host => 'Värd'; + @override String get hostBadge => 'VÄRD'; + @override String get youAreHost => 'Du är värden'; + @override String get watchingWithOthers => 'Tittar med andra'; + @override String get endSession => 'Avsluta Session'; + @override String get leaveSession => 'Lämna Session'; + @override String get endSessionQuestion => 'Avsluta Session?'; + @override String get leaveSessionQuestion => 'Lämna Session?'; + @override String get endSessionConfirm => 'Detta avslutar sessionen för alla deltagare.'; + @override String get leaveSessionConfirm => 'Du kommer att tas bort från sessionen.'; + @override String get endSessionConfirmOverlay => 'Detta avslutar tittarsessionen för alla deltagare.'; + @override String get leaveSessionConfirmOverlay => 'Du kommer att kopplas bort från tittarsessionen.'; + @override String get end => 'Avsluta'; + @override String get leave => 'Lämna'; + @override String get syncing => 'Synkroniserar...'; + @override String get participant => 'deltagare'; + @override String get joinWatchSession => 'Gå med i Tittarsession'; + @override String get enterCodeHint => 'Ange 8-teckens kod'; + @override String get pasteFromClipboard => 'Klistra in från urklipp'; + @override String get pleaseEnterCode => 'Vänligen ange en sessionskod'; + @override String get codeMustBe8Chars => 'Sessionskod måste vara 8 tecken'; + @override String get joinInstructions => 'Ange sessionskoden som delats av värden för att gå med i deras tittarsession.'; + @override String get failedToCreate => 'Det gick inte att skapa session'; + @override String get failedToJoin => 'Det gick inte att gå med i session'; + @override String get sessionCodeCopied => 'Sessionskod kopierad till urklipp'; +} + +// Path: hotkeys.actions +class _TranslationsHotkeysActionsSv implements TranslationsHotkeysActionsEn { + _TranslationsHotkeysActionsSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get playPause => 'Spela/Pausa'; + @override String get volumeUp => 'Höj volym'; + @override String get volumeDown => 'Sänk volym'; + @override String seekForward({required Object seconds}) => 'Spola framåt (${seconds}s)'; + @override String seekBackward({required Object seconds}) => 'Spola bakåt (${seconds}s)'; + @override String get fullscreenToggle => 'Växla helskärm'; + @override String get muteToggle => 'Växla ljud av'; + @override String get subtitleToggle => 'Växla undertexter'; + @override String get audioTrackNext => 'Nästa ljudspår'; + @override String get subtitleTrackNext => 'Nästa undertextspår'; + @override String get chapterNext => 'Nästa kapitel'; + @override String get chapterPrevious => 'Föregående kapitel'; + @override String get speedIncrease => 'Öka hastighet'; + @override String get speedDecrease => 'Minska hastighet'; + @override String get speedReset => 'Återställ hastighet'; + @override String get subSeekNext => 'Hoppa till nästa undertext'; + @override String get subSeekPrev => 'Hoppa till föregående undertext'; +} + +// Path: libraries.tabs +class _TranslationsLibrariesTabsSv implements TranslationsLibrariesTabsEn { + _TranslationsLibrariesTabsSv._(this._root); + + final TranslationsSv _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'; +} + +// Path: libraries.groupings +class _TranslationsLibrariesGroupingsSv implements TranslationsLibrariesGroupingsEn { + _TranslationsLibrariesGroupingsSv._(this._root); + + final TranslationsSv _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'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsSv { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => 'Laddar...', + 'auth.signInWithPlex' => 'Logga in med Plex', + 'auth.showQRCode' => 'Visa QR-kod', + 'auth.cancel' => 'Avbryt', + 'auth.authenticate' => 'Autentisera', + 'auth.retry' => 'Försök igen', + 'auth.debugEnterToken' => 'Debug: Ange Plex-token', + 'auth.plexTokenLabel' => 'Plex-autentiseringstoken', + 'auth.plexTokenHint' => 'Ange din Plex.tv-token', + 'auth.authenticationTimeout' => 'Autentisering tog för lång tid. Försök igen.', + 'auth.scanQRCodeInstruction' => 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.', + 'auth.waitingForAuth' => 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.', + 'common.cancel' => 'Avbryt', + 'common.save' => 'Spara', + 'common.close' => 'Stäng', + 'common.clear' => 'Rensa', + 'common.reset' => 'Återställ', + 'common.later' => 'Senare', + 'common.submit' => 'Skicka', + 'common.confirm' => 'Bekräfta', + 'common.retry' => 'Försök igen', + 'common.logout' => 'Logga ut', + 'common.unknown' => 'Okänd', + 'common.refresh' => 'Uppdatera', + 'common.yes' => 'Ja', + 'common.no' => 'Nej', + 'common.delete' => 'Ta bort', + 'common.shuffle' => 'Blanda', + 'common.addTo' => 'Lägg till i...', + 'screens.licenses' => 'Licenser', + 'screens.selectServer' => 'Välj server', + 'screens.switchProfile' => 'Byt profil', + 'screens.subtitleStyling' => 'Undertext-styling', + 'screens.mpvConfig' => 'MPV-konfiguration', + 'screens.search' => 'Sök', + 'screens.logs' => 'Loggar', + 'update.available' => 'Uppdatering tillgänglig', + 'update.versionAvailable' => ({required Object version}) => 'Version ${version} är tillgänglig', + 'update.currentVersion' => ({required Object version}) => 'Nuvarande: ${version}', + 'update.skipVersion' => 'Hoppa över denna version', + 'update.viewRelease' => 'Visa release', + 'update.latestVersion' => 'Du har den senaste versionen', + 'update.checkFailed' => 'Misslyckades att kontrollera uppdateringar', + 'settings.title' => 'Inställningar', + 'settings.language' => 'Språk', + 'settings.theme' => 'Tema', + 'settings.appearance' => 'Utseende', + 'settings.videoPlayback' => 'Videouppspelning', + 'settings.advanced' => 'Avancerat', + 'settings.episodePosterMode' => 'Avsnittsaffisch-stil', + 'settings.seriesPoster' => 'Serieaffisch', + 'settings.seriesPosterDescription' => 'Visa seriens affisch för alla avsnitt', + 'settings.seasonPoster' => 'Säsongsaffisch', + 'settings.seasonPosterDescription' => 'Visa säsongens affisch för avsnitt', + 'settings.episodeThumbnail' => 'Avsnittsminiatyr', + 'settings.episodeThumbnailDescription' => 'Visa 16:9 skärmbild från avsnittet', + 'settings.showHeroSectionDescription' => 'Visa utvalda innehållskarusell på startsidan', + 'settings.secondsLabel' => 'Sekunder', + 'settings.minutesLabel' => 'Minuter', + 'settings.secondsShort' => 's', + 'settings.minutesShort' => 'm', + 'settings.durationHint' => ({required Object min, required Object max}) => 'Ange tid (${min}-${max})', + 'settings.systemTheme' => 'System', + 'settings.systemThemeDescription' => 'Följ systeminställningar', + 'settings.lightTheme' => 'Ljust', + 'settings.darkTheme' => 'Mörkt', + 'settings.libraryDensity' => 'Biblioteksdensitet', + 'settings.compact' => 'Kompakt', + 'settings.compactDescription' => 'Mindre kort, fler objekt synliga', + 'settings.normal' => 'Normal', + 'settings.normalDescription' => 'Standardstorlek', + 'settings.comfortable' => 'Bekväm', + 'settings.comfortableDescription' => 'Större kort, färre objekt synliga', + 'settings.viewMode' => 'Visningsläge', + 'settings.gridView' => 'Rutnät', + 'settings.gridViewDescription' => 'Visa objekt i rutnätslayout', + 'settings.listView' => 'Lista', + 'settings.listViewDescription' => 'Visa objekt i listlayout', + 'settings.showHeroSection' => 'Visa hjältesektion', + 'settings.useGlobalHubs' => 'Använd Plex hem-layout', + 'settings.useGlobalHubsDescription' => 'Visar startsidans hubbar som den officiella Plex-klienten. När av visas rekommendationer per bibliotek istället.', + 'settings.showServerNameOnHubs' => 'Visa servernamn på hubbar', + 'settings.showServerNameOnHubsDescription' => 'Visa alltid servernamnet i hubbtitlar. När av visas endast för duplicerade hubbnamn.', + 'settings.hardwareDecoding' => 'Hårdvaruavkodning', + 'settings.hardwareDecodingDescription' => 'Använd hårdvaruacceleration när tillgängligt', + 'settings.bufferSize' => 'Bufferstorlek', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => 'Undertext-styling', + 'settings.subtitleStylingDescription' => 'Anpassa undertextutseende', + 'settings.smallSkipDuration' => 'Kort hoppvaraktighet', + 'settings.largeSkipDuration' => 'Lång hoppvaraktighet', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds} sekunder', + 'settings.defaultSleepTimer' => 'Standard sovtimer', + 'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minuter', + 'settings.rememberTrackSelections' => 'Kom ihåg spårval per serie/film', + 'settings.rememberTrackSelectionsDescription' => 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning', + 'settings.videoPlayerControls' => 'Videospelar-kontroller', + 'settings.keyboardShortcuts' => 'Tangentbordsgenvägar', + 'settings.keyboardShortcutsDescription' => 'Anpassa tangentbordsgenvägar', + 'settings.videoPlayerNavigation' => 'Navigering i videospelaren', + 'settings.videoPlayerNavigationDescription' => 'Använd piltangenter för att navigera videospelarens kontroller', + 'settings.debugLogging' => 'Felsökningsloggning', + 'settings.debugLoggingDescription' => 'Aktivera detaljerad loggning för felsökning', + 'settings.viewLogs' => 'Visa loggar', + 'settings.viewLogsDescription' => 'Visa applikationsloggar', + 'settings.clearCache' => 'Rensa cache', + 'settings.clearCacheDescription' => 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.', + 'settings.clearCacheSuccess' => 'Cache rensad framgångsrikt', + 'settings.resetSettings' => 'Återställ inställningar', + 'settings.resetSettingsDescription' => 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.', + 'settings.resetSettingsSuccess' => 'Inställningar återställda framgångsrikt', + 'settings.shortcutsReset' => 'Genvägar återställda till standard', + 'settings.about' => 'Om', + 'settings.aboutDescription' => 'Appinformation och licenser', + 'settings.updates' => 'Uppdateringar', + 'settings.updateAvailable' => 'Uppdatering tillgänglig', + 'settings.checkForUpdates' => 'Kontrollera uppdateringar', + 'settings.validationErrorEnterNumber' => 'Vänligen ange ett giltigt nummer', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Tiden måste vara mellan ${min} och ${max} ${unit}', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Genväg redan tilldelad ${action}', + 'settings.shortcutUpdated' => ({required Object action}) => 'Genväg uppdaterad för ${action}', + 'settings.autoSkip' => 'Auto Hoppa Över', + 'settings.autoSkipIntro' => 'Hoppa Över Intro Automatiskt', + 'settings.autoSkipIntroDescription' => 'Hoppa automatiskt över intro-markörer efter några sekunder', + 'settings.autoSkipCredits' => 'Hoppa Över Credits Automatiskt', + 'settings.autoSkipCreditsDescription' => 'Hoppa automatiskt över credits och spela nästa avsnitt', + 'settings.autoSkipDelay' => 'Fördröjning Auto Hoppa Över', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => 'Vänta ${seconds} sekunder innan automatisk överhoppning', + 'settings.downloads' => 'Nedladdningar', + 'settings.downloadLocationDescription' => 'Välj var nedladdat innehåll ska lagras', + 'settings.downloadLocationDefault' => 'Standard (App-lagring)', + 'settings.downloadLocationCustom' => 'Anpassad Plats', + 'settings.selectFolder' => 'Välj Mapp', + 'settings.resetToDefault' => 'Återställ till Standard', + 'settings.currentPath' => ({required Object path}) => 'Nuvarande: ${path}', + 'settings.downloadLocationChanged' => 'Nedladdningsplats ändrad', + 'settings.downloadLocationReset' => 'Nedladdningsplats återställd till standard', + 'settings.downloadLocationInvalid' => 'Vald mapp är inte skrivbar', + 'settings.downloadLocationSelectError' => 'Kunde inte välja mapp', + 'settings.downloadOnWifiOnly' => 'Ladda ner endast på WiFi', + 'settings.downloadOnWifiOnlyDescription' => 'Förhindra nedladdningar vid användning av mobildata', + 'settings.cellularDownloadBlocked' => 'Nedladdningar är inaktiverade på mobildata. Anslut till WiFi eller ändra inställningen.', + 'settings.maxVolume' => 'Maximal volym', + 'settings.maxVolumeDescription' => 'Tillåt volym över 100% för tyst media', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => 'Ange maximal volym (100-300)', + 'settings.discordRichPresence' => 'Discord Rich Presence', + 'settings.discordRichPresenceDescription' => 'Visa vad du tittar på i Discord', + 'settings.matchContentFrameRate' => 'Matcha innehållets bildfrekvens', + 'settings.matchContentFrameRateDescription' => 'Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri', + 'search.hint' => 'Sök filmer, serier, musik...', + 'search.tryDifferentTerm' => 'Prova en annan sökterm', + 'search.searchYourMedia' => 'Sök i dina media', + 'search.enterTitleActorOrKeyword' => 'Ange en titel, skådespelare eller nyckelord', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => 'Sätt genväg för ${actionName}', + 'hotkeys.clearShortcut' => 'Rensa genväg', + 'hotkeys.actions.playPause' => 'Spela/Pausa', + 'hotkeys.actions.volumeUp' => 'Höj volym', + 'hotkeys.actions.volumeDown' => 'Sänk volym', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => 'Spola framåt (${seconds}s)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => 'Spola bakåt (${seconds}s)', + 'hotkeys.actions.fullscreenToggle' => 'Växla helskärm', + 'hotkeys.actions.muteToggle' => 'Växla ljud av', + 'hotkeys.actions.subtitleToggle' => 'Växla undertexter', + 'hotkeys.actions.audioTrackNext' => 'Nästa ljudspår', + 'hotkeys.actions.subtitleTrackNext' => 'Nästa undertextspår', + 'hotkeys.actions.chapterNext' => 'Nästa kapitel', + 'hotkeys.actions.chapterPrevious' => 'Föregående kapitel', + 'hotkeys.actions.speedIncrease' => 'Öka hastighet', + 'hotkeys.actions.speedDecrease' => 'Minska hastighet', + 'hotkeys.actions.speedReset' => 'Återställ hastighet', + 'hotkeys.actions.subSeekNext' => 'Hoppa till nästa undertext', + 'hotkeys.actions.subSeekPrev' => 'Hoppa till föregående undertext', + 'pinEntry.enterPin' => 'Ange PIN', + 'pinEntry.showPin' => 'Visa PIN', + 'pinEntry.hidePin' => 'Dölj PIN', + 'fileInfo.title' => 'Filinformation', + 'fileInfo.video' => 'Video', + 'fileInfo.audio' => 'Ljud', + 'fileInfo.file' => 'Fil', + 'fileInfo.advanced' => 'Avancerat', + 'fileInfo.codec' => 'Kodek', + 'fileInfo.resolution' => 'Upplösning', + 'fileInfo.bitrate' => 'Bithastighet', + 'fileInfo.frameRate' => 'Bildfrekvens', + 'fileInfo.aspectRatio' => 'Bildförhållande', + 'fileInfo.profile' => 'Profil', + 'fileInfo.bitDepth' => 'Bitdjup', + 'fileInfo.colorSpace' => 'Färgrymd', + 'fileInfo.colorRange' => 'Färgområde', + 'fileInfo.colorPrimaries' => 'Färggrunder', + 'fileInfo.chromaSubsampling' => 'Kroma-undersampling', + 'fileInfo.channels' => 'Kanaler', + 'fileInfo.path' => 'Sökväg', + 'fileInfo.size' => 'Storlek', + 'fileInfo.container' => 'Container', + 'fileInfo.duration' => 'Varaktighet', + 'fileInfo.optimizedForStreaming' => 'Optimerad för streaming', + 'fileInfo.has64bitOffsets' => '64-bit offset', + 'mediaMenu.markAsWatched' => 'Markera som sedd', + 'mediaMenu.markAsUnwatched' => 'Markera som osedd', + 'mediaMenu.removeFromContinueWatching' => 'Ta bort från Fortsätt titta', + 'mediaMenu.goToSeries' => 'Gå till serie', + 'mediaMenu.goToSeason' => 'Gå till säsong', + 'mediaMenu.shufflePlay' => 'Blanda uppspelning', + 'mediaMenu.fileInfo' => 'Filinformation', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, TV-serie', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => 'sedd', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} procent sedd', + 'accessibility.mediaCardUnwatched' => 'osedd', + 'accessibility.tapToPlay' => 'Tryck för att spela', + 'tooltips.shufflePlay' => 'Blanda uppspelning', + 'tooltips.markAsWatched' => 'Markera som sedd', + 'tooltips.markAsUnwatched' => 'Markera som osedd', + 'videoControls.audioLabel' => 'Ljud', + 'videoControls.subtitlesLabel' => 'Undertexter', + 'videoControls.resetToZero' => 'Återställ till 0ms', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} spelas senare', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} spelas tidigare', + 'videoControls.noOffset' => 'Ingen offset', + 'videoControls.letterbox' => 'Letterbox', + 'videoControls.fillScreen' => 'Fyll skärm', + 'videoControls.stretch' => 'Sträck', + 'videoControls.lockRotation' => 'Lås rotation', + 'videoControls.unlockRotation' => 'Lås upp rotation', + 'videoControls.sleepTimer' => 'Sovtimer', + 'videoControls.timerActive' => 'Timer aktiv', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => 'Uppspelningen pausas om ${duration}', + 'videoControls.sleepTimerCompleted' => 'Sovtimer slutförd - uppspelning pausad', + 'videoControls.autoPlayNext' => 'Spela nästa automatiskt', + 'videoControls.playNext' => 'Spela nästa', + 'videoControls.playButton' => 'Spela', + 'videoControls.pauseButton' => 'Pausa', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder', + 'videoControls.seekForwardButton' => ({required Object seconds}) => 'Spola framåt ${seconds} sekunder', + 'videoControls.previousButton' => 'Föregående avsnitt', + 'videoControls.nextButton' => 'Nästa avsnitt', + 'videoControls.previousChapterButton' => 'Föregående kapitel', + 'videoControls.nextChapterButton' => 'Nästa kapitel', + 'videoControls.muteButton' => 'Tysta', + 'videoControls.unmuteButton' => 'Slå på ljud', + 'videoControls.settingsButton' => 'Videoinställningar', + 'videoControls.audioTrackButton' => 'Ljudspår', + 'videoControls.subtitlesButton' => 'Undertexter', + 'videoControls.chaptersButton' => 'Kapitel', + 'videoControls.versionsButton' => 'Videoversioner', + 'videoControls.pipButton' => 'Bild-i-bild läge', + 'videoControls.aspectRatioButton' => 'Bildförhållande', + 'videoControls.fullscreenButton' => 'Aktivera helskärm', + 'videoControls.exitFullscreenButton' => 'Avsluta helskärm', + 'videoControls.alwaysOnTopButton' => 'Alltid överst', + 'videoControls.rotationLockButton' => 'Rotationslås', + 'videoControls.timelineSlider' => 'Videotidslinje', + 'videoControls.volumeSlider' => 'Volymnivå', + 'videoControls.backButton' => 'Tillbaka', + 'userStatus.admin' => 'Admin', + 'userStatus.restricted' => 'Begränsad', + 'userStatus.protected' => 'Skyddad', + 'userStatus.current' => 'NUVARANDE', + 'messages.markedAsWatched' => 'Markerad som sedd', + 'messages.markedAsUnwatched' => 'Markerad som osedd', + 'messages.markedAsWatchedOffline' => 'Markerad som sedd (synkroniseras när online)', + 'messages.markedAsUnwatchedOffline' => 'Markerad som osedd (synkroniseras när online)', + 'messages.removedFromContinueWatching' => 'Borttagen från Fortsätt titta', + 'messages.errorLoading' => ({required Object error}) => 'Fel: ${error}', + 'messages.fileInfoNotAvailable' => 'Filinformation inte tillgänglig', + 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fel vid laddning av filinformation: ${error}', + 'messages.errorLoadingSeries' => 'Fel vid laddning av serie', + 'messages.errorLoadingSeason' => 'Fel vid laddning av säsong', + 'messages.musicNotSupported' => 'Musikuppspelning stöds inte ännu', + 'messages.logsCleared' => 'Loggar rensade', + 'messages.logsCopied' => 'Loggar kopierade till urklipp', + 'messages.noLogsAvailable' => 'Inga loggar tillgängliga', + 'messages.libraryScanning' => ({required Object title}) => 'Skannar "${title}"...', + 'messages.libraryScanStarted' => ({required Object title}) => 'Biblioteksskanning startad för "${title}"', + 'messages.libraryScanFailed' => ({required Object error}) => 'Misslyckades att skanna bibliotek: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => 'Uppdaterar metadata för "${title}"...', + 'messages.metadataRefreshStarted' => ({required Object title}) => 'Metadata-uppdatering startad för "${title}"', + 'messages.metadataRefreshFailed' => ({required Object error}) => 'Misslyckades att uppdatera metadata: ${error}', + 'messages.logoutConfirm' => 'Är du säker på att du vill logga ut?', + 'messages.noSeasonsFound' => 'Inga säsonger hittades', + 'messages.noEpisodesFound' => 'Inga avsnitt hittades i första säsongen', + 'messages.noEpisodesFoundGeneral' => 'Inga avsnitt hittades', + 'messages.noResultsFound' => 'Inga resultat hittades', + 'messages.sleepTimerSet' => ({required Object label}) => 'Sovtimer inställd för ${label}', + 'messages.noItemsAvailable' => 'Inga objekt tillgängliga', + 'messages.failedToCreatePlayQueue' => 'Det gick inte att skapa uppspelningskö', + 'messages.failedToCreatePlayQueueNoItems' => 'Det gick inte att skapa uppspelningskö – inga objekt', + 'messages.failedPlayback' => ({required Object action, required Object error}) => 'Kunde inte ${action}: ${error}', + 'subtitlingStyling.stylingOptions' => 'Stilalternativ', + 'subtitlingStyling.fontSize' => 'Teckenstorlek', + 'subtitlingStyling.textColor' => 'Textfärg', + 'subtitlingStyling.borderSize' => 'Kantstorlek', + 'subtitlingStyling.borderColor' => 'Kantfärg', + 'subtitlingStyling.backgroundOpacity' => 'Bakgrundsopacitet', + 'subtitlingStyling.backgroundColor' => 'Bakgrundsfärg', + 'mpvConfig.title' => 'MPV-konfiguration', + 'mpvConfig.description' => 'Avancerade videospelares inställningar', + 'mpvConfig.properties' => 'Egenskaper', + 'mpvConfig.presets' => 'Förval', + 'mpvConfig.noProperties' => 'Inga egenskaper konfigurerade', + 'mpvConfig.noPresets' => 'Inga sparade förval', + 'mpvConfig.addProperty' => 'Lägg till egenskap', + 'mpvConfig.editProperty' => 'Redigera egenskap', + 'mpvConfig.deleteProperty' => 'Ta bort egenskap', + 'mpvConfig.propertyKey' => 'Egenskapsnyckel', + 'mpvConfig.propertyKeyHint' => 't.ex. hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => 'Egenskapsvärde', + 'mpvConfig.propertyValueHint' => 't.ex. auto, 256000000', + 'mpvConfig.saveAsPreset' => 'Spara som förval...', + 'mpvConfig.presetName' => 'Förvalnamn', + 'mpvConfig.presetNameHint' => 'Ange ett namn för detta förval', + 'mpvConfig.loadPreset' => 'Ladda', + 'mpvConfig.deletePreset' => 'Ta bort', + 'mpvConfig.presetSaved' => 'Förval sparat', + 'mpvConfig.presetLoaded' => 'Förval laddat', + 'mpvConfig.presetDeleted' => 'Förval borttaget', + 'mpvConfig.confirmDeletePreset' => 'Är du säker på att du vill ta bort detta förval?', + 'mpvConfig.confirmDeleteProperty' => 'Är du säker på att du vill ta bort denna egenskap?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} poster', + 'dialog.confirmAction' => 'Bekräfta åtgärd', + 'dialog.cancel' => 'Avbryt', + 'dialog.playNow' => 'Spela nu', + 'discover.title' => 'Upptäck', + 'discover.switchProfile' => 'Byt profil', + 'discover.switchServer' => 'Byt server', + 'discover.logout' => 'Logga ut', + 'discover.noContentAvailable' => 'Inget innehåll tillgängligt', + 'discover.addMediaToLibraries' => 'Lägg till media till dina bibliotek', + 'discover.continueWatching' => 'Fortsätt titta', + 'discover.play' => 'Spela', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => 'Pausa', + 'discover.overview' => 'Översikt', + 'discover.cast' => 'Rollbesättning', + 'discover.seasons' => 'Säsonger', + 'discover.studio' => 'Studio', + 'discover.rating' => 'Åldersgräns', + 'discover.watched' => 'Tittad', + 'discover.episodeCount' => ({required Object count}) => '${count} avsnitt', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '${watched}/${total} sedda', + 'discover.movie' => 'Film', + 'discover.tvShow' => 'TV-serie', + 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min kvar', + 'errors.searchFailed' => ({required Object error}) => 'Sökning misslyckades: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => 'Anslutnings-timeout vid laddning ${context}', + 'errors.connectionFailed' => 'Kan inte ansluta till Plex-server', + 'errors.failedToLoad' => ({required Object context, required Object error}) => 'Misslyckades att ladda ${context}: ${error}', + 'errors.noClientAvailable' => 'Ingen klient tillgänglig', + 'errors.authenticationFailed' => ({required Object error}) => 'Autentisering misslyckades: ${error}', + 'errors.couldNotLaunchUrl' => 'Kunde inte öppna autentiserings-URL', + 'errors.pleaseEnterToken' => 'Vänligen ange en token', + 'errors.invalidToken' => 'Ogiltig token', + 'errors.failedToVerifyToken' => ({required Object error}) => 'Misslyckades att verifiera token: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => 'Misslyckades att byta till ${displayName}', + 'libraries.title' => 'Bibliotek', + 'libraries.scanLibraryFiles' => 'Skanna biblioteksfiler', + 'libraries.scanLibrary' => 'Skanna bibliotek', + 'libraries.analyze' => 'Analysera', + 'libraries.analyzeLibrary' => 'Analysera bibliotek', + 'libraries.refreshMetadata' => 'Uppdatera metadata', + 'libraries.emptyTrash' => 'Töm papperskorg', + 'libraries.emptyingTrash' => ({required Object title}) => 'Tömmer papperskorg för "${title}"...', + 'libraries.trashEmptied' => ({required Object title}) => 'Papperskorg tömd för "${title}"', + 'libraries.failedToEmptyTrash' => ({required Object error}) => 'Misslyckades att tömma papperskorg: ${error}', + 'libraries.analyzing' => ({required Object title}) => 'Analyserar "${title}"...', + 'libraries.analysisStarted' => ({required Object title}) => 'Analys startad för "${title}"', + 'libraries.failedToAnalyze' => ({required Object error}) => 'Misslyckades att analysera bibliotek: ${error}', + 'libraries.noLibrariesFound' => 'Inga bibliotek hittades', + 'libraries.thisLibraryIsEmpty' => 'Detta bibliotek är tomt', + 'libraries.all' => 'Alla', + 'libraries.clearAll' => 'Rensa alla', + 'libraries.scanLibraryConfirm' => ({required Object title}) => 'Är du säker på att du vill skanna "${title}"?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => 'Är du säker på att du vill analysera "${title}"?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Är du säker på att du vill uppdatera metadata för "${title}"?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => 'Är du säker på att du vill tömma papperskorgen för "${title}"?', + 'libraries.manageLibraries' => 'Hantera bibliotek', + 'libraries.sort' => 'Sortera', + 'libraries.sortBy' => 'Sortera efter', + 'libraries.filters' => 'Filter', + 'libraries.confirmActionMessage' => 'Är du säker på att du vill utföra denna åtgärd?', + 'libraries.showLibrary' => 'Visa bibliotek', + 'libraries.hideLibrary' => 'Dölj bibliotek', + 'libraries.libraryOptions' => 'Biblioteksalternativ', + 'libraries.content' => 'bibliotekets innehåll', + 'libraries.selectLibrary' => 'Välj bibliotek', + 'libraries.filtersWithCount' => ({required Object count}) => 'Filter (${count})', + 'libraries.noRecommendations' => 'Inga rekommendationer tillgängliga', + 'libraries.noCollections' => 'Inga samlingar i det här biblioteket', + 'libraries.noFoldersFound' => 'Inga mappar hittades', + 'libraries.folders' => 'mappar', + 'libraries.tabs.recommended' => 'Rekommenderat', + 'libraries.tabs.browse' => 'Bläddra', + 'libraries.tabs.collections' => 'Samlingar', + 'libraries.tabs.playlists' => 'Spellistor', + 'libraries.groupings.all' => 'Alla', + 'libraries.groupings.movies' => 'Filmer', + 'libraries.groupings.shows' => 'Serier', + 'libraries.groupings.seasons' => 'Säsonger', + 'libraries.groupings.episodes' => 'Avsnitt', + 'libraries.groupings.folders' => 'Mappar', + 'about.title' => 'Om', + 'about.openSourceLicenses' => 'Öppen källkod-licenser', + 'about.versionLabel' => ({required Object version}) => 'Version ${version}', + 'about.appDescription' => 'En vacker Plex-klient för Flutter', + 'about.viewLicensesDescription' => 'Visa licenser för tredjepartsbibliotek', + 'serverSelection.allServerConnectionsFailed' => 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.', + 'serverSelection.noServersFound' => 'Inga servrar hittades', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Misslyckades att ladda servrar: ${error}', + 'hubDetail.title' => 'Titel', + 'hubDetail.releaseYear' => 'Utgivningsår', + 'hubDetail.dateAdded' => 'Datum tillagd', + 'hubDetail.rating' => 'Betyg', + 'hubDetail.noItemsFound' => 'Inga objekt hittades', + 'logs.clearLogs' => 'Rensa loggar', + 'logs.copyLogs' => 'Kopiera loggar', + 'logs.error' => 'Fel:', + 'logs.stackTrace' => 'Stack trace:', + 'licenses.relatedPackages' => 'Relaterade paket', + 'licenses.license' => 'Licens', + 'licenses.licenseNumber' => ({required Object number}) => 'Licens ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} licenser', + 'navigation.home' => 'Hem', + 'navigation.search' => 'Sök', + 'navigation.libraries' => 'Bibliotek', + 'navigation.settings' => 'Inställningar', + 'navigation.downloads' => 'Nedladdningar', + 'downloads.title' => 'Nedladdningar', + 'downloads.manage' => 'Hantera', + 'downloads.tvShows' => 'TV-serier', + 'downloads.movies' => 'Filmer', + 'downloads.noDownloads' => 'Inga nedladdningar ännu', + 'downloads.noDownloadsDescription' => 'Nedladdat innehåll visas här för offline-visning', + 'downloads.downloadNow' => 'Ladda ner', + 'downloads.deleteDownload' => 'Ta bort nedladdning', + 'downloads.retryDownload' => 'Försök igen', + 'downloads.downloadQueued' => 'Nedladdning köad', + 'downloads.episodesQueued' => ({required Object count}) => '${count} avsnitt köade för nedladdning', + 'downloads.downloadDeleted' => 'Nedladdning borttagen', + 'downloads.deleteConfirm' => ({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Den nedladdade filen kommer att tas bort från din enhet.', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => 'Tar bort ${title}... (${current} av ${total})', + 'playlists.title' => 'Spellistor', + 'playlists.noPlaylists' => 'Inga spellistor hittades', + 'playlists.create' => 'Skapa spellista', + 'playlists.playlistName' => 'Spellistans namn', + 'playlists.enterPlaylistName' => 'Ange spellistans namn', + 'playlists.delete' => 'Ta bort spellista', + 'playlists.removeItem' => 'Ta bort från spellista', + 'playlists.smartPlaylist' => 'Smart spellista', + 'playlists.itemCount' => ({required Object count}) => '${count} objekt', + 'playlists.oneItem' => '1 objekt', + 'playlists.emptyPlaylist' => 'Denna spellista är tom', + 'playlists.deleteConfirm' => 'Ta bort spellista?', + 'playlists.deleteMessage' => ({required Object name}) => 'Är du säker på att du vill ta bort "${name}"?', + 'playlists.created' => 'Spellista skapad', + 'playlists.deleted' => 'Spellista borttagen', + 'playlists.itemAdded' => 'Tillagd i spellista', + 'playlists.itemRemoved' => 'Borttagen från spellista', + 'playlists.selectPlaylist' => 'Välj spellista', + 'playlists.createNewPlaylist' => 'Skapa ny spellista', + 'playlists.errorCreating' => 'Det gick inte att skapa spellista', + 'playlists.errorDeleting' => 'Det gick inte att ta bort spellista', + 'playlists.errorLoading' => 'Det gick inte att ladda spellistor', + 'playlists.errorAdding' => 'Det gick inte att lägga till i spellista', + 'playlists.errorReordering' => 'Det gick inte att omordna spellisteobjekt', + 'playlists.errorRemoving' => 'Det gick inte att ta bort från spellista', + 'playlists.playlist' => 'Spellista', + 'collections.title' => 'Samlingar', + 'collections.collection' => 'Samling', + 'collections.empty' => 'Samlingen är tom', + 'collections.unknownLibrarySection' => 'Kan inte ta bort: okänd bibliotekssektion', + 'collections.deleteCollection' => 'Ta bort samling', + 'collections.deleteConfirm' => ({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.', + 'collections.deleted' => 'Samling borttagen', + 'collections.deleteFailed' => 'Det gick inte att ta bort samlingen', + 'collections.deleteFailedWithError' => ({required Object error}) => 'Det gick inte att ta bort samlingen: ${error}', + 'collections.failedToLoadItems' => ({required Object error}) => 'Det gick inte att läsa in samlingsobjekt: ${error}', + 'collections.selectCollection' => 'Välj samling', + 'collections.createNewCollection' => 'Skapa ny samling', + 'collections.collectionName' => 'Samlingsnamn', + 'collections.enterCollectionName' => 'Ange samlingsnamn', + 'collections.addedToCollection' => 'Tillagd i samling', + 'collections.errorAddingToCollection' => 'Fel vid tillägg i samling', + 'collections.created' => 'Samling skapad', + 'collections.removeFromCollection' => 'Ta bort från samling', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => 'Ta bort "${title}" från denna samling?', + 'collections.removedFromCollection' => 'Borttagen från samling', + 'collections.removeFromCollectionFailed' => 'Misslyckades med att ta bort från samling', + 'collections.removeFromCollectionError' => ({required Object error}) => 'Fel vid borttagning från samling: ${error}', + 'watchTogether.title' => 'Titta Tillsammans', + 'watchTogether.description' => 'Titta på innehåll synkroniserat med vänner och familj', + 'watchTogether.createSession' => 'Skapa Session', + 'watchTogether.creating' => 'Skapar...', + 'watchTogether.joinSession' => 'Gå med i Session', + 'watchTogether.joining' => 'Ansluter...', + 'watchTogether.controlMode' => 'Kontrollläge', + 'watchTogether.controlModeQuestion' => 'Vem kan styra uppspelningen?', + 'watchTogether.hostOnly' => 'Endast Värd', + 'watchTogether.anyone' => 'Alla', + 'watchTogether.hostingSession' => 'Värd för Session', + 'watchTogether.inSession' => 'I Session', + 'watchTogether.sessionCode' => 'Sessionskod', + 'watchTogether.hostControlsPlayback' => 'Värden styr uppspelningen', + 'watchTogether.anyoneCanControl' => 'Alla kan styra uppspelningen', + 'watchTogether.hostControls' => 'Värd styr', + _ => null, + } ?? switch (path) { + 'watchTogether.anyoneControls' => 'Alla styr', + 'watchTogether.participants' => 'Deltagare', + 'watchTogether.host' => 'Värd', + 'watchTogether.hostBadge' => 'VÄRD', + 'watchTogether.youAreHost' => 'Du är värden', + 'watchTogether.watchingWithOthers' => 'Tittar med andra', + 'watchTogether.endSession' => 'Avsluta Session', + 'watchTogether.leaveSession' => 'Lämna Session', + 'watchTogether.endSessionQuestion' => 'Avsluta Session?', + 'watchTogether.leaveSessionQuestion' => 'Lämna Session?', + 'watchTogether.endSessionConfirm' => 'Detta avslutar sessionen för alla deltagare.', + 'watchTogether.leaveSessionConfirm' => 'Du kommer att tas bort från sessionen.', + 'watchTogether.endSessionConfirmOverlay' => 'Detta avslutar tittarsessionen för alla deltagare.', + 'watchTogether.leaveSessionConfirmOverlay' => 'Du kommer att kopplas bort från tittarsessionen.', + 'watchTogether.end' => 'Avsluta', + 'watchTogether.leave' => 'Lämna', + 'watchTogether.syncing' => 'Synkroniserar...', + 'watchTogether.participant' => 'deltagare', + 'watchTogether.joinWatchSession' => 'Gå med i Tittarsession', + 'watchTogether.enterCodeHint' => 'Ange 8-teckens kod', + 'watchTogether.pasteFromClipboard' => 'Klistra in från urklipp', + 'watchTogether.pleaseEnterCode' => 'Vänligen ange en sessionskod', + 'watchTogether.codeMustBe8Chars' => 'Sessionskod måste vara 8 tecken', + 'watchTogether.joinInstructions' => 'Ange sessionskoden som delats av värden för att gå med i deras tittarsession.', + 'watchTogether.failedToCreate' => 'Det gick inte att skapa session', + 'watchTogether.failedToJoin' => 'Det gick inte att gå med i session', + 'watchTogether.sessionCodeCopied' => 'Sessionskod kopierad till urklipp', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart new file mode 100644 index 00000000..b03d49a4 --- /dev/null +++ b/lib/i18n/strings_zh.g.dart @@ -0,0 +1,1483 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import +// dart format off + +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsZh with BaseTranslations implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsZh({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.zh, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsZh _root = this; // ignore: unused_field + + @override + TranslationsZh $copyWith({TranslationMetadata? meta}) => TranslationsZh(meta: meta ?? this.$meta); + + // Translations + @override late final _TranslationsAppZh app = _TranslationsAppZh._(_root); + @override late final _TranslationsAuthZh auth = _TranslationsAuthZh._(_root); + @override late final _TranslationsCommonZh common = _TranslationsCommonZh._(_root); + @override late final _TranslationsScreensZh screens = _TranslationsScreensZh._(_root); + @override late final _TranslationsUpdateZh update = _TranslationsUpdateZh._(_root); + @override late final _TranslationsSettingsZh settings = _TranslationsSettingsZh._(_root); + @override late final _TranslationsSearchZh search = _TranslationsSearchZh._(_root); + @override late final _TranslationsHotkeysZh hotkeys = _TranslationsHotkeysZh._(_root); + @override late final _TranslationsPinEntryZh pinEntry = _TranslationsPinEntryZh._(_root); + @override late final _TranslationsFileInfoZh fileInfo = _TranslationsFileInfoZh._(_root); + @override late final _TranslationsMediaMenuZh mediaMenu = _TranslationsMediaMenuZh._(_root); + @override late final _TranslationsAccessibilityZh accessibility = _TranslationsAccessibilityZh._(_root); + @override late final _TranslationsTooltipsZh tooltips = _TranslationsTooltipsZh._(_root); + @override late final _TranslationsVideoControlsZh videoControls = _TranslationsVideoControlsZh._(_root); + @override late final _TranslationsUserStatusZh userStatus = _TranslationsUserStatusZh._(_root); + @override late final _TranslationsMessagesZh messages = _TranslationsMessagesZh._(_root); + @override late final _TranslationsSubtitlingStylingZh subtitlingStyling = _TranslationsSubtitlingStylingZh._(_root); + @override late final _TranslationsMpvConfigZh mpvConfig = _TranslationsMpvConfigZh._(_root); + @override late final _TranslationsDialogZh dialog = _TranslationsDialogZh._(_root); + @override late final _TranslationsDiscoverZh discover = _TranslationsDiscoverZh._(_root); + @override late final _TranslationsErrorsZh errors = _TranslationsErrorsZh._(_root); + @override late final _TranslationsLibrariesZh libraries = _TranslationsLibrariesZh._(_root); + @override late final _TranslationsAboutZh about = _TranslationsAboutZh._(_root); + @override late final _TranslationsServerSelectionZh serverSelection = _TranslationsServerSelectionZh._(_root); + @override late final _TranslationsHubDetailZh hubDetail = _TranslationsHubDetailZh._(_root); + @override late final _TranslationsLogsZh logs = _TranslationsLogsZh._(_root); + @override late final _TranslationsLicensesZh licenses = _TranslationsLicensesZh._(_root); + @override late final _TranslationsNavigationZh navigation = _TranslationsNavigationZh._(_root); + @override late final _TranslationsDownloadsZh downloads = _TranslationsDownloadsZh._(_root); + @override late final _TranslationsPlaylistsZh playlists = _TranslationsPlaylistsZh._(_root); + @override late final _TranslationsCollectionsZh collections = _TranslationsCollectionsZh._(_root); + @override late final _TranslationsWatchTogetherZh watchTogether = _TranslationsWatchTogetherZh._(_root); +} + +// Path: app +class _TranslationsAppZh implements TranslationsAppEn { + _TranslationsAppZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get title => 'Plezy'; + @override String get loading => '加载中...'; +} + +// Path: auth +class _TranslationsAuthZh implements TranslationsAuthEn { + _TranslationsAuthZh._(this._root); + + final TranslationsZh _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请在你的浏览器中完成登录。'; +} + +// Path: common +class _TranslationsCommonZh implements TranslationsCommonEn { + _TranslationsCommonZh._(this._root); + + final TranslationsZh _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 logout => '登出'; + @override String get unknown => '未知'; + @override String get refresh => '刷新'; + @override String get yes => '是'; + @override String get no => '否'; + @override String get delete => '删除'; + @override String get shuffle => '随机播放'; + @override String get addTo => '添加到...'; +} + +// Path: screens +class _TranslationsScreensZh implements TranslationsScreensEn { + _TranslationsScreensZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get licenses => '许可证'; + @override String get selectServer => '选择服务器'; + @override String get switchProfile => '切换用户'; + @override String get subtitleStyling => '字幕样式'; + @override String get mpvConfig => 'MPV 配置'; + @override String get search => '搜索'; + @override String get logs => '日志'; +} + +// Path: update +class _TranslationsUpdateZh implements TranslationsUpdateEn { + _TranslationsUpdateZh._(this._root); + + final TranslationsZh _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 => '无法检查更新'; +} + +// Path: settings +class _TranslationsSettingsZh implements TranslationsSettingsEn { + _TranslationsSettingsZh._(this._root); + + final TranslationsZh _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 advanced => '高级'; + @override String get episodePosterMode => '剧集海报样式'; + @override String get seriesPoster => '剧集海报'; + @override String get seriesPosterDescription => '为所有剧集显示剧集海报'; + @override String get seasonPoster => '季海报'; + @override String get seasonPosterDescription => '为剧集显示特定季的海报'; + @override String get episodeThumbnail => '剧集缩略图'; + @override String get episodeThumbnailDescription => '显示16:9剧集截图缩略图'; + @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 showHeroSection => '显示主要精选区'; + @override String get useGlobalHubs => '使用 Plex 主页布局'; + @override String get useGlobalHubsDescription => '显示与官方 Plex 客户端相同的主页推荐。关闭时将显示按媒体库分类的推荐。'; + @override String get showServerNameOnHubs => '在推荐栏显示服务器名称'; + @override String get showServerNameOnHubsDescription => '始终在推荐栏标题中显示服务器名称。关闭时仅在推荐栏名称重复时显示。'; + @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 videoPlayerControls => '视频播放器控制'; + @override String get keyboardShortcuts => '键盘快捷键'; + @override String get keyboardShortcutsDescription => '自定义键盘快捷键'; + @override String get videoPlayerNavigation => '视频播放器导航'; + @override String get videoPlayerNavigationDescription => '使用方向键导航视频播放器控件'; + @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} 秒'; + @override String get downloads => '下载'; + @override String get downloadLocationDescription => '选择下载内容的存储位置'; + @override String get downloadLocationDefault => '默认(应用存储)'; + @override String get downloadLocationCustom => '自定义位置'; + @override String get selectFolder => '选择文件夹'; + @override String get resetToDefault => '重置为默认'; + @override String currentPath({required Object path}) => '当前: ${path}'; + @override String get downloadLocationChanged => '下载位置已更改'; + @override String get downloadLocationReset => '下载位置已重置为默认'; + @override String get downloadLocationInvalid => '所选文件夹不可写入'; + @override String get downloadLocationSelectError => '选择文件夹失败'; + @override String get downloadOnWifiOnly => '仅在 WiFi 时下载'; + @override String get downloadOnWifiOnlyDescription => '使用蜂窝数据时禁止下载'; + @override String get cellularDownloadBlocked => '蜂窝数据下已禁用下载。请连接 WiFi 或更改设置。'; + @override String get maxVolume => '最大音量'; + @override String get maxVolumeDescription => '允许音量超过 100% 以适应安静的媒体'; + @override String maxVolumePercent({required Object percent}) => '${percent}%'; + @override String get maxVolumeHint => '输入最大音量 (100-300)'; + @override String get discordRichPresence => 'Discord 动态状态'; + @override String get discordRichPresenceDescription => '在 Discord 上显示您正在观看的内容'; + @override String get matchContentFrameRate => '匹配内容帧率'; + @override String get matchContentFrameRateDescription => '调整显示刷新率以匹配视频内容,减少画面抖动并节省电量'; +} + +// Path: search +class _TranslationsSearchZh implements TranslationsSearchEn { + _TranslationsSearchZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get hint => '搜索电影、系列、音乐...'; + @override String get tryDifferentTerm => '尝试不同的搜索词'; + @override String get searchYourMedia => '搜索媒体'; + @override String get enterTitleActorOrKeyword => '输入标题、演员或关键词'; +} + +// Path: hotkeys +class _TranslationsHotkeysZh implements TranslationsHotkeysEn { + _TranslationsHotkeysZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String setShortcutFor({required Object actionName}) => '为 ${actionName} 设置快捷键'; + @override String get clearShortcut => '清除快捷键'; + @override late final _TranslationsHotkeysActionsZh actions = _TranslationsHotkeysActionsZh._(_root); +} + +// Path: pinEntry +class _TranslationsPinEntryZh implements TranslationsPinEntryEn { + _TranslationsPinEntryZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get enterPin => '输入 PIN'; + @override String get showPin => '显示 PIN'; + @override String get hidePin => '隐藏 PIN'; +} + +// Path: fileInfo +class _TranslationsFileInfoZh implements TranslationsFileInfoEn { + _TranslationsFileInfoZh._(this._root); + + final TranslationsZh _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位偏移量'; +} + +// Path: mediaMenu +class _TranslationsMediaMenuZh implements TranslationsMediaMenuEn { + _TranslationsMediaMenuZh._(this._root); + + final TranslationsZh _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 => '文件信息'; +} + +// Path: accessibility +class _TranslationsAccessibilityZh implements TranslationsAccessibilityEn { + _TranslationsAccessibilityZh._(this._root); + + final TranslationsZh _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 => '点击播放'; +} + +// Path: tooltips +class _TranslationsTooltipsZh implements TranslationsTooltipsEn { + _TranslationsTooltipsZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get shufflePlay => '随机播放'; + @override String get markAsWatched => '标记为已观看'; + @override String get markAsUnwatched => '标记为未观看'; +} + +// Path: videoControls +class _TranslationsVideoControlsZh implements TranslationsVideoControlsEn { + _TranslationsVideoControlsZh._(this._root); + + final TranslationsZh _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 autoPlayNext => '自动播放下一集'; + @override String get playNext => '播放下一集'; + @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 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 pipButton => '画中画模式'; + @override String get aspectRatioButton => '宽高比'; + @override String get fullscreenButton => '进入全屏'; + @override String get exitFullscreenButton => '退出全屏'; + @override String get alwaysOnTopButton => '置顶窗口'; + @override String get rotationLockButton => '旋转锁定'; + @override String get timelineSlider => '视频时间轴'; + @override String get volumeSlider => '音量调节'; + @override String get backButton => '返回'; +} + +// Path: userStatus +class _TranslationsUserStatusZh implements TranslationsUserStatusEn { + _TranslationsUserStatusZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get admin => '管理员'; + @override String get restricted => '受限'; + @override String get protected => '受保护'; + @override String get current => '当前'; +} + +// Path: messages +class _TranslationsMessagesZh implements TranslationsMessagesEn { + _TranslationsMessagesZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get markedAsWatched => '已标记为已观看'; + @override String get markedAsUnwatched => '已标记为未观看'; + @override String get markedAsWatchedOffline => '已标记为已观看 (将在联网时同步)'; + @override String get markedAsUnwatchedOffline => '已标记为未观看 (将在联网时同步)'; + @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 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 get noItemsAvailable => '没有可用的项目'; + @override String get failedToCreatePlayQueue => '创建播放队列失败'; + @override String get failedToCreatePlayQueueNoItems => '创建播放队列失败 - 没有项目'; + @override String failedPlayback({required Object action, required Object error}) => '无法${action}: ${error}'; +} + +// Path: subtitlingStyling +class _TranslationsSubtitlingStylingZh implements TranslationsSubtitlingStylingEn { + _TranslationsSubtitlingStylingZh._(this._root); + + final TranslationsZh _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 => '背景颜色'; +} + +// Path: mpvConfig +class _TranslationsMpvConfigZh implements TranslationsMpvConfigEn { + _TranslationsMpvConfigZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get title => 'MPV 配置'; + @override String get description => '高级视频播放器设置'; + @override String get properties => '属性'; + @override String get presets => '预设'; + @override String get noProperties => '未配置任何属性'; + @override String get noPresets => '没有保存的预设'; + @override String get addProperty => '添加属性'; + @override String get editProperty => '编辑属性'; + @override String get deleteProperty => '删除属性'; + @override String get propertyKey => '属性键'; + @override String get propertyKeyHint => '例如 hwdec, demuxer-max-bytes'; + @override String get propertyValue => '属性值'; + @override String get propertyValueHint => '例如 auto, 256000000'; + @override String get saveAsPreset => '保存为预设...'; + @override String get presetName => '预设名称'; + @override String get presetNameHint => '输入此预设的名称'; + @override String get loadPreset => '加载'; + @override String get deletePreset => '删除'; + @override String get presetSaved => '预设已保存'; + @override String get presetLoaded => '预设已加载'; + @override String get presetDeleted => '预设已删除'; + @override String get confirmDeletePreset => '确定要删除此预设吗?'; + @override String get confirmDeleteProperty => '确定要删除此属性吗?'; + @override String entriesCount({required Object count}) => '${count} 条目'; +} + +// Path: dialog +class _TranslationsDialogZh implements TranslationsDialogEn { + _TranslationsDialogZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get confirmAction => '确认操作'; + @override String get cancel => '取消'; + @override String get playNow => '立即播放'; +} + +// Path: discover +class _TranslationsDiscoverZh implements TranslationsDiscoverEn { + _TranslationsDiscoverZh._(this._root); + + final TranslationsZh _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 play => '播放'; + @override String playEpisode({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 _TranslationsErrorsZh implements TranslationsErrorsEn { + _TranslationsErrorsZh._(this._root); + + final TranslationsZh _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}'; +} + +// Path: libraries +class _TranslationsLibrariesZh implements TranslationsLibrariesEn { + _TranslationsLibrariesZh._(this._root); + + final TranslationsZh _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 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 _TranslationsLibrariesTabsZh tabs = _TranslationsLibrariesTabsZh._(_root); + @override late final _TranslationsLibrariesGroupingsZh groupings = _TranslationsLibrariesGroupingsZh._(_root); +} + +// Path: about +class _TranslationsAboutZh implements TranslationsAboutEn { + _TranslationsAboutZh._(this._root); + + final TranslationsZh _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 => '查看第三方库的许可证'; +} + +// Path: serverSelection +class _TranslationsServerSelectionZh implements TranslationsServerSelectionEn { + _TranslationsServerSelectionZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get allServerConnectionsFailed => '无法连接到任何服务器。请检查你的网络并重试。'; + @override String get noServersFound => '未找到服务器'; + @override String noServersFoundForAccount({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器'; + @override String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; +} + +// Path: hubDetail +class _TranslationsHubDetailZh implements TranslationsHubDetailEn { + _TranslationsHubDetailZh._(this._root); + + final TranslationsZh _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 => '未找到项目'; +} + +// Path: logs +class _TranslationsLogsZh implements TranslationsLogsEn { + _TranslationsLogsZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get clearLogs => '清除日志'; + @override String get copyLogs => '复制日志'; + @override String get error => '错误:'; + @override String get stackTrace => '堆栈跟踪 (Stack Trace):'; +} + +// Path: licenses +class _TranslationsLicensesZh implements TranslationsLicensesEn { + _TranslationsLicensesZh._(this._root); + + final TranslationsZh _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} 个许可证'; +} + +// Path: navigation +class _TranslationsNavigationZh implements TranslationsNavigationEn { + _TranslationsNavigationZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get home => '主页'; + @override String get search => '搜索'; + @override String get libraries => '媒体库'; + @override String get settings => '设置'; + @override String get downloads => '下载'; +} + +// Path: downloads +class _TranslationsDownloadsZh implements TranslationsDownloadsEn { + _TranslationsDownloadsZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get title => '下载'; + @override String get manage => '管理'; + @override String get tvShows => '电视剧'; + @override String get movies => '电影'; + @override String get noDownloads => '暂无下载'; + @override String get noDownloadsDescription => '下载的内容将在此处显示以供离线观看'; + @override String get downloadNow => '下载'; + @override String get deleteDownload => '删除下载'; + @override String get retryDownload => '重试下载'; + @override String get downloadQueued => '下载已排队'; + @override String episodesQueued({required Object count}) => '${count} 集已加入下载队列'; + @override String get downloadDeleted => '下载已删除'; + @override String deleteConfirm({required Object title}) => '确定要删除 "${title}" 吗?下载的文件将从您的设备中删除。'; + @override String deletingWithProgress({required Object title, required Object current, required Object total}) => '正在删除 ${title}... (${current}/${total})'; +} + +// Path: playlists +class _TranslationsPlaylistsZh implements TranslationsPlaylistsEn { + _TranslationsPlaylistsZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get title => '播放列表'; + @override String get noPlaylists => '未找到播放列表'; + @override String get create => '创建播放列表'; + @override String get playlistName => '播放列表名称'; + @override String get enterPlaylistName => '输入播放列表名称'; + @override String get delete => '删除播放列表'; + @override String get removeItem => '从播放列表中移除'; + @override String get smartPlaylist => '智能播放列表'; + @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 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 _TranslationsCollectionsZh implements TranslationsCollectionsEn { + _TranslationsCollectionsZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get title => '合集'; + @override String get collection => '合集'; + @override String get empty => '合集为空'; + @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 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: watchTogether +class _TranslationsWatchTogetherZh implements TranslationsWatchTogetherEn { + _TranslationsWatchTogetherZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get title => '一起看'; + @override String get description => '与朋友和家人同步观看内容'; + @override String get createSession => '创建会话'; + @override String get creating => '创建中...'; + @override String get joinSession => '加入会话'; + @override String get joining => '加入中...'; + @override String get controlMode => '控制模式'; + @override String get controlModeQuestion => '谁可以控制播放?'; + @override String get hostOnly => '仅主持人'; + @override String get anyone => '任何人'; + @override String get hostingSession => '主持会话'; + @override String get inSession => '在会话中'; + @override String get sessionCode => '会话代码'; + @override String get hostControlsPlayback => '主持人控制播放'; + @override String get anyoneCanControl => '任何人都可以控制播放'; + @override String get hostControls => '主持人控制'; + @override String get anyoneControls => '任何人控制'; + @override String get participants => '参与者'; + @override String get host => '主持人'; + @override String get hostBadge => '主持人'; + @override String get youAreHost => '你是主持人'; + @override String get watchingWithOthers => '与他人一起观看'; + @override String get endSession => '结束会话'; + @override String get leaveSession => '离开会话'; + @override String get endSessionQuestion => '结束会话?'; + @override String get leaveSessionQuestion => '离开会话?'; + @override String get endSessionConfirm => '这将为所有参与者结束会话。'; + @override String get leaveSessionConfirm => '你将被移出会话。'; + @override String get endSessionConfirmOverlay => '这将为所有参与者结束观看会话。'; + @override String get leaveSessionConfirmOverlay => '你将断开与观看会话的连接。'; + @override String get end => '结束'; + @override String get leave => '离开'; + @override String get syncing => '同步中...'; + @override String get participant => '参与者'; + @override String get joinWatchSession => '加入观看会话'; + @override String get enterCodeHint => '输入8位代码'; + @override String get pasteFromClipboard => '从剪贴板粘贴'; + @override String get pleaseEnterCode => '请输入会话代码'; + @override String get codeMustBe8Chars => '会话代码必须是8个字符'; + @override String get joinInstructions => '输入主持人分享的会话代码以加入他们的观看会话。'; + @override String get failedToCreate => '创建会话失败'; + @override String get failedToJoin => '加入会话失败'; + @override String get sessionCodeCopied => '会话代码已复制到剪贴板'; +} + +// Path: hotkeys.actions +class _TranslationsHotkeysActionsZh implements TranslationsHotkeysActionsEn { + _TranslationsHotkeysActionsZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get playPause => '播放/暂停'; + @override String get volumeUp => '增大音量'; + @override String get volumeDown => '减小音量'; + @override String seekForward({required Object seconds}) => '快进 (${seconds}秒)'; + @override String seekBackward({required Object seconds}) => '快退 (${seconds}秒)'; + @override String get fullscreenToggle => '切换全屏'; + @override String get muteToggle => '切换静音'; + @override String get subtitleToggle => '切换字幕'; + @override String get audioTrackNext => '下一音轨'; + @override String get subtitleTrackNext => '下一字幕轨'; + @override String get chapterNext => '下一章节'; + @override String get chapterPrevious => '上一章节'; + @override String get speedIncrease => '加速'; + @override String get speedDecrease => '减速'; + @override String get speedReset => '重置速度'; + @override String get subSeekNext => '跳转到下一字幕'; + @override String get subSeekPrev => '跳转到上一字幕'; +} + +// Path: libraries.tabs +class _TranslationsLibrariesTabsZh implements TranslationsLibrariesTabsEn { + _TranslationsLibrariesTabsZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get recommended => '推荐'; + @override String get browse => '浏览'; + @override String get collections => '合集'; + @override String get playlists => '播放列表'; +} + +// Path: libraries.groupings +class _TranslationsLibrariesGroupingsZh implements TranslationsLibrariesGroupingsEn { + _TranslationsLibrariesGroupingsZh._(this._root); + + final TranslationsZh _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 => '文件夹'; +} + +/// The flat map containing all translations for locale . +/// Only for edge cases! For simple maps, use the map function of this library. +/// +/// The Dart AOT compiler has issues with very large switch statements, +/// so the map is split into smaller functions (512 entries each). +extension on TranslationsZh { + dynamic _flatMapFunction(String path) { + return switch (path) { + 'app.title' => 'Plezy', + 'app.loading' => '加载中...', + 'auth.signInWithPlex' => '使用 Plex 登录', + 'auth.showQRCode' => '显示二维码', + 'auth.cancel' => '取消', + 'auth.authenticate' => '验证', + 'auth.retry' => '重试', + 'auth.debugEnterToken' => '调试:输入 Plex Token', + 'auth.plexTokenLabel' => 'Plex 授权令牌 (Auth Token)', + 'auth.plexTokenHint' => '输入你的 Plex.tv 令牌', + 'auth.authenticationTimeout' => '验证超时。请重试。', + 'auth.scanQRCodeInstruction' => '请使用已登录 Plex 的设备扫描此二维码进行验证。', + 'auth.waitingForAuth' => '等待验证中...\n请在你的浏览器中完成登录。', + 'common.cancel' => '取消', + 'common.save' => '保存', + 'common.close' => '关闭', + 'common.clear' => '清除', + 'common.reset' => '重置', + 'common.later' => '稍后', + 'common.submit' => '提交', + 'common.confirm' => '确认', + 'common.retry' => '重试', + 'common.logout' => '登出', + 'common.unknown' => '未知', + 'common.refresh' => '刷新', + 'common.yes' => '是', + 'common.no' => '否', + 'common.delete' => '删除', + 'common.shuffle' => '随机播放', + 'common.addTo' => '添加到...', + 'screens.licenses' => '许可证', + 'screens.selectServer' => '选择服务器', + 'screens.switchProfile' => '切换用户', + 'screens.subtitleStyling' => '字幕样式', + 'screens.mpvConfig' => 'MPV 配置', + 'screens.search' => '搜索', + 'screens.logs' => '日志', + 'update.available' => '有可用更新', + 'update.versionAvailable' => ({required Object version}) => '版本 ${version} 已发布', + 'update.currentVersion' => ({required Object version}) => '当前版本: ${version}', + 'update.skipVersion' => '跳过此版本', + 'update.viewRelease' => '查看发布详情', + 'update.latestVersion' => '已安装的版本是可用的最新版本', + 'update.checkFailed' => '无法检查更新', + 'settings.title' => '设置', + 'settings.language' => '语言', + 'settings.theme' => '主题', + 'settings.appearance' => '外观', + 'settings.videoPlayback' => '视频播放', + 'settings.advanced' => '高级', + 'settings.episodePosterMode' => '剧集海报样式', + 'settings.seriesPoster' => '剧集海报', + 'settings.seriesPosterDescription' => '为所有剧集显示剧集海报', + 'settings.seasonPoster' => '季海报', + 'settings.seasonPosterDescription' => '为剧集显示特定季的海报', + 'settings.episodeThumbnail' => '剧集缩略图', + 'settings.episodeThumbnailDescription' => '显示16:9剧集截图缩略图', + 'settings.showHeroSectionDescription' => '在主屏幕上显示精选内容轮播区', + 'settings.secondsLabel' => '秒', + 'settings.minutesLabel' => '分钟', + 'settings.secondsShort' => 's', + 'settings.minutesShort' => 'm', + 'settings.durationHint' => ({required Object min, required Object max}) => '输入时长 (${min}-${max})', + 'settings.systemTheme' => '系统', + 'settings.systemThemeDescription' => '跟随系统设置', + 'settings.lightTheme' => '浅色', + 'settings.darkTheme' => '深色', + 'settings.libraryDensity' => '媒体库密度', + 'settings.compact' => '紧凑', + 'settings.compactDescription' => '卡片更小,显示更多项目', + 'settings.normal' => '标准', + 'settings.normalDescription' => '默认尺寸', + 'settings.comfortable' => '舒适', + 'settings.comfortableDescription' => '卡片更大,显示更少项目', + 'settings.viewMode' => '视图模式', + 'settings.gridView' => '网格视图', + 'settings.gridViewDescription' => '以网格布局显示项目', + 'settings.listView' => '列表视图', + 'settings.listViewDescription' => '以列表布局显示项目', + 'settings.showHeroSection' => '显示主要精选区', + 'settings.useGlobalHubs' => '使用 Plex 主页布局', + 'settings.useGlobalHubsDescription' => '显示与官方 Plex 客户端相同的主页推荐。关闭时将显示按媒体库分类的推荐。', + 'settings.showServerNameOnHubs' => '在推荐栏显示服务器名称', + 'settings.showServerNameOnHubsDescription' => '始终在推荐栏标题中显示服务器名称。关闭时仅在推荐栏名称重复时显示。', + 'settings.hardwareDecoding' => '硬件解码', + 'settings.hardwareDecodingDescription' => '如果可用,使用硬件加速', + 'settings.bufferSize' => '缓冲区大小', + 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', + 'settings.subtitleStyling' => '字幕样式', + 'settings.subtitleStylingDescription' => '调整字幕外观', + 'settings.smallSkipDuration' => '短跳过时长', + 'settings.largeSkipDuration' => '长跳过时长', + 'settings.secondsUnit' => ({required Object seconds}) => '${seconds} 秒', + 'settings.defaultSleepTimer' => '默认睡眠定时器', + 'settings.minutesUnit' => ({required Object minutes}) => '${minutes} 分钟', + 'settings.rememberTrackSelections' => '记住每个剧集/电影的音轨选择', + 'settings.rememberTrackSelectionsDescription' => '在播放过程中更改音轨时自动保存音频和字幕语言偏好', + 'settings.videoPlayerControls' => '视频播放器控制', + 'settings.keyboardShortcuts' => '键盘快捷键', + 'settings.keyboardShortcutsDescription' => '自定义键盘快捷键', + 'settings.videoPlayerNavigation' => '视频播放器导航', + 'settings.videoPlayerNavigationDescription' => '使用方向键导航视频播放器控件', + 'settings.debugLogging' => '调试日志', + 'settings.debugLoggingDescription' => '启用详细日志记录以便故障排除', + 'settings.viewLogs' => '查看日志', + 'settings.viewLogsDescription' => '查看应用程序日志', + 'settings.clearCache' => '清除缓存', + 'settings.clearCacheDescription' => '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。', + 'settings.clearCacheSuccess' => '缓存清除成功', + 'settings.resetSettings' => '重置设置', + 'settings.resetSettingsDescription' => '这会将所有设置重置为其默认值。此操作无法撤销。', + 'settings.resetSettingsSuccess' => '设置重置成功', + 'settings.shortcutsReset' => '快捷键已重置为默认值', + 'settings.about' => '关于', + 'settings.aboutDescription' => '应用程序信息和许可证', + 'settings.updates' => '更新', + 'settings.updateAvailable' => '有可用更新', + 'settings.checkForUpdates' => '检查更新', + 'settings.validationErrorEnterNumber' => '请输入一个有效的数字', + 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => '时长必须介于 ${min} 和 ${max} ${unit} 之间', + 'settings.shortcutAlreadyAssigned' => ({required Object action}) => '快捷键已被分配给 ${action}', + 'settings.shortcutUpdated' => ({required Object action}) => '快捷键已为 ${action} 更新', + 'settings.autoSkip' => '自动跳过', + 'settings.autoSkipIntro' => '自动跳过片头', + 'settings.autoSkipIntroDescription' => '几秒钟后自动跳过片头标记', + 'settings.autoSkipCredits' => '自动跳过片尾', + 'settings.autoSkipCreditsDescription' => '自动跳过片尾并播放下一集', + 'settings.autoSkipDelay' => '自动跳过延迟', + 'settings.autoSkipDelayDescription' => ({required Object seconds}) => '自动跳过前等待 ${seconds} 秒', + 'settings.downloads' => '下载', + 'settings.downloadLocationDescription' => '选择下载内容的存储位置', + 'settings.downloadLocationDefault' => '默认(应用存储)', + 'settings.downloadLocationCustom' => '自定义位置', + 'settings.selectFolder' => '选择文件夹', + 'settings.resetToDefault' => '重置为默认', + 'settings.currentPath' => ({required Object path}) => '当前: ${path}', + 'settings.downloadLocationChanged' => '下载位置已更改', + 'settings.downloadLocationReset' => '下载位置已重置为默认', + 'settings.downloadLocationInvalid' => '所选文件夹不可写入', + 'settings.downloadLocationSelectError' => '选择文件夹失败', + 'settings.downloadOnWifiOnly' => '仅在 WiFi 时下载', + 'settings.downloadOnWifiOnlyDescription' => '使用蜂窝数据时禁止下载', + 'settings.cellularDownloadBlocked' => '蜂窝数据下已禁用下载。请连接 WiFi 或更改设置。', + 'settings.maxVolume' => '最大音量', + 'settings.maxVolumeDescription' => '允许音量超过 100% 以适应安静的媒体', + 'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%', + 'settings.maxVolumeHint' => '输入最大音量 (100-300)', + 'settings.discordRichPresence' => 'Discord 动态状态', + 'settings.discordRichPresenceDescription' => '在 Discord 上显示您正在观看的内容', + 'settings.matchContentFrameRate' => '匹配内容帧率', + 'settings.matchContentFrameRateDescription' => '调整显示刷新率以匹配视频内容,减少画面抖动并节省电量', + 'search.hint' => '搜索电影、系列、音乐...', + 'search.tryDifferentTerm' => '尝试不同的搜索词', + 'search.searchYourMedia' => '搜索媒体', + 'search.enterTitleActorOrKeyword' => '输入标题、演员或关键词', + 'hotkeys.setShortcutFor' => ({required Object actionName}) => '为 ${actionName} 设置快捷键', + 'hotkeys.clearShortcut' => '清除快捷键', + 'hotkeys.actions.playPause' => '播放/暂停', + 'hotkeys.actions.volumeUp' => '增大音量', + 'hotkeys.actions.volumeDown' => '减小音量', + 'hotkeys.actions.seekForward' => ({required Object seconds}) => '快进 (${seconds}秒)', + 'hotkeys.actions.seekBackward' => ({required Object seconds}) => '快退 (${seconds}秒)', + 'hotkeys.actions.fullscreenToggle' => '切换全屏', + 'hotkeys.actions.muteToggle' => '切换静音', + 'hotkeys.actions.subtitleToggle' => '切换字幕', + 'hotkeys.actions.audioTrackNext' => '下一音轨', + 'hotkeys.actions.subtitleTrackNext' => '下一字幕轨', + 'hotkeys.actions.chapterNext' => '下一章节', + 'hotkeys.actions.chapterPrevious' => '上一章节', + 'hotkeys.actions.speedIncrease' => '加速', + 'hotkeys.actions.speedDecrease' => '减速', + 'hotkeys.actions.speedReset' => '重置速度', + 'hotkeys.actions.subSeekNext' => '跳转到下一字幕', + 'hotkeys.actions.subSeekPrev' => '跳转到上一字幕', + 'pinEntry.enterPin' => '输入 PIN', + 'pinEntry.showPin' => '显示 PIN', + 'pinEntry.hidePin' => '隐藏 PIN', + 'fileInfo.title' => '文件信息', + 'fileInfo.video' => '视频', + 'fileInfo.audio' => '音频', + 'fileInfo.file' => '文件', + 'fileInfo.advanced' => '高级', + 'fileInfo.codec' => '编解码器', + 'fileInfo.resolution' => '分辨率', + 'fileInfo.bitrate' => '比特率', + 'fileInfo.frameRate' => '帧率', + 'fileInfo.aspectRatio' => '宽高比', + 'fileInfo.profile' => '配置文件', + 'fileInfo.bitDepth' => '位深度', + 'fileInfo.colorSpace' => '色彩空间', + 'fileInfo.colorRange' => '色彩范围', + 'fileInfo.colorPrimaries' => '颜色原色', + 'fileInfo.chromaSubsampling' => '色度子采样', + 'fileInfo.channels' => '声道', + 'fileInfo.path' => '路径', + 'fileInfo.size' => '大小', + 'fileInfo.container' => '容器', + 'fileInfo.duration' => '时长', + 'fileInfo.optimizedForStreaming' => '已优化用于流媒体', + 'fileInfo.has64bitOffsets' => '64位偏移量', + 'mediaMenu.markAsWatched' => '标记为已观看', + 'mediaMenu.markAsUnwatched' => '标记为未观看', + 'mediaMenu.removeFromContinueWatching' => '从继续观看中移除', + 'mediaMenu.goToSeries' => '转到系列', + 'mediaMenu.goToSeason' => '转到季', + 'mediaMenu.shufflePlay' => '随机播放', + 'mediaMenu.fileInfo' => '文件信息', + 'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, 电影', + 'accessibility.mediaCardShow' => ({required Object title}) => '${title}, 电视剧', + 'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}', + 'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}', + 'accessibility.mediaCardWatched' => '已观看', + 'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '已观看 ${percent} 百分比', + 'accessibility.mediaCardUnwatched' => '未观看', + 'accessibility.tapToPlay' => '点击播放', + 'tooltips.shufflePlay' => '随机播放', + 'tooltips.markAsWatched' => '标记为已观看', + 'tooltips.markAsUnwatched' => '标记为未观看', + 'videoControls.audioLabel' => '音频', + 'videoControls.subtitlesLabel' => '字幕', + 'videoControls.resetToZero' => '重置为 0ms', + 'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}', + 'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}', + 'videoControls.playsLater' => ({required Object label}) => '${label} 播放较晚', + 'videoControls.playsEarlier' => ({required Object label}) => '${label} 播放较早', + 'videoControls.noOffset' => '无偏移', + 'videoControls.letterbox' => '信箱模式(Letterbox)', + 'videoControls.fillScreen' => '填充屏幕', + 'videoControls.stretch' => '拉伸', + 'videoControls.lockRotation' => '锁定旋转', + 'videoControls.unlockRotation' => '解锁旋转', + 'videoControls.sleepTimer' => '睡眠定时器', + 'videoControls.timerActive' => '定时器已激活', + 'videoControls.playbackWillPauseIn' => ({required Object duration}) => '播放将在 ${duration} 后暂停', + 'videoControls.sleepTimerCompleted' => '睡眠定时器已完成 - 播放已暂停', + 'videoControls.autoPlayNext' => '自动播放下一集', + 'videoControls.playNext' => '播放下一集', + 'videoControls.playButton' => '播放', + 'videoControls.pauseButton' => '暂停', + 'videoControls.seekBackwardButton' => ({required Object seconds}) => '后退 ${seconds} 秒', + 'videoControls.seekForwardButton' => ({required Object seconds}) => '前进 ${seconds} 秒', + 'videoControls.previousButton' => '上一集', + 'videoControls.nextButton' => '下一集', + 'videoControls.previousChapterButton' => '上一章节', + 'videoControls.nextChapterButton' => '下一章节', + 'videoControls.muteButton' => '静音', + 'videoControls.unmuteButton' => '取消静音', + 'videoControls.settingsButton' => '视频设置', + 'videoControls.audioTrackButton' => '音轨', + 'videoControls.subtitlesButton' => '字幕', + 'videoControls.chaptersButton' => '章节', + 'videoControls.versionsButton' => '视频版本', + 'videoControls.pipButton' => '画中画模式', + 'videoControls.aspectRatioButton' => '宽高比', + 'videoControls.fullscreenButton' => '进入全屏', + 'videoControls.exitFullscreenButton' => '退出全屏', + 'videoControls.alwaysOnTopButton' => '置顶窗口', + 'videoControls.rotationLockButton' => '旋转锁定', + 'videoControls.timelineSlider' => '视频时间轴', + 'videoControls.volumeSlider' => '音量调节', + 'videoControls.backButton' => '返回', + 'userStatus.admin' => '管理员', + 'userStatus.restricted' => '受限', + 'userStatus.protected' => '受保护', + 'userStatus.current' => '当前', + 'messages.markedAsWatched' => '已标记为已观看', + 'messages.markedAsUnwatched' => '已标记为未观看', + 'messages.markedAsWatchedOffline' => '已标记为已观看 (将在联网时同步)', + 'messages.markedAsUnwatchedOffline' => '已标记为未观看 (将在联网时同步)', + 'messages.removedFromContinueWatching' => '已从继续观看中移除', + 'messages.errorLoading' => ({required Object error}) => '错误: ${error}', + 'messages.fileInfoNotAvailable' => '文件信息不可用', + 'messages.errorLoadingFileInfo' => ({required Object error}) => '加载文件信息时出错: ${error}', + 'messages.errorLoadingSeries' => '加载系列时出错', + 'messages.errorLoadingSeason' => '加载季时出错', + 'messages.musicNotSupported' => '尚不支持播放音乐', + 'messages.logsCleared' => '日志已清除', + 'messages.logsCopied' => '日志已复制到剪贴板', + 'messages.noLogsAvailable' => '没有可用日志', + 'messages.libraryScanning' => ({required Object title}) => '正在扫描 “${title}”...', + 'messages.libraryScanStarted' => ({required Object title}) => '已开始扫描 “${title}” 媒体库', + 'messages.libraryScanFailed' => ({required Object error}) => '无法扫描媒体库: ${error}', + 'messages.metadataRefreshing' => ({required Object title}) => '正在刷新 “${title}” 的元数据...', + 'messages.metadataRefreshStarted' => ({required Object title}) => '已开始刷新 “${title}” 的元数据', + 'messages.metadataRefreshFailed' => ({required Object error}) => '无法刷新元数据: ${error}', + 'messages.logoutConfirm' => '你确定要登出吗?', + 'messages.noSeasonsFound' => '未找到季', + 'messages.noEpisodesFound' => '在第一季中未找到剧集', + 'messages.noEpisodesFoundGeneral' => '未找到剧集', + 'messages.noResultsFound' => '未找到结果', + 'messages.sleepTimerSet' => ({required Object label}) => '睡眠定时器已设置为 ${label}', + 'messages.noItemsAvailable' => '没有可用的项目', + 'messages.failedToCreatePlayQueue' => '创建播放队列失败', + 'messages.failedToCreatePlayQueueNoItems' => '创建播放队列失败 - 没有项目', + 'messages.failedPlayback' => ({required Object action, required Object error}) => '无法${action}: ${error}', + 'subtitlingStyling.stylingOptions' => '样式选项', + 'subtitlingStyling.fontSize' => '字号', + 'subtitlingStyling.textColor' => '文本颜色', + 'subtitlingStyling.borderSize' => '边框大小', + 'subtitlingStyling.borderColor' => '边框颜色', + 'subtitlingStyling.backgroundOpacity' => '背景不透明度', + 'subtitlingStyling.backgroundColor' => '背景颜色', + 'mpvConfig.title' => 'MPV 配置', + 'mpvConfig.description' => '高级视频播放器设置', + 'mpvConfig.properties' => '属性', + 'mpvConfig.presets' => '预设', + 'mpvConfig.noProperties' => '未配置任何属性', + 'mpvConfig.noPresets' => '没有保存的预设', + 'mpvConfig.addProperty' => '添加属性', + 'mpvConfig.editProperty' => '编辑属性', + 'mpvConfig.deleteProperty' => '删除属性', + 'mpvConfig.propertyKey' => '属性键', + 'mpvConfig.propertyKeyHint' => '例如 hwdec, demuxer-max-bytes', + 'mpvConfig.propertyValue' => '属性值', + 'mpvConfig.propertyValueHint' => '例如 auto, 256000000', + 'mpvConfig.saveAsPreset' => '保存为预设...', + 'mpvConfig.presetName' => '预设名称', + 'mpvConfig.presetNameHint' => '输入此预设的名称', + 'mpvConfig.loadPreset' => '加载', + 'mpvConfig.deletePreset' => '删除', + 'mpvConfig.presetSaved' => '预设已保存', + 'mpvConfig.presetLoaded' => '预设已加载', + 'mpvConfig.presetDeleted' => '预设已删除', + 'mpvConfig.confirmDeletePreset' => '确定要删除此预设吗?', + 'mpvConfig.confirmDeleteProperty' => '确定要删除此属性吗?', + 'mpvConfig.entriesCount' => ({required Object count}) => '${count} 条目', + 'dialog.confirmAction' => '确认操作', + 'dialog.cancel' => '取消', + 'dialog.playNow' => '立即播放', + 'discover.title' => '发现', + 'discover.switchProfile' => '切换用户', + 'discover.switchServer' => '切换服务器', + 'discover.logout' => '登出', + 'discover.noContentAvailable' => '没有可用内容', + 'discover.addMediaToLibraries' => '请向你的媒体库添加一些媒体', + 'discover.continueWatching' => '继续观看', + 'discover.play' => '播放', + 'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}', + 'discover.pause' => '暂停', + 'discover.overview' => '概述', + 'discover.cast' => '演员表', + 'discover.seasons' => '季数', + 'discover.studio' => '制作公司', + 'discover.rating' => '年龄分级', + 'discover.watched' => '已观看', + 'discover.episodeCount' => ({required Object count}) => '${count} 集', + 'discover.watchedProgress' => ({required Object watched, required Object total}) => '已观看 ${watched}/${total} 集', + 'discover.movie' => '电影', + 'discover.tvShow' => '电视剧', + 'discover.minutesLeft' => ({required Object minutes}) => '剩余 ${minutes} 分钟', + 'errors.searchFailed' => ({required Object error}) => '搜索失败: ${error}', + 'errors.connectionTimeout' => ({required Object context}) => '加载 ${context} 时连接超时', + 'errors.connectionFailed' => '无法连接到 Plex 服务器', + 'errors.failedToLoad' => ({required Object context, required Object error}) => '无法加载 ${context}: ${error}', + 'errors.noClientAvailable' => '没有可用客户端', + 'errors.authenticationFailed' => ({required Object error}) => '验证失败: ${error}', + 'errors.couldNotLaunchUrl' => '无法打开授权 URL', + 'errors.pleaseEnterToken' => '请输入一个令牌', + 'errors.invalidToken' => '令牌无效', + 'errors.failedToVerifyToken' => ({required Object error}) => '无法验证令牌: ${error}', + 'errors.failedToSwitchProfile' => ({required Object displayName}) => '无法切换到 ${displayName}', + 'libraries.title' => '媒体库', + 'libraries.scanLibraryFiles' => '扫描媒体库文件', + 'libraries.scanLibrary' => '扫描媒体库', + 'libraries.analyze' => '分析', + 'libraries.analyzeLibrary' => '分析媒体库', + 'libraries.refreshMetadata' => '刷新元数据', + 'libraries.emptyTrash' => '清空回收站', + 'libraries.emptyingTrash' => ({required Object title}) => '正在清空 “${title}” 的回收站...', + 'libraries.trashEmptied' => ({required Object title}) => '已清空 “${title}” 的回收站', + 'libraries.failedToEmptyTrash' => ({required Object error}) => '无法清空回收站: ${error}', + 'libraries.analyzing' => ({required Object title}) => '正在分析 “${title}”...', + 'libraries.analysisStarted' => ({required Object title}) => '已开始分析 “${title}”', + 'libraries.failedToAnalyze' => ({required Object error}) => '无法分析媒体库: ${error}', + 'libraries.noLibrariesFound' => '未找到媒体库', + 'libraries.thisLibraryIsEmpty' => '此媒体库为空', + 'libraries.all' => '全部', + 'libraries.clearAll' => '全部清除', + 'libraries.scanLibraryConfirm' => ({required Object title}) => '确定要扫描 “${title}” 吗?', + 'libraries.analyzeLibraryConfirm' => ({required Object title}) => '确定要分析 “${title}” 吗?', + 'libraries.refreshMetadataConfirm' => ({required Object title}) => '确定要刷新 “${title}” 的元数据吗?', + 'libraries.emptyTrashConfirm' => ({required Object title}) => '确定要清空 “${title}” 的回收站吗?', + 'libraries.manageLibraries' => '管理媒体库', + 'libraries.sort' => '排序', + 'libraries.sortBy' => '排序依据', + 'libraries.filters' => '筛选器', + 'libraries.confirmActionMessage' => '确定要执行此操作吗?', + 'libraries.showLibrary' => '显示媒体库', + 'libraries.hideLibrary' => '隐藏媒体库', + 'libraries.libraryOptions' => '媒体库选项', + 'libraries.content' => '媒体库内容', + 'libraries.selectLibrary' => '选择媒体库', + 'libraries.filtersWithCount' => ({required Object count}) => '筛选器(${count})', + 'libraries.noRecommendations' => '暂无推荐', + 'libraries.noCollections' => '此媒体库中没有合集', + 'libraries.noFoldersFound' => '未找到文件夹', + 'libraries.folders' => '文件夹', + 'libraries.tabs.recommended' => '推荐', + 'libraries.tabs.browse' => '浏览', + 'libraries.tabs.collections' => '合集', + 'libraries.tabs.playlists' => '播放列表', + 'libraries.groupings.all' => '全部', + 'libraries.groupings.movies' => '电影', + 'libraries.groupings.shows' => '剧集', + 'libraries.groupings.seasons' => '季', + 'libraries.groupings.episodes' => '集', + 'libraries.groupings.folders' => '文件夹', + 'about.title' => '关于', + 'about.openSourceLicenses' => '开源许可证', + 'about.versionLabel' => ({required Object version}) => '版本 ${version}', + 'about.appDescription' => '一款精美的 Flutter Plex 客户端', + 'about.viewLicensesDescription' => '查看第三方库的许可证', + 'serverSelection.allServerConnectionsFailed' => '无法连接到任何服务器。请检查你的网络并重试。', + 'serverSelection.noServersFound' => '未找到服务器', + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器', + 'serverSelection.failedToLoadServers' => ({required Object error}) => '无法加载服务器: ${error}', + 'hubDetail.title' => '标题', + 'hubDetail.releaseYear' => '发行年份', + 'hubDetail.dateAdded' => '添加日期', + 'hubDetail.rating' => '评分', + 'hubDetail.noItemsFound' => '未找到项目', + 'logs.clearLogs' => '清除日志', + 'logs.copyLogs' => '复制日志', + 'logs.error' => '错误:', + 'logs.stackTrace' => '堆栈跟踪 (Stack Trace):', + 'licenses.relatedPackages' => '相关软件包', + 'licenses.license' => '许可证', + 'licenses.licenseNumber' => ({required Object number}) => '许可证 ${number}', + 'licenses.licensesCount' => ({required Object count}) => '${count} 个许可证', + 'navigation.home' => '主页', + 'navigation.search' => '搜索', + 'navigation.libraries' => '媒体库', + 'navigation.settings' => '设置', + 'navigation.downloads' => '下载', + 'downloads.title' => '下载', + 'downloads.manage' => '管理', + 'downloads.tvShows' => '电视剧', + 'downloads.movies' => '电影', + 'downloads.noDownloads' => '暂无下载', + 'downloads.noDownloadsDescription' => '下载的内容将在此处显示以供离线观看', + 'downloads.downloadNow' => '下载', + 'downloads.deleteDownload' => '删除下载', + 'downloads.retryDownload' => '重试下载', + 'downloads.downloadQueued' => '下载已排队', + 'downloads.episodesQueued' => ({required Object count}) => '${count} 集已加入下载队列', + 'downloads.downloadDeleted' => '下载已删除', + 'downloads.deleteConfirm' => ({required Object title}) => '确定要删除 "${title}" 吗?下载的文件将从您的设备中删除。', + 'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => '正在删除 ${title}... (${current}/${total})', + 'playlists.title' => '播放列表', + 'playlists.noPlaylists' => '未找到播放列表', + 'playlists.create' => '创建播放列表', + 'playlists.playlistName' => '播放列表名称', + 'playlists.enterPlaylistName' => '输入播放列表名称', + 'playlists.delete' => '删除播放列表', + 'playlists.removeItem' => '从播放列表中移除', + 'playlists.smartPlaylist' => '智能播放列表', + 'playlists.itemCount' => ({required Object count}) => '${count} 个项目', + 'playlists.oneItem' => '1 个项目', + 'playlists.emptyPlaylist' => '此播放列表为空', + 'playlists.deleteConfirm' => '删除播放列表?', + 'playlists.deleteMessage' => ({required Object name}) => '确定要删除 "${name}" 吗?', + 'playlists.created' => '播放列表已创建', + 'playlists.deleted' => '播放列表已删除', + 'playlists.itemAdded' => '已添加到播放列表', + 'playlists.itemRemoved' => '已从播放列表中移除', + 'playlists.selectPlaylist' => '选择播放列表', + 'playlists.createNewPlaylist' => '创建新播放列表', + 'playlists.errorCreating' => '创建播放列表失败', + 'playlists.errorDeleting' => '删除播放列表失败', + 'playlists.errorLoading' => '加载播放列表失败', + 'playlists.errorAdding' => '添加到播放列表失败', + 'playlists.errorReordering' => '重新排序播放列表项目失败', + 'playlists.errorRemoving' => '从播放列表中移除失败', + 'playlists.playlist' => '播放列表', + 'collections.title' => '合集', + 'collections.collection' => '合集', + 'collections.empty' => '合集为空', + 'collections.unknownLibrarySection' => '无法删除:未知的媒体库分区', + 'collections.deleteCollection' => '删除合集', + 'collections.deleteConfirm' => ({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。', + 'collections.deleted' => '已删除合集', + 'collections.deleteFailed' => '删除合集失败', + 'collections.deleteFailedWithError' => ({required Object error}) => '删除合集失败:${error}', + 'collections.failedToLoadItems' => ({required Object error}) => '加载合集项目失败:${error}', + 'collections.selectCollection' => '选择合集', + 'collections.createNewCollection' => '创建新合集', + 'collections.collectionName' => '合集名称', + 'collections.enterCollectionName' => '输入合集名称', + 'collections.addedToCollection' => '已添加到合集', + 'collections.errorAddingToCollection' => '添加到合集失败', + 'collections.created' => '已创建合集', + 'collections.removeFromCollection' => '从合集移除', + 'collections.removeFromCollectionConfirm' => ({required Object title}) => '将“${title}”从此合集移除?', + 'collections.removedFromCollection' => '已从合集移除', + 'collections.removeFromCollectionFailed' => '从合集移除失败', + 'collections.removeFromCollectionError' => ({required Object error}) => '从合集移除时出错:${error}', + 'watchTogether.title' => '一起看', + 'watchTogether.description' => '与朋友和家人同步观看内容', + 'watchTogether.createSession' => '创建会话', + 'watchTogether.creating' => '创建中...', + 'watchTogether.joinSession' => '加入会话', + 'watchTogether.joining' => '加入中...', + 'watchTogether.controlMode' => '控制模式', + 'watchTogether.controlModeQuestion' => '谁可以控制播放?', + 'watchTogether.hostOnly' => '仅主持人', + 'watchTogether.anyone' => '任何人', + 'watchTogether.hostingSession' => '主持会话', + 'watchTogether.inSession' => '在会话中', + 'watchTogether.sessionCode' => '会话代码', + 'watchTogether.hostControlsPlayback' => '主持人控制播放', + 'watchTogether.anyoneCanControl' => '任何人都可以控制播放', + 'watchTogether.hostControls' => '主持人控制', + _ => null, + } ?? switch (path) { + 'watchTogether.anyoneControls' => '任何人控制', + 'watchTogether.participants' => '参与者', + 'watchTogether.host' => '主持人', + 'watchTogether.hostBadge' => '主持人', + 'watchTogether.youAreHost' => '你是主持人', + 'watchTogether.watchingWithOthers' => '与他人一起观看', + 'watchTogether.endSession' => '结束会话', + 'watchTogether.leaveSession' => '离开会话', + 'watchTogether.endSessionQuestion' => '结束会话?', + 'watchTogether.leaveSessionQuestion' => '离开会话?', + 'watchTogether.endSessionConfirm' => '这将为所有参与者结束会话。', + 'watchTogether.leaveSessionConfirm' => '你将被移出会话。', + 'watchTogether.endSessionConfirmOverlay' => '这将为所有参与者结束观看会话。', + 'watchTogether.leaveSessionConfirmOverlay' => '你将断开与观看会话的连接。', + 'watchTogether.end' => '结束', + 'watchTogether.leave' => '离开', + 'watchTogether.syncing' => '同步中...', + 'watchTogether.participant' => '参与者', + 'watchTogether.joinWatchSession' => '加入观看会话', + 'watchTogether.enterCodeHint' => '输入8位代码', + 'watchTogether.pasteFromClipboard' => '从剪贴板粘贴', + 'watchTogether.pleaseEnterCode' => '请输入会话代码', + 'watchTogether.codeMustBe8Chars' => '会话代码必须是8个字符', + 'watchTogether.joinInstructions' => '输入主持人分享的会话代码以加入他们的观看会话。', + 'watchTogether.failedToCreate' => '创建会话失败', + 'watchTogether.failedToJoin' => '加入会话失败', + 'watchTogether.sessionCodeCopied' => '会话代码已复制到剪贴板', + _ => null, + }; + } +} diff --git a/lib/i18n/strings_sv.i18n.json b/lib/i18n/sv.i18n.json similarity index 100% rename from lib/i18n/strings_sv.i18n.json rename to lib/i18n/sv.i18n.json diff --git a/lib/i18n/strings_zh.i18n.json b/lib/i18n/zh.i18n.json similarity index 100% rename from lib/i18n/strings_zh.i18n.json rename to lib/i18n/zh.i18n.json