From 789f1f468d15ee1f7cc59dd91043458afaf52b93 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Fri, 19 Dec 2025 04:08:11 +0100 Subject: [PATCH] refactor: remove invite dialog --- lib/i18n/strings.g.dart | 19303 ++++++---------- lib/i18n/strings.i18n.json | 12 +- lib/i18n/strings_de.i18n.json | 12 +- lib/i18n/strings_it.i18n.json | 12 +- lib/i18n/strings_nl.i18n.json | 12 +- lib/i18n/strings_sv.i18n.json | 12 +- lib/i18n/strings_zh.i18n.json | 12 +- lib/watch_together/watch_together.dart | 1 - .../widgets/session_invite_dialog.dart | 152 - .../widgets/watch_together_overlay.dart | 16 - 10 files changed, 6691 insertions(+), 12853 deletions(-) delete mode 100644 lib/watch_together/widgets/session_invite_dialog.dart diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index dc23b00a..d810bd42 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 6 -/// Strings: 2914 (485 per locale) +/// Strings: 2854 (475 per locale) /// -/// Built on 2025-12-19 at 02:20 UTC +/// Built on 2025-12-19 at 03:05 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -25,31 +25,22 @@ const AppLocale _baseLocale = AppLocale.en; /// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum /// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check enum AppLocale with BaseAppLocale { - en(languageCode: 'en', build: Translations.build), - de(languageCode: 'de', build: _StringsDe.build), - it(languageCode: 'it', build: _StringsIt.build), - nl(languageCode: 'nl', build: _StringsNl.build), - sv(languageCode: 'sv', build: _StringsSv.build), - zh(languageCode: 'zh', build: _StringsZh.build); + en(languageCode: 'en', build: Translations.build), + de(languageCode: 'de', build: _StringsDe.build), + it(languageCode: 'it', build: _StringsIt.build), + nl(languageCode: 'nl', build: _StringsNl.build), + sv(languageCode: 'sv', build: _StringsSv.build), + zh(languageCode: 'zh', build: _StringsZh.build); - const AppLocale({ - required this.languageCode, - this.scriptCode, - this.countryCode, - required this.build, - }); // ignore: unused_element + const AppLocale({required this.languageCode, this.scriptCode, this.countryCode, required this.build}); // ignore: unused_element - @override - final String languageCode; - @override - final String? scriptCode; - @override - final String? countryCode; - @override - final TranslationBuilder build; + @override final String languageCode; + @override final String? scriptCode; + @override final String? countryCode; + @override final TranslationBuilder build; - /// Gets current instance managed by [LocaleSettings]. - Translations get translations => LocaleSettings.instance.translationMap[this]!; + /// Gets current instance managed by [LocaleSettings]. + Translations get translations => LocaleSettings.instance.translationMap[this]!; } /// Method A: Simple @@ -79,10 +70,9 @@ Translations get t => LocaleSettings.instance.currentTranslations; /// String a = t.someKey.anotherKey; // Use t variable. /// String b = t['someKey.anotherKey']; // Only for edge cases! class TranslationProvider extends BaseTranslationProvider { - TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance); + TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance); - static InheritedLocaleData of(BuildContext context) => - InheritedLocaleData.of(context); + static InheritedLocaleData of(BuildContext context) => InheritedLocaleData.of(context); } /// Method B shorthand via [BuildContext] extension method. @@ -91,13867 +81,7944 @@ class TranslationProvider extends BaseTranslationProvider TranslationProvider.of(this).translations; + Translations get t => TranslationProvider.of(this).translations; } /// Manages all translation instances and the current locale class LocaleSettings extends BaseFlutterLocaleSettings { - LocaleSettings._() : super(utils: AppLocaleUtils.instance); + LocaleSettings._() : super(utils: AppLocaleUtils.instance); - static final instance = LocaleSettings._(); + static final instance = LocaleSettings._(); - // static aliases (checkout base methods for documentation) - static AppLocale get currentLocale => instance.currentLocale; - static Stream getLocaleStream() => instance.getLocaleStream(); - static AppLocale setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => - instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); - static AppLocale setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => - instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale); - static AppLocale useDeviceLocale() => instance.useDeviceLocale(); - @Deprecated('Use [AppLocaleUtils.supportedLocales]') - static List get supportedLocales => instance.supportedLocales; - @Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') - static List get supportedLocalesRaw => instance.supportedLocalesRaw; - static void setPluralResolver({ - String? language, - AppLocale? locale, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) => instance.setPluralResolver( - language: language, - locale: locale, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ); + // static aliases (checkout base methods for documentation) + static AppLocale get currentLocale => instance.currentLocale; + static Stream getLocaleStream() => instance.getLocaleStream(); + static AppLocale setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale useDeviceLocale() => instance.useDeviceLocale(); + @Deprecated('Use [AppLocaleUtils.supportedLocales]') static List get supportedLocales => instance.supportedLocales; + @Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') static List get supportedLocalesRaw => instance.supportedLocalesRaw; + static void setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver( + language: language, + locale: locale, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); } /// Provides utility functions without any side effects. class AppLocaleUtils extends BaseAppLocaleUtils { - AppLocaleUtils._() : super(baseLocale: _baseLocale, locales: AppLocale.values); + AppLocaleUtils._() : super(baseLocale: _baseLocale, locales: AppLocale.values); - static final instance = AppLocaleUtils._(); + static final instance = AppLocaleUtils._(); - // static aliases (checkout base methods for documentation) - static AppLocale parse(String rawLocale) => instance.parse(rawLocale); - static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => - instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode); - static AppLocale findDeviceLocale() => instance.findDeviceLocale(); - static List get supportedLocales => instance.supportedLocales; - static List get supportedLocalesRaw => instance.supportedLocalesRaw; + // static aliases (checkout base methods for documentation) + static AppLocale parse(String rawLocale) => instance.parse(rawLocale); + static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode); + static AppLocale findDeviceLocale() => instance.findDeviceLocale(); + static List get supportedLocales => instance.supportedLocales; + static List get supportedLocalesRaw => instance.supportedLocalesRaw; } // translations // Path: class Translations implements BaseTranslations { - /// Returns the current translations of the given [context]. - /// - /// Usage: - /// final t = Translations.of(context); - static Translations of(BuildContext context) => InheritedLocaleData.of(context).translations; + /// Returns the current translations of the given [context]. + /// + /// Usage: + /// final t = Translations.of(context); + static Translations of(BuildContext context) => InheritedLocaleData.of(context).translations; - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - Translations.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.en, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + Translations.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.en, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + dynamic operator[](String key) => $meta.getTranslation(key); - late final Translations _root = this; // ignore: unused_field + late final Translations _root = this; // ignore: unused_field - // Translations - late final _StringsAppEn app = _StringsAppEn._(_root); - late final _StringsAuthEn auth = _StringsAuthEn._(_root); - late final _StringsCommonEn common = _StringsCommonEn._(_root); - late final _StringsScreensEn screens = _StringsScreensEn._(_root); - late final _StringsUpdateEn update = _StringsUpdateEn._(_root); - late final _StringsSettingsEn settings = _StringsSettingsEn._(_root); - late final _StringsSearchEn search = _StringsSearchEn._(_root); - late final _StringsHotkeysEn hotkeys = _StringsHotkeysEn._(_root); - late final _StringsPinEntryEn pinEntry = _StringsPinEntryEn._(_root); - late final _StringsFileInfoEn fileInfo = _StringsFileInfoEn._(_root); - late final _StringsMediaMenuEn mediaMenu = _StringsMediaMenuEn._(_root); - late final _StringsAccessibilityEn accessibility = _StringsAccessibilityEn._(_root); - late final _StringsTooltipsEn tooltips = _StringsTooltipsEn._(_root); - late final _StringsVideoControlsEn videoControls = _StringsVideoControlsEn._(_root); - late final _StringsUserStatusEn userStatus = _StringsUserStatusEn._(_root); - late final _StringsMessagesEn messages = _StringsMessagesEn._(_root); - late final _StringsSubtitlingStylingEn subtitlingStyling = _StringsSubtitlingStylingEn._(_root); - late final _StringsDialogEn dialog = _StringsDialogEn._(_root); - late final _StringsDiscoverEn discover = _StringsDiscoverEn._(_root); - late final _StringsErrorsEn errors = _StringsErrorsEn._(_root); - late final _StringsLibrariesEn libraries = _StringsLibrariesEn._(_root); - late final _StringsAboutEn about = _StringsAboutEn._(_root); - late final _StringsServerSelectionEn serverSelection = _StringsServerSelectionEn._(_root); - late final _StringsHubDetailEn hubDetail = _StringsHubDetailEn._(_root); - late final _StringsLogsEn logs = _StringsLogsEn._(_root); - late final _StringsLicensesEn licenses = _StringsLicensesEn._(_root); - late final _StringsNavigationEn navigation = _StringsNavigationEn._(_root); - late final _StringsCollectionsEn collections = _StringsCollectionsEn._(_root); - late final _StringsPlaylistsEn playlists = _StringsPlaylistsEn._(_root); - late final _StringsWatchTogetherEn watchTogether = _StringsWatchTogetherEn._(_root); - late final _StringsDownloadsEn downloads = _StringsDownloadsEn._(_root); + // Translations + late final _StringsAppEn app = _StringsAppEn._(_root); + late final _StringsAuthEn auth = _StringsAuthEn._(_root); + late final _StringsCommonEn common = _StringsCommonEn._(_root); + late final _StringsScreensEn screens = _StringsScreensEn._(_root); + late final _StringsUpdateEn update = _StringsUpdateEn._(_root); + late final _StringsSettingsEn settings = _StringsSettingsEn._(_root); + late final _StringsSearchEn search = _StringsSearchEn._(_root); + late final _StringsHotkeysEn hotkeys = _StringsHotkeysEn._(_root); + late final _StringsPinEntryEn pinEntry = _StringsPinEntryEn._(_root); + late final _StringsFileInfoEn fileInfo = _StringsFileInfoEn._(_root); + late final _StringsMediaMenuEn mediaMenu = _StringsMediaMenuEn._(_root); + late final _StringsAccessibilityEn accessibility = _StringsAccessibilityEn._(_root); + late final _StringsTooltipsEn tooltips = _StringsTooltipsEn._(_root); + late final _StringsVideoControlsEn videoControls = _StringsVideoControlsEn._(_root); + late final _StringsUserStatusEn userStatus = _StringsUserStatusEn._(_root); + late final _StringsMessagesEn messages = _StringsMessagesEn._(_root); + late final _StringsSubtitlingStylingEn subtitlingStyling = _StringsSubtitlingStylingEn._(_root); + late final _StringsDialogEn dialog = _StringsDialogEn._(_root); + late final _StringsDiscoverEn discover = _StringsDiscoverEn._(_root); + late final _StringsErrorsEn errors = _StringsErrorsEn._(_root); + late final _StringsLibrariesEn libraries = _StringsLibrariesEn._(_root); + late final _StringsAboutEn about = _StringsAboutEn._(_root); + late final _StringsServerSelectionEn serverSelection = _StringsServerSelectionEn._(_root); + late final _StringsHubDetailEn hubDetail = _StringsHubDetailEn._(_root); + late final _StringsLogsEn logs = _StringsLogsEn._(_root); + late final _StringsLicensesEn licenses = _StringsLicensesEn._(_root); + late final _StringsNavigationEn navigation = _StringsNavigationEn._(_root); + late final _StringsCollectionsEn collections = _StringsCollectionsEn._(_root); + late final _StringsPlaylistsEn playlists = _StringsPlaylistsEn._(_root); + late final _StringsWatchTogetherEn watchTogether = _StringsWatchTogetherEn._(_root); + late final _StringsDownloadsEn downloads = _StringsDownloadsEn._(_root); } // Path: app class _StringsAppEn { - _StringsAppEn._(this._root); + _StringsAppEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Plezy'; - String get loading => 'Loading...'; + // Translations + String get title => 'Plezy'; + String get loading => 'Loading...'; } // Path: auth class _StringsAuthEn { - _StringsAuthEn._(this._root); + _StringsAuthEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get signInWithPlex => 'Sign in with Plex'; - String get showQRCode => 'Show QR Code'; - String get cancel => 'Cancel'; - String get authenticate => 'Authenticate'; - String get retry => 'Retry'; - String get debugEnterToken => 'Debug: Enter Plex Token'; - String get plexTokenLabel => 'Plex Auth Token'; - String get plexTokenHint => 'Enter your Plex.tv token'; - String get authenticationTimeout => 'Authentication timed out. Please try again.'; - String get scanQRCodeInstruction => 'Scan this QR code with a device logged into Plex to authenticate.'; - String get waitingForAuth => 'Waiting for authentication...\nPlease complete sign-in in your browser.'; + // Translations + String get signInWithPlex => 'Sign in with Plex'; + String get showQRCode => 'Show QR Code'; + String get cancel => 'Cancel'; + String get authenticate => 'Authenticate'; + String get retry => 'Retry'; + String get debugEnterToken => 'Debug: Enter Plex Token'; + String get plexTokenLabel => 'Plex Auth Token'; + String get plexTokenHint => 'Enter your Plex.tv token'; + String get authenticationTimeout => 'Authentication timed out. Please try again.'; + String get scanQRCodeInstruction => 'Scan this QR code with a device logged into Plex to authenticate.'; + String get waitingForAuth => 'Waiting for authentication...\nPlease complete sign-in in your browser.'; } // Path: common class _StringsCommonEn { - _StringsCommonEn._(this._root); + _StringsCommonEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get cancel => 'Cancel'; - String get save => 'Save'; - String get close => 'Close'; - String get clear => 'Clear'; - String get reset => 'Reset'; - String get later => 'Later'; - String get submit => 'Submit'; - String get confirm => 'Confirm'; - String get retry => 'Retry'; - String get 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...'; + // 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); + _StringsScreensEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get licenses => 'Licenses'; - String get switchProfile => 'Switch Profile'; - String get subtitleStyling => 'Subtitle Styling'; - String get search => 'Search'; - String get logs => 'Logs'; + // Translations + String get licenses => 'Licenses'; + String get switchProfile => 'Switch Profile'; + String get subtitleStyling => 'Subtitle Styling'; + String get search => 'Search'; + String get logs => 'Logs'; } // Path: update class _StringsUpdateEn { - _StringsUpdateEn._(this._root); + _StringsUpdateEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get available => 'Update Available'; - String versionAvailable({required Object version}) => 'Version ${version} is available'; - String currentVersion({required Object version}) => 'Current: ${version}'; - String get skipVersion => 'Skip This Version'; - String get viewRelease => 'View Release'; - String get latestVersion => 'You are on the latest version'; - String get checkFailed => 'Failed to check for updates'; + // Translations + String get available => 'Update Available'; + String versionAvailable({required Object version}) => 'Version ${version} is available'; + String currentVersion({required Object version}) => 'Current: ${version}'; + String get skipVersion => 'Skip This Version'; + String get viewRelease => 'View Release'; + String get latestVersion => 'You are on the latest version'; + String get checkFailed => 'Failed to check for updates'; } // Path: settings class _StringsSettingsEn { - _StringsSettingsEn._(this._root); + _StringsSettingsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Settings'; - String get language => 'Language'; - String get theme => 'Theme'; - String get appearance => 'Appearance'; - String get videoPlayback => 'Video Playback'; - String get advanced => 'Advanced'; - String get useSeasonPostersDescription => 'Show season poster instead of series poster for episodes'; - String get showHeroSectionDescription => 'Display featured content carousel on home screen'; - String get secondsLabel => 'Seconds'; - String get minutesLabel => 'Minutes'; - String get secondsShort => 's'; - String get minutesShort => 'm'; - String durationHint({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; - String get systemTheme => 'System'; - String get systemThemeDescription => 'Follow system settings'; - String get lightTheme => 'Light'; - String get darkTheme => 'Dark'; - String get libraryDensity => 'Library Density'; - String get compact => 'Compact'; - String get compactDescription => 'Smaller cards, more items visible'; - String get normal => 'Normal'; - String get normalDescription => 'Default size'; - String get comfortable => 'Comfortable'; - String get comfortableDescription => 'Larger cards, fewer items visible'; - String get viewMode => 'View Mode'; - String get gridView => 'Grid'; - String get gridViewDescription => 'Display items in a grid layout'; - String get listView => 'List'; - String get listViewDescription => 'Display items in a list layout'; - String get useSeasonPosters => 'Use Season Posters'; - String get showHeroSection => 'Show Hero Section'; - String get hardwareDecoding => 'Hardware Decoding'; - String get hardwareDecodingDescription => 'Use hardware acceleration when available'; - String get bufferSize => 'Buffer Size'; - String bufferSizeMB({required Object size}) => '${size}MB'; - String get subtitleStyling => 'Subtitle Styling'; - String get subtitleStylingDescription => 'Customize subtitle appearance'; - String get smallSkipDuration => 'Small Skip Duration'; - String get largeSkipDuration => 'Large Skip Duration'; - String secondsUnit({required Object seconds}) => '${seconds} seconds'; - String get defaultSleepTimer => 'Default Sleep Timer'; - String minutesUnit({required Object minutes}) => '${minutes} minutes'; - String get rememberTrackSelections => 'Remember track selections per show/movie'; - String get rememberTrackSelectionsDescription => - 'Automatically save audio and subtitle language preferences when you change tracks during playback'; - String get 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.'; + // 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 useSeasonPostersDescription => 'Show season poster instead of series poster for episodes'; + String get showHeroSectionDescription => 'Display featured content carousel on home screen'; + String get secondsLabel => 'Seconds'; + String get minutesLabel => 'Minutes'; + String get secondsShort => 's'; + String get minutesShort => 'm'; + String durationHint({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; + String get systemTheme => 'System'; + String get systemThemeDescription => 'Follow system settings'; + String get lightTheme => 'Light'; + String get darkTheme => 'Dark'; + String get libraryDensity => 'Library Density'; + String get compact => 'Compact'; + String get compactDescription => 'Smaller cards, more items visible'; + String get normal => 'Normal'; + String get normalDescription => 'Default size'; + String get comfortable => 'Comfortable'; + String get comfortableDescription => 'Larger cards, fewer items visible'; + String get viewMode => 'View Mode'; + String get gridView => 'Grid'; + String get gridViewDescription => 'Display items in a grid layout'; + String get listView => 'List'; + String get listViewDescription => 'Display items in a list layout'; + String get useSeasonPosters => 'Use Season Posters'; + String get showHeroSection => 'Show Hero Section'; + String get hardwareDecoding => 'Hardware Decoding'; + String get hardwareDecodingDescription => 'Use hardware acceleration when available'; + String get bufferSize => 'Buffer Size'; + String bufferSizeMB({required Object size}) => '${size}MB'; + String get subtitleStyling => 'Subtitle Styling'; + String get subtitleStylingDescription => 'Customize subtitle appearance'; + String get smallSkipDuration => 'Small Skip Duration'; + String get largeSkipDuration => 'Large Skip Duration'; + String secondsUnit({required Object seconds}) => '${seconds} seconds'; + String get defaultSleepTimer => 'Default Sleep Timer'; + String minutesUnit({required Object minutes}) => '${minutes} minutes'; + String get rememberTrackSelections => 'Remember track selections per show/movie'; + String get rememberTrackSelectionsDescription => 'Automatically save audio and subtitle language preferences when you change tracks during playback'; + String get 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.'; } // Path: search class _StringsSearchEn { - _StringsSearchEn._(this._root); + _StringsSearchEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get hint => 'Search movies, shows, music...'; - String get tryDifferentTerm => 'Try a different search term'; - String get searchYourMedia => 'Search your media'; - String get enterTitleActorOrKeyword => 'Enter a title, actor, or keyword'; + // Translations + String get hint => 'Search movies, shows, music...'; + String get tryDifferentTerm => 'Try a different search term'; + String get searchYourMedia => 'Search your media'; + String get enterTitleActorOrKeyword => 'Enter a title, actor, or keyword'; } // Path: hotkeys class _StringsHotkeysEn { - _StringsHotkeysEn._(this._root); + _StringsHotkeysEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String setShortcutFor({required Object actionName}) => 'Set Shortcut for ${actionName}'; - String get clearShortcut => 'Clear shortcut'; + // Translations + String setShortcutFor({required Object actionName}) => 'Set Shortcut for ${actionName}'; + String get clearShortcut => 'Clear shortcut'; } // Path: pinEntry class _StringsPinEntryEn { - _StringsPinEntryEn._(this._root); + _StringsPinEntryEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get enterPin => 'Enter PIN'; - String get showPin => 'Show PIN'; - String get hidePin => 'Hide PIN'; + // Translations + String get enterPin => 'Enter PIN'; + String get showPin => 'Show PIN'; + String get hidePin => 'Hide PIN'; } // Path: fileInfo class _StringsFileInfoEn { - _StringsFileInfoEn._(this._root); + _StringsFileInfoEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'File Info'; - String get video => 'Video'; - String get audio => 'Audio'; - String get file => 'File'; - String get advanced => 'Advanced'; - String get codec => 'Codec'; - String get resolution => 'Resolution'; - String get bitrate => 'Bitrate'; - String get frameRate => 'Frame Rate'; - String get aspectRatio => 'Aspect Ratio'; - String get profile => 'Profile'; - String get bitDepth => 'Bit Depth'; - String get colorSpace => 'Color Space'; - String get colorRange => 'Color Range'; - String get colorPrimaries => 'Color Primaries'; - String get chromaSubsampling => 'Chroma Subsampling'; - String get channels => 'Channels'; - String get path => 'Path'; - String get size => 'Size'; - String get container => 'Container'; - String get duration => 'Duration'; - String get optimizedForStreaming => 'Optimized for Streaming'; - String get has64bitOffsets => '64-bit Offsets'; + // Translations + String get title => 'File Info'; + String get video => 'Video'; + String get audio => 'Audio'; + String get file => 'File'; + String get advanced => 'Advanced'; + String get codec => 'Codec'; + String get resolution => 'Resolution'; + String get bitrate => 'Bitrate'; + String get frameRate => 'Frame Rate'; + String get aspectRatio => 'Aspect Ratio'; + String get profile => 'Profile'; + String get bitDepth => 'Bit Depth'; + String get colorSpace => 'Color Space'; + String get colorRange => 'Color Range'; + String get colorPrimaries => 'Color Primaries'; + String get chromaSubsampling => 'Chroma Subsampling'; + String get channels => 'Channels'; + String get path => 'Path'; + String get size => 'Size'; + String get container => 'Container'; + String get duration => 'Duration'; + String get optimizedForStreaming => 'Optimized for Streaming'; + String get has64bitOffsets => '64-bit Offsets'; } // Path: mediaMenu class _StringsMediaMenuEn { - _StringsMediaMenuEn._(this._root); + _StringsMediaMenuEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get markAsWatched => 'Mark as Watched'; - String get markAsUnwatched => 'Mark as Unwatched'; - String get removeFromContinueWatching => 'Remove from Continue Watching'; - String get goToSeries => 'Go to series'; - String get goToSeason => 'Go to season'; - String get shufflePlay => 'Shuffle Play'; - String get fileInfo => 'File Info'; + // Translations + String get markAsWatched => 'Mark as Watched'; + String get markAsUnwatched => 'Mark as Unwatched'; + String get removeFromContinueWatching => 'Remove from Continue Watching'; + String get goToSeries => 'Go to series'; + String get goToSeason => 'Go to season'; + String get shufflePlay => 'Shuffle Play'; + String get fileInfo => 'File Info'; } // Path: accessibility class _StringsAccessibilityEn { - _StringsAccessibilityEn._(this._root); + _StringsAccessibilityEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String mediaCardMovie({required Object title}) => '${title}, movie'; - String mediaCardShow({required Object title}) => '${title}, TV show'; - String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - String get mediaCardWatched => 'watched'; - String mediaCardPartiallyWatched({required Object percent}) => '${percent} percent watched'; - String get mediaCardUnwatched => 'unwatched'; - String get tapToPlay => 'Tap to play'; + // Translations + String mediaCardMovie({required Object title}) => '${title}, movie'; + String mediaCardShow({required Object title}) => '${title}, TV show'; + String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + String get mediaCardWatched => 'watched'; + String mediaCardPartiallyWatched({required Object percent}) => '${percent} percent watched'; + String get mediaCardUnwatched => 'unwatched'; + String get tapToPlay => 'Tap to play'; } // Path: tooltips class _StringsTooltipsEn { - _StringsTooltipsEn._(this._root); + _StringsTooltipsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get shufflePlay => 'Shuffle play'; - String get markAsWatched => 'Mark as watched'; - String get markAsUnwatched => 'Mark as unwatched'; + // Translations + String get shufflePlay => 'Shuffle play'; + String get markAsWatched => 'Mark as watched'; + String get markAsUnwatched => 'Mark as unwatched'; } // Path: videoControls class _StringsVideoControlsEn { - _StringsVideoControlsEn._(this._root); + _StringsVideoControlsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get audioLabel => 'Audio'; - String get subtitlesLabel => 'Subtitles'; - String get resetToZero => 'Reset to 0ms'; - String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - String playsLater({required Object label}) => '${label} plays later'; - String playsEarlier({required Object label}) => '${label} plays earlier'; - String get noOffset => 'No offset'; - String get letterbox => 'Letterbox'; - String get fillScreen => 'Fill screen'; - String get stretch => 'Stretch'; - String get lockRotation => 'Lock rotation'; - String get unlockRotation => 'Unlock rotation'; - String get sleepTimer => 'Sleep Timer'; - String get timerActive => 'Timer Active'; - String playbackWillPauseIn({required Object duration}) => 'Playback will pause in ${duration}'; - String get sleepTimerCompleted => 'Sleep timer completed - playback paused'; - String get playButton => 'Play'; - String get pauseButton => 'Pause'; - String seekBackwardButton({required Object seconds}) => 'Seek backward ${seconds} seconds'; - String seekForwardButton({required Object seconds}) => 'Seek forward ${seconds} seconds'; - String get previousButton => 'Previous episode'; - String get nextButton => 'Next episode'; - String get previousChapterButton => 'Previous chapter'; - String get nextChapterButton => 'Next chapter'; - String get muteButton => 'Mute'; - String get unmuteButton => 'Unmute'; - String get settingsButton => 'Video settings'; - String get audioTrackButton => 'Audio tracks'; - String get subtitlesButton => 'Subtitles'; - String get chaptersButton => 'Chapters'; - String get versionsButton => 'Video versions'; - String get aspectRatioButton => 'Aspect ratio'; - String get fullscreenButton => 'Enter fullscreen'; - String get exitFullscreenButton => 'Exit fullscreen'; - String get alwaysOnTopButton => 'Always on top'; - String get rotationLockButton => 'Rotation lock'; - String get timelineSlider => 'Video timeline'; - String get volumeSlider => 'Volume level'; - String get backButton => 'Back'; + // Translations + String get audioLabel => 'Audio'; + String get subtitlesLabel => 'Subtitles'; + String get resetToZero => 'Reset to 0ms'; + String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + String playsLater({required Object label}) => '${label} plays later'; + String playsEarlier({required Object label}) => '${label} plays earlier'; + String get noOffset => 'No offset'; + String get letterbox => 'Letterbox'; + String get fillScreen => 'Fill screen'; + String get stretch => 'Stretch'; + String get lockRotation => 'Lock rotation'; + String get unlockRotation => 'Unlock rotation'; + String get sleepTimer => 'Sleep Timer'; + String get timerActive => 'Timer Active'; + String playbackWillPauseIn({required Object duration}) => 'Playback will pause in ${duration}'; + String get sleepTimerCompleted => 'Sleep timer completed - playback paused'; + String get playButton => 'Play'; + String get pauseButton => 'Pause'; + String seekBackwardButton({required Object seconds}) => 'Seek backward ${seconds} seconds'; + String seekForwardButton({required Object seconds}) => 'Seek forward ${seconds} seconds'; + String get previousButton => 'Previous episode'; + String get nextButton => 'Next episode'; + String get previousChapterButton => 'Previous chapter'; + String get nextChapterButton => 'Next chapter'; + String get muteButton => 'Mute'; + String get unmuteButton => 'Unmute'; + String get settingsButton => 'Video settings'; + String get audioTrackButton => 'Audio tracks'; + String get subtitlesButton => 'Subtitles'; + String get chaptersButton => 'Chapters'; + String get versionsButton => 'Video versions'; + String get aspectRatioButton => 'Aspect ratio'; + String get fullscreenButton => 'Enter fullscreen'; + String get exitFullscreenButton => 'Exit fullscreen'; + String get 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); + _StringsUserStatusEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get admin => 'Admin'; - String get restricted => 'Restricted'; - String get protected => 'Protected'; - String get current => 'CURRENT'; + // Translations + String get admin => 'Admin'; + String get restricted => 'Restricted'; + String get protected => 'Protected'; + String get current => 'CURRENT'; } // Path: messages class _StringsMessagesEn { - _StringsMessagesEn._(this._root); + _StringsMessagesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get markedAsWatched => 'Marked as watched'; - String get markedAsUnwatched => 'Marked as unwatched'; - String get 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}'; - String get youAreOffline => 'You\'re Offline'; - String get offlineFeatureUnavailable => - 'This feature requires an internet connection. Your downloads and settings are still available.'; + // 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); + _StringsSubtitlingStylingEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get stylingOptions => 'Styling Options'; - String get fontSize => 'Font Size'; - String get textColor => 'Text Color'; - String get borderSize => 'Border Size'; - String get borderColor => 'Border Color'; - String get backgroundOpacity => 'Background Opacity'; - String get backgroundColor => 'Background Color'; + // Translations + String get stylingOptions => 'Styling Options'; + String get fontSize => 'Font Size'; + String get textColor => 'Text Color'; + String get borderSize => 'Border Size'; + String get borderColor => 'Border Color'; + String get backgroundOpacity => 'Background Opacity'; + String get backgroundColor => 'Background Color'; } // Path: dialog class _StringsDialogEn { - _StringsDialogEn._(this._root); + _StringsDialogEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get confirmAction => 'Confirm Action'; - String get cancel => 'Cancel'; - String get playNow => 'Play Now'; + // Translations + String get confirmAction => 'Confirm Action'; + String get cancel => 'Cancel'; + String get playNow => 'Play Now'; } // Path: discover class _StringsDiscoverEn { - _StringsDiscoverEn._(this._root); + _StringsDiscoverEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Discover'; - String get switchProfile => 'Switch Profile'; - String get logout => 'Logout'; - String get noContentAvailable => 'No content available'; - String get addMediaToLibraries => 'Add some media to your libraries'; - String get continueWatching => 'Continue Watching'; - String get 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'; + // 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); + _StringsErrorsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String searchFailed({required Object error}) => 'Search failed: ${error}'; - String connectionTimeout({required Object context}) => 'Connection timeout while loading ${context}'; - String get connectionFailed => 'Unable to connect to Plex server'; - String failedToLoad({required Object context, required Object error}) => 'Failed to load ${context}: ${error}'; - String get noClientAvailable => 'No client available'; - String authenticationFailed({required Object error}) => 'Authentication failed: ${error}'; - String get couldNotLaunchUrl => 'Could not launch auth URL'; - String get pleaseEnterToken => 'Please enter a token'; - String get invalidToken => 'Invalid token'; - String failedToVerifyToken({required Object error}) => 'Failed to verify token: ${error}'; - String failedToSwitchProfile({required Object displayName}) => 'Failed to switch to ${displayName}'; + // 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); + _StringsLibrariesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Libraries'; - String get scanLibraryFiles => 'Scan Library Files'; - String get scanLibrary => 'Scan Library'; - String get analyze => 'Analyze'; - String get analyzeLibrary => 'Analyze Library'; - String get refreshMetadata => 'Refresh Metadata'; - String get emptyTrash => 'Empty Trash'; - String emptyingTrash({required Object title}) => 'Emptying trash for "${title}"...'; - String trashEmptied({required Object title}) => 'Trash emptied for "${title}"'; - String failedToEmptyTrash({required Object error}) => 'Failed to empty trash: ${error}'; - String analyzing({required Object title}) => 'Analyzing "${title}"...'; - String analysisStarted({required Object title}) => 'Analysis started for "${title}"'; - String failedToAnalyze({required Object error}) => 'Failed to analyze library: ${error}'; - String get noLibrariesFound => 'No libraries found'; - String get thisLibraryIsEmpty => 'This library is empty'; - String get all => 'All'; - String get clearAll => 'Clear All'; - String scanLibraryConfirm({required Object title}) => 'Are you sure you want to scan "${title}"?'; - String analyzeLibraryConfirm({required Object title}) => 'Are you sure you want to analyze "${title}"?'; - String refreshMetadataConfirm({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?'; - String emptyTrashConfirm({required Object title}) => 'Are you sure you want to empty trash for "${title}"?'; - String get manageLibraries => 'Manage Libraries'; - String get sort => 'Sort'; - String get sortBy => 'Sort By'; - String get filters => 'Filters'; - String get confirmActionMessage => 'Are you sure you want to perform this action?'; - String get showLibrary => 'Show library'; - String get hideLibrary => 'Hide library'; - String get libraryOptions => 'Library options'; - String get content => 'library content'; - String get selectLibrary => 'Select library'; - String filtersWithCount({required Object count}) => 'Filters (${count})'; - String get noRecommendations => 'No recommendations available'; - String get noCollections => 'No collections in this library'; - String get noFoldersFound => 'No folders found'; - String get folders => 'folders'; - late final _StringsLibrariesTabsEn tabs = _StringsLibrariesTabsEn._(_root); - late final _StringsLibrariesGroupingsEn groupings = _StringsLibrariesGroupingsEn._(_root); + // Translations + String get title => 'Libraries'; + String get scanLibraryFiles => 'Scan Library Files'; + String get scanLibrary => 'Scan Library'; + String get analyze => 'Analyze'; + String get analyzeLibrary => 'Analyze Library'; + String get refreshMetadata => 'Refresh Metadata'; + String get emptyTrash => 'Empty Trash'; + String emptyingTrash({required Object title}) => 'Emptying trash for "${title}"...'; + String trashEmptied({required Object title}) => 'Trash emptied for "${title}"'; + String failedToEmptyTrash({required Object error}) => 'Failed to empty trash: ${error}'; + String analyzing({required Object title}) => 'Analyzing "${title}"...'; + String analysisStarted({required Object title}) => 'Analysis started for "${title}"'; + String failedToAnalyze({required Object error}) => 'Failed to analyze library: ${error}'; + String get noLibrariesFound => 'No libraries found'; + String get thisLibraryIsEmpty => 'This library is empty'; + String get all => 'All'; + String get clearAll => 'Clear All'; + String scanLibraryConfirm({required Object title}) => 'Are you sure you want to scan "${title}"?'; + String analyzeLibraryConfirm({required Object title}) => 'Are you sure you want to analyze "${title}"?'; + String refreshMetadataConfirm({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?'; + String emptyTrashConfirm({required Object title}) => 'Are you sure you want to empty trash for "${title}"?'; + String get manageLibraries => 'Manage Libraries'; + String get sort => 'Sort'; + String get sortBy => 'Sort By'; + String get filters => 'Filters'; + String get confirmActionMessage => 'Are you sure you want to perform this action?'; + String get showLibrary => 'Show library'; + String get hideLibrary => 'Hide library'; + String get libraryOptions => 'Library options'; + String get content => 'library content'; + String get selectLibrary => 'Select library'; + String filtersWithCount({required Object count}) => 'Filters (${count})'; + String get noRecommendations => 'No recommendations available'; + String get noCollections => 'No collections in this library'; + String get noFoldersFound => 'No folders found'; + String get folders => 'folders'; + late final _StringsLibrariesTabsEn tabs = _StringsLibrariesTabsEn._(_root); + late final _StringsLibrariesGroupingsEn groupings = _StringsLibrariesGroupingsEn._(_root); } // Path: about class _StringsAboutEn { - _StringsAboutEn._(this._root); + _StringsAboutEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'About'; - String get openSourceLicenses => 'Open Source Licenses'; - String versionLabel({required Object version}) => 'Version ${version}'; - String get appDescription => 'A beautiful Plex client for Flutter'; - String get viewLicensesDescription => 'View licenses of third-party libraries'; + // Translations + String get title => 'About'; + String get openSourceLicenses => 'Open Source Licenses'; + String versionLabel({required Object version}) => 'Version ${version}'; + String get appDescription => 'A beautiful Plex client for Flutter'; + String get viewLicensesDescription => 'View licenses of third-party libraries'; } // Path: serverSelection class _StringsServerSelectionEn { - _StringsServerSelectionEn._(this._root); + _StringsServerSelectionEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get 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}'; + // 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); + _StringsHubDetailEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Title'; - String get releaseYear => 'Release Year'; - String get dateAdded => 'Date Added'; - String get rating => 'Rating'; - String get noItemsFound => 'No items found'; + // Translations + String get title => 'Title'; + String get releaseYear => 'Release Year'; + String get dateAdded => 'Date Added'; + String get rating => 'Rating'; + String get noItemsFound => 'No items found'; } // Path: logs class _StringsLogsEn { - _StringsLogsEn._(this._root); + _StringsLogsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get clearLogs => 'Clear Logs'; - String get copyLogs => 'Copy Logs'; - String get error => 'Error:'; - String get stackTrace => 'Stack Trace:'; + // 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); + _StringsLicensesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get relatedPackages => 'Related Packages'; - String get license => 'License'; - String licenseNumber({required Object number}) => 'License ${number}'; - String licensesCount({required Object count}) => '${count} licenses'; + // Translations + String get relatedPackages => 'Related Packages'; + String get license => 'License'; + String licenseNumber({required Object number}) => 'License ${number}'; + String licensesCount({required Object count}) => '${count} licenses'; } // Path: navigation class _StringsNavigationEn { - _StringsNavigationEn._(this._root); + _StringsNavigationEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get home => 'Home'; - String get search => 'Search'; - String get libraries => 'Libraries'; - String get settings => 'Settings'; - String get downloads => 'Downloads'; + // 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); + _StringsCollectionsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Collections'; - String get collection => 'Collection'; - String get empty => 'Collection is empty'; - String get 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}'; + // 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); + _StringsPlaylistsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Playlists'; - String get playlist => 'Playlist'; - String get noPlaylists => 'No playlists found'; - String get create => 'Create Playlist'; - String get 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'; + // 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); + _StringsWatchTogetherEn._(this._root); - final Translations _root; // ignore: unused_field + 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 inviteOthers => 'Invite others'; - String get syncing => 'Syncing...'; - String get participant => 'participant'; - String get participantsPlural => 'participants'; - String get copyCode => 'Copy code'; - String get shareInstructions => 'Share this code with others to let them join your watch session.'; - String get codeCopied => 'Session code copied to clipboard'; - String get share => 'Share'; - String inviteText({required Object sessionId}) => 'Join my Watch Together session!\n\nSession Code: ${sessionId}'; - String get inviteSubject => 'Watch Together Invite'; - 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'; + // 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'; } // Path: downloads class _StringsDownloadsEn { - _StringsDownloadsEn._(this._root); + _StringsDownloadsEn._(this._root); - final Translations _root; // ignore: unused_field + 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})'; + // 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: libraries.tabs class _StringsLibrariesTabsEn { - _StringsLibrariesTabsEn._(this._root); + _StringsLibrariesTabsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get recommended => 'Recommended'; - String get browse => 'Browse'; - String get collections => 'Collections'; - String get playlists => 'Playlists'; + // Translations + String get recommended => 'Recommended'; + String get browse => 'Browse'; + String get collections => 'Collections'; + String get playlists => 'Playlists'; } // Path: libraries.groupings class _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsEn._(this._root); + _StringsLibrariesGroupingsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get all => 'All'; - String get movies => 'Movies'; - String get shows => 'TV Shows'; - String get seasons => 'Seasons'; - String get episodes => 'Episodes'; - String get folders => 'Folders'; + // Translations + String get all => 'All'; + String get movies => 'Movies'; + String get shows => 'TV Shows'; + String get seasons => 'Seasons'; + String get episodes => 'Episodes'; + String get folders => 'Folders'; } // Path: class _StringsDe implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsDe.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.de, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsDe.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.de, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsDe _root = this; // ignore: unused_field + @override late final _StringsDe _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppDe app = _StringsAppDe._(_root); - @override - late final _StringsAuthDe auth = _StringsAuthDe._(_root); - @override - late final _StringsCommonDe common = _StringsCommonDe._(_root); - @override - late final _StringsScreensDe screens = _StringsScreensDe._(_root); - @override - late final _StringsUpdateDe update = _StringsUpdateDe._(_root); - @override - late final _StringsSettingsDe settings = _StringsSettingsDe._(_root); - @override - late final _StringsSearchDe search = _StringsSearchDe._(_root); - @override - late final _StringsHotkeysDe hotkeys = _StringsHotkeysDe._(_root); - @override - late final _StringsPinEntryDe pinEntry = _StringsPinEntryDe._(_root); - @override - late final _StringsFileInfoDe fileInfo = _StringsFileInfoDe._(_root); - @override - late final _StringsMediaMenuDe mediaMenu = _StringsMediaMenuDe._(_root); - @override - late final _StringsAccessibilityDe accessibility = _StringsAccessibilityDe._(_root); - @override - late final _StringsTooltipsDe tooltips = _StringsTooltipsDe._(_root); - @override - late final _StringsVideoControlsDe videoControls = _StringsVideoControlsDe._(_root); - @override - late final _StringsUserStatusDe userStatus = _StringsUserStatusDe._(_root); - @override - late final _StringsMessagesDe messages = _StringsMessagesDe._(_root); - @override - late final _StringsSubtitlingStylingDe subtitlingStyling = _StringsSubtitlingStylingDe._(_root); - @override - late final _StringsDialogDe dialog = _StringsDialogDe._(_root); - @override - late final _StringsDiscoverDe discover = _StringsDiscoverDe._(_root); - @override - late final _StringsErrorsDe errors = _StringsErrorsDe._(_root); - @override - late final _StringsLibrariesDe libraries = _StringsLibrariesDe._(_root); - @override - late final _StringsAboutDe about = _StringsAboutDe._(_root); - @override - late final _StringsServerSelectionDe serverSelection = _StringsServerSelectionDe._(_root); - @override - late final _StringsHubDetailDe hubDetail = _StringsHubDetailDe._(_root); - @override - late final _StringsLogsDe logs = _StringsLogsDe._(_root); - @override - late final _StringsLicensesDe licenses = _StringsLicensesDe._(_root); - @override - late final _StringsNavigationDe navigation = _StringsNavigationDe._(_root); - @override - late final _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); + // 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 _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); + _StringsAppDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Lädt...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Lädt...'; } // Path: auth class _StringsAuthDe implements _StringsAuthEn { - _StringsAuthDe._(this._root); + _StringsAuthDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Mit Plex anmelden'; - @override - String get showQRCode => 'QR-Code anzeigen'; - @override - String get cancel => 'Abbrechen'; - @override - String get authenticate => 'Authentifizieren'; - @override - String get retry => 'Erneut versuchen'; - @override - String get debugEnterToken => 'Debug: Plex-Token eingeben'; - @override - String get plexTokenLabel => 'Plex-Auth-Token'; - @override - String get plexTokenHint => 'Plex.tv-Token eingeben'; - @override - String get authenticationTimeout => 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; - @override - String get scanQRCodeInstruction => - 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; - @override - String get waitingForAuth => 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; + // Translations + @override String get signInWithPlex => 'Mit Plex anmelden'; + @override String get showQRCode => 'QR-Code anzeigen'; + @override String get cancel => 'Abbrechen'; + @override String get authenticate => 'Authentifizieren'; + @override String get retry => 'Erneut versuchen'; + @override String get debugEnterToken => 'Debug: Plex-Token eingeben'; + @override String get plexTokenLabel => 'Plex-Auth-Token'; + @override String get plexTokenHint => 'Plex.tv-Token eingeben'; + @override String get authenticationTimeout => 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; + @override String get scanQRCodeInstruction => 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; + @override String get waitingForAuth => 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; } // Path: common class _StringsCommonDe implements _StringsCommonEn { - _StringsCommonDe._(this._root); + _StringsCommonDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Abbrechen'; - @override - String get save => 'Speichern'; - @override - String get close => 'Schließen'; - @override - String get clear => 'Leeren'; - @override - String get reset => 'Zurücksetzen'; - @override - String get later => 'Später'; - @override - String get submit => 'Senden'; - @override - String get confirm => 'Bestätigen'; - @override - String get retry => 'Erneut versuchen'; - @override - String get 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...'; + // 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); + _StringsScreensDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Lizenzen'; - @override - String get selectServer => 'Server auswählen'; - @override - String get switchProfile => 'Profil wechseln'; - @override - String get subtitleStyling => 'Untertitel-Stil'; - @override - String get search => 'Suche'; - @override - String get logs => 'Protokolle'; + // Translations + @override String get licenses => 'Lizenzen'; + @override String get selectServer => 'Server auswählen'; + @override String get switchProfile => 'Profil wechseln'; + @override String get subtitleStyling => 'Untertitel-Stil'; + @override String get search => 'Suche'; + @override String get logs => 'Protokolle'; } // Path: update class _StringsUpdateDe implements _StringsUpdateEn { - _StringsUpdateDe._(this._root); + _StringsUpdateDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get available => 'Update verfügbar'; - @override - String versionAvailable({required Object version}) => 'Version ${version} ist verfügbar'; - @override - String currentVersion({required Object version}) => 'Aktuell: ${version}'; - @override - String get skipVersion => 'Diese Version überspringen'; - @override - String get viewRelease => 'Release anzeigen'; - @override - String get latestVersion => 'Aktuellste Version installiert'; - @override - String get checkFailed => 'Fehler bei der Updateprüfung'; + // Translations + @override String get available => 'Update verfügbar'; + @override String versionAvailable({required Object version}) => 'Version ${version} ist verfügbar'; + @override String currentVersion({required Object version}) => 'Aktuell: ${version}'; + @override String get skipVersion => 'Diese Version überspringen'; + @override String get viewRelease => 'Release anzeigen'; + @override String get latestVersion => 'Aktuellste Version installiert'; + @override String get checkFailed => 'Fehler bei der Updateprüfung'; } // Path: settings class _StringsSettingsDe implements _StringsSettingsEn { - _StringsSettingsDe._(this._root); + _StringsSettingsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Einstellungen'; - @override - String get language => 'Sprache'; - @override - String get theme => 'Design'; - @override - String get appearance => 'Darstellung'; - @override - String get videoPlayback => 'Videowiedergabe'; - @override - String get advanced => 'Erweitert'; - @override - String get useSeasonPostersDescription => 'Staffelposter statt Serienposter für Episoden anzeigen'; - @override - String get showHeroSectionDescription => 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; - @override - String get secondsLabel => 'Sekunden'; - @override - String get minutesLabel => 'Minuten'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; - @override - String get systemTheme => 'System'; - @override - String get systemThemeDescription => 'Systemeinstellungen folgen'; - @override - String get lightTheme => 'Hell'; - @override - String get darkTheme => 'Dunkel'; - @override - String get libraryDensity => 'Mediathekdichte'; - @override - String get compact => 'Kompakt'; - @override - String get compactDescription => 'Kleinere Karten, mehr Elemente sichtbar'; - @override - String get normal => 'Normal'; - @override - String get normalDescription => 'Standardgröße'; - @override - String get comfortable => 'Großzügig'; - @override - String get comfortableDescription => 'Größere Karten, weniger Elemente sichtbar'; - @override - String get viewMode => 'Ansichtsmodus'; - @override - String get gridView => 'Raster'; - @override - String get gridViewDescription => 'Elemente im Raster anzeigen'; - @override - String get listView => 'Liste'; - @override - String get listViewDescription => 'Elemente in Listenansicht anzeigen'; - @override - String get useSeasonPosters => 'Staffelposter verwenden'; - @override - String get showHeroSection => 'Hero-Bereich anzeigen'; - @override - String get hardwareDecoding => 'Hardware-Decodierung'; - @override - String get hardwareDecodingDescription => 'Hardwarebeschleunigung verwenden, sofern verfügbar'; - @override - String get bufferSize => 'Puffergröße'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Untertitel-Stil'; - @override - String get subtitleStylingDescription => 'Aussehen von Untertiteln anpassen'; - @override - String get smallSkipDuration => 'Kleine Sprungdauer'; - @override - String get largeSkipDuration => 'Große Sprungdauer'; - @override - String secondsUnit({required Object seconds}) => '${seconds} Sekunden'; - @override - String get defaultSleepTimer => 'Standard-Sleep-Timer'; - @override - String minutesUnit({required Object minutes}) => '${minutes} Minuten'; - @override - String get rememberTrackSelections => 'Spurauswahl pro Serie/Film merken'; - @override - String get rememberTrackSelectionsDescription => - 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; - @override - String get 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.'; + // 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 useSeasonPostersDescription => 'Staffelposter statt Serienposter für Episoden anzeigen'; + @override String get showHeroSectionDescription => 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; + @override String get secondsLabel => 'Sekunden'; + @override String get minutesLabel => 'Minuten'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; + @override String get systemTheme => 'System'; + @override String get systemThemeDescription => 'Systemeinstellungen folgen'; + @override String get lightTheme => 'Hell'; + @override String get darkTheme => 'Dunkel'; + @override String get libraryDensity => 'Mediathekdichte'; + @override String get compact => 'Kompakt'; + @override String get compactDescription => 'Kleinere Karten, mehr Elemente sichtbar'; + @override String get normal => 'Normal'; + @override String get normalDescription => 'Standardgröße'; + @override String get comfortable => 'Großzügig'; + @override String get comfortableDescription => 'Größere Karten, weniger Elemente sichtbar'; + @override String get viewMode => 'Ansichtsmodus'; + @override String get gridView => 'Raster'; + @override String get gridViewDescription => 'Elemente im Raster anzeigen'; + @override String get listView => 'Liste'; + @override String get listViewDescription => 'Elemente in Listenansicht anzeigen'; + @override String get useSeasonPosters => 'Staffelposter verwenden'; + @override String get showHeroSection => 'Hero-Bereich anzeigen'; + @override String get hardwareDecoding => 'Hardware-Decodierung'; + @override String get hardwareDecodingDescription => 'Hardwarebeschleunigung verwenden, sofern verfügbar'; + @override String get bufferSize => 'Puffergröße'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Untertitel-Stil'; + @override String get subtitleStylingDescription => 'Aussehen von Untertiteln anpassen'; + @override String get smallSkipDuration => 'Kleine Sprungdauer'; + @override String get largeSkipDuration => 'Große Sprungdauer'; + @override String secondsUnit({required Object seconds}) => '${seconds} Sekunden'; + @override String get defaultSleepTimer => 'Standard-Sleep-Timer'; + @override String minutesUnit({required Object minutes}) => '${minutes} Minuten'; + @override String get rememberTrackSelections => 'Spurauswahl pro Serie/Film merken'; + @override String get rememberTrackSelectionsDescription => 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; + @override String get 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.'; } // Path: search class _StringsSearchDe implements _StringsSearchEn { - _StringsSearchDe._(this._root); + _StringsSearchDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get hint => 'Filme, Serien, Musik suchen...'; - @override - String get tryDifferentTerm => 'Anderen Suchbegriff versuchen'; - @override - String get searchYourMedia => 'In den eigenen Medien suchen'; - @override - String get enterTitleActorOrKeyword => 'Titel, Schauspieler oder Stichwort eingeben'; + // Translations + @override String get hint => 'Filme, Serien, Musik suchen...'; + @override String get tryDifferentTerm => 'Anderen Suchbegriff versuchen'; + @override String get searchYourMedia => 'In den eigenen Medien suchen'; + @override String get enterTitleActorOrKeyword => 'Titel, Schauspieler oder Stichwort eingeben'; } // Path: hotkeys class _StringsHotkeysDe implements _StringsHotkeysEn { - _StringsHotkeysDe._(this._root); + _StringsHotkeysDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; - @override - String get clearShortcut => 'Kürzel löschen'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; + @override String get clearShortcut => 'Kürzel löschen'; } // Path: pinEntry class _StringsPinEntryDe implements _StringsPinEntryEn { - _StringsPinEntryDe._(this._root); + _StringsPinEntryDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'PIN eingeben'; - @override - String get showPin => 'PIN anzeigen'; - @override - String get hidePin => 'PIN verbergen'; + // Translations + @override String get enterPin => 'PIN eingeben'; + @override String get showPin => 'PIN anzeigen'; + @override String get hidePin => 'PIN verbergen'; } // Path: fileInfo class _StringsFileInfoDe implements _StringsFileInfoEn { - _StringsFileInfoDe._(this._root); + _StringsFileInfoDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Dateiinfo'; - @override - String get video => 'Video'; - @override - String get audio => 'Audio'; - @override - String get file => 'Datei'; - @override - String get advanced => 'Erweitert'; - @override - String get codec => 'Codec'; - @override - String get resolution => 'Auflösung'; - @override - String get bitrate => 'Bitrate'; - @override - String get frameRate => 'Bildrate'; - @override - String get aspectRatio => 'Seitenverhältnis'; - @override - String get profile => 'Profil'; - @override - String get bitDepth => 'Farbtiefe'; - @override - String get colorSpace => 'Farbraum'; - @override - String get colorRange => 'Farbbereich'; - @override - String get colorPrimaries => 'Primärfarben'; - @override - String get chromaSubsampling => 'Chroma-Subsampling'; - @override - String get channels => 'Kanäle'; - @override - String get path => 'Pfad'; - @override - String get size => 'Größe'; - @override - String get container => 'Container'; - @override - String get duration => 'Dauer'; - @override - String get optimizedForStreaming => 'Für Streaming optimiert'; - @override - String get has64bitOffsets => '64-Bit-Offsets'; + // Translations + @override String get title => 'Dateiinfo'; + @override String get video => 'Video'; + @override String get audio => 'Audio'; + @override String get file => 'Datei'; + @override String get advanced => 'Erweitert'; + @override String get codec => 'Codec'; + @override String get resolution => 'Auflösung'; + @override String get bitrate => 'Bitrate'; + @override String get frameRate => 'Bildrate'; + @override String get aspectRatio => 'Seitenverhältnis'; + @override String get profile => 'Profil'; + @override String get bitDepth => 'Farbtiefe'; + @override String get colorSpace => 'Farbraum'; + @override String get colorRange => 'Farbbereich'; + @override String get colorPrimaries => 'Primärfarben'; + @override String get chromaSubsampling => 'Chroma-Subsampling'; + @override String get channels => 'Kanäle'; + @override String get path => 'Pfad'; + @override String get size => 'Größe'; + @override String get container => 'Container'; + @override String get duration => 'Dauer'; + @override String get optimizedForStreaming => 'Für Streaming optimiert'; + @override String get has64bitOffsets => '64-Bit-Offsets'; } // Path: mediaMenu class _StringsMediaMenuDe implements _StringsMediaMenuEn { - _StringsMediaMenuDe._(this._root); + _StringsMediaMenuDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Als gesehen markieren'; - @override - String get markAsUnwatched => 'Als ungesehen markieren'; - @override - String get removeFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernen'; - @override - String get goToSeries => 'Zur Serie'; - @override - String get goToSeason => 'Zur Staffel'; - @override - String get shufflePlay => 'Zufallswiedergabe'; - @override - String get fileInfo => 'Dateiinfo'; + // Translations + @override String get markAsWatched => 'Als gesehen markieren'; + @override String get markAsUnwatched => 'Als ungesehen markieren'; + @override String get removeFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernen'; + @override String get goToSeries => 'Zur Serie'; + @override String get goToSeason => 'Zur Staffel'; + @override String get shufflePlay => 'Zufallswiedergabe'; + @override String get fileInfo => 'Dateiinfo'; } // Path: accessibility class _StringsAccessibilityDe implements _StringsAccessibilityEn { - _StringsAccessibilityDe._(this._root); + _StringsAccessibilityDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, Film'; - @override - String mediaCardShow({required Object title}) => '${title}, Serie'; - @override - String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'angesehen'; - @override - String mediaCardPartiallyWatched({required Object percent}) => '${percent} Prozent angesehen'; - @override - String get mediaCardUnwatched => 'ungeschaut'; - @override - String get tapToPlay => 'Zum Abspielen tippen'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, Film'; + @override String mediaCardShow({required Object title}) => '${title}, Serie'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'angesehen'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} Prozent angesehen'; + @override String get mediaCardUnwatched => 'ungeschaut'; + @override String get tapToPlay => 'Zum Abspielen tippen'; } // Path: tooltips class _StringsTooltipsDe implements _StringsTooltipsEn { - _StringsTooltipsDe._(this._root); + _StringsTooltipsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Zufallswiedergabe'; - @override - String get markAsWatched => 'Als gesehen markieren'; - @override - String get markAsUnwatched => 'Als ungesehen markieren'; + // Translations + @override String get shufflePlay => 'Zufallswiedergabe'; + @override String get markAsWatched => 'Als gesehen markieren'; + @override String get markAsUnwatched => 'Als ungesehen markieren'; } // Path: videoControls class _StringsVideoControlsDe implements _StringsVideoControlsEn { - _StringsVideoControlsDe._(this._root); + _StringsVideoControlsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Audio'; - @override - String get subtitlesLabel => 'Untertitel'; - @override - String get resetToZero => 'Auf 0 ms zurücksetzen'; - @override - String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} spielt später'; - @override - String playsEarlier({required Object label}) => '${label} spielt früher'; - @override - String get noOffset => 'Kein Offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Bild füllen'; - @override - String get stretch => 'Strecken'; - @override - String get lockRotation => 'Rotation sperren'; - @override - String get unlockRotation => 'Rotation entsperren'; - @override - String get sleepTimer => 'Schlaftimer'; - @override - String get timerActive => 'Schlaftimer aktiv'; - @override - String playbackWillPauseIn({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; - @override - String get sleepTimerCompleted => 'Schlaftimer abgelaufen – Wiedergabe pausiert'; - @override - String get playButton => 'Wiedergeben'; - @override - String get pauseButton => 'Pause'; - @override - String seekBackwardButton({required Object seconds}) => '${seconds} Sekunden zurück'; - @override - String seekForwardButton({required Object seconds}) => '${seconds} Sekunden vor'; - @override - String get previousButton => 'Vorherige Episode'; - @override - String get nextButton => 'Nächste Episode'; - @override - String get previousChapterButton => 'Vorheriges Kapitel'; - @override - String get nextChapterButton => 'Nächstes Kapitel'; - @override - String get muteButton => 'Stumm schalten'; - @override - String get unmuteButton => 'Stummschaltung aufheben'; - @override - String get settingsButton => 'Videoeinstellungen'; - @override - String get audioTrackButton => 'Tonspuren'; - @override - String get subtitlesButton => 'Untertitel'; - @override - String get chaptersButton => 'Kapitel'; - @override - String get versionsButton => 'Videoversionen'; - @override - String get aspectRatioButton => 'Seitenverhältnis'; - @override - String get fullscreenButton => 'Vollbild aktivieren'; - @override - String get exitFullscreenButton => 'Vollbild verlassen'; - @override - String get 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'; + // Translations + @override String get audioLabel => 'Audio'; + @override String get subtitlesLabel => 'Untertitel'; + @override String get resetToZero => 'Auf 0 ms zurücksetzen'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} spielt später'; + @override String playsEarlier({required Object label}) => '${label} spielt früher'; + @override String get noOffset => 'Kein Offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Bild füllen'; + @override String get stretch => 'Strecken'; + @override String get lockRotation => 'Rotation sperren'; + @override String get unlockRotation => 'Rotation entsperren'; + @override String get sleepTimer => 'Schlaftimer'; + @override String get timerActive => 'Schlaftimer aktiv'; + @override String playbackWillPauseIn({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; + @override String get sleepTimerCompleted => 'Schlaftimer abgelaufen – Wiedergabe pausiert'; + @override String get playButton => 'Wiedergeben'; + @override String get pauseButton => 'Pause'; + @override String seekBackwardButton({required Object seconds}) => '${seconds} Sekunden zurück'; + @override String seekForwardButton({required Object seconds}) => '${seconds} Sekunden vor'; + @override String get previousButton => 'Vorherige Episode'; + @override String get nextButton => 'Nächste Episode'; + @override String get previousChapterButton => 'Vorheriges Kapitel'; + @override String get nextChapterButton => 'Nächstes Kapitel'; + @override String get muteButton => 'Stumm schalten'; + @override String get unmuteButton => 'Stummschaltung aufheben'; + @override String get settingsButton => 'Videoeinstellungen'; + @override String get audioTrackButton => 'Tonspuren'; + @override String get subtitlesButton => 'Untertitel'; + @override String get chaptersButton => 'Kapitel'; + @override String get versionsButton => 'Videoversionen'; + @override String get aspectRatioButton => 'Seitenverhältnis'; + @override String get fullscreenButton => 'Vollbild aktivieren'; + @override String get exitFullscreenButton => 'Vollbild verlassen'; + @override String get 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); + _StringsUserStatusDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get admin => 'Eigentümer'; - @override - String get restricted => 'Eingeschränkt'; - @override - String get protected => 'Geschützt'; - @override - String get current => 'AKTUELL'; + // Translations + @override String get admin => 'Eigentümer'; + @override String get restricted => 'Eingeschränkt'; + @override String get protected => 'Geschützt'; + @override String get current => 'AKTUELL'; } // Path: messages class _StringsMessagesDe implements _StringsMessagesEn { - _StringsMessagesDe._(this._root); + _StringsMessagesDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Als gesehen markiert'; - @override - String get markedAsUnwatched => 'Als ungesehen markiert'; - @override - String get 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}'; - @override - String get youAreOffline => 'Du bist offline'; - @override - String get offlineFeatureUnavailable => - 'Diese Funktion erfordert eine Internetverbindung. Deine Downloads und Einstellungen sind weiterhin verfügbar.'; + // 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); + _StringsSubtitlingStylingDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Stiloptionen'; - @override - String get fontSize => 'Schriftgröße'; - @override - String get textColor => 'Textfarbe'; - @override - String get borderSize => 'Rahmengröße'; - @override - String get borderColor => 'Rahmenfarbe'; - @override - String get backgroundOpacity => 'Hintergrunddeckkraft'; - @override - String get backgroundColor => 'Hintergrundfarbe'; + // Translations + @override String get stylingOptions => 'Stiloptionen'; + @override String get fontSize => 'Schriftgröße'; + @override String get textColor => 'Textfarbe'; + @override String get borderSize => 'Rahmengröße'; + @override String get borderColor => 'Rahmenfarbe'; + @override String get backgroundOpacity => 'Hintergrunddeckkraft'; + @override String get backgroundColor => 'Hintergrundfarbe'; } // Path: dialog class _StringsDialogDe implements _StringsDialogEn { - _StringsDialogDe._(this._root); + _StringsDialogDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Aktion bestätigen'; - @override - String get cancel => 'Abbrechen'; - @override - String get playNow => 'Jetzt abspielen'; + // 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); + _StringsDiscoverDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Entdecken'; - @override - String get switchProfile => 'Profil wechseln'; - @override - String get switchServer => 'Server wechseln'; - @override - String get logout => 'Abmelden'; - @override - String get noContentAvailable => 'Kein Inhalt verfügbar'; - @override - String get addMediaToLibraries => 'Medien zur Mediathek hinzufügen'; - @override - String get continueWatching => 'Weiterschauen'; - @override - String get 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'; + // 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); + _StringsErrorsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => 'Suche fehlgeschlagen: ${error}'; - @override - String connectionTimeout({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}'; - @override - String get connectionFailed => 'Verbindung zum Plex-Server fehlgeschlagen'; - @override - String failedToLoad({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}'; - @override - String get noClientAvailable => 'Kein Client verfügbar'; - @override - String authenticationFailed({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}'; - @override - String get couldNotLaunchUrl => 'Auth-URL konnte nicht geöffnet werden'; - @override - String get pleaseEnterToken => 'Bitte Token eingeben'; - @override - String get invalidToken => 'Ungültiges Token'; - @override - String failedToVerifyToken({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; + // 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); + _StringsLibrariesDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Mediatheken'; - @override - String get scanLibraryFiles => 'Mediatheksdateien scannen'; - @override - String get scanLibrary => 'Mediathek scannen'; - @override - String get analyze => 'Analysieren'; - @override - String get analyzeLibrary => 'Mediathek analysieren'; - @override - String get refreshMetadata => 'Metadaten aktualisieren'; - @override - String get emptyTrash => 'Papierkorb leeren'; - @override - String emptyingTrash({required Object title}) => 'Papierkorb für „${title}“ wird geleert...'; - @override - String trashEmptied({required Object title}) => 'Papierkorb für „${title}“ geleert'; - @override - String failedToEmptyTrash({required Object error}) => 'Papierkorb konnte nicht geleert werden: ${error}'; - @override - String analyzing({required Object title}) => 'Analysiere „${title}“...'; - @override - String analysisStarted({required Object title}) => 'Analyse gestartet für „${title}“'; - @override - String failedToAnalyze({required Object error}) => 'Analyse der Mediathek fehlgeschlagen: ${error}'; - @override - String get noLibrariesFound => 'Keine Mediatheken gefunden'; - @override - String get thisLibraryIsEmpty => 'Diese Mediathek ist leer'; - @override - String get all => 'Alle'; - @override - String get clearAll => 'Alle löschen'; - @override - String scanLibraryConfirm({required Object title}) => '„${title}“ wirklich scannen?'; - @override - String analyzeLibraryConfirm({required Object title}) => '„${title}“ wirklich analysieren?'; - @override - String refreshMetadataConfirm({required Object title}) => 'Metadaten für „${title}“ wirklich aktualisieren?'; - @override - String emptyTrashConfirm({required Object title}) => 'Papierkorb für „${title}“ wirklich leeren?'; - @override - String get manageLibraries => 'Mediatheken verwalten'; - @override - String get sort => 'Sortieren'; - @override - String get sortBy => 'Sortieren nach'; - @override - String get filters => 'Filter'; - @override - String get confirmActionMessage => 'Aktion wirklich durchführen?'; - @override - String get showLibrary => 'Mediathek anzeigen'; - @override - String get hideLibrary => 'Mediathek ausblenden'; - @override - String get libraryOptions => 'Mediatheksoptionen'; - @override - String get content => 'Bibliotheksinhalt'; - @override - String get selectLibrary => 'Bibliothek auswählen'; - @override - String filtersWithCount({required Object count}) => 'Filter (${count})'; - @override - String get noRecommendations => 'Keine Empfehlungen verfügbar'; - @override - String get noCollections => 'Keine Sammlungen in dieser Mediathek'; - @override - String get noFoldersFound => 'Keine Ordner gefunden'; - @override - String get folders => 'Ordner'; - @override - late final _StringsLibrariesTabsDe tabs = _StringsLibrariesTabsDe._(_root); - @override - late final _StringsLibrariesGroupingsDe groupings = _StringsLibrariesGroupingsDe._(_root); + // Translations + @override String get title => 'Mediatheken'; + @override String get scanLibraryFiles => 'Mediatheksdateien scannen'; + @override String get scanLibrary => 'Mediathek scannen'; + @override String get analyze => 'Analysieren'; + @override String get analyzeLibrary => 'Mediathek analysieren'; + @override String get refreshMetadata => 'Metadaten aktualisieren'; + @override String get emptyTrash => 'Papierkorb leeren'; + @override String emptyingTrash({required Object title}) => 'Papierkorb für „${title}“ wird geleert...'; + @override String trashEmptied({required Object title}) => 'Papierkorb für „${title}“ geleert'; + @override String failedToEmptyTrash({required Object error}) => 'Papierkorb konnte nicht geleert werden: ${error}'; + @override String analyzing({required Object title}) => 'Analysiere „${title}“...'; + @override String analysisStarted({required Object title}) => 'Analyse gestartet für „${title}“'; + @override String failedToAnalyze({required Object error}) => 'Analyse der Mediathek fehlgeschlagen: ${error}'; + @override String get noLibrariesFound => 'Keine Mediatheken gefunden'; + @override String get thisLibraryIsEmpty => 'Diese Mediathek ist leer'; + @override String get all => 'Alle'; + @override String get clearAll => 'Alle löschen'; + @override String scanLibraryConfirm({required Object title}) => '„${title}“ wirklich scannen?'; + @override String analyzeLibraryConfirm({required Object title}) => '„${title}“ wirklich analysieren?'; + @override String refreshMetadataConfirm({required Object title}) => 'Metadaten für „${title}“ wirklich aktualisieren?'; + @override String emptyTrashConfirm({required Object title}) => 'Papierkorb für „${title}“ wirklich leeren?'; + @override String get manageLibraries => 'Mediatheken verwalten'; + @override String get sort => 'Sortieren'; + @override String get sortBy => 'Sortieren nach'; + @override String get filters => 'Filter'; + @override String get confirmActionMessage => 'Aktion wirklich durchführen?'; + @override String get showLibrary => 'Mediathek anzeigen'; + @override String get hideLibrary => 'Mediathek ausblenden'; + @override String get libraryOptions => 'Mediatheksoptionen'; + @override String get content => 'Bibliotheksinhalt'; + @override String get selectLibrary => 'Bibliothek auswählen'; + @override String filtersWithCount({required Object count}) => 'Filter (${count})'; + @override String get noRecommendations => 'Keine Empfehlungen verfügbar'; + @override String get noCollections => 'Keine Sammlungen in dieser Mediathek'; + @override String get noFoldersFound => 'Keine Ordner gefunden'; + @override String get folders => 'Ordner'; + @override late final _StringsLibrariesTabsDe tabs = _StringsLibrariesTabsDe._(_root); + @override late final _StringsLibrariesGroupingsDe groupings = _StringsLibrariesGroupingsDe._(_root); } // Path: about class _StringsAboutDe implements _StringsAboutEn { - _StringsAboutDe._(this._root); + _StringsAboutDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Über'; - @override - String get openSourceLicenses => 'Open-Source-Lizenzen'; - @override - String versionLabel({required Object version}) => 'Version ${version}'; - @override - String get appDescription => 'Ein schöner Plex-Client für Flutter'; - @override - String get viewLicensesDescription => 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; + // Translations + @override String get title => 'Über'; + @override String get openSourceLicenses => 'Open-Source-Lizenzen'; + @override String versionLabel({required Object version}) => 'Version ${version}'; + @override String get appDescription => 'Ein schöner Plex-Client für Flutter'; + @override String get viewLicensesDescription => 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; } // Path: serverSelection class _StringsServerSelectionDe implements _StringsServerSelectionEn { - _StringsServerSelectionDe._(this._root); + _StringsServerSelectionDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get 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}'; + // 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); + _StringsHubDetailDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Titel'; - @override - String get releaseYear => 'Erscheinungsjahr'; - @override - String get dateAdded => 'Hinzugefügt am'; - @override - String get rating => 'Bewertung'; - @override - String get noItemsFound => 'Keine Elemente gefunden'; + // Translations + @override String get title => 'Titel'; + @override String get releaseYear => 'Erscheinungsjahr'; + @override String get dateAdded => 'Hinzugefügt am'; + @override String get rating => 'Bewertung'; + @override String get noItemsFound => 'Keine Elemente gefunden'; } // Path: logs class _StringsLogsDe implements _StringsLogsEn { - _StringsLogsDe._(this._root); + _StringsLogsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get clearLogs => 'Protokolle löschen'; - @override - String get copyLogs => 'Protokolle kopieren'; - @override - String get error => 'Fehler:'; - @override - String get stackTrace => 'Stacktrace:'; + // 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); + _StringsLicensesDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Verwandte Pakete'; - @override - String get license => 'Lizenz'; - @override - String licenseNumber({required Object number}) => 'Lizenz ${number}'; - @override - String licensesCount({required Object count}) => '${count} Lizenzen'; + // Translations + @override String get relatedPackages => 'Verwandte Pakete'; + @override String get license => 'Lizenz'; + @override String licenseNumber({required Object number}) => 'Lizenz ${number}'; + @override String licensesCount({required Object count}) => '${count} Lizenzen'; } // Path: navigation class _StringsNavigationDe implements _StringsNavigationEn { - _StringsNavigationDe._(this._root); + _StringsNavigationDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get home => 'Start'; - @override - String get search => 'Suche'; - @override - String get libraries => 'Mediatheken'; - @override - String get settings => 'Einstellungen'; - @override - String get downloads => 'Downloads'; + // 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); + _StringsDownloadsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @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})'; + // 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); + _StringsPlaylistsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Wiedergabelisten'; - @override - String get noPlaylists => 'Keine Wiedergabelisten gefunden'; - @override - String get create => 'Wiedergabeliste erstellen'; - @override - String get 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'; + // 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); + _StringsCollectionsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Sammlungen'; - @override - String get collection => 'Sammlung'; - @override - String get empty => 'Sammlung ist leer'; - @override - String get 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}'; + // 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); + _StringsWatchTogetherDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @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 inviteOthers => 'Andere einladen'; - @override - String get syncing => 'Synchronisieren...'; - @override - String get participant => 'Teilnehmer'; - @override - String get participantsPlural => 'Teilnehmer'; - @override - String get copyCode => 'Code kopieren'; - @override - String get shareInstructions => 'Teile diesen Code mit anderen, damit sie deiner Schausitzung beitreten können.'; - @override - String get codeCopied => 'Sitzungscode in Zwischenablage kopiert'; - @override - String get share => 'Teilen'; - @override - String inviteText({required Object sessionId}) => - 'Tritt meiner Gemeinsam Schauen-Sitzung bei!\n\nSitzungscode: ${sessionId}'; - @override - String get inviteSubject => 'Gemeinsam Schauen Einladung'; - @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'; + // 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'; } // Path: libraries.tabs class _StringsLibrariesTabsDe implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsDe._(this._root); + _StringsLibrariesTabsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Empfohlen'; - @override - String get browse => 'Durchsuchen'; - @override - String get collections => 'Sammlungen'; - @override - String get playlists => 'Wiedergabelisten'; + // Translations + @override String get recommended => 'Empfohlen'; + @override String get browse => 'Durchsuchen'; + @override String get collections => 'Sammlungen'; + @override String get playlists => 'Wiedergabelisten'; } // Path: libraries.groupings class _StringsLibrariesGroupingsDe implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsDe._(this._root); + _StringsLibrariesGroupingsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get all => 'Alle'; - @override - String get movies => 'Filme'; - @override - String get shows => 'Serien'; - @override - String get seasons => 'Staffeln'; - @override - String get episodes => 'Episoden'; - @override - String get folders => 'Ordner'; + // Translations + @override String get all => 'Alle'; + @override String get movies => 'Filme'; + @override String get shows => 'Serien'; + @override String get seasons => 'Staffeln'; + @override String get episodes => 'Episoden'; + @override String get folders => 'Ordner'; } // Path: class _StringsIt implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsIt.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.it, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsIt.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.it, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsIt _root = this; // ignore: unused_field + @override late final _StringsIt _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppIt app = _StringsAppIt._(_root); - @override - late final _StringsAuthIt auth = _StringsAuthIt._(_root); - @override - late final _StringsCommonIt common = _StringsCommonIt._(_root); - @override - late final _StringsScreensIt screens = _StringsScreensIt._(_root); - @override - late final _StringsUpdateIt update = _StringsUpdateIt._(_root); - @override - late final _StringsSettingsIt settings = _StringsSettingsIt._(_root); - @override - late final _StringsSearchIt search = _StringsSearchIt._(_root); - @override - late final _StringsHotkeysIt hotkeys = _StringsHotkeysIt._(_root); - @override - late final _StringsPinEntryIt pinEntry = _StringsPinEntryIt._(_root); - @override - late final _StringsFileInfoIt fileInfo = _StringsFileInfoIt._(_root); - @override - late final _StringsMediaMenuIt mediaMenu = _StringsMediaMenuIt._(_root); - @override - late final _StringsAccessibilityIt accessibility = _StringsAccessibilityIt._(_root); - @override - late final _StringsTooltipsIt tooltips = _StringsTooltipsIt._(_root); - @override - late final _StringsVideoControlsIt videoControls = _StringsVideoControlsIt._(_root); - @override - late final _StringsUserStatusIt userStatus = _StringsUserStatusIt._(_root); - @override - late final _StringsMessagesIt messages = _StringsMessagesIt._(_root); - @override - late final _StringsSubtitlingStylingIt subtitlingStyling = _StringsSubtitlingStylingIt._(_root); - @override - late final _StringsDialogIt dialog = _StringsDialogIt._(_root); - @override - late final _StringsDiscoverIt discover = _StringsDiscoverIt._(_root); - @override - late final _StringsErrorsIt errors = _StringsErrorsIt._(_root); - @override - late final _StringsLibrariesIt libraries = _StringsLibrariesIt._(_root); - @override - late final _StringsAboutIt about = _StringsAboutIt._(_root); - @override - late final _StringsServerSelectionIt serverSelection = _StringsServerSelectionIt._(_root); - @override - late final _StringsHubDetailIt hubDetail = _StringsHubDetailIt._(_root); - @override - late final _StringsLogsIt logs = _StringsLogsIt._(_root); - @override - late final _StringsLicensesIt licenses = _StringsLicensesIt._(_root); - @override - late final _StringsNavigationIt navigation = _StringsNavigationIt._(_root); - @override - late final _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); + // 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 _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); + _StringsAppIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Caricamento...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Caricamento...'; } // Path: auth class _StringsAuthIt implements _StringsAuthEn { - _StringsAuthIt._(this._root); + _StringsAuthIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Accedi con Plex'; - @override - String get showQRCode => 'Mostra QR Code'; - @override - String get cancel => 'Cancella'; - @override - String get authenticate => 'Autenticazione'; - @override - String get retry => 'Riprova'; - @override - String get debugEnterToken => 'Debug: Inserisci Token Plex'; - @override - String get plexTokenLabel => 'Token Auth Plex'; - @override - String get plexTokenHint => 'Inserisci il tuo token di Plex.tv'; - @override - String get authenticationTimeout => 'Autenticazione scaduta. Riprova.'; - @override - String get scanQRCodeInstruction => 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; - @override - String get waitingForAuth => 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; + // Translations + @override String get signInWithPlex => 'Accedi con Plex'; + @override String get showQRCode => 'Mostra QR Code'; + @override String get cancel => 'Cancella'; + @override String get authenticate => 'Autenticazione'; + @override String get retry => 'Riprova'; + @override String get debugEnterToken => 'Debug: Inserisci Token Plex'; + @override String get plexTokenLabel => 'Token Auth Plex'; + @override String get plexTokenHint => 'Inserisci il tuo token di Plex.tv'; + @override String get authenticationTimeout => 'Autenticazione scaduta. Riprova.'; + @override String get scanQRCodeInstruction => 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; + @override String get waitingForAuth => 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; } // Path: common class _StringsCommonIt implements _StringsCommonEn { - _StringsCommonIt._(this._root); + _StringsCommonIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Cancella'; - @override - String get save => 'Salva'; - @override - String get close => 'Chiudi'; - @override - String get clear => 'Pulisci'; - @override - String get reset => 'Ripristina'; - @override - String get later => 'Più tardi'; - @override - String get submit => 'Invia'; - @override - String get confirm => 'Conferma'; - @override - String get retry => 'Riprova'; - @override - String get 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...'; + // 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); + _StringsScreensIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Licenze'; - @override - String get selectServer => 'Seleziona server'; - @override - String get switchProfile => 'Cambia profilo'; - @override - String get subtitleStyling => 'Stile sottotitoli'; - @override - String get search => 'Cerca'; - @override - String get logs => 'Registro'; + // Translations + @override String get licenses => 'Licenze'; + @override String get selectServer => 'Seleziona server'; + @override String get switchProfile => 'Cambia profilo'; + @override String get subtitleStyling => 'Stile sottotitoli'; + @override String get search => 'Cerca'; + @override String get logs => 'Registro'; } // Path: update class _StringsUpdateIt implements _StringsUpdateEn { - _StringsUpdateIt._(this._root); + _StringsUpdateIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get available => 'Aggiornamento disponibile'; - @override - String versionAvailable({required Object version}) => 'Versione ${version} disponibile'; - @override - String currentVersion({required Object version}) => 'Corrente: ${version}'; - @override - String get skipVersion => 'Salta questa versione'; - @override - String get viewRelease => 'Visualizza dettagli release'; - @override - String get latestVersion => 'La versione installata è l\'ultima disponibile'; - @override - String get checkFailed => 'Impossibile controllare gli aggiornamenti'; + // Translations + @override String get available => 'Aggiornamento disponibile'; + @override String versionAvailable({required Object version}) => 'Versione ${version} disponibile'; + @override String currentVersion({required Object version}) => 'Corrente: ${version}'; + @override String get skipVersion => 'Salta questa versione'; + @override String get viewRelease => 'Visualizza dettagli release'; + @override String get latestVersion => 'La versione installata è l\'ultima disponibile'; + @override String get checkFailed => 'Impossibile controllare gli aggiornamenti'; } // Path: settings class _StringsSettingsIt implements _StringsSettingsEn { - _StringsSettingsIt._(this._root); + _StringsSettingsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Impostazioni'; - @override - String get language => 'Lingua'; - @override - String get theme => 'Tema'; - @override - String get appearance => 'Aspetto'; - @override - String get videoPlayback => 'Riproduzione video'; - @override - String get advanced => 'Avanzate'; - @override - String get useSeasonPostersDescription => - 'Mostra il poster della stagione invece del poster della serie per gli episodi'; - @override - String get showHeroSectionDescription => - 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; - @override - String get secondsLabel => 'Secondi'; - @override - String get minutesLabel => 'Minuti'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; - @override - String get systemTheme => 'Sistema'; - @override - String get systemThemeDescription => 'Segui le impostazioni di sistema'; - @override - String get lightTheme => 'Chiaro'; - @override - String get darkTheme => 'Scuro'; - @override - String get libraryDensity => 'Densità libreria'; - @override - String get compact => 'Compatta'; - @override - String get compactDescription => 'Schede più piccole, più elementi visibili'; - @override - String get normal => 'Normale'; - @override - String get normalDescription => 'Dimensione predefinita'; - @override - String get comfortable => 'Comoda'; - @override - String get comfortableDescription => 'Schede più grandi, meno elementi visibili'; - @override - String get viewMode => 'Modalità di visualizzazione'; - @override - String get gridView => 'Griglia'; - @override - String get gridViewDescription => 'Visualizza gli elementi in un layout a griglia'; - @override - String get listView => 'Elenco'; - @override - String get listViewDescription => 'Visualizza gli elementi in un layout a elenco'; - @override - String get useSeasonPosters => 'Usa poster delle stagioni'; - @override - String get showHeroSection => 'Mostra sezione principale'; - @override - String get hardwareDecoding => 'Decodifica Hardware'; - @override - String get hardwareDecodingDescription => 'Utilizza l\'accelerazione hardware quando disponibile'; - @override - String get bufferSize => 'Dimensione buffer'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Stile sottotitoli'; - @override - String get subtitleStylingDescription => 'Personalizza l\'aspetto dei sottotitoli'; - @override - String get smallSkipDuration => 'Durata skip breve'; - @override - String get largeSkipDuration => 'Durata skip lungo'; - @override - String secondsUnit({required Object seconds}) => '${seconds} secondi'; - @override - String get defaultSleepTimer => 'Timer spegnimento predefinito'; - @override - String minutesUnit({required Object minutes}) => '${minutes} minuti'; - @override - String get rememberTrackSelections => 'Ricorda selezioni tracce per serie/film'; - @override - String get rememberTrackSelectionsDescription => - 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; - @override - String get 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.'; + // 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 useSeasonPostersDescription => 'Mostra il poster della stagione invece del poster della serie per gli episodi'; + @override String get showHeroSectionDescription => 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; + @override String get secondsLabel => 'Secondi'; + @override String get minutesLabel => 'Minuti'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; + @override String get systemTheme => 'Sistema'; + @override String get systemThemeDescription => 'Segui le impostazioni di sistema'; + @override String get lightTheme => 'Chiaro'; + @override String get darkTheme => 'Scuro'; + @override String get libraryDensity => 'Densità libreria'; + @override String get compact => 'Compatta'; + @override String get compactDescription => 'Schede più piccole, più elementi visibili'; + @override String get normal => 'Normale'; + @override String get normalDescription => 'Dimensione predefinita'; + @override String get comfortable => 'Comoda'; + @override String get comfortableDescription => 'Schede più grandi, meno elementi visibili'; + @override String get viewMode => 'Modalità di visualizzazione'; + @override String get gridView => 'Griglia'; + @override String get gridViewDescription => 'Visualizza gli elementi in un layout a griglia'; + @override String get listView => 'Elenco'; + @override String get listViewDescription => 'Visualizza gli elementi in un layout a elenco'; + @override String get useSeasonPosters => 'Usa poster delle stagioni'; + @override String get showHeroSection => 'Mostra sezione principale'; + @override String get hardwareDecoding => 'Decodifica Hardware'; + @override String get hardwareDecodingDescription => 'Utilizza l\'accelerazione hardware quando disponibile'; + @override String get bufferSize => 'Dimensione buffer'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Stile sottotitoli'; + @override String get subtitleStylingDescription => 'Personalizza l\'aspetto dei sottotitoli'; + @override String get smallSkipDuration => 'Durata skip breve'; + @override String get largeSkipDuration => 'Durata skip lungo'; + @override String secondsUnit({required Object seconds}) => '${seconds} secondi'; + @override String get defaultSleepTimer => 'Timer spegnimento predefinito'; + @override String minutesUnit({required Object minutes}) => '${minutes} minuti'; + @override String get rememberTrackSelections => 'Ricorda selezioni tracce per serie/film'; + @override String get rememberTrackSelectionsDescription => 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; + @override String get 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.'; } // Path: search class _StringsSearchIt implements _StringsSearchEn { - _StringsSearchIt._(this._root); + _StringsSearchIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get hint => 'Cerca film. spettacoli, musica...'; - @override - String get tryDifferentTerm => 'Prova altri termini di ricerca'; - @override - String get searchYourMedia => 'Cerca nei tuoi media'; - @override - String get enterTitleActorOrKeyword => 'Inserisci un titolo, attore o parola chiave'; + // Translations + @override String get hint => 'Cerca film. spettacoli, musica...'; + @override String get tryDifferentTerm => 'Prova altri termini di ricerca'; + @override String get searchYourMedia => 'Cerca nei tuoi media'; + @override String get enterTitleActorOrKeyword => 'Inserisci un titolo, attore o parola chiave'; } // Path: hotkeys class _StringsHotkeysIt implements _StringsHotkeysEn { - _StringsHotkeysIt._(this._root); + _StringsHotkeysIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; - @override - String get clearShortcut => 'Elimina scorciatoia'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; + @override String get clearShortcut => 'Elimina scorciatoia'; } // Path: pinEntry class _StringsPinEntryIt implements _StringsPinEntryEn { - _StringsPinEntryIt._(this._root); + _StringsPinEntryIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'Inserisci PIN'; - @override - String get showPin => 'Mostra PIN'; - @override - String get hidePin => 'Nascondi PIN'; + // Translations + @override String get enterPin => 'Inserisci PIN'; + @override String get showPin => 'Mostra PIN'; + @override String get hidePin => 'Nascondi PIN'; } // Path: fileInfo class _StringsFileInfoIt implements _StringsFileInfoEn { - _StringsFileInfoIt._(this._root); + _StringsFileInfoIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Info sul file'; - @override - String get video => 'Video'; - @override - String get audio => 'Audio'; - @override - String get file => 'File'; - @override - String get advanced => 'Avanzate'; - @override - String get codec => 'Codec'; - @override - String get resolution => 'Risoluzione'; - @override - String get bitrate => 'Bitrate'; - @override - String get frameRate => 'Frame Rate'; - @override - String get aspectRatio => 'Aspect Ratio'; - @override - String get profile => 'Profilo'; - @override - String get bitDepth => 'Profondità colore'; - @override - String get colorSpace => 'Spazio colore'; - @override - String get colorRange => 'Gamma colori'; - @override - String get colorPrimaries => 'Colori primari'; - @override - String get chromaSubsampling => 'Sottocampionamento cromatico'; - @override - String get channels => 'Canali'; - @override - String get path => 'Percorso'; - @override - String get size => 'Dimensione'; - @override - String get container => 'Contenitore'; - @override - String get duration => 'Durata'; - @override - String get optimizedForStreaming => 'Ottimizzato per lo streaming'; - @override - String get has64bitOffsets => 'Offset a 64-bit'; + // Translations + @override String get title => 'Info sul file'; + @override String get video => 'Video'; + @override String get audio => 'Audio'; + @override String get file => 'File'; + @override String get advanced => 'Avanzate'; + @override String get codec => 'Codec'; + @override String get resolution => 'Risoluzione'; + @override String get bitrate => 'Bitrate'; + @override String get frameRate => 'Frame Rate'; + @override String get aspectRatio => 'Aspect Ratio'; + @override String get profile => 'Profilo'; + @override String get bitDepth => 'Profondità colore'; + @override String get colorSpace => 'Spazio colore'; + @override String get colorRange => 'Gamma colori'; + @override String get colorPrimaries => 'Colori primari'; + @override String get chromaSubsampling => 'Sottocampionamento cromatico'; + @override String get channels => 'Canali'; + @override String get path => 'Percorso'; + @override String get size => 'Dimensione'; + @override String get container => 'Contenitore'; + @override String get duration => 'Durata'; + @override String get optimizedForStreaming => 'Ottimizzato per lo streaming'; + @override String get has64bitOffsets => 'Offset a 64-bit'; } // Path: mediaMenu class _StringsMediaMenuIt implements _StringsMediaMenuEn { - _StringsMediaMenuIt._(this._root); + _StringsMediaMenuIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Segna come visto'; - @override - String get markAsUnwatched => 'Segna come non visto'; - @override - String get removeFromContinueWatching => 'Rimuovi da Continua a guardare'; - @override - String get goToSeries => 'Vai alle serie'; - @override - String get goToSeason => 'Vai alla stagione'; - @override - String get shufflePlay => 'Riproduzione casuale'; - @override - String get fileInfo => 'Info sul file'; + // Translations + @override String get markAsWatched => 'Segna come visto'; + @override String get markAsUnwatched => 'Segna come non visto'; + @override String get removeFromContinueWatching => 'Rimuovi da Continua a guardare'; + @override String get goToSeries => 'Vai alle serie'; + @override String get goToSeason => 'Vai alla stagione'; + @override String get shufflePlay => 'Riproduzione casuale'; + @override String get fileInfo => 'Info sul file'; } // Path: accessibility class _StringsAccessibilityIt implements _StringsAccessibilityEn { - _StringsAccessibilityIt._(this._root); + _StringsAccessibilityIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, film'; - @override - String mediaCardShow({required Object title}) => '${title}, serie TV'; - @override - String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'visto'; - @override - String mediaCardPartiallyWatched({required Object percent}) => '${percent} percento visto'; - @override - String get mediaCardUnwatched => 'non visto'; - @override - String get tapToPlay => 'Tocca per riprodurre'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, film'; + @override String mediaCardShow({required Object title}) => '${title}, serie TV'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'visto'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} percento visto'; + @override String get mediaCardUnwatched => 'non visto'; + @override String get tapToPlay => 'Tocca per riprodurre'; } // Path: tooltips class _StringsTooltipsIt implements _StringsTooltipsEn { - _StringsTooltipsIt._(this._root); + _StringsTooltipsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Riproduzione casuale'; - @override - String get markAsWatched => 'Segna come visto'; - @override - String get markAsUnwatched => 'Segna come non visto'; + // Translations + @override String get shufflePlay => 'Riproduzione casuale'; + @override String get markAsWatched => 'Segna come visto'; + @override String get markAsUnwatched => 'Segna come non visto'; } // Path: videoControls class _StringsVideoControlsIt implements _StringsVideoControlsEn { - _StringsVideoControlsIt._(this._root); + _StringsVideoControlsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Audio'; - @override - String get subtitlesLabel => 'Sottotitoli'; - @override - String get resetToZero => 'Riporta a 0ms'; - @override - String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} riprodotto dopo'; - @override - String playsEarlier({required Object label}) => '${label} riprodotto prima'; - @override - String get noOffset => 'Nessun offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Riempi schermo'; - @override - String get stretch => 'Allunga'; - @override - String get lockRotation => 'Blocca rotazione'; - @override - String get unlockRotation => 'Sblocca rotazione'; - @override - String get sleepTimer => 'Timer di spegnimento'; - @override - String get timerActive => 'Timer attivo'; - @override - String playbackWillPauseIn({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; - @override - String get sleepTimerCompleted => 'Timer di spegnimento completato - riproduzione in pausa'; - @override - String get playButton => 'Riproduci'; - @override - String get pauseButton => 'Pausa'; - @override - String seekBackwardButton({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; - @override - String seekForwardButton({required Object seconds}) => 'Avanza di ${seconds} secondi'; - @override - String get previousButton => 'Episodio precedente'; - @override - String get nextButton => 'Episodio successivo'; - @override - String get previousChapterButton => 'Capitolo precedente'; - @override - String get nextChapterButton => 'Capitolo successivo'; - @override - String get muteButton => 'Silenzia'; - @override - String get unmuteButton => 'Riattiva audio'; - @override - String get settingsButton => 'Impostazioni video'; - @override - String get audioTrackButton => 'Tracce audio'; - @override - String get subtitlesButton => 'Sottotitoli'; - @override - String get chaptersButton => 'Capitoli'; - @override - String get versionsButton => 'Versioni video'; - @override - String get aspectRatioButton => 'Proporzioni'; - @override - String get fullscreenButton => 'Attiva schermo intero'; - @override - String get exitFullscreenButton => 'Esci da schermo intero'; - @override - String get 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'; + // Translations + @override String get audioLabel => 'Audio'; + @override String get subtitlesLabel => 'Sottotitoli'; + @override String get resetToZero => 'Riporta a 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} riprodotto dopo'; + @override String playsEarlier({required Object label}) => '${label} riprodotto prima'; + @override String get noOffset => 'Nessun offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Riempi schermo'; + @override String get stretch => 'Allunga'; + @override String get lockRotation => 'Blocca rotazione'; + @override String get unlockRotation => 'Sblocca rotazione'; + @override String get sleepTimer => 'Timer di spegnimento'; + @override String get timerActive => 'Timer attivo'; + @override String playbackWillPauseIn({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; + @override String get sleepTimerCompleted => 'Timer di spegnimento completato - riproduzione in pausa'; + @override String get playButton => 'Riproduci'; + @override String get pauseButton => 'Pausa'; + @override String seekBackwardButton({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; + @override String seekForwardButton({required Object seconds}) => 'Avanza di ${seconds} secondi'; + @override String get previousButton => 'Episodio precedente'; + @override String get nextButton => 'Episodio successivo'; + @override String get previousChapterButton => 'Capitolo precedente'; + @override String get nextChapterButton => 'Capitolo successivo'; + @override String get muteButton => 'Silenzia'; + @override String get unmuteButton => 'Riattiva audio'; + @override String get settingsButton => 'Impostazioni video'; + @override String get audioTrackButton => 'Tracce audio'; + @override String get subtitlesButton => 'Sottotitoli'; + @override String get chaptersButton => 'Capitoli'; + @override String get versionsButton => 'Versioni video'; + @override String get aspectRatioButton => 'Proporzioni'; + @override String get fullscreenButton => 'Attiva schermo intero'; + @override String get exitFullscreenButton => 'Esci da schermo intero'; + @override String get 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); + _StringsUserStatusIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get admin => 'Admin'; - @override - String get restricted => 'Limitato'; - @override - String get protected => 'Protetto'; - @override - String get current => 'ATTUALE'; + // Translations + @override String get admin => 'Admin'; + @override String get restricted => 'Limitato'; + @override String get protected => 'Protetto'; + @override String get current => 'ATTUALE'; } // Path: messages class _StringsMessagesIt implements _StringsMessagesEn { - _StringsMessagesIt._(this._root); + _StringsMessagesIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Segna come visto'; - @override - String get markedAsUnwatched => 'Segna come non visto'; - @override - String get 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}'; - @override - String get youAreOffline => 'Sei offline'; - @override - String get offlineFeatureUnavailable => - 'Questa funzione richiede una connessione internet. I tuoi download e le impostazioni sono ancora disponibili.'; + // 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); + _StringsSubtitlingStylingIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Opzioni stile'; - @override - String get fontSize => 'Dimensione'; - @override - String get textColor => 'Colore testo'; - @override - String get borderSize => 'Dimensione bordo'; - @override - String get borderColor => 'Colore bordo'; - @override - String get backgroundOpacity => 'Opacità sfondo'; - @override - String get backgroundColor => 'Colore sfondo'; + // Translations + @override String get stylingOptions => 'Opzioni stile'; + @override String get fontSize => 'Dimensione'; + @override String get textColor => 'Colore testo'; + @override String get borderSize => 'Dimensione bordo'; + @override String get borderColor => 'Colore bordo'; + @override String get backgroundOpacity => 'Opacità sfondo'; + @override String get backgroundColor => 'Colore sfondo'; } // Path: dialog class _StringsDialogIt implements _StringsDialogEn { - _StringsDialogIt._(this._root); + _StringsDialogIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Conferma azione'; - @override - String get cancel => 'Cancella'; - @override - String get playNow => 'Riproduci ora'; + // 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); + _StringsDiscoverIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Esplora'; - @override - String get switchProfile => 'Cambia profilo'; - @override - String get switchServer => 'Cambia server'; - @override - String get logout => 'Disconnetti'; - @override - String get noContentAvailable => 'Nessun contenuto disponibile'; - @override - String get addMediaToLibraries => 'Aggiungi alcuni file multimediali alle tue librerie'; - @override - String get continueWatching => 'Continua a guardare'; - @override - String get 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'; + // 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); + _StringsErrorsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => 'Ricerca fallita: ${error}'; - @override - String connectionTimeout({required Object context}) => 'Timeout connessione durante caricamento di ${context}'; - @override - String get connectionFailed => 'Impossibile connettersi al server Plex.'; - @override - String failedToLoad({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}'; - @override - String get noClientAvailable => 'Nessun client disponibile'; - @override - String authenticationFailed({required Object error}) => 'Autenticazione fallita: ${error}'; - @override - String get couldNotLaunchUrl => 'Impossibile avviare URL di autenticazione'; - @override - String get pleaseEnterToken => 'Inserisci token'; - @override - String get invalidToken => 'Token non valido'; - @override - String failedToVerifyToken({required Object error}) => 'Verifica token fallita: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => 'Impossibile passare a ${displayName}'; + // 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); + _StringsLibrariesIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Librerie'; - @override - String get scanLibraryFiles => 'Scansiona file libreria'; - @override - String get scanLibrary => 'Scansiona libreria'; - @override - String get analyze => 'Analizza'; - @override - String get analyzeLibrary => 'Analizza libreria'; - @override - String get refreshMetadata => 'Aggiorna metadati'; - @override - String get emptyTrash => 'Svuota cestino'; - @override - String emptyingTrash({required Object title}) => 'Svuotamento cestino per "${title}"...'; - @override - String trashEmptied({required Object title}) => 'Cestino svuotato per "${title}"'; - @override - String failedToEmptyTrash({required Object error}) => 'Impossibile svuotare cestino: ${error}'; - @override - String analyzing({required Object title}) => 'Analisi "${title}"...'; - @override - String analysisStarted({required Object title}) => 'Analisi iniziata per "${title}"'; - @override - String failedToAnalyze({required Object error}) => 'Impossibile analizzare libreria: ${error}'; - @override - String get noLibrariesFound => 'Nessuna libreria trovata'; - @override - String get thisLibraryIsEmpty => 'Questa libreria è vuota'; - @override - String get all => 'Tutto'; - @override - String get clearAll => 'Cancella tutto'; - @override - String scanLibraryConfirm({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?'; - @override - String analyzeLibraryConfirm({required Object title}) => 'Sei sicuro di voler analizzare "${title}"?'; - @override - String refreshMetadataConfirm({required Object title}) => 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; - @override - String emptyTrashConfirm({required Object title}) => 'Sei sicuro di voler svuotare il cestino per "${title}"?'; - @override - String get manageLibraries => 'Gestisci librerie'; - @override - String get sort => 'Ordina'; - @override - String get sortBy => 'Ordina per'; - @override - String get filters => 'Filtri'; - @override - String get confirmActionMessage => 'Sei sicuro di voler eseguire questa azione?'; - @override - String get showLibrary => 'Mostra libreria'; - @override - String get hideLibrary => 'Nascondi libreria'; - @override - String get libraryOptions => 'Opzioni libreria'; - @override - String get content => 'contenuto della libreria'; - @override - String get selectLibrary => 'Seleziona libreria'; - @override - String filtersWithCount({required Object count}) => 'Filtri (${count})'; - @override - String get noRecommendations => 'Nessun consiglio disponibile'; - @override - String get noCollections => 'Nessuna raccolta in questa libreria'; - @override - String get noFoldersFound => 'Nessuna cartella trovata'; - @override - String get folders => 'cartelle'; - @override - late final _StringsLibrariesTabsIt tabs = _StringsLibrariesTabsIt._(_root); - @override - late final _StringsLibrariesGroupingsIt groupings = _StringsLibrariesGroupingsIt._(_root); + // Translations + @override String get title => 'Librerie'; + @override String get scanLibraryFiles => 'Scansiona file libreria'; + @override String get scanLibrary => 'Scansiona libreria'; + @override String get analyze => 'Analizza'; + @override String get analyzeLibrary => 'Analizza libreria'; + @override String get refreshMetadata => 'Aggiorna metadati'; + @override String get emptyTrash => 'Svuota cestino'; + @override String emptyingTrash({required Object title}) => 'Svuotamento cestino per "${title}"...'; + @override String trashEmptied({required Object title}) => 'Cestino svuotato per "${title}"'; + @override String failedToEmptyTrash({required Object error}) => 'Impossibile svuotare cestino: ${error}'; + @override String analyzing({required Object title}) => 'Analisi "${title}"...'; + @override String analysisStarted({required Object title}) => 'Analisi iniziata per "${title}"'; + @override String failedToAnalyze({required Object error}) => 'Impossibile analizzare libreria: ${error}'; + @override String get noLibrariesFound => 'Nessuna libreria trovata'; + @override String get thisLibraryIsEmpty => 'Questa libreria è vuota'; + @override String get all => 'Tutto'; + @override String get clearAll => 'Cancella tutto'; + @override String scanLibraryConfirm({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?'; + @override String analyzeLibraryConfirm({required Object title}) => 'Sei sicuro di voler analizzare "${title}"?'; + @override String refreshMetadataConfirm({required Object title}) => 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; + @override String emptyTrashConfirm({required Object title}) => 'Sei sicuro di voler svuotare il cestino per "${title}"?'; + @override String get manageLibraries => 'Gestisci librerie'; + @override String get sort => 'Ordina'; + @override String get sortBy => 'Ordina per'; + @override String get filters => 'Filtri'; + @override String get confirmActionMessage => 'Sei sicuro di voler eseguire questa azione?'; + @override String get showLibrary => 'Mostra libreria'; + @override String get hideLibrary => 'Nascondi libreria'; + @override String get libraryOptions => 'Opzioni libreria'; + @override String get content => 'contenuto della libreria'; + @override String get selectLibrary => 'Seleziona libreria'; + @override String filtersWithCount({required Object count}) => 'Filtri (${count})'; + @override String get noRecommendations => 'Nessun consiglio disponibile'; + @override String get noCollections => 'Nessuna raccolta in questa libreria'; + @override String get noFoldersFound => 'Nessuna cartella trovata'; + @override String get folders => 'cartelle'; + @override late final _StringsLibrariesTabsIt tabs = _StringsLibrariesTabsIt._(_root); + @override late final _StringsLibrariesGroupingsIt groupings = _StringsLibrariesGroupingsIt._(_root); } // Path: about class _StringsAboutIt implements _StringsAboutEn { - _StringsAboutIt._(this._root); + _StringsAboutIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Informazioni'; - @override - String get openSourceLicenses => 'Licenze Open Source'; - @override - String versionLabel({required Object version}) => 'Versione ${version}'; - @override - String get appDescription => 'Un bellissimo client Plex per Flutter'; - @override - String get viewLicensesDescription => 'Visualizza le licenze delle librerie di terze parti'; + // Translations + @override String get title => 'Informazioni'; + @override String get openSourceLicenses => 'Licenze Open Source'; + @override String versionLabel({required Object version}) => 'Versione ${version}'; + @override String get appDescription => 'Un bellissimo client Plex per Flutter'; + @override String get viewLicensesDescription => 'Visualizza le licenze delle librerie di terze parti'; } // Path: serverSelection class _StringsServerSelectionIt implements _StringsServerSelectionEn { - _StringsServerSelectionIt._(this._root); + _StringsServerSelectionIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get 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}'; + // 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); + _StringsHubDetailIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Titolo'; - @override - String get releaseYear => 'Anno rilascio'; - @override - String get dateAdded => 'Data aggiunta'; - @override - String get rating => 'Valutazione'; - @override - String get noItemsFound => 'Nessun elemento trovato'; + // Translations + @override String get title => 'Titolo'; + @override String get releaseYear => 'Anno rilascio'; + @override String get dateAdded => 'Data aggiunta'; + @override String get rating => 'Valutazione'; + @override String get noItemsFound => 'Nessun elemento trovato'; } // Path: logs class _StringsLogsIt implements _StringsLogsEn { - _StringsLogsIt._(this._root); + _StringsLogsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get clearLogs => 'Cancella log'; - @override - String get copyLogs => 'Copia log'; - @override - String get error => 'Errore:'; - @override - String get stackTrace => 'Traccia dello stack:'; + // 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); + _StringsLicensesIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Pacchetti correlati'; - @override - String get license => 'Licenza'; - @override - String licenseNumber({required Object number}) => 'Licenza ${number}'; - @override - String licensesCount({required Object count}) => '${count} licenze'; + // Translations + @override String get relatedPackages => 'Pacchetti correlati'; + @override String get license => 'Licenza'; + @override String licenseNumber({required Object number}) => 'Licenza ${number}'; + @override String licensesCount({required Object count}) => '${count} licenze'; } // Path: navigation class _StringsNavigationIt implements _StringsNavigationEn { - _StringsNavigationIt._(this._root); + _StringsNavigationIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get home => 'Home'; - @override - String get search => 'Cerca'; - @override - String get libraries => 'Librerie'; - @override - String get settings => 'Impostazioni'; - @override - String get downloads => 'Download'; + // 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); + _StringsDownloadsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @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})'; + // 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); + _StringsPlaylistsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Playlist'; - @override - String get noPlaylists => 'Nessuna playlist trovata'; - @override - String get create => 'Crea playlist'; - @override - String get 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'; + // 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); + _StringsCollectionsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Raccolte'; - @override - String get collection => 'Raccolta'; - @override - String get empty => 'La raccolta è vuota'; - @override - String get 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}'; + // 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); + _StringsWatchTogetherIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @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 inviteOthers => 'Invita altri'; - @override - String get syncing => 'Sincronizzazione...'; - @override - String get participant => 'partecipante'; - @override - String get participantsPlural => 'partecipanti'; - @override - String get copyCode => 'Copia codice'; - @override - String get shareInstructions => 'Condividi questo codice con altri per farli unire alla tua sessione di visione.'; - @override - String get codeCopied => 'Codice sessione copiato negli appunti'; - @override - String get share => 'Condividi'; - @override - String inviteText({required Object sessionId}) => - 'Unisciti alla mia sessione Guarda Insieme!\n\nCodice Sessione: ${sessionId}'; - @override - String get inviteSubject => 'Invito Guarda Insieme'; - @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'; + // 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'; } // Path: libraries.tabs class _StringsLibrariesTabsIt implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsIt._(this._root); + _StringsLibrariesTabsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Consigliati'; - @override - String get browse => 'Esplora'; - @override - String get collections => 'Raccolte'; - @override - String get playlists => 'Playlist'; + // Translations + @override String get recommended => 'Consigliati'; + @override String get browse => 'Esplora'; + @override String get collections => 'Raccolte'; + @override String get playlists => 'Playlist'; } // Path: libraries.groupings class _StringsLibrariesGroupingsIt implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsIt._(this._root); + _StringsLibrariesGroupingsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get all => 'Tutti'; - @override - String get movies => 'Film'; - @override - String get shows => 'Serie TV'; - @override - String get seasons => 'Stagioni'; - @override - String get episodes => 'Episodi'; - @override - String get folders => 'Cartelle'; + // Translations + @override String get all => 'Tutti'; + @override String get movies => 'Film'; + @override String get shows => 'Serie TV'; + @override String get seasons => 'Stagioni'; + @override String get episodes => 'Episodi'; + @override String get folders => 'Cartelle'; } // Path: class _StringsNl implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsNl.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.nl, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsNl.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.nl, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsNl _root = this; // ignore: unused_field + @override late final _StringsNl _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppNl app = _StringsAppNl._(_root); - @override - late final _StringsAuthNl auth = _StringsAuthNl._(_root); - @override - late final _StringsCommonNl common = _StringsCommonNl._(_root); - @override - late final _StringsScreensNl screens = _StringsScreensNl._(_root); - @override - late final _StringsUpdateNl update = _StringsUpdateNl._(_root); - @override - late final _StringsSettingsNl settings = _StringsSettingsNl._(_root); - @override - late final _StringsSearchNl search = _StringsSearchNl._(_root); - @override - late final _StringsHotkeysNl hotkeys = _StringsHotkeysNl._(_root); - @override - late final _StringsPinEntryNl pinEntry = _StringsPinEntryNl._(_root); - @override - late final _StringsFileInfoNl fileInfo = _StringsFileInfoNl._(_root); - @override - late final _StringsMediaMenuNl mediaMenu = _StringsMediaMenuNl._(_root); - @override - late final _StringsAccessibilityNl accessibility = _StringsAccessibilityNl._(_root); - @override - late final _StringsTooltipsNl tooltips = _StringsTooltipsNl._(_root); - @override - late final _StringsVideoControlsNl videoControls = _StringsVideoControlsNl._(_root); - @override - late final _StringsUserStatusNl userStatus = _StringsUserStatusNl._(_root); - @override - late final _StringsMessagesNl messages = _StringsMessagesNl._(_root); - @override - late final _StringsSubtitlingStylingNl subtitlingStyling = _StringsSubtitlingStylingNl._(_root); - @override - late final _StringsDialogNl dialog = _StringsDialogNl._(_root); - @override - late final _StringsDiscoverNl discover = _StringsDiscoverNl._(_root); - @override - late final _StringsErrorsNl errors = _StringsErrorsNl._(_root); - @override - late final _StringsLibrariesNl libraries = _StringsLibrariesNl._(_root); - @override - late final _StringsAboutNl about = _StringsAboutNl._(_root); - @override - late final _StringsServerSelectionNl serverSelection = _StringsServerSelectionNl._(_root); - @override - late final _StringsHubDetailNl hubDetail = _StringsHubDetailNl._(_root); - @override - late final _StringsLogsNl logs = _StringsLogsNl._(_root); - @override - late final _StringsLicensesNl licenses = _StringsLicensesNl._(_root); - @override - late final _StringsNavigationNl navigation = _StringsNavigationNl._(_root); - @override - late final _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); + // 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 _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); + _StringsAppNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Laden...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Laden...'; } // Path: auth class _StringsAuthNl implements _StringsAuthEn { - _StringsAuthNl._(this._root); + _StringsAuthNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Inloggen met Plex'; - @override - String get showQRCode => 'Toon QR-code'; - @override - String get cancel => 'Annuleren'; - @override - String get authenticate => 'Authenticeren'; - @override - String get retry => 'Opnieuw proberen'; - @override - String get debugEnterToken => 'Debug: Voer Plex Token in'; - @override - String get plexTokenLabel => 'Plex Authenticatietoken'; - @override - String get plexTokenHint => 'Voer je Plex.tv token in'; - @override - String get authenticationTimeout => 'Authenticatie verlopen. Probeer opnieuw.'; - @override - String get scanQRCodeInstruction => 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; - @override - String get waitingForAuth => 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; + // Translations + @override String get signInWithPlex => 'Inloggen met Plex'; + @override String get showQRCode => 'Toon QR-code'; + @override String get cancel => 'Annuleren'; + @override String get authenticate => 'Authenticeren'; + @override String get retry => 'Opnieuw proberen'; + @override String get debugEnterToken => 'Debug: Voer Plex Token in'; + @override String get plexTokenLabel => 'Plex Authenticatietoken'; + @override String get plexTokenHint => 'Voer je Plex.tv token in'; + @override String get authenticationTimeout => 'Authenticatie verlopen. Probeer opnieuw.'; + @override String get scanQRCodeInstruction => 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; + @override String get waitingForAuth => 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; } // Path: common class _StringsCommonNl implements _StringsCommonEn { - _StringsCommonNl._(this._root); + _StringsCommonNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Annuleren'; - @override - String get save => 'Opslaan'; - @override - String get close => 'Sluiten'; - @override - String get clear => 'Wissen'; - @override - String get reset => 'Resetten'; - @override - String get later => 'Later'; - @override - String get submit => 'Verzenden'; - @override - String get confirm => 'Bevestigen'; - @override - String get retry => 'Opnieuw proberen'; - @override - String get 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...'; + // 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); + _StringsScreensNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Licenties'; - @override - String get selectServer => 'Selecteer server'; - @override - String get switchProfile => 'Wissel van profiel'; - @override - String get subtitleStyling => 'Ondertitel opmaak'; - @override - String get search => 'Zoeken'; - @override - String get logs => 'Logbestanden'; + // Translations + @override String get licenses => 'Licenties'; + @override String get selectServer => 'Selecteer server'; + @override String get switchProfile => 'Wissel van profiel'; + @override String get subtitleStyling => 'Ondertitel opmaak'; + @override String get search => 'Zoeken'; + @override String get logs => 'Logbestanden'; } // Path: update class _StringsUpdateNl implements _StringsUpdateEn { - _StringsUpdateNl._(this._root); + _StringsUpdateNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get available => 'Update beschikbaar'; - @override - String versionAvailable({required Object version}) => 'Versie ${version} is beschikbaar'; - @override - String currentVersion({required Object version}) => 'Huidig: ${version}'; - @override - String get skipVersion => 'Deze versie overslaan'; - @override - String get viewRelease => 'Bekijk release'; - @override - String get latestVersion => 'Je hebt de nieuwste versie'; - @override - String get checkFailed => 'Kon niet controleren op updates'; + // Translations + @override String get available => 'Update beschikbaar'; + @override String versionAvailable({required Object version}) => 'Versie ${version} is beschikbaar'; + @override String currentVersion({required Object version}) => 'Huidig: ${version}'; + @override String get skipVersion => 'Deze versie overslaan'; + @override String get viewRelease => 'Bekijk release'; + @override String get latestVersion => 'Je hebt de nieuwste versie'; + @override String get checkFailed => 'Kon niet controleren op updates'; } // Path: settings class _StringsSettingsNl implements _StringsSettingsEn { - _StringsSettingsNl._(this._root); + _StringsSettingsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Instellingen'; - @override - String get language => 'Taal'; - @override - String get theme => 'Thema'; - @override - String get appearance => 'Uiterlijk'; - @override - String get videoPlayback => 'Video afspelen'; - @override - String get advanced => 'Geavanceerd'; - @override - String get useSeasonPostersDescription => 'Toon seizoenposter in plaats van serieposter voor afleveringen'; - @override - String get showHeroSectionDescription => 'Toon uitgelichte inhoud carrousel op startscherm'; - @override - String get secondsLabel => 'Seconden'; - @override - String get minutesLabel => 'Minuten'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; - @override - String get systemTheme => 'Systeem'; - @override - String get systemThemeDescription => 'Volg systeeminstellingen'; - @override - String get lightTheme => 'Licht'; - @override - String get darkTheme => 'Donker'; - @override - String get libraryDensity => 'Bibliotheek dichtheid'; - @override - String get compact => 'Compact'; - @override - String get compactDescription => 'Kleinere kaarten, meer items zichtbaar'; - @override - String get normal => 'Normaal'; - @override - String get normalDescription => 'Standaard grootte'; - @override - String get comfortable => 'Comfortabel'; - @override - String get comfortableDescription => 'Grotere kaarten, minder items zichtbaar'; - @override - String get viewMode => 'Weergavemodus'; - @override - String get gridView => 'Raster'; - @override - String get gridViewDescription => 'Items weergeven in een rasterindeling'; - @override - String get listView => 'Lijst'; - @override - String get listViewDescription => 'Items weergeven in een lijstindeling'; - @override - String get useSeasonPosters => 'Gebruik seizoenposters'; - @override - String get showHeroSection => 'Toon hoofdsectie'; - @override - String get hardwareDecoding => 'Hardware decodering'; - @override - String get hardwareDecodingDescription => 'Gebruik hardware versnelling indien beschikbaar'; - @override - String get bufferSize => 'Buffer grootte'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Ondertitel opmaak'; - @override - String get subtitleStylingDescription => 'Pas ondertitel uiterlijk aan'; - @override - String get smallSkipDuration => 'Korte skip duur'; - @override - String get largeSkipDuration => 'Lange skip duur'; - @override - String secondsUnit({required Object seconds}) => '${seconds} seconden'; - @override - String get defaultSleepTimer => 'Standaard slaap timer'; - @override - String minutesUnit({required Object minutes}) => 'bij ${minutes} minuten'; - @override - String get rememberTrackSelections => 'Onthoud track selecties per serie/film'; - @override - String get rememberTrackSelectionsDescription => - 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; - @override - String get 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.'; + // 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 useSeasonPostersDescription => 'Toon seizoenposter in plaats van serieposter voor afleveringen'; + @override String get showHeroSectionDescription => 'Toon uitgelichte inhoud carrousel op startscherm'; + @override String get secondsLabel => 'Seconden'; + @override String get minutesLabel => 'Minuten'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; + @override String get systemTheme => 'Systeem'; + @override String get systemThemeDescription => 'Volg systeeminstellingen'; + @override String get lightTheme => 'Licht'; + @override String get darkTheme => 'Donker'; + @override String get libraryDensity => 'Bibliotheek dichtheid'; + @override String get compact => 'Compact'; + @override String get compactDescription => 'Kleinere kaarten, meer items zichtbaar'; + @override String get normal => 'Normaal'; + @override String get normalDescription => 'Standaard grootte'; + @override String get comfortable => 'Comfortabel'; + @override String get comfortableDescription => 'Grotere kaarten, minder items zichtbaar'; + @override String get viewMode => 'Weergavemodus'; + @override String get gridView => 'Raster'; + @override String get gridViewDescription => 'Items weergeven in een rasterindeling'; + @override String get listView => 'Lijst'; + @override String get listViewDescription => 'Items weergeven in een lijstindeling'; + @override String get useSeasonPosters => 'Gebruik seizoenposters'; + @override String get showHeroSection => 'Toon hoofdsectie'; + @override String get hardwareDecoding => 'Hardware decodering'; + @override String get hardwareDecodingDescription => 'Gebruik hardware versnelling indien beschikbaar'; + @override String get bufferSize => 'Buffer grootte'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Ondertitel opmaak'; + @override String get subtitleStylingDescription => 'Pas ondertitel uiterlijk aan'; + @override String get smallSkipDuration => 'Korte skip duur'; + @override String get largeSkipDuration => 'Lange skip duur'; + @override String secondsUnit({required Object seconds}) => '${seconds} seconden'; + @override String get defaultSleepTimer => 'Standaard slaap timer'; + @override String minutesUnit({required Object minutes}) => 'bij ${minutes} minuten'; + @override String get rememberTrackSelections => 'Onthoud track selecties per serie/film'; + @override String get rememberTrackSelectionsDescription => 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; + @override String get 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.'; } // Path: search class _StringsSearchNl implements _StringsSearchEn { - _StringsSearchNl._(this._root); + _StringsSearchNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get hint => 'Zoek films, series, muziek...'; - @override - String get tryDifferentTerm => 'Probeer een andere zoekterm'; - @override - String get searchYourMedia => 'Zoek in je media'; - @override - String get enterTitleActorOrKeyword => 'Voer een titel, acteur of trefwoord in'; + // Translations + @override String get hint => 'Zoek films, series, muziek...'; + @override String get tryDifferentTerm => 'Probeer een andere zoekterm'; + @override String get searchYourMedia => 'Zoek in je media'; + @override String get enterTitleActorOrKeyword => 'Voer een titel, acteur of trefwoord in'; } // Path: hotkeys class _StringsHotkeysNl implements _StringsHotkeysEn { - _StringsHotkeysNl._(this._root); + _StringsHotkeysNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; - @override - String get clearShortcut => 'Wis sneltoets'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; + @override String get clearShortcut => 'Wis sneltoets'; } // Path: pinEntry class _StringsPinEntryNl implements _StringsPinEntryEn { - _StringsPinEntryNl._(this._root); + _StringsPinEntryNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'Voer PIN in'; - @override - String get showPin => 'Toon PIN'; - @override - String get hidePin => 'Verberg PIN'; + // Translations + @override String get enterPin => 'Voer PIN in'; + @override String get showPin => 'Toon PIN'; + @override String get hidePin => 'Verberg PIN'; } // Path: fileInfo class _StringsFileInfoNl implements _StringsFileInfoEn { - _StringsFileInfoNl._(this._root); + _StringsFileInfoNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Bestand info'; - @override - String get video => 'Video'; - @override - String get audio => 'Audio'; - @override - String get file => 'Bestand'; - @override - String get advanced => 'Geavanceerd'; - @override - String get codec => 'Codec'; - @override - String get resolution => 'Resolutie'; - @override - String get bitrate => 'Bitrate'; - @override - String get frameRate => 'Frame rate'; - @override - String get aspectRatio => 'Beeldverhouding'; - @override - String get profile => 'Profiel'; - @override - String get bitDepth => 'Bit diepte'; - @override - String get colorSpace => 'Kleurruimte'; - @override - String get colorRange => 'Kleurbereik'; - @override - String get colorPrimaries => 'Kleurprimaires'; - @override - String get chromaSubsampling => 'Chroma subsampling'; - @override - String get channels => 'Kanalen'; - @override - String get path => 'Pad'; - @override - String get size => 'Grootte'; - @override - String get container => 'Container'; - @override - String get duration => 'Duur'; - @override - String get optimizedForStreaming => 'Geoptimaliseerd voor streaming'; - @override - String get has64bitOffsets => '64-bit Offsets'; + // Translations + @override String get title => 'Bestand info'; + @override String get video => 'Video'; + @override String get audio => 'Audio'; + @override String get file => 'Bestand'; + @override String get advanced => 'Geavanceerd'; + @override String get codec => 'Codec'; + @override String get resolution => 'Resolutie'; + @override String get bitrate => 'Bitrate'; + @override String get frameRate => 'Frame rate'; + @override String get aspectRatio => 'Beeldverhouding'; + @override String get profile => 'Profiel'; + @override String get bitDepth => 'Bit diepte'; + @override String get colorSpace => 'Kleurruimte'; + @override String get colorRange => 'Kleurbereik'; + @override String get colorPrimaries => 'Kleurprimaires'; + @override String get chromaSubsampling => 'Chroma subsampling'; + @override String get channels => 'Kanalen'; + @override String get path => 'Pad'; + @override String get size => 'Grootte'; + @override String get container => 'Container'; + @override String get duration => 'Duur'; + @override String get optimizedForStreaming => 'Geoptimaliseerd voor streaming'; + @override String get has64bitOffsets => '64-bit Offsets'; } // Path: mediaMenu class _StringsMediaMenuNl implements _StringsMediaMenuEn { - _StringsMediaMenuNl._(this._root); + _StringsMediaMenuNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Markeer als gekeken'; - @override - String get markAsUnwatched => 'Markeer als ongekeken'; - @override - String get removeFromContinueWatching => 'Verwijder uit Doorgaan met kijken'; - @override - String get goToSeries => 'Ga naar serie'; - @override - String get goToSeason => 'Ga naar seizoen'; - @override - String get shufflePlay => 'Willekeurig afspelen'; - @override - String get fileInfo => 'Bestand info'; + // Translations + @override String get markAsWatched => 'Markeer als gekeken'; + @override String get markAsUnwatched => 'Markeer als ongekeken'; + @override String get removeFromContinueWatching => 'Verwijder uit Doorgaan met kijken'; + @override String get goToSeries => 'Ga naar serie'; + @override String get goToSeason => 'Ga naar seizoen'; + @override String get shufflePlay => 'Willekeurig afspelen'; + @override String get fileInfo => 'Bestand info'; } // Path: accessibility class _StringsAccessibilityNl implements _StringsAccessibilityEn { - _StringsAccessibilityNl._(this._root); + _StringsAccessibilityNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, film'; - @override - String mediaCardShow({required Object title}) => '${title}, TV-serie'; - @override - String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'bekeken'; - @override - String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent bekeken'; - @override - String get mediaCardUnwatched => 'niet bekeken'; - @override - String get tapToPlay => 'Tik om af te spelen'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, film'; + @override String mediaCardShow({required Object title}) => '${title}, TV-serie'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'bekeken'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent bekeken'; + @override String get mediaCardUnwatched => 'niet bekeken'; + @override String get tapToPlay => 'Tik om af te spelen'; } // Path: tooltips class _StringsTooltipsNl implements _StringsTooltipsEn { - _StringsTooltipsNl._(this._root); + _StringsTooltipsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Willekeurig afspelen'; - @override - String get markAsWatched => 'Markeer als gekeken'; - @override - String get markAsUnwatched => 'Markeer als ongekeken'; + // Translations + @override String get shufflePlay => 'Willekeurig afspelen'; + @override String get markAsWatched => 'Markeer als gekeken'; + @override String get markAsUnwatched => 'Markeer als ongekeken'; } // Path: videoControls class _StringsVideoControlsNl implements _StringsVideoControlsEn { - _StringsVideoControlsNl._(this._root); + _StringsVideoControlsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Audio'; - @override - String get subtitlesLabel => 'Ondertitels'; - @override - String get resetToZero => 'Reset naar 0ms'; - @override - String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} speelt later af'; - @override - String playsEarlier({required Object label}) => '${label} speelt eerder af'; - @override - String get noOffset => 'Geen offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Vul scherm'; - @override - String get stretch => 'Uitrekken'; - @override - String get lockRotation => 'Vergrendel rotatie'; - @override - String get unlockRotation => 'Ontgrendel rotatie'; - @override - String get sleepTimer => 'Slaaptimer'; - @override - String get timerActive => 'Timer actief'; - @override - String playbackWillPauseIn({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; - @override - String get sleepTimerCompleted => 'Slaaptimer voltooid - afspelen gepauzeerd'; - @override - String get playButton => 'Afspelen'; - @override - String get pauseButton => 'Pauzeren'; - @override - String seekBackwardButton({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; - @override - String seekForwardButton({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; - @override - String get previousButton => 'Vorige aflevering'; - @override - String get nextButton => 'Volgende aflevering'; - @override - String get previousChapterButton => 'Vorig hoofdstuk'; - @override - String get nextChapterButton => 'Volgend hoofdstuk'; - @override - String get muteButton => 'Dempen'; - @override - String get unmuteButton => 'Dempen opheffen'; - @override - String get settingsButton => 'Video-instellingen'; - @override - String get audioTrackButton => 'Audiosporen'; - @override - String get subtitlesButton => 'Ondertitels'; - @override - String get chaptersButton => 'Hoofdstukken'; - @override - String get versionsButton => 'Videoversies'; - @override - String get aspectRatioButton => 'Beeldverhouding'; - @override - String get fullscreenButton => 'Volledig scherm activeren'; - @override - String get exitFullscreenButton => 'Volledig scherm verlaten'; - @override - String get alwaysOnTopButton => 'Altijd bovenop'; - @override - String get rotationLockButton => 'Rotatievergrendeling'; - @override - String get timelineSlider => 'Videotijdlijn'; - @override - String get volumeSlider => 'Volumeniveau'; - @override - String get backButton => 'Terug'; + // Translations + @override String get audioLabel => 'Audio'; + @override String get subtitlesLabel => 'Ondertitels'; + @override String get resetToZero => 'Reset naar 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} speelt later af'; + @override String playsEarlier({required Object label}) => '${label} speelt eerder af'; + @override String get noOffset => 'Geen offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Vul scherm'; + @override String get stretch => 'Uitrekken'; + @override String get lockRotation => 'Vergrendel rotatie'; + @override String get unlockRotation => 'Ontgrendel rotatie'; + @override String get sleepTimer => 'Slaaptimer'; + @override String get timerActive => 'Timer actief'; + @override String playbackWillPauseIn({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; + @override String get sleepTimerCompleted => 'Slaaptimer voltooid - afspelen gepauzeerd'; + @override String get playButton => 'Afspelen'; + @override String get pauseButton => 'Pauzeren'; + @override String seekBackwardButton({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; + @override String seekForwardButton({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; + @override String get previousButton => 'Vorige aflevering'; + @override String get nextButton => 'Volgende aflevering'; + @override String get previousChapterButton => 'Vorig hoofdstuk'; + @override String get nextChapterButton => 'Volgend hoofdstuk'; + @override String get muteButton => 'Dempen'; + @override String get unmuteButton => 'Dempen opheffen'; + @override String get settingsButton => 'Video-instellingen'; + @override String get audioTrackButton => 'Audiosporen'; + @override String get subtitlesButton => 'Ondertitels'; + @override String get chaptersButton => 'Hoofdstukken'; + @override String get versionsButton => 'Videoversies'; + @override String get aspectRatioButton => 'Beeldverhouding'; + @override String get fullscreenButton => 'Volledig scherm activeren'; + @override String get exitFullscreenButton => 'Volledig scherm verlaten'; + @override String get 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); + _StringsUserStatusNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get admin => 'Beheerder'; - @override - String get restricted => 'Beperkt'; - @override - String get protected => 'Beschermd'; - @override - String get current => 'HUIDIG'; + // Translations + @override String get admin => 'Beheerder'; + @override String get restricted => 'Beperkt'; + @override String get protected => 'Beschermd'; + @override String get current => 'HUIDIG'; } // Path: messages class _StringsMessagesNl implements _StringsMessagesEn { - _StringsMessagesNl._(this._root); + _StringsMessagesNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Gemarkeerd als gekeken'; - @override - String get markedAsUnwatched => 'Gemarkeerd als ongekeken'; - @override - String get 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}'; - @override - String get youAreOffline => 'Je bent offline'; - @override - String get offlineFeatureUnavailable => - 'Deze functie vereist een internetverbinding. Je downloads en instellingen zijn nog steeds beschikbaar.'; + // 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); + _StringsSubtitlingStylingNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Opmaak opties'; - @override - String get fontSize => 'Lettergrootte'; - @override - String get textColor => 'Tekstkleur'; - @override - String get borderSize => 'Rand grootte'; - @override - String get borderColor => 'Randkleur'; - @override - String get backgroundOpacity => 'Achtergrond transparantie'; - @override - String get backgroundColor => 'Achtergrondkleur'; + // Translations + @override String get stylingOptions => 'Opmaak opties'; + @override String get fontSize => 'Lettergrootte'; + @override String get textColor => 'Tekstkleur'; + @override String get borderSize => 'Rand grootte'; + @override String get borderColor => 'Randkleur'; + @override String get backgroundOpacity => 'Achtergrond transparantie'; + @override String get backgroundColor => 'Achtergrondkleur'; } // Path: dialog class _StringsDialogNl implements _StringsDialogEn { - _StringsDialogNl._(this._root); + _StringsDialogNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Bevestig actie'; - @override - String get cancel => 'Annuleren'; - @override - String get playNow => 'Nu afspelen'; + // 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); + _StringsDiscoverNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Ontdekken'; - @override - String get switchProfile => 'Wissel van profiel'; - @override - String get switchServer => 'Wissel van server'; - @override - String get logout => 'Uitloggen'; - @override - String get noContentAvailable => 'Geen inhoud beschikbaar'; - @override - String get addMediaToLibraries => 'Voeg wat media toe aan je bibliotheken'; - @override - String get continueWatching => 'Verder kijken'; - @override - String get 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'; + // 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); + _StringsErrorsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => 'Zoeken mislukt: ${error}'; - @override - String connectionTimeout({required Object context}) => 'Verbinding time-out tijdens laden ${context}'; - @override - String get connectionFailed => 'Kan geen verbinding maken met Plex server'; - @override - String failedToLoad({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}'; - @override - String get noClientAvailable => 'Geen client beschikbaar'; - @override - String authenticationFailed({required Object error}) => 'Authenticatie mislukt: ${error}'; - @override - String get couldNotLaunchUrl => 'Kon auth URL niet openen'; - @override - String get pleaseEnterToken => 'Voer een token in'; - @override - String get invalidToken => 'Ongeldig token'; - @override - String failedToVerifyToken({required Object error}) => 'Kon token niet verifiëren: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; + // 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); + _StringsLibrariesNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Bibliotheken'; - @override - String get scanLibraryFiles => 'Scan bibliotheek bestanden'; - @override - String get scanLibrary => 'Scan bibliotheek'; - @override - String get analyze => 'Analyseren'; - @override - String get analyzeLibrary => 'Analyseer bibliotheek'; - @override - String get refreshMetadata => 'Vernieuw metadata'; - @override - String get emptyTrash => 'Prullenbak legen'; - @override - String emptyingTrash({required Object title}) => 'Prullenbak legen voor "${title}"...'; - @override - String trashEmptied({required Object title}) => 'Prullenbak geleegd voor "${title}"'; - @override - String failedToEmptyTrash({required Object error}) => 'Kon prullenbak niet legen: ${error}'; - @override - String analyzing({required Object title}) => 'Analyseren "${title}"...'; - @override - String analysisStarted({required Object title}) => 'Analyse gestart voor "${title}"'; - @override - String failedToAnalyze({required Object error}) => 'Kon bibliotheek niet analyseren: ${error}'; - @override - String get noLibrariesFound => 'Geen bibliotheken gevonden'; - @override - String get thisLibraryIsEmpty => 'Deze bibliotheek is leeg'; - @override - String get all => 'Alles'; - @override - String get clearAll => 'Alles wissen'; - @override - String scanLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?'; - @override - String analyzeLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt analyseren?'; - @override - String refreshMetadataConfirm({required Object title}) => - 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; - @override - String emptyTrashConfirm({required Object title}) => 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; - @override - String get manageLibraries => 'Beheer bibliotheken'; - @override - String get sort => 'Sorteren'; - @override - String get sortBy => 'Sorteer op'; - @override - String get filters => 'Filters'; - @override - String get confirmActionMessage => 'Weet je zeker dat je deze actie wilt uitvoeren?'; - @override - String get showLibrary => 'Toon bibliotheek'; - @override - String get hideLibrary => 'Verberg bibliotheek'; - @override - String get libraryOptions => 'Bibliotheek opties'; - @override - String get content => 'bibliotheekinhoud'; - @override - String get selectLibrary => 'Bibliotheek kiezen'; - @override - String filtersWithCount({required Object count}) => 'Filters (${count})'; - @override - String get noRecommendations => 'Geen aanbevelingen beschikbaar'; - @override - String get noCollections => 'Geen collecties in deze bibliotheek'; - @override - String get noFoldersFound => 'Geen mappen gevonden'; - @override - String get folders => 'mappen'; - @override - late final _StringsLibrariesTabsNl tabs = _StringsLibrariesTabsNl._(_root); - @override - late final _StringsLibrariesGroupingsNl groupings = _StringsLibrariesGroupingsNl._(_root); + // Translations + @override String get title => 'Bibliotheken'; + @override String get scanLibraryFiles => 'Scan bibliotheek bestanden'; + @override String get scanLibrary => 'Scan bibliotheek'; + @override String get analyze => 'Analyseren'; + @override String get analyzeLibrary => 'Analyseer bibliotheek'; + @override String get refreshMetadata => 'Vernieuw metadata'; + @override String get emptyTrash => 'Prullenbak legen'; + @override String emptyingTrash({required Object title}) => 'Prullenbak legen voor "${title}"...'; + @override String trashEmptied({required Object title}) => 'Prullenbak geleegd voor "${title}"'; + @override String failedToEmptyTrash({required Object error}) => 'Kon prullenbak niet legen: ${error}'; + @override String analyzing({required Object title}) => 'Analyseren "${title}"...'; + @override String analysisStarted({required Object title}) => 'Analyse gestart voor "${title}"'; + @override String failedToAnalyze({required Object error}) => 'Kon bibliotheek niet analyseren: ${error}'; + @override String get noLibrariesFound => 'Geen bibliotheken gevonden'; + @override String get thisLibraryIsEmpty => 'Deze bibliotheek is leeg'; + @override String get all => 'Alles'; + @override String get clearAll => 'Alles wissen'; + @override String scanLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?'; + @override String analyzeLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt analyseren?'; + @override String refreshMetadataConfirm({required Object title}) => 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; + @override String emptyTrashConfirm({required Object title}) => 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; + @override String get manageLibraries => 'Beheer bibliotheken'; + @override String get sort => 'Sorteren'; + @override String get sortBy => 'Sorteer op'; + @override String get filters => 'Filters'; + @override String get confirmActionMessage => 'Weet je zeker dat je deze actie wilt uitvoeren?'; + @override String get showLibrary => 'Toon bibliotheek'; + @override String get hideLibrary => 'Verberg bibliotheek'; + @override String get libraryOptions => 'Bibliotheek opties'; + @override String get content => 'bibliotheekinhoud'; + @override String get selectLibrary => 'Bibliotheek kiezen'; + @override String filtersWithCount({required Object count}) => 'Filters (${count})'; + @override String get noRecommendations => 'Geen aanbevelingen beschikbaar'; + @override String get noCollections => 'Geen collecties in deze bibliotheek'; + @override String get noFoldersFound => 'Geen mappen gevonden'; + @override String get folders => 'mappen'; + @override late final _StringsLibrariesTabsNl tabs = _StringsLibrariesTabsNl._(_root); + @override late final _StringsLibrariesGroupingsNl groupings = _StringsLibrariesGroupingsNl._(_root); } // Path: about class _StringsAboutNl implements _StringsAboutEn { - _StringsAboutNl._(this._root); + _StringsAboutNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Over'; - @override - String get openSourceLicenses => 'Open Source licenties'; - @override - String versionLabel({required Object version}) => 'Versie ${version}'; - @override - String get appDescription => 'Een mooie Plex client voor Flutter'; - @override - String get viewLicensesDescription => 'Bekijk licenties van third-party bibliotheken'; + // Translations + @override String get title => 'Over'; + @override String get openSourceLicenses => 'Open Source licenties'; + @override String versionLabel({required Object version}) => 'Versie ${version}'; + @override String get appDescription => 'Een mooie Plex client voor Flutter'; + @override String get viewLicensesDescription => 'Bekijk licenties van third-party bibliotheken'; } // Path: serverSelection class _StringsServerSelectionNl implements _StringsServerSelectionEn { - _StringsServerSelectionNl._(this._root); + _StringsServerSelectionNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get 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}'; + // 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); + _StringsHubDetailNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Titel'; - @override - String get releaseYear => 'Uitgavejaar'; - @override - String get dateAdded => 'Datum toegevoegd'; - @override - String get rating => 'Beoordeling'; - @override - String get noItemsFound => 'Geen items gevonden'; + // Translations + @override String get title => 'Titel'; + @override String get releaseYear => 'Uitgavejaar'; + @override String get dateAdded => 'Datum toegevoegd'; + @override String get rating => 'Beoordeling'; + @override String get noItemsFound => 'Geen items gevonden'; } // Path: logs class _StringsLogsNl implements _StringsLogsEn { - _StringsLogsNl._(this._root); + _StringsLogsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get clearLogs => 'Wis logs'; - @override - String get copyLogs => 'Kopieer logs'; - @override - String get error => 'Fout:'; - @override - String get stackTrace => 'Stacktracering:'; + // 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); + _StringsLicensesNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Gerelateerde pakketten'; - @override - String get license => 'Licentie'; - @override - String licenseNumber({required Object number}) => 'Licentie ${number}'; - @override - String licensesCount({required Object count}) => '${count} licenties'; + // Translations + @override String get relatedPackages => 'Gerelateerde pakketten'; + @override String get license => 'Licentie'; + @override String licenseNumber({required Object number}) => 'Licentie ${number}'; + @override String licensesCount({required Object count}) => '${count} licenties'; } // Path: navigation class _StringsNavigationNl implements _StringsNavigationEn { - _StringsNavigationNl._(this._root); + _StringsNavigationNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get home => 'Thuis'; - @override - String get search => 'Zoeken'; - @override - String get libraries => 'Bibliotheken'; - @override - String get settings => 'Instellingen'; - @override - String get downloads => 'Downloads'; + // 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); + _StringsDownloadsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @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})'; + // 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); + _StringsPlaylistsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Afspeellijsten'; - @override - String get noPlaylists => 'Geen afspeellijsten gevonden'; - @override - String get create => 'Afspeellijst maken'; - @override - String get 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'; + // 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); + _StringsCollectionsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Collecties'; - @override - String get collection => 'Collectie'; - @override - String get empty => 'Collectie is leeg'; - @override - String get 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}'; + // 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); + _StringsWatchTogetherNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @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 inviteOthers => 'Anderen uitnodigen'; - @override - String get syncing => 'Synchroniseren...'; - @override - String get participant => 'deelnemer'; - @override - String get participantsPlural => 'deelnemers'; - @override - String get copyCode => 'Code kopiëren'; - @override - String get shareInstructions => 'Deel deze code met anderen om hen te laten deelnemen aan je kijksessie.'; - @override - String get codeCopied => 'Sessiecode gekopieerd naar klembord'; - @override - String get share => 'Delen'; - @override - String inviteText({required Object sessionId}) => 'Doe mee met mijn Samen Kijken sessie!\n\nSessiecode: ${sessionId}'; - @override - String get inviteSubject => 'Samen Kijken Uitnodiging'; - @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'; + // 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'; } // Path: libraries.tabs class _StringsLibrariesTabsNl implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsNl._(this._root); + _StringsLibrariesTabsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Aanbevolen'; - @override - String get browse => 'Bladeren'; - @override - String get collections => 'Collecties'; - @override - String get playlists => 'Afspeellijsten'; + // Translations + @override String get recommended => 'Aanbevolen'; + @override String get browse => 'Bladeren'; + @override String get collections => 'Collecties'; + @override String get playlists => 'Afspeellijsten'; } // Path: libraries.groupings class _StringsLibrariesGroupingsNl implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsNl._(this._root); + _StringsLibrariesGroupingsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get all => 'Alles'; - @override - String get movies => 'Films'; - @override - String get shows => 'Series'; - @override - String get seasons => 'Seizoenen'; - @override - String get episodes => 'Afleveringen'; - @override - String get folders => 'Mappen'; + // Translations + @override String get all => 'Alles'; + @override String get movies => 'Films'; + @override String get shows => 'Series'; + @override String get seasons => 'Seizoenen'; + @override String get episodes => 'Afleveringen'; + @override String get folders => 'Mappen'; } // Path: class _StringsSv implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsSv.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.sv, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsSv.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.sv, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsSv _root = this; // ignore: unused_field + @override late final _StringsSv _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppSv app = _StringsAppSv._(_root); - @override - late final _StringsAuthSv auth = _StringsAuthSv._(_root); - @override - late final _StringsCommonSv common = _StringsCommonSv._(_root); - @override - late final _StringsScreensSv screens = _StringsScreensSv._(_root); - @override - late final _StringsUpdateSv update = _StringsUpdateSv._(_root); - @override - late final _StringsSettingsSv settings = _StringsSettingsSv._(_root); - @override - late final _StringsSearchSv search = _StringsSearchSv._(_root); - @override - late final _StringsHotkeysSv hotkeys = _StringsHotkeysSv._(_root); - @override - late final _StringsPinEntrySv pinEntry = _StringsPinEntrySv._(_root); - @override - late final _StringsFileInfoSv fileInfo = _StringsFileInfoSv._(_root); - @override - late final _StringsMediaMenuSv mediaMenu = _StringsMediaMenuSv._(_root); - @override - late final _StringsAccessibilitySv accessibility = _StringsAccessibilitySv._(_root); - @override - late final _StringsTooltipsSv tooltips = _StringsTooltipsSv._(_root); - @override - late final _StringsVideoControlsSv videoControls = _StringsVideoControlsSv._(_root); - @override - late final _StringsUserStatusSv userStatus = _StringsUserStatusSv._(_root); - @override - late final _StringsMessagesSv messages = _StringsMessagesSv._(_root); - @override - late final _StringsSubtitlingStylingSv subtitlingStyling = _StringsSubtitlingStylingSv._(_root); - @override - late final _StringsDialogSv dialog = _StringsDialogSv._(_root); - @override - late final _StringsDiscoverSv discover = _StringsDiscoverSv._(_root); - @override - late final _StringsErrorsSv errors = _StringsErrorsSv._(_root); - @override - late final _StringsLibrariesSv libraries = _StringsLibrariesSv._(_root); - @override - late final _StringsAboutSv about = _StringsAboutSv._(_root); - @override - late final _StringsServerSelectionSv serverSelection = _StringsServerSelectionSv._(_root); - @override - late final _StringsHubDetailSv hubDetail = _StringsHubDetailSv._(_root); - @override - late final _StringsLogsSv logs = _StringsLogsSv._(_root); - @override - late final _StringsLicensesSv licenses = _StringsLicensesSv._(_root); - @override - late final _StringsNavigationSv navigation = _StringsNavigationSv._(_root); - @override - late final _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); + // 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 _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); + _StringsAppSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Laddar...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Laddar...'; } // Path: auth class _StringsAuthSv implements _StringsAuthEn { - _StringsAuthSv._(this._root); + _StringsAuthSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Logga in med Plex'; - @override - String get showQRCode => 'Visa QR-kod'; - @override - String get cancel => 'Avbryt'; - @override - String get authenticate => 'Autentisera'; - @override - String get retry => 'Försök igen'; - @override - String get debugEnterToken => 'Debug: Ange Plex-token'; - @override - String get plexTokenLabel => 'Plex-autentiseringstoken'; - @override - String get plexTokenHint => 'Ange din Plex.tv-token'; - @override - String get authenticationTimeout => 'Autentisering tog för lång tid. Försök igen.'; - @override - String get scanQRCodeInstruction => 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; - @override - String get waitingForAuth => 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; + // Translations + @override String get signInWithPlex => 'Logga in med Plex'; + @override String get showQRCode => 'Visa QR-kod'; + @override String get cancel => 'Avbryt'; + @override String get authenticate => 'Autentisera'; + @override String get retry => 'Försök igen'; + @override String get debugEnterToken => 'Debug: Ange Plex-token'; + @override String get plexTokenLabel => 'Plex-autentiseringstoken'; + @override String get plexTokenHint => 'Ange din Plex.tv-token'; + @override String get authenticationTimeout => 'Autentisering tog för lång tid. Försök igen.'; + @override String get scanQRCodeInstruction => 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; + @override String get waitingForAuth => 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; } // Path: common class _StringsCommonSv implements _StringsCommonEn { - _StringsCommonSv._(this._root); + _StringsCommonSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Avbryt'; - @override - String get save => 'Spara'; - @override - String get close => 'Stäng'; - @override - String get clear => 'Rensa'; - @override - String get reset => 'Återställ'; - @override - String get later => 'Senare'; - @override - String get submit => 'Skicka'; - @override - String get confirm => 'Bekräfta'; - @override - String get retry => 'Försök igen'; - @override - String get 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...'; + // 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); + _StringsScreensSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Licenser'; - @override - String get selectServer => 'Välj server'; - @override - String get switchProfile => 'Byt profil'; - @override - String get subtitleStyling => 'Undertext-styling'; - @override - String get search => 'Sök'; - @override - String get logs => 'Loggar'; + // Translations + @override String get licenses => 'Licenser'; + @override String get selectServer => 'Välj server'; + @override String get switchProfile => 'Byt profil'; + @override String get subtitleStyling => 'Undertext-styling'; + @override String get search => 'Sök'; + @override String get logs => 'Loggar'; } // Path: update class _StringsUpdateSv implements _StringsUpdateEn { - _StringsUpdateSv._(this._root); + _StringsUpdateSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get available => 'Uppdatering tillgänglig'; - @override - String versionAvailable({required Object version}) => 'Version ${version} är tillgänglig'; - @override - String currentVersion({required Object version}) => 'Nuvarande: ${version}'; - @override - String get skipVersion => 'Hoppa över denna version'; - @override - String get viewRelease => 'Visa release'; - @override - String get latestVersion => 'Du har den senaste versionen'; - @override - String get checkFailed => 'Misslyckades att kontrollera uppdateringar'; + // Translations + @override String get available => 'Uppdatering tillgänglig'; + @override String versionAvailable({required Object version}) => 'Version ${version} är tillgänglig'; + @override String currentVersion({required Object version}) => 'Nuvarande: ${version}'; + @override String get skipVersion => 'Hoppa över denna version'; + @override String get viewRelease => 'Visa release'; + @override String get latestVersion => 'Du har den senaste versionen'; + @override String get checkFailed => 'Misslyckades att kontrollera uppdateringar'; } // Path: settings class _StringsSettingsSv implements _StringsSettingsEn { - _StringsSettingsSv._(this._root); + _StringsSettingsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Inställningar'; - @override - String get language => 'Språk'; - @override - String get theme => 'Tema'; - @override - String get appearance => 'Utseende'; - @override - String get videoPlayback => 'Videouppspelning'; - @override - String get advanced => 'Avancerat'; - @override - String get useSeasonPostersDescription => 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; - @override - String get showHeroSectionDescription => 'Visa utvalda innehållskarusell på startsidan'; - @override - String get secondsLabel => 'Sekunder'; - @override - String get minutesLabel => 'Minuter'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; - @override - String get systemTheme => 'System'; - @override - String get systemThemeDescription => 'Följ systeminställningar'; - @override - String get lightTheme => 'Ljust'; - @override - String get darkTheme => 'Mörkt'; - @override - String get libraryDensity => 'Biblioteksdensitet'; - @override - String get compact => 'Kompakt'; - @override - String get compactDescription => 'Mindre kort, fler objekt synliga'; - @override - String get normal => 'Normal'; - @override - String get normalDescription => 'Standardstorlek'; - @override - String get comfortable => 'Bekväm'; - @override - String get comfortableDescription => 'Större kort, färre objekt synliga'; - @override - String get viewMode => 'Visningsläge'; - @override - String get gridView => 'Rutnät'; - @override - String get gridViewDescription => 'Visa objekt i rutnätslayout'; - @override - String get listView => 'Lista'; - @override - String get listViewDescription => 'Visa objekt i listlayout'; - @override - String get useSeasonPosters => 'Använd säsongsaffischer'; - @override - String get showHeroSection => 'Visa hjältesektion'; - @override - String get hardwareDecoding => 'Hårdvaruavkodning'; - @override - String get hardwareDecodingDescription => 'Använd hårdvaruacceleration när tillgängligt'; - @override - String get bufferSize => 'Bufferstorlek'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Undertext-styling'; - @override - String get subtitleStylingDescription => 'Anpassa undertextutseende'; - @override - String get smallSkipDuration => 'Kort hoppvaraktighet'; - @override - String get largeSkipDuration => 'Lång hoppvaraktighet'; - @override - String secondsUnit({required Object seconds}) => '${seconds} sekunder'; - @override - String get defaultSleepTimer => 'Standard sovtimer'; - @override - String minutesUnit({required Object minutes}) => '${minutes} minuter'; - @override - String get rememberTrackSelections => 'Kom ihåg spårval per serie/film'; - @override - String get rememberTrackSelectionsDescription => - 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; - @override - String get 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.'; + // 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 useSeasonPostersDescription => 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; + @override String get showHeroSectionDescription => 'Visa utvalda innehållskarusell på startsidan'; + @override String get secondsLabel => 'Sekunder'; + @override String get minutesLabel => 'Minuter'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; + @override String get systemTheme => 'System'; + @override String get systemThemeDescription => 'Följ systeminställningar'; + @override String get lightTheme => 'Ljust'; + @override String get darkTheme => 'Mörkt'; + @override String get libraryDensity => 'Biblioteksdensitet'; + @override String get compact => 'Kompakt'; + @override String get compactDescription => 'Mindre kort, fler objekt synliga'; + @override String get normal => 'Normal'; + @override String get normalDescription => 'Standardstorlek'; + @override String get comfortable => 'Bekväm'; + @override String get comfortableDescription => 'Större kort, färre objekt synliga'; + @override String get viewMode => 'Visningsläge'; + @override String get gridView => 'Rutnät'; + @override String get gridViewDescription => 'Visa objekt i rutnätslayout'; + @override String get listView => 'Lista'; + @override String get listViewDescription => 'Visa objekt i listlayout'; + @override String get useSeasonPosters => 'Använd säsongsaffischer'; + @override String get showHeroSection => 'Visa hjältesektion'; + @override String get hardwareDecoding => 'Hårdvaruavkodning'; + @override String get hardwareDecodingDescription => 'Använd hårdvaruacceleration när tillgängligt'; + @override String get bufferSize => 'Bufferstorlek'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Undertext-styling'; + @override String get subtitleStylingDescription => 'Anpassa undertextutseende'; + @override String get smallSkipDuration => 'Kort hoppvaraktighet'; + @override String get largeSkipDuration => 'Lång hoppvaraktighet'; + @override String secondsUnit({required Object seconds}) => '${seconds} sekunder'; + @override String get defaultSleepTimer => 'Standard sovtimer'; + @override String minutesUnit({required Object minutes}) => '${minutes} minuter'; + @override String get rememberTrackSelections => 'Kom ihåg spårval per serie/film'; + @override String get rememberTrackSelectionsDescription => 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; + @override String get 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.'; } // Path: search class _StringsSearchSv implements _StringsSearchEn { - _StringsSearchSv._(this._root); + _StringsSearchSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get hint => 'Sök filmer, serier, musik...'; - @override - String get tryDifferentTerm => 'Prova en annan sökterm'; - @override - String get searchYourMedia => 'Sök i dina media'; - @override - String get enterTitleActorOrKeyword => 'Ange en titel, skådespelare eller nyckelord'; + // Translations + @override String get hint => 'Sök filmer, serier, musik...'; + @override String get tryDifferentTerm => 'Prova en annan sökterm'; + @override String get searchYourMedia => 'Sök i dina media'; + @override String get enterTitleActorOrKeyword => 'Ange en titel, skådespelare eller nyckelord'; } // Path: hotkeys class _StringsHotkeysSv implements _StringsHotkeysEn { - _StringsHotkeysSv._(this._root); + _StringsHotkeysSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => 'Sätt genväg för ${actionName}'; - @override - String get clearShortcut => 'Rensa genväg'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Sätt genväg för ${actionName}'; + @override String get clearShortcut => 'Rensa genväg'; } // Path: pinEntry class _StringsPinEntrySv implements _StringsPinEntryEn { - _StringsPinEntrySv._(this._root); + _StringsPinEntrySv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'Ange PIN'; - @override - String get showPin => 'Visa PIN'; - @override - String get hidePin => 'Dölj PIN'; + // Translations + @override String get enterPin => 'Ange PIN'; + @override String get showPin => 'Visa PIN'; + @override String get hidePin => 'Dölj PIN'; } // Path: fileInfo class _StringsFileInfoSv implements _StringsFileInfoEn { - _StringsFileInfoSv._(this._root); + _StringsFileInfoSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Filinformation'; - @override - String get video => 'Video'; - @override - String get audio => 'Ljud'; - @override - String get file => 'Fil'; - @override - String get advanced => 'Avancerat'; - @override - String get codec => 'Kodek'; - @override - String get resolution => 'Upplösning'; - @override - String get bitrate => 'Bithastighet'; - @override - String get frameRate => 'Bildfrekvens'; - @override - String get aspectRatio => 'Bildförhållande'; - @override - String get profile => 'Profil'; - @override - String get bitDepth => 'Bitdjup'; - @override - String get colorSpace => 'Färgrymd'; - @override - String get colorRange => 'Färgområde'; - @override - String get colorPrimaries => 'Färggrunder'; - @override - String get chromaSubsampling => 'Kroma-undersampling'; - @override - String get channels => 'Kanaler'; - @override - String get path => 'Sökväg'; - @override - String get size => 'Storlek'; - @override - String get container => 'Container'; - @override - String get duration => 'Varaktighet'; - @override - String get optimizedForStreaming => 'Optimerad för streaming'; - @override - String get has64bitOffsets => '64-bit offset'; + // Translations + @override String get title => 'Filinformation'; + @override String get video => 'Video'; + @override String get audio => 'Ljud'; + @override String get file => 'Fil'; + @override String get advanced => 'Avancerat'; + @override String get codec => 'Kodek'; + @override String get resolution => 'Upplösning'; + @override String get bitrate => 'Bithastighet'; + @override String get frameRate => 'Bildfrekvens'; + @override String get aspectRatio => 'Bildförhållande'; + @override String get profile => 'Profil'; + @override String get bitDepth => 'Bitdjup'; + @override String get colorSpace => 'Färgrymd'; + @override String get colorRange => 'Färgområde'; + @override String get colorPrimaries => 'Färggrunder'; + @override String get chromaSubsampling => 'Kroma-undersampling'; + @override String get channels => 'Kanaler'; + @override String get path => 'Sökväg'; + @override String get size => 'Storlek'; + @override String get container => 'Container'; + @override String get duration => 'Varaktighet'; + @override String get optimizedForStreaming => 'Optimerad för streaming'; + @override String get has64bitOffsets => '64-bit offset'; } // Path: mediaMenu class _StringsMediaMenuSv implements _StringsMediaMenuEn { - _StringsMediaMenuSv._(this._root); + _StringsMediaMenuSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Markera som sedd'; - @override - String get markAsUnwatched => 'Markera som osedd'; - @override - String get removeFromContinueWatching => 'Ta bort från Fortsätt titta'; - @override - String get goToSeries => 'Gå till serie'; - @override - String get goToSeason => 'Gå till säsong'; - @override - String get shufflePlay => 'Blanda uppspelning'; - @override - String get fileInfo => 'Filinformation'; + // Translations + @override String get markAsWatched => 'Markera som sedd'; + @override String get markAsUnwatched => 'Markera som osedd'; + @override String get removeFromContinueWatching => 'Ta bort från Fortsätt titta'; + @override String get goToSeries => 'Gå till serie'; + @override String get goToSeason => 'Gå till säsong'; + @override String get shufflePlay => 'Blanda uppspelning'; + @override String get fileInfo => 'Filinformation'; } // Path: accessibility class _StringsAccessibilitySv implements _StringsAccessibilityEn { - _StringsAccessibilitySv._(this._root); + _StringsAccessibilitySv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, film'; - @override - String mediaCardShow({required Object title}) => '${title}, TV-serie'; - @override - String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'sedd'; - @override - String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent sedd'; - @override - String get mediaCardUnwatched => 'osedd'; - @override - String get tapToPlay => 'Tryck för att spela'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, film'; + @override String mediaCardShow({required Object title}) => '${title}, TV-serie'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'sedd'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent sedd'; + @override String get mediaCardUnwatched => 'osedd'; + @override String get tapToPlay => 'Tryck för att spela'; } // Path: tooltips class _StringsTooltipsSv implements _StringsTooltipsEn { - _StringsTooltipsSv._(this._root); + _StringsTooltipsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Blanda uppspelning'; - @override - String get markAsWatched => 'Markera som sedd'; - @override - String get markAsUnwatched => 'Markera som osedd'; + // Translations + @override String get shufflePlay => 'Blanda uppspelning'; + @override String get markAsWatched => 'Markera som sedd'; + @override String get markAsUnwatched => 'Markera som osedd'; } // Path: videoControls class _StringsVideoControlsSv implements _StringsVideoControlsEn { - _StringsVideoControlsSv._(this._root); + _StringsVideoControlsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Ljud'; - @override - String get subtitlesLabel => 'Undertexter'; - @override - String get resetToZero => 'Återställ till 0ms'; - @override - String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} spelas senare'; - @override - String playsEarlier({required Object label}) => '${label} spelas tidigare'; - @override - String get noOffset => 'Ingen offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Fyll skärm'; - @override - String get stretch => 'Sträck'; - @override - String get lockRotation => 'Lås rotation'; - @override - String get unlockRotation => 'Lås upp rotation'; - @override - String get sleepTimer => 'Sovtimer'; - @override - String get timerActive => 'Timer aktiv'; - @override - String playbackWillPauseIn({required Object duration}) => 'Uppspelningen pausas om ${duration}'; - @override - String get sleepTimerCompleted => 'Sovtimer slutförd - uppspelning pausad'; - @override - String get playButton => 'Spela'; - @override - String get pauseButton => 'Pausa'; - @override - String seekBackwardButton({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; - @override - String seekForwardButton({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; - @override - String get previousButton => 'Föregående avsnitt'; - @override - String get nextButton => 'Nästa avsnitt'; - @override - String get previousChapterButton => 'Föregående kapitel'; - @override - String get nextChapterButton => 'Nästa kapitel'; - @override - String get muteButton => 'Tysta'; - @override - String get unmuteButton => 'Slå på ljud'; - @override - String get settingsButton => 'Videoinställningar'; - @override - String get audioTrackButton => 'Ljudspår'; - @override - String get subtitlesButton => 'Undertexter'; - @override - String get chaptersButton => 'Kapitel'; - @override - String get versionsButton => 'Videoversioner'; - @override - String get aspectRatioButton => 'Bildförhållande'; - @override - String get fullscreenButton => 'Aktivera helskärm'; - @override - String get exitFullscreenButton => 'Avsluta helskärm'; - @override - String get alwaysOnTopButton => 'Alltid överst'; - @override - String get rotationLockButton => 'Rotationslås'; - @override - String get timelineSlider => 'Videotidslinje'; - @override - String get volumeSlider => 'Volymnivå'; - @override - String get backButton => 'Tillbaka'; + // Translations + @override String get audioLabel => 'Ljud'; + @override String get subtitlesLabel => 'Undertexter'; + @override String get resetToZero => 'Återställ till 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} spelas senare'; + @override String playsEarlier({required Object label}) => '${label} spelas tidigare'; + @override String get noOffset => 'Ingen offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Fyll skärm'; + @override String get stretch => 'Sträck'; + @override String get lockRotation => 'Lås rotation'; + @override String get unlockRotation => 'Lås upp rotation'; + @override String get sleepTimer => 'Sovtimer'; + @override String get timerActive => 'Timer aktiv'; + @override String playbackWillPauseIn({required Object duration}) => 'Uppspelningen pausas om ${duration}'; + @override String get sleepTimerCompleted => 'Sovtimer slutförd - uppspelning pausad'; + @override String get playButton => 'Spela'; + @override String get pauseButton => 'Pausa'; + @override String seekBackwardButton({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; + @override String seekForwardButton({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; + @override String get previousButton => 'Föregående avsnitt'; + @override String get nextButton => 'Nästa avsnitt'; + @override String get previousChapterButton => 'Föregående kapitel'; + @override String get nextChapterButton => 'Nästa kapitel'; + @override String get muteButton => 'Tysta'; + @override String get unmuteButton => 'Slå på ljud'; + @override String get settingsButton => 'Videoinställningar'; + @override String get audioTrackButton => 'Ljudspår'; + @override String get subtitlesButton => 'Undertexter'; + @override String get chaptersButton => 'Kapitel'; + @override String get versionsButton => 'Videoversioner'; + @override String get aspectRatioButton => 'Bildförhållande'; + @override String get fullscreenButton => 'Aktivera helskärm'; + @override String get exitFullscreenButton => 'Avsluta helskärm'; + @override String get 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); + _StringsUserStatusSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get admin => 'Admin'; - @override - String get restricted => 'Begränsad'; - @override - String get protected => 'Skyddad'; - @override - String get current => 'NUVARANDE'; + // Translations + @override String get admin => 'Admin'; + @override String get restricted => 'Begränsad'; + @override String get protected => 'Skyddad'; + @override String get current => 'NUVARANDE'; } // Path: messages class _StringsMessagesSv implements _StringsMessagesEn { - _StringsMessagesSv._(this._root); + _StringsMessagesSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Markerad som sedd'; - @override - String get markedAsUnwatched => 'Markerad som osedd'; - @override - String get 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}'; - @override - String get youAreOffline => 'Du är offline'; - @override - String get offlineFeatureUnavailable => - 'Denna funktion kräver en internetanslutning. Dina nedladdningar och inställningar är fortfarande tillgängliga.'; + // 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); + _StringsSubtitlingStylingSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Stilalternativ'; - @override - String get fontSize => 'Teckenstorlek'; - @override - String get textColor => 'Textfärg'; - @override - String get borderSize => 'Kantstorlek'; - @override - String get borderColor => 'Kantfärg'; - @override - String get backgroundOpacity => 'Bakgrundsopacitet'; - @override - String get backgroundColor => 'Bakgrundsfärg'; + // Translations + @override String get stylingOptions => 'Stilalternativ'; + @override String get fontSize => 'Teckenstorlek'; + @override String get textColor => 'Textfärg'; + @override String get borderSize => 'Kantstorlek'; + @override String get borderColor => 'Kantfärg'; + @override String get backgroundOpacity => 'Bakgrundsopacitet'; + @override String get backgroundColor => 'Bakgrundsfärg'; } // Path: dialog class _StringsDialogSv implements _StringsDialogEn { - _StringsDialogSv._(this._root); + _StringsDialogSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Bekräfta åtgärd'; - @override - String get cancel => 'Avbryt'; - @override - String get playNow => 'Spela nu'; + // 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); + _StringsDiscoverSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Upptäck'; - @override - String get switchProfile => 'Byt profil'; - @override - String get switchServer => 'Byt server'; - @override - String get logout => 'Logga ut'; - @override - String get noContentAvailable => 'Inget innehåll tillgängligt'; - @override - String get addMediaToLibraries => 'Lägg till media till dina bibliotek'; - @override - String get continueWatching => 'Fortsätt titta'; - @override - String get 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'; + // 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); + _StringsErrorsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => 'Sökning misslyckades: ${error}'; - @override - String connectionTimeout({required Object context}) => 'Anslutnings-timeout vid laddning ${context}'; - @override - String get connectionFailed => 'Kan inte ansluta till Plex-server'; - @override - String failedToLoad({required Object context, required Object error}) => - 'Misslyckades att ladda ${context}: ${error}'; - @override - String get noClientAvailable => 'Ingen klient tillgänglig'; - @override - String authenticationFailed({required Object error}) => 'Autentisering misslyckades: ${error}'; - @override - String get couldNotLaunchUrl => 'Kunde inte öppna autentiserings-URL'; - @override - String get pleaseEnterToken => 'Vänligen ange en token'; - @override - String get invalidToken => 'Ogiltig token'; - @override - String failedToVerifyToken({required Object error}) => 'Misslyckades att verifiera token: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; + // 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); + _StringsLibrariesSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Bibliotek'; - @override - String get scanLibraryFiles => 'Skanna biblioteksfiler'; - @override - String get scanLibrary => 'Skanna bibliotek'; - @override - String get analyze => 'Analysera'; - @override - String get analyzeLibrary => 'Analysera bibliotek'; - @override - String get refreshMetadata => 'Uppdatera metadata'; - @override - String get emptyTrash => 'Töm papperskorg'; - @override - String emptyingTrash({required Object title}) => 'Tömmer papperskorg för "${title}"...'; - @override - String trashEmptied({required Object title}) => 'Papperskorg tömd för "${title}"'; - @override - String failedToEmptyTrash({required Object error}) => 'Misslyckades att tömma papperskorg: ${error}'; - @override - String analyzing({required Object title}) => 'Analyserar "${title}"...'; - @override - String analysisStarted({required Object title}) => 'Analys startad för "${title}"'; - @override - String failedToAnalyze({required Object error}) => 'Misslyckades att analysera bibliotek: ${error}'; - @override - String get noLibrariesFound => 'Inga bibliotek hittades'; - @override - String get thisLibraryIsEmpty => 'Detta bibliotek är tomt'; - @override - String get all => 'Alla'; - @override - String get clearAll => 'Rensa alla'; - @override - String scanLibraryConfirm({required Object title}) => 'Är du säker på att du vill skanna "${title}"?'; - @override - String analyzeLibraryConfirm({required Object title}) => 'Är du säker på att du vill analysera "${title}"?'; - @override - String refreshMetadataConfirm({required Object title}) => - 'Är du säker på att du vill uppdatera metadata för "${title}"?'; - @override - String emptyTrashConfirm({required Object title}) => 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; - @override - String get manageLibraries => 'Hantera bibliotek'; - @override - String get sort => 'Sortera'; - @override - String get sortBy => 'Sortera efter'; - @override - String get filters => 'Filter'; - @override - String get confirmActionMessage => 'Är du säker på att du vill utföra denna åtgärd?'; - @override - String get showLibrary => 'Visa bibliotek'; - @override - String get hideLibrary => 'Dölj bibliotek'; - @override - String get libraryOptions => 'Biblioteksalternativ'; - @override - String get content => 'bibliotekets innehåll'; - @override - String get selectLibrary => 'Välj bibliotek'; - @override - String filtersWithCount({required Object count}) => 'Filter (${count})'; - @override - String get noRecommendations => 'Inga rekommendationer tillgängliga'; - @override - String get noCollections => 'Inga samlingar i det här biblioteket'; - @override - String get noFoldersFound => 'Inga mappar hittades'; - @override - String get folders => 'mappar'; - @override - late final _StringsLibrariesTabsSv tabs = _StringsLibrariesTabsSv._(_root); - @override - late final _StringsLibrariesGroupingsSv groupings = _StringsLibrariesGroupingsSv._(_root); + // Translations + @override String get title => 'Bibliotek'; + @override String get scanLibraryFiles => 'Skanna biblioteksfiler'; + @override String get scanLibrary => 'Skanna bibliotek'; + @override String get analyze => 'Analysera'; + @override String get analyzeLibrary => 'Analysera bibliotek'; + @override String get refreshMetadata => 'Uppdatera metadata'; + @override String get emptyTrash => 'Töm papperskorg'; + @override String emptyingTrash({required Object title}) => 'Tömmer papperskorg för "${title}"...'; + @override String trashEmptied({required Object title}) => 'Papperskorg tömd för "${title}"'; + @override String failedToEmptyTrash({required Object error}) => 'Misslyckades att tömma papperskorg: ${error}'; + @override String analyzing({required Object title}) => 'Analyserar "${title}"...'; + @override String analysisStarted({required Object title}) => 'Analys startad för "${title}"'; + @override String failedToAnalyze({required Object error}) => 'Misslyckades att analysera bibliotek: ${error}'; + @override String get noLibrariesFound => 'Inga bibliotek hittades'; + @override String get thisLibraryIsEmpty => 'Detta bibliotek är tomt'; + @override String get all => 'Alla'; + @override String get clearAll => 'Rensa alla'; + @override String scanLibraryConfirm({required Object title}) => 'Är du säker på att du vill skanna "${title}"?'; + @override String analyzeLibraryConfirm({required Object title}) => 'Är du säker på att du vill analysera "${title}"?'; + @override String refreshMetadataConfirm({required Object title}) => 'Är du säker på att du vill uppdatera metadata för "${title}"?'; + @override String emptyTrashConfirm({required Object title}) => 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; + @override String get manageLibraries => 'Hantera bibliotek'; + @override String get sort => 'Sortera'; + @override String get sortBy => 'Sortera efter'; + @override String get filters => 'Filter'; + @override String get confirmActionMessage => 'Är du säker på att du vill utföra denna åtgärd?'; + @override String get showLibrary => 'Visa bibliotek'; + @override String get hideLibrary => 'Dölj bibliotek'; + @override String get libraryOptions => 'Biblioteksalternativ'; + @override String get content => 'bibliotekets innehåll'; + @override String get selectLibrary => 'Välj bibliotek'; + @override String filtersWithCount({required Object count}) => 'Filter (${count})'; + @override String get noRecommendations => 'Inga rekommendationer tillgängliga'; + @override String get noCollections => 'Inga samlingar i det här biblioteket'; + @override String get noFoldersFound => 'Inga mappar hittades'; + @override String get folders => 'mappar'; + @override late final _StringsLibrariesTabsSv tabs = _StringsLibrariesTabsSv._(_root); + @override late final _StringsLibrariesGroupingsSv groupings = _StringsLibrariesGroupingsSv._(_root); } // Path: about class _StringsAboutSv implements _StringsAboutEn { - _StringsAboutSv._(this._root); + _StringsAboutSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Om'; - @override - String get openSourceLicenses => 'Öppen källkod-licenser'; - @override - String versionLabel({required Object version}) => 'Version ${version}'; - @override - String get appDescription => 'En vacker Plex-klient för Flutter'; - @override - String get viewLicensesDescription => 'Visa licenser för tredjepartsbibliotek'; + // Translations + @override String get title => 'Om'; + @override String get openSourceLicenses => 'Öppen källkod-licenser'; + @override String versionLabel({required Object version}) => 'Version ${version}'; + @override String get appDescription => 'En vacker Plex-klient för Flutter'; + @override String get viewLicensesDescription => 'Visa licenser för tredjepartsbibliotek'; } // Path: serverSelection class _StringsServerSelectionSv implements _StringsServerSelectionEn { - _StringsServerSelectionSv._(this._root); + _StringsServerSelectionSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get 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}'; + // 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); + _StringsHubDetailSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Titel'; - @override - String get releaseYear => 'Utgivningsår'; - @override - String get dateAdded => 'Datum tillagd'; - @override - String get rating => 'Betyg'; - @override - String get noItemsFound => 'Inga objekt hittades'; + // Translations + @override String get title => 'Titel'; + @override String get releaseYear => 'Utgivningsår'; + @override String get dateAdded => 'Datum tillagd'; + @override String get rating => 'Betyg'; + @override String get noItemsFound => 'Inga objekt hittades'; } // Path: logs class _StringsLogsSv implements _StringsLogsEn { - _StringsLogsSv._(this._root); + _StringsLogsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get clearLogs => 'Rensa loggar'; - @override - String get copyLogs => 'Kopiera loggar'; - @override - String get error => 'Fel:'; - @override - String get stackTrace => 'Stack trace:'; + // 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); + _StringsLicensesSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Relaterade paket'; - @override - String get license => 'Licens'; - @override - String licenseNumber({required Object number}) => 'Licens ${number}'; - @override - String licensesCount({required Object count}) => '${count} licenser'; + // Translations + @override String get relatedPackages => 'Relaterade paket'; + @override String get license => 'Licens'; + @override String licenseNumber({required Object number}) => 'Licens ${number}'; + @override String licensesCount({required Object count}) => '${count} licenser'; } // Path: navigation class _StringsNavigationSv implements _StringsNavigationEn { - _StringsNavigationSv._(this._root); + _StringsNavigationSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get home => 'Hem'; - @override - String get search => 'Sök'; - @override - String get libraries => 'Bibliotek'; - @override - String get settings => 'Inställningar'; - @override - String get downloads => 'Nedladdningar'; + // 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); + _StringsDownloadsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @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})'; + // 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); + _StringsPlaylistsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Spellistor'; - @override - String get noPlaylists => 'Inga spellistor hittades'; - @override - String get create => 'Skapa spellista'; - @override - String get 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'; + // 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); + _StringsCollectionsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Samlingar'; - @override - String get collection => 'Samling'; - @override - String get empty => 'Samlingen är tom'; - @override - String get 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}'; + // 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); + _StringsWatchTogetherSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @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 inviteOthers => 'Bjud in andra'; - @override - String get syncing => 'Synkroniserar...'; - @override - String get participant => 'deltagare'; - @override - String get participantsPlural => 'deltagare'; - @override - String get copyCode => 'Kopiera kod'; - @override - String get shareInstructions => 'Dela denna kod med andra för att låta dem gå med i din tittarsession.'; - @override - String get codeCopied => 'Sessionskod kopierad till urklipp'; - @override - String get share => 'Dela'; - @override - String inviteText({required Object sessionId}) => - 'Gå med i min Titta Tillsammans-session!\n\nSessionskod: ${sessionId}'; - @override - String get inviteSubject => 'Titta Tillsammans-inbjudan'; - @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'; + // 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'; } // Path: libraries.tabs class _StringsLibrariesTabsSv implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsSv._(this._root); + _StringsLibrariesTabsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Rekommenderat'; - @override - String get browse => 'Bläddra'; - @override - String get collections => 'Samlingar'; - @override - String get playlists => 'Spellistor'; + // Translations + @override String get recommended => 'Rekommenderat'; + @override String get browse => 'Bläddra'; + @override String get collections => 'Samlingar'; + @override String get playlists => 'Spellistor'; } // Path: libraries.groupings class _StringsLibrariesGroupingsSv implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsSv._(this._root); + _StringsLibrariesGroupingsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get all => 'Alla'; - @override - String get movies => 'Filmer'; - @override - String get shows => 'Serier'; - @override - String get seasons => 'Säsonger'; - @override - String get episodes => 'Avsnitt'; - @override - String get folders => 'Mappar'; + // Translations + @override String get all => 'Alla'; + @override String get movies => 'Filmer'; + @override String get shows => 'Serier'; + @override String get seasons => 'Säsonger'; + @override String get episodes => 'Avsnitt'; + @override String get folders => 'Mappar'; } // Path: class _StringsZh implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsZh.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.zh, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsZh.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.zh, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsZh _root = this; // ignore: unused_field + @override late final _StringsZh _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppZh app = _StringsAppZh._(_root); - @override - late final _StringsAuthZh auth = _StringsAuthZh._(_root); - @override - late final _StringsCommonZh common = _StringsCommonZh._(_root); - @override - late final _StringsScreensZh screens = _StringsScreensZh._(_root); - @override - late final _StringsUpdateZh update = _StringsUpdateZh._(_root); - @override - late final _StringsSettingsZh settings = _StringsSettingsZh._(_root); - @override - late final _StringsSearchZh search = _StringsSearchZh._(_root); - @override - late final _StringsHotkeysZh hotkeys = _StringsHotkeysZh._(_root); - @override - late final _StringsPinEntryZh pinEntry = _StringsPinEntryZh._(_root); - @override - late final _StringsFileInfoZh fileInfo = _StringsFileInfoZh._(_root); - @override - late final _StringsMediaMenuZh mediaMenu = _StringsMediaMenuZh._(_root); - @override - late final _StringsAccessibilityZh accessibility = _StringsAccessibilityZh._(_root); - @override - late final _StringsTooltipsZh tooltips = _StringsTooltipsZh._(_root); - @override - late final _StringsVideoControlsZh videoControls = _StringsVideoControlsZh._(_root); - @override - late final _StringsUserStatusZh userStatus = _StringsUserStatusZh._(_root); - @override - late final _StringsMessagesZh messages = _StringsMessagesZh._(_root); - @override - late final _StringsSubtitlingStylingZh subtitlingStyling = _StringsSubtitlingStylingZh._(_root); - @override - late final _StringsDialogZh dialog = _StringsDialogZh._(_root); - @override - late final _StringsDiscoverZh discover = _StringsDiscoverZh._(_root); - @override - late final _StringsErrorsZh errors = _StringsErrorsZh._(_root); - @override - late final _StringsLibrariesZh libraries = _StringsLibrariesZh._(_root); - @override - late final _StringsAboutZh about = _StringsAboutZh._(_root); - @override - late final _StringsServerSelectionZh serverSelection = _StringsServerSelectionZh._(_root); - @override - late final _StringsHubDetailZh hubDetail = _StringsHubDetailZh._(_root); - @override - late final _StringsLogsZh logs = _StringsLogsZh._(_root); - @override - late final _StringsLicensesZh licenses = _StringsLicensesZh._(_root); - @override - late final _StringsNavigationZh navigation = _StringsNavigationZh._(_root); - @override - late final _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); + // 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 _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); + _StringsAppZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => '加载中...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => '加载中...'; } // Path: auth class _StringsAuthZh implements _StringsAuthEn { - _StringsAuthZh._(this._root); + _StringsAuthZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => '使用 Plex 登录'; - @override - String get showQRCode => '显示二维码'; - @override - String get cancel => '取消'; - @override - String get authenticate => '验证'; - @override - String get retry => '重试'; - @override - String get debugEnterToken => '调试:输入 Plex Token'; - @override - String get plexTokenLabel => 'Plex 授权令牌 (Auth Token)'; - @override - String get plexTokenHint => '输入你的 Plex.tv 令牌'; - @override - String get authenticationTimeout => '验证超时。请重试。'; - @override - String get scanQRCodeInstruction => '请使用已登录 Plex 的设备扫描此二维码进行验证。'; - @override - String get waitingForAuth => '等待验证中...\n请在你的浏览器中完成登录。'; + // Translations + @override String get signInWithPlex => '使用 Plex 登录'; + @override String get showQRCode => '显示二维码'; + @override String get cancel => '取消'; + @override String get authenticate => '验证'; + @override String get retry => '重试'; + @override String get debugEnterToken => '调试:输入 Plex Token'; + @override String get plexTokenLabel => 'Plex 授权令牌 (Auth Token)'; + @override String get plexTokenHint => '输入你的 Plex.tv 令牌'; + @override String get authenticationTimeout => '验证超时。请重试。'; + @override String get scanQRCodeInstruction => '请使用已登录 Plex 的设备扫描此二维码进行验证。'; + @override String get waitingForAuth => '等待验证中...\n请在你的浏览器中完成登录。'; } // Path: common class _StringsCommonZh implements _StringsCommonEn { - _StringsCommonZh._(this._root); + _StringsCommonZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get cancel => '取消'; - @override - String get save => '保存'; - @override - String get close => '关闭'; - @override - String get clear => '清除'; - @override - String get reset => '重置'; - @override - String get later => '稍后'; - @override - String get submit => '提交'; - @override - String get confirm => '确认'; - @override - String get retry => '重试'; - @override - String get 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 => '添加到...'; + // 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); + _StringsScreensZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get licenses => '许可证'; - @override - String get selectServer => '选择服务器'; - @override - String get switchProfile => '切换用户'; - @override - String get subtitleStyling => '字幕样式'; - @override - String get search => '搜索'; - @override - String get logs => '日志'; + // Translations + @override String get licenses => '许可证'; + @override String get selectServer => '选择服务器'; + @override String get switchProfile => '切换用户'; + @override String get subtitleStyling => '字幕样式'; + @override String get search => '搜索'; + @override String get logs => '日志'; } // Path: update class _StringsUpdateZh implements _StringsUpdateEn { - _StringsUpdateZh._(this._root); + _StringsUpdateZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get available => '有可用更新'; - @override - String versionAvailable({required Object version}) => '版本 ${version} 已发布'; - @override - String currentVersion({required Object version}) => '当前版本: ${version}'; - @override - String get skipVersion => '跳过此版本'; - @override - String get viewRelease => '查看发布详情'; - @override - String get latestVersion => '已安装的版本是可用的最新版本'; - @override - String get checkFailed => '无法检查更新'; + // Translations + @override String get available => '有可用更新'; + @override String versionAvailable({required Object version}) => '版本 ${version} 已发布'; + @override String currentVersion({required Object version}) => '当前版本: ${version}'; + @override String get skipVersion => '跳过此版本'; + @override String get viewRelease => '查看发布详情'; + @override String get latestVersion => '已安装的版本是可用的最新版本'; + @override String get checkFailed => '无法检查更新'; } // Path: settings class _StringsSettingsZh implements _StringsSettingsEn { - _StringsSettingsZh._(this._root); + _StringsSettingsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '设置'; - @override - String get language => '语言'; - @override - String get theme => '主题'; - @override - String get appearance => '外观'; - @override - String get videoPlayback => '视频播放'; - @override - String get advanced => '高级'; - @override - String get useSeasonPostersDescription => '为剧集显示季海报而非剧集海报'; - @override - String get showHeroSectionDescription => '在主屏幕上显示精选内容轮播区'; - @override - String get secondsLabel => '秒'; - @override - String get minutesLabel => '分钟'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => '输入时长 (${min}-${max})'; - @override - String get systemTheme => '系统'; - @override - String get systemThemeDescription => '跟随系统设置'; - @override - String get lightTheme => '浅色'; - @override - String get darkTheme => '深色'; - @override - String get libraryDensity => '媒体库密度'; - @override - String get compact => '紧凑'; - @override - String get compactDescription => '卡片更小,显示更多项目'; - @override - String get normal => '标准'; - @override - String get normalDescription => '默认尺寸'; - @override - String get comfortable => '舒适'; - @override - String get comfortableDescription => '卡片更大,显示更少项目'; - @override - String get viewMode => '视图模式'; - @override - String get gridView => '网格视图'; - @override - String get gridViewDescription => '以网格布局显示项目'; - @override - String get listView => '列表视图'; - @override - String get listViewDescription => '以列表布局显示项目'; - @override - String get useSeasonPosters => '使用季海报'; - @override - String get showHeroSection => '显示主要精选区'; - @override - String get hardwareDecoding => '硬件解码'; - @override - String get hardwareDecodingDescription => '如果可用,使用硬件加速'; - @override - String get bufferSize => '缓冲区大小'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => '字幕样式'; - @override - String get subtitleStylingDescription => '调整字幕外观'; - @override - String get smallSkipDuration => '短跳过时长'; - @override - String get largeSkipDuration => '长跳过时长'; - @override - String secondsUnit({required Object seconds}) => '${seconds} 秒'; - @override - String get defaultSleepTimer => '默认睡眠定时器'; - @override - String minutesUnit({required Object minutes}) => '${minutes} 分钟'; - @override - String get rememberTrackSelections => '记住每个剧集/电影的音轨选择'; - @override - String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; - @override - String get 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 或更改设置。'; + // 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 useSeasonPostersDescription => '为剧集显示季海报而非剧集海报'; + @override String get showHeroSectionDescription => '在主屏幕上显示精选内容轮播区'; + @override String get secondsLabel => '秒'; + @override String get minutesLabel => '分钟'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => '输入时长 (${min}-${max})'; + @override String get systemTheme => '系统'; + @override String get systemThemeDescription => '跟随系统设置'; + @override String get lightTheme => '浅色'; + @override String get darkTheme => '深色'; + @override String get libraryDensity => '媒体库密度'; + @override String get compact => '紧凑'; + @override String get compactDescription => '卡片更小,显示更多项目'; + @override String get normal => '标准'; + @override String get normalDescription => '默认尺寸'; + @override String get comfortable => '舒适'; + @override String get comfortableDescription => '卡片更大,显示更少项目'; + @override String get viewMode => '视图模式'; + @override String get gridView => '网格视图'; + @override String get gridViewDescription => '以网格布局显示项目'; + @override String get listView => '列表视图'; + @override String get listViewDescription => '以列表布局显示项目'; + @override String get useSeasonPosters => '使用季海报'; + @override String get showHeroSection => '显示主要精选区'; + @override String get hardwareDecoding => '硬件解码'; + @override String get hardwareDecodingDescription => '如果可用,使用硬件加速'; + @override String get bufferSize => '缓冲区大小'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => '字幕样式'; + @override String get subtitleStylingDescription => '调整字幕外观'; + @override String get smallSkipDuration => '短跳过时长'; + @override String get largeSkipDuration => '长跳过时长'; + @override String secondsUnit({required Object seconds}) => '${seconds} 秒'; + @override String get defaultSleepTimer => '默认睡眠定时器'; + @override String minutesUnit({required Object minutes}) => '${minutes} 分钟'; + @override String get rememberTrackSelections => '记住每个剧集/电影的音轨选择'; + @override String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; + @override String get 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 或更改设置。'; } // Path: search class _StringsSearchZh implements _StringsSearchEn { - _StringsSearchZh._(this._root); + _StringsSearchZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get hint => '搜索电影、系列、音乐...'; - @override - String get tryDifferentTerm => '尝试不同的搜索词'; - @override - String get searchYourMedia => '搜索媒体'; - @override - String get enterTitleActorOrKeyword => '输入标题、演员或关键词'; + // Translations + @override String get hint => '搜索电影、系列、音乐...'; + @override String get tryDifferentTerm => '尝试不同的搜索词'; + @override String get searchYourMedia => '搜索媒体'; + @override String get enterTitleActorOrKeyword => '输入标题、演员或关键词'; } // Path: hotkeys class _StringsHotkeysZh implements _StringsHotkeysEn { - _StringsHotkeysZh._(this._root); + _StringsHotkeysZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => '为 ${actionName} 设置快捷键'; - @override - String get clearShortcut => '清除快捷键'; + // Translations + @override String setShortcutFor({required Object actionName}) => '为 ${actionName} 设置快捷键'; + @override String get clearShortcut => '清除快捷键'; } // Path: pinEntry class _StringsPinEntryZh implements _StringsPinEntryEn { - _StringsPinEntryZh._(this._root); + _StringsPinEntryZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get enterPin => '输入 PIN'; - @override - String get showPin => '显示 PIN'; - @override - String get hidePin => '隐藏 PIN'; + // Translations + @override String get enterPin => '输入 PIN'; + @override String get showPin => '显示 PIN'; + @override String get hidePin => '隐藏 PIN'; } // Path: fileInfo class _StringsFileInfoZh implements _StringsFileInfoEn { - _StringsFileInfoZh._(this._root); + _StringsFileInfoZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '文件信息'; - @override - String get video => '视频'; - @override - String get audio => '音频'; - @override - String get file => '文件'; - @override - String get advanced => '高级'; - @override - String get codec => '编解码器'; - @override - String get resolution => '分辨率'; - @override - String get bitrate => '比特率'; - @override - String get frameRate => '帧率'; - @override - String get aspectRatio => '宽高比'; - @override - String get profile => '配置文件'; - @override - String get bitDepth => '位深度'; - @override - String get colorSpace => '色彩空间'; - @override - String get colorRange => '色彩范围'; - @override - String get colorPrimaries => '颜色原色'; - @override - String get chromaSubsampling => '色度子采样'; - @override - String get channels => '声道'; - @override - String get path => '路径'; - @override - String get size => '大小'; - @override - String get container => '容器'; - @override - String get duration => '时长'; - @override - String get optimizedForStreaming => '已优化用于流媒体'; - @override - String get has64bitOffsets => '64位偏移量'; + // Translations + @override String get title => '文件信息'; + @override String get video => '视频'; + @override String get audio => '音频'; + @override String get file => '文件'; + @override String get advanced => '高级'; + @override String get codec => '编解码器'; + @override String get resolution => '分辨率'; + @override String get bitrate => '比特率'; + @override String get frameRate => '帧率'; + @override String get aspectRatio => '宽高比'; + @override String get profile => '配置文件'; + @override String get bitDepth => '位深度'; + @override String get colorSpace => '色彩空间'; + @override String get colorRange => '色彩范围'; + @override String get colorPrimaries => '颜色原色'; + @override String get chromaSubsampling => '色度子采样'; + @override String get channels => '声道'; + @override String get path => '路径'; + @override String get size => '大小'; + @override String get container => '容器'; + @override String get duration => '时长'; + @override String get optimizedForStreaming => '已优化用于流媒体'; + @override String get has64bitOffsets => '64位偏移量'; } // Path: mediaMenu class _StringsMediaMenuZh implements _StringsMediaMenuEn { - _StringsMediaMenuZh._(this._root); + _StringsMediaMenuZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => '标记为已观看'; - @override - String get markAsUnwatched => '标记为未观看'; - @override - String get removeFromContinueWatching => '从继续观看中移除'; - @override - String get goToSeries => '转到系列'; - @override - String get goToSeason => '转到季'; - @override - String get shufflePlay => '随机播放'; - @override - String get fileInfo => '文件信息'; + // Translations + @override String get markAsWatched => '标记为已观看'; + @override String get markAsUnwatched => '标记为未观看'; + @override String get removeFromContinueWatching => '从继续观看中移除'; + @override String get goToSeries => '转到系列'; + @override String get goToSeason => '转到季'; + @override String get shufflePlay => '随机播放'; + @override String get fileInfo => '文件信息'; } // Path: accessibility class _StringsAccessibilityZh implements _StringsAccessibilityEn { - _StringsAccessibilityZh._(this._root); + _StringsAccessibilityZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, 电影'; - @override - String mediaCardShow({required Object title}) => '${title}, 电视剧'; - @override - String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => '已观看'; - @override - String mediaCardPartiallyWatched({required Object percent}) => '已观看 ${percent} 百分比'; - @override - String get mediaCardUnwatched => '未观看'; - @override - String get tapToPlay => '点击播放'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, 电影'; + @override String mediaCardShow({required Object title}) => '${title}, 电视剧'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => '已观看'; + @override String mediaCardPartiallyWatched({required Object percent}) => '已观看 ${percent} 百分比'; + @override String get mediaCardUnwatched => '未观看'; + @override String get tapToPlay => '点击播放'; } // Path: tooltips class _StringsTooltipsZh implements _StringsTooltipsEn { - _StringsTooltipsZh._(this._root); + _StringsTooltipsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => '随机播放'; - @override - String get markAsWatched => '标记为已观看'; - @override - String get markAsUnwatched => '标记为未观看'; + // Translations + @override String get shufflePlay => '随机播放'; + @override String get markAsWatched => '标记为已观看'; + @override String get markAsUnwatched => '标记为未观看'; } // Path: videoControls class _StringsVideoControlsZh implements _StringsVideoControlsEn { - _StringsVideoControlsZh._(this._root); + _StringsVideoControlsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get audioLabel => '音频'; - @override - String get subtitlesLabel => '字幕'; - @override - String get resetToZero => '重置为 0ms'; - @override - String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} 播放较晚'; - @override - String playsEarlier({required Object label}) => '${label} 播放较早'; - @override - String get noOffset => '无偏移'; - @override - String get letterbox => '信箱模式(Letterbox)'; - @override - String get fillScreen => '填充屏幕'; - @override - String get stretch => '拉伸'; - @override - String get lockRotation => '锁定旋转'; - @override - String get unlockRotation => '解锁旋转'; - @override - String get sleepTimer => '睡眠定时器'; - @override - String get timerActive => '定时器已激活'; - @override - String playbackWillPauseIn({required Object duration}) => '播放将在 ${duration} 后暂停'; - @override - String get sleepTimerCompleted => '睡眠定时器已完成 - 播放已暂停'; - @override - String get playButton => '播放'; - @override - String get pauseButton => '暂停'; - @override - String seekBackwardButton({required Object seconds}) => '后退 ${seconds} 秒'; - @override - String seekForwardButton({required Object seconds}) => '前进 ${seconds} 秒'; - @override - String get previousButton => '上一集'; - @override - String get nextButton => '下一集'; - @override - String get previousChapterButton => '上一章节'; - @override - String get nextChapterButton => '下一章节'; - @override - String get muteButton => '静音'; - @override - String get unmuteButton => '取消静音'; - @override - String get settingsButton => '视频设置'; - @override - String get audioTrackButton => '音轨'; - @override - String get subtitlesButton => '字幕'; - @override - String get chaptersButton => '章节'; - @override - String get versionsButton => '视频版本'; - @override - String get aspectRatioButton => '宽高比'; - @override - String get fullscreenButton => '进入全屏'; - @override - String get exitFullscreenButton => '退出全屏'; - @override - String get alwaysOnTopButton => '置顶窗口'; - @override - String get rotationLockButton => '旋转锁定'; - @override - String get timelineSlider => '视频时间轴'; - @override - String get volumeSlider => '音量调节'; - @override - String get backButton => '返回'; + // Translations + @override String get audioLabel => '音频'; + @override String get subtitlesLabel => '字幕'; + @override String get resetToZero => '重置为 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} 播放较晚'; + @override String playsEarlier({required Object label}) => '${label} 播放较早'; + @override String get noOffset => '无偏移'; + @override String get letterbox => '信箱模式(Letterbox)'; + @override String get fillScreen => '填充屏幕'; + @override String get stretch => '拉伸'; + @override String get lockRotation => '锁定旋转'; + @override String get unlockRotation => '解锁旋转'; + @override String get sleepTimer => '睡眠定时器'; + @override String get timerActive => '定时器已激活'; + @override String playbackWillPauseIn({required Object duration}) => '播放将在 ${duration} 后暂停'; + @override String get sleepTimerCompleted => '睡眠定时器已完成 - 播放已暂停'; + @override String get playButton => '播放'; + @override String get pauseButton => '暂停'; + @override String seekBackwardButton({required Object seconds}) => '后退 ${seconds} 秒'; + @override String seekForwardButton({required Object seconds}) => '前进 ${seconds} 秒'; + @override String get previousButton => '上一集'; + @override String get nextButton => '下一集'; + @override String get previousChapterButton => '上一章节'; + @override String get nextChapterButton => '下一章节'; + @override String get muteButton => '静音'; + @override String get unmuteButton => '取消静音'; + @override String get settingsButton => '视频设置'; + @override String get audioTrackButton => '音轨'; + @override String get subtitlesButton => '字幕'; + @override String get chaptersButton => '章节'; + @override String get versionsButton => '视频版本'; + @override String get aspectRatioButton => '宽高比'; + @override String get fullscreenButton => '进入全屏'; + @override String get exitFullscreenButton => '退出全屏'; + @override String get 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); + _StringsUserStatusZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get admin => '管理员'; - @override - String get restricted => '受限'; - @override - String get protected => '受保护'; - @override - String get current => '当前'; + // Translations + @override String get admin => '管理员'; + @override String get restricted => '受限'; + @override String get protected => '受保护'; + @override String get current => '当前'; } // Path: messages class _StringsMessagesZh implements _StringsMessagesEn { - _StringsMessagesZh._(this._root); + _StringsMessagesZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => '已标记为已观看'; - @override - String get markedAsUnwatched => '已标记为未观看'; - @override - String get 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}'; - @override - String get youAreOffline => '您已离线'; - @override - String get offlineFeatureUnavailable => '此功能需要网络连接。您的下载内容和设置仍然可用。'; + // 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); + _StringsSubtitlingStylingZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => '样式选项'; - @override - String get fontSize => '字号'; - @override - String get textColor => '文本颜色'; - @override - String get borderSize => '边框大小'; - @override - String get borderColor => '边框颜色'; - @override - String get backgroundOpacity => '背景不透明度'; - @override - String get backgroundColor => '背景颜色'; + // Translations + @override String get stylingOptions => '样式选项'; + @override String get fontSize => '字号'; + @override String get textColor => '文本颜色'; + @override String get borderSize => '边框大小'; + @override String get borderColor => '边框颜色'; + @override String get backgroundOpacity => '背景不透明度'; + @override String get backgroundColor => '背景颜色'; } // Path: dialog class _StringsDialogZh implements _StringsDialogEn { - _StringsDialogZh._(this._root); + _StringsDialogZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get confirmAction => '确认操作'; - @override - String get cancel => '取消'; - @override - String get playNow => '立即播放'; + // Translations + @override String get confirmAction => '确认操作'; + @override String get cancel => '取消'; + @override String get playNow => '立即播放'; } // Path: discover class _StringsDiscoverZh implements _StringsDiscoverEn { - _StringsDiscoverZh._(this._root); + _StringsDiscoverZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '发现'; - @override - String get switchProfile => '切换用户'; - @override - String get switchServer => '切换服务器'; - @override - String get logout => '登出'; - @override - String get noContentAvailable => '没有可用内容'; - @override - String get addMediaToLibraries => '请向你的媒体库添加一些媒体'; - @override - String get continueWatching => '继续观看'; - @override - String get 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} 分钟'; + // 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); + _StringsErrorsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => '搜索失败: ${error}'; - @override - String connectionTimeout({required Object context}) => '加载 ${context} 时连接超时'; - @override - String get connectionFailed => '无法连接到 Plex 服务器'; - @override - String failedToLoad({required Object context, required Object error}) => '无法加载 ${context}: ${error}'; - @override - String get noClientAvailable => '没有可用客户端'; - @override - String authenticationFailed({required Object error}) => '验证失败: ${error}'; - @override - String get couldNotLaunchUrl => '无法打开授权 URL'; - @override - String get pleaseEnterToken => '请输入一个令牌'; - @override - String get invalidToken => '令牌无效'; - @override - String failedToVerifyToken({required Object error}) => '无法验证令牌: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => '无法切换到 ${displayName}'; + // 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); + _StringsLibrariesZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '媒体库'; - @override - String get scanLibraryFiles => '扫描媒体库文件'; - @override - String get scanLibrary => '扫描媒体库'; - @override - String get analyze => '分析'; - @override - String get analyzeLibrary => '分析媒体库'; - @override - String get refreshMetadata => '刷新元数据'; - @override - String get emptyTrash => '清空回收站'; - @override - String emptyingTrash({required Object title}) => '正在清空 “${title}” 的回收站...'; - @override - String trashEmptied({required Object title}) => '已清空 “${title}” 的回收站'; - @override - String failedToEmptyTrash({required Object error}) => '无法清空回收站: ${error}'; - @override - String analyzing({required Object title}) => '正在分析 “${title}”...'; - @override - String analysisStarted({required Object title}) => '已开始分析 “${title}”'; - @override - String failedToAnalyze({required Object error}) => '无法分析媒体库: ${error}'; - @override - String get noLibrariesFound => '未找到媒体库'; - @override - String get thisLibraryIsEmpty => '此媒体库为空'; - @override - String get all => '全部'; - @override - String get clearAll => '全部清除'; - @override - String scanLibraryConfirm({required Object title}) => '确定要扫描 “${title}” 吗?'; - @override - String analyzeLibraryConfirm({required Object title}) => '确定要分析 “${title}” 吗?'; - @override - String refreshMetadataConfirm({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; - @override - String emptyTrashConfirm({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; - @override - String get manageLibraries => '管理媒体库'; - @override - String get sort => '排序'; - @override - String get sortBy => '排序依据'; - @override - String get filters => '筛选器'; - @override - String get confirmActionMessage => '确定要执行此操作吗?'; - @override - String get showLibrary => '显示媒体库'; - @override - String get hideLibrary => '隐藏媒体库'; - @override - String get libraryOptions => '媒体库选项'; - @override - String get content => '媒体库内容'; - @override - String get selectLibrary => '选择媒体库'; - @override - String filtersWithCount({required Object count}) => '筛选器(${count})'; - @override - String get noRecommendations => '暂无推荐'; - @override - String get noCollections => '此媒体库中没有合集'; - @override - String get noFoldersFound => '未找到文件夹'; - @override - String get folders => '文件夹'; - @override - late final _StringsLibrariesTabsZh tabs = _StringsLibrariesTabsZh._(_root); - @override - late final _StringsLibrariesGroupingsZh groupings = _StringsLibrariesGroupingsZh._(_root); + // Translations + @override String get title => '媒体库'; + @override String get scanLibraryFiles => '扫描媒体库文件'; + @override String get scanLibrary => '扫描媒体库'; + @override String get analyze => '分析'; + @override String get analyzeLibrary => '分析媒体库'; + @override String get refreshMetadata => '刷新元数据'; + @override String get emptyTrash => '清空回收站'; + @override String emptyingTrash({required Object title}) => '正在清空 “${title}” 的回收站...'; + @override String trashEmptied({required Object title}) => '已清空 “${title}” 的回收站'; + @override String failedToEmptyTrash({required Object error}) => '无法清空回收站: ${error}'; + @override String analyzing({required Object title}) => '正在分析 “${title}”...'; + @override String analysisStarted({required Object title}) => '已开始分析 “${title}”'; + @override String failedToAnalyze({required Object error}) => '无法分析媒体库: ${error}'; + @override String get noLibrariesFound => '未找到媒体库'; + @override String get thisLibraryIsEmpty => '此媒体库为空'; + @override String get all => '全部'; + @override String get clearAll => '全部清除'; + @override String scanLibraryConfirm({required Object title}) => '确定要扫描 “${title}” 吗?'; + @override String analyzeLibraryConfirm({required Object title}) => '确定要分析 “${title}” 吗?'; + @override String refreshMetadataConfirm({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; + @override String emptyTrashConfirm({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; + @override String get manageLibraries => '管理媒体库'; + @override String get sort => '排序'; + @override String get sortBy => '排序依据'; + @override String get filters => '筛选器'; + @override String get confirmActionMessage => '确定要执行此操作吗?'; + @override String get showLibrary => '显示媒体库'; + @override String get hideLibrary => '隐藏媒体库'; + @override String get libraryOptions => '媒体库选项'; + @override String get content => '媒体库内容'; + @override String get selectLibrary => '选择媒体库'; + @override String filtersWithCount({required Object count}) => '筛选器(${count})'; + @override String get noRecommendations => '暂无推荐'; + @override String get noCollections => '此媒体库中没有合集'; + @override String get noFoldersFound => '未找到文件夹'; + @override String get folders => '文件夹'; + @override late final _StringsLibrariesTabsZh tabs = _StringsLibrariesTabsZh._(_root); + @override late final _StringsLibrariesGroupingsZh groupings = _StringsLibrariesGroupingsZh._(_root); } // Path: about class _StringsAboutZh implements _StringsAboutEn { - _StringsAboutZh._(this._root); + _StringsAboutZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '关于'; - @override - String get openSourceLicenses => '开源许可证'; - @override - String versionLabel({required Object version}) => '版本 ${version}'; - @override - String get appDescription => '一款精美的 Flutter Plex 客户端'; - @override - String get viewLicensesDescription => '查看第三方库的许可证'; + // Translations + @override String get title => '关于'; + @override String get openSourceLicenses => '开源许可证'; + @override String versionLabel({required Object version}) => '版本 ${version}'; + @override String get appDescription => '一款精美的 Flutter Plex 客户端'; + @override String get viewLicensesDescription => '查看第三方库的许可证'; } // Path: serverSelection class _StringsServerSelectionZh implements _StringsServerSelectionEn { - _StringsServerSelectionZh._(this._root); + _StringsServerSelectionZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get allServerConnectionsFailed => '无法连接到任何服务器。请检查你的网络并重试。'; - @override - String get noServersFound => '未找到服务器'; - @override - String noServersFoundForAccount({required Object username, required Object email}) => - '未找到 ${username} (${email}) 的服务器'; - @override - String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; + // 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); + _StringsHubDetailZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '标题'; - @override - String get releaseYear => '发行年份'; - @override - String get dateAdded => '添加日期'; - @override - String get rating => '评分'; - @override - String get noItemsFound => '未找到项目'; + // Translations + @override String get title => '标题'; + @override String get releaseYear => '发行年份'; + @override String get dateAdded => '添加日期'; + @override String get rating => '评分'; + @override String get noItemsFound => '未找到项目'; } // Path: logs class _StringsLogsZh implements _StringsLogsEn { - _StringsLogsZh._(this._root); + _StringsLogsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get clearLogs => '清除日志'; - @override - String get copyLogs => '复制日志'; - @override - String get error => '错误:'; - @override - String get stackTrace => '堆栈跟踪 (Stack Trace):'; + // 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); + _StringsLicensesZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => '相关软件包'; - @override - String get license => '许可证'; - @override - String licenseNumber({required Object number}) => '许可证 ${number}'; - @override - String licensesCount({required Object count}) => '${count} 个许可证'; + // Translations + @override String get relatedPackages => '相关软件包'; + @override String get license => '许可证'; + @override String licenseNumber({required Object number}) => '许可证 ${number}'; + @override String licensesCount({required Object count}) => '${count} 个许可证'; } // Path: navigation class _StringsNavigationZh implements _StringsNavigationEn { - _StringsNavigationZh._(this._root); + _StringsNavigationZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get home => '主页'; - @override - String get search => '搜索'; - @override - String get libraries => '媒体库'; - @override - String get settings => '设置'; - @override - String get downloads => '下载'; + // 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); + _StringsDownloadsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @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})'; + // 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); + _StringsPlaylistsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '播放列表'; - @override - String get noPlaylists => '未找到播放列表'; - @override - String get create => '创建播放列表'; - @override - String get 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 => '播放列表'; + // 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); + _StringsCollectionsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '合集'; - @override - String get collection => '合集'; - @override - String get empty => '合集为空'; - @override - String get 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}'; + // 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); + _StringsWatchTogetherZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @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 inviteOthers => '邀请他人'; - @override - String get syncing => '同步中...'; - @override - String get participant => '参与者'; - @override - String get participantsPlural => '参与者'; - @override - String get copyCode => '复制代码'; - @override - String get shareInstructions => '与他人分享此代码以让他们加入你的观看会话。'; - @override - String get codeCopied => '会话代码已复制到剪贴板'; - @override - String get share => '分享'; - @override - String inviteText({required Object sessionId}) => '加入我的一起看会话!\n\n会话代码:${sessionId}'; - @override - String get inviteSubject => '一起看邀请'; - @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 => '加入会话失败'; + // 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 => '加入会话失败'; } // Path: libraries.tabs class _StringsLibrariesTabsZh implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsZh._(this._root); + _StringsLibrariesTabsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get recommended => '推荐'; - @override - String get browse => '浏览'; - @override - String get collections => '合集'; - @override - String get playlists => '播放列表'; + // Translations + @override String get recommended => '推荐'; + @override String get browse => '浏览'; + @override String get collections => '合集'; + @override String get playlists => '播放列表'; } // Path: libraries.groupings class _StringsLibrariesGroupingsZh implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsZh._(this._root); + _StringsLibrariesGroupingsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get all => '全部'; - @override - String get movies => '电影'; - @override - String get shows => '剧集'; - @override - String get seasons => '季'; - @override - String get episodes => '集'; - @override - String get folders => '文件夹'; + // Translations + @override String get all => '全部'; + @override String get movies => '电影'; + @override String get shows => '剧集'; + @override String get seasons => '季'; + @override String get episodes => '集'; + @override String get folders => '文件夹'; } /// Flat map(s) containing all translations. /// Only for edge cases! For simple maps, use the map function of this library. extension on Translations { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': - return 'Plezy'; - case 'app.loading': - return 'Loading...'; - case 'auth.signInWithPlex': - return 'Sign in with Plex'; - case 'auth.showQRCode': - return 'Show QR Code'; - case 'auth.cancel': - return 'Cancel'; - case 'auth.authenticate': - return 'Authenticate'; - case 'auth.retry': - return 'Retry'; - case 'auth.debugEnterToken': - return 'Debug: Enter Plex Token'; - case 'auth.plexTokenLabel': - return 'Plex Auth Token'; - case 'auth.plexTokenHint': - return 'Enter your Plex.tv token'; - case 'auth.authenticationTimeout': - return 'Authentication timed out. Please try again.'; - case 'auth.scanQRCodeInstruction': - return 'Scan this QR code with a device logged into Plex to authenticate.'; - case 'auth.waitingForAuth': - return 'Waiting for authentication...\nPlease complete sign-in in your browser.'; - case 'common.cancel': - return 'Cancel'; - case 'common.save': - return 'Save'; - case 'common.close': - return 'Close'; - case 'common.clear': - return 'Clear'; - case 'common.reset': - return 'Reset'; - case 'common.later': - return 'Later'; - case 'common.submit': - return 'Submit'; - case 'common.confirm': - return 'Confirm'; - case 'common.retry': - return 'Retry'; - case 'common.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.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.useSeasonPostersDescription': - return 'Show season poster instead of series poster for episodes'; - case 'settings.showHeroSectionDescription': - return 'Display featured content carousel on home screen'; - case 'settings.secondsLabel': - return 'Seconds'; - case 'settings.minutesLabel': - return 'Minutes'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; - case 'settings.systemTheme': - return 'System'; - case 'settings.systemThemeDescription': - return 'Follow system settings'; - case 'settings.lightTheme': - return 'Light'; - case 'settings.darkTheme': - return 'Dark'; - case 'settings.libraryDensity': - return 'Library Density'; - case 'settings.compact': - return 'Compact'; - case 'settings.compactDescription': - return 'Smaller cards, more items visible'; - case 'settings.normal': - return 'Normal'; - case 'settings.normalDescription': - return 'Default size'; - case 'settings.comfortable': - return 'Comfortable'; - case 'settings.comfortableDescription': - return 'Larger cards, fewer items visible'; - case 'settings.viewMode': - return 'View Mode'; - case 'settings.gridView': - return 'Grid'; - case 'settings.gridViewDescription': - return 'Display items in a grid layout'; - case 'settings.listView': - return 'List'; - case 'settings.listViewDescription': - return 'Display items in a list layout'; - case 'settings.useSeasonPosters': - return 'Use Season Posters'; - case 'settings.showHeroSection': - return 'Show Hero Section'; - case 'settings.hardwareDecoding': - return 'Hardware Decoding'; - case 'settings.hardwareDecodingDescription': - return 'Use hardware acceleration when available'; - case 'settings.bufferSize': - return 'Buffer Size'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Subtitle Styling'; - case 'settings.subtitleStylingDescription': - return 'Customize subtitle appearance'; - case 'settings.smallSkipDuration': - return 'Small Skip Duration'; - case 'settings.largeSkipDuration': - return 'Large Skip Duration'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} seconds'; - case 'settings.defaultSleepTimer': - return 'Default Sleep Timer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} minutes'; - case 'settings.rememberTrackSelections': - return 'Remember track selections per show/movie'; - case 'settings.rememberTrackSelectionsDescription': - return 'Automatically save audio and subtitle language preferences when you change tracks during playback'; - case 'settings.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 'search.hint': - return 'Search movies, shows, music...'; - case 'search.tryDifferentTerm': - return 'Try a different search term'; - case 'search.searchYourMedia': - return 'Search your media'; - case 'search.enterTitleActorOrKeyword': - return 'Enter a title, actor, or keyword'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => 'Set Shortcut for ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Clear shortcut'; - case 'pinEntry.enterPin': - return 'Enter PIN'; - case 'pinEntry.showPin': - return 'Show PIN'; - case 'pinEntry.hidePin': - return 'Hide PIN'; - case 'fileInfo.title': - return 'File Info'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'File'; - case 'fileInfo.advanced': - return 'Advanced'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Resolution'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Frame Rate'; - case 'fileInfo.aspectRatio': - return 'Aspect Ratio'; - case 'fileInfo.profile': - return 'Profile'; - case 'fileInfo.bitDepth': - return 'Bit Depth'; - case 'fileInfo.colorSpace': - return 'Color Space'; - case 'fileInfo.colorRange': - return 'Color Range'; - case 'fileInfo.colorPrimaries': - return 'Color Primaries'; - case 'fileInfo.chromaSubsampling': - return 'Chroma Subsampling'; - case 'fileInfo.channels': - return 'Channels'; - case 'fileInfo.path': - return 'Path'; - case 'fileInfo.size': - return 'Size'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Duration'; - case 'fileInfo.optimizedForStreaming': - return 'Optimized for Streaming'; - case 'fileInfo.has64bitOffsets': - return '64-bit Offsets'; - case 'mediaMenu.markAsWatched': - return 'Mark as Watched'; - case 'mediaMenu.markAsUnwatched': - return 'Mark as Unwatched'; - case 'mediaMenu.removeFromContinueWatching': - return 'Remove from Continue Watching'; - case 'mediaMenu.goToSeries': - return 'Go to series'; - case 'mediaMenu.goToSeason': - return 'Go to season'; - case 'mediaMenu.shufflePlay': - return 'Shuffle Play'; - case 'mediaMenu.fileInfo': - return 'File Info'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, movie'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, TV show'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'watched'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} percent watched'; - case 'accessibility.mediaCardUnwatched': - return 'unwatched'; - case 'accessibility.tapToPlay': - return 'Tap to play'; - case 'tooltips.shufflePlay': - return 'Shuffle play'; - case 'tooltips.markAsWatched': - return 'Mark as watched'; - case 'tooltips.markAsUnwatched': - return 'Mark as unwatched'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Subtitles'; - case 'videoControls.resetToZero': - return 'Reset to 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} plays later'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} plays earlier'; - case 'videoControls.noOffset': - return 'No offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Fill screen'; - case 'videoControls.stretch': - return 'Stretch'; - case 'videoControls.lockRotation': - return 'Lock rotation'; - case 'videoControls.unlockRotation': - return 'Unlock rotation'; - case 'videoControls.sleepTimer': - return 'Sleep Timer'; - case 'videoControls.timerActive': - return 'Timer Active'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => 'Playback will pause in ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Sleep timer completed - playback paused'; - case 'videoControls.playButton': - return 'Play'; - case 'videoControls.pauseButton': - return 'Pause'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => 'Seek backward ${seconds} seconds'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => 'Seek forward ${seconds} seconds'; - case 'videoControls.previousButton': - return 'Previous episode'; - case 'videoControls.nextButton': - return 'Next episode'; - case 'videoControls.previousChapterButton': - return 'Previous chapter'; - case 'videoControls.nextChapterButton': - return 'Next chapter'; - case 'videoControls.muteButton': - return 'Mute'; - case 'videoControls.unmuteButton': - return 'Unmute'; - case 'videoControls.settingsButton': - return 'Video settings'; - case 'videoControls.audioTrackButton': - return 'Audio tracks'; - case 'videoControls.subtitlesButton': - return 'Subtitles'; - case 'videoControls.chaptersButton': - return 'Chapters'; - case 'videoControls.versionsButton': - return 'Video versions'; - case 'videoControls.aspectRatioButton': - return 'Aspect ratio'; - case 'videoControls.fullscreenButton': - return 'Enter fullscreen'; - case 'videoControls.exitFullscreenButton': - return 'Exit fullscreen'; - case 'videoControls.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 'messages.youAreOffline': - return 'You\'re Offline'; - case 'messages.offlineFeatureUnavailable': - return 'This feature requires an internet connection. Your downloads and settings are still available.'; - case 'subtitlingStyling.stylingOptions': - return 'Styling Options'; - case 'subtitlingStyling.fontSize': - return 'Font Size'; - case 'subtitlingStyling.textColor': - return 'Text Color'; - case 'subtitlingStyling.borderSize': - return 'Border Size'; - case 'subtitlingStyling.borderColor': - return 'Border Color'; - case 'subtitlingStyling.backgroundOpacity': - return 'Background Opacity'; - case 'subtitlingStyling.backgroundColor': - return 'Background Color'; - case 'dialog.confirmAction': - return 'Confirm Action'; - case 'dialog.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.inviteOthers': - return 'Invite others'; - case 'watchTogether.syncing': - return 'Syncing...'; - case 'watchTogether.participant': - return 'participant'; - case 'watchTogether.participantsPlural': - return 'participants'; - case 'watchTogether.copyCode': - return 'Copy code'; - case 'watchTogether.shareInstructions': - return 'Share this code with others to let them join your watch session.'; - case 'watchTogether.codeCopied': - return 'Session code copied to clipboard'; - case 'watchTogether.share': - return 'Share'; - case 'watchTogether.inviteText': - return ({required Object sessionId}) => 'Join my Watch Together session!\n\nSession Code: ${sessionId}'; - case 'watchTogether.inviteSubject': - return 'Watch Together Invite'; - 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 '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; - } - } + 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.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.useSeasonPostersDescription': return 'Show season poster instead of series poster for episodes'; + case 'settings.showHeroSectionDescription': return 'Display featured content carousel on home screen'; + case 'settings.secondsLabel': return 'Seconds'; + case 'settings.minutesLabel': return 'Minutes'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; + case 'settings.systemTheme': return 'System'; + case 'settings.systemThemeDescription': return 'Follow system settings'; + case 'settings.lightTheme': return 'Light'; + case 'settings.darkTheme': return 'Dark'; + case 'settings.libraryDensity': return 'Library Density'; + case 'settings.compact': return 'Compact'; + case 'settings.compactDescription': return 'Smaller cards, more items visible'; + case 'settings.normal': return 'Normal'; + case 'settings.normalDescription': return 'Default size'; + case 'settings.comfortable': return 'Comfortable'; + case 'settings.comfortableDescription': return 'Larger cards, fewer items visible'; + case 'settings.viewMode': return 'View Mode'; + case 'settings.gridView': return 'Grid'; + case 'settings.gridViewDescription': return 'Display items in a grid layout'; + case 'settings.listView': return 'List'; + case 'settings.listViewDescription': return 'Display items in a list layout'; + case 'settings.useSeasonPosters': return 'Use Season Posters'; + case 'settings.showHeroSection': return 'Show Hero Section'; + case 'settings.hardwareDecoding': return 'Hardware Decoding'; + case 'settings.hardwareDecodingDescription': return 'Use hardware acceleration when available'; + case 'settings.bufferSize': return 'Buffer Size'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Subtitle Styling'; + case 'settings.subtitleStylingDescription': return 'Customize subtitle appearance'; + case 'settings.smallSkipDuration': return 'Small Skip Duration'; + case 'settings.largeSkipDuration': return 'Large Skip Duration'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} seconds'; + case 'settings.defaultSleepTimer': return 'Default Sleep Timer'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minutes'; + case 'settings.rememberTrackSelections': return 'Remember track selections per show/movie'; + case 'settings.rememberTrackSelectionsDescription': return 'Automatically save audio and subtitle language preferences when you change tracks during playback'; + case 'settings.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 'search.hint': return 'Search movies, shows, music...'; + case 'search.tryDifferentTerm': return 'Try a different search term'; + case 'search.searchYourMedia': return 'Search your media'; + case 'search.enterTitleActorOrKeyword': return 'Enter a title, actor, or keyword'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Set Shortcut for ${actionName}'; + case 'hotkeys.clearShortcut': return 'Clear shortcut'; + case 'pinEntry.enterPin': return 'Enter PIN'; + case 'pinEntry.showPin': return 'Show PIN'; + case 'pinEntry.hidePin': return 'Hide PIN'; + case 'fileInfo.title': return 'File Info'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'File'; + case 'fileInfo.advanced': return 'Advanced'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Resolution'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Frame Rate'; + case 'fileInfo.aspectRatio': return 'Aspect Ratio'; + case 'fileInfo.profile': return 'Profile'; + case 'fileInfo.bitDepth': return 'Bit Depth'; + case 'fileInfo.colorSpace': return 'Color Space'; + case 'fileInfo.colorRange': return 'Color Range'; + case 'fileInfo.colorPrimaries': return 'Color Primaries'; + case 'fileInfo.chromaSubsampling': return 'Chroma Subsampling'; + case 'fileInfo.channels': return 'Channels'; + case 'fileInfo.path': return 'Path'; + case 'fileInfo.size': return 'Size'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Duration'; + case 'fileInfo.optimizedForStreaming': return 'Optimized for Streaming'; + case 'fileInfo.has64bitOffsets': return '64-bit Offsets'; + case 'mediaMenu.markAsWatched': return 'Mark as Watched'; + case 'mediaMenu.markAsUnwatched': return 'Mark as Unwatched'; + case 'mediaMenu.removeFromContinueWatching': return 'Remove from Continue Watching'; + case 'mediaMenu.goToSeries': return 'Go to series'; + case 'mediaMenu.goToSeason': return 'Go to season'; + case 'mediaMenu.shufflePlay': return 'Shuffle Play'; + case 'mediaMenu.fileInfo': return 'File Info'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, movie'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV show'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'watched'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} percent watched'; + case 'accessibility.mediaCardUnwatched': return 'unwatched'; + case 'accessibility.tapToPlay': return 'Tap to play'; + case 'tooltips.shufflePlay': return 'Shuffle play'; + case 'tooltips.markAsWatched': return 'Mark as watched'; + case 'tooltips.markAsUnwatched': return 'Mark as unwatched'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Subtitles'; + case 'videoControls.resetToZero': return 'Reset to 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} plays later'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} plays earlier'; + case 'videoControls.noOffset': return 'No offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Fill screen'; + case 'videoControls.stretch': return 'Stretch'; + case 'videoControls.lockRotation': return 'Lock rotation'; + case 'videoControls.unlockRotation': return 'Unlock rotation'; + case 'videoControls.sleepTimer': return 'Sleep Timer'; + case 'videoControls.timerActive': return 'Timer Active'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Playback will pause in ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Sleep timer completed - playback paused'; + case 'videoControls.playButton': return 'Play'; + case 'videoControls.pauseButton': return 'Pause'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Seek backward ${seconds} seconds'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Seek forward ${seconds} seconds'; + case 'videoControls.previousButton': return 'Previous episode'; + case 'videoControls.nextButton': return 'Next episode'; + case 'videoControls.previousChapterButton': return 'Previous chapter'; + case 'videoControls.nextChapterButton': return 'Next chapter'; + case 'videoControls.muteButton': return 'Mute'; + case 'videoControls.unmuteButton': return 'Unmute'; + case 'videoControls.settingsButton': return 'Video settings'; + case 'videoControls.audioTrackButton': return 'Audio tracks'; + case 'videoControls.subtitlesButton': return 'Subtitles'; + case 'videoControls.chaptersButton': return 'Chapters'; + case 'videoControls.versionsButton': return 'Video versions'; + case 'videoControls.aspectRatioButton': return 'Aspect ratio'; + case 'videoControls.fullscreenButton': return 'Enter fullscreen'; + case 'videoControls.exitFullscreenButton': return 'Exit fullscreen'; + case 'videoControls.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 '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 '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.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.useSeasonPostersDescription': - return 'Staffelposter statt Serienposter für Episoden anzeigen'; - case 'settings.showHeroSectionDescription': - return 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; - case 'settings.secondsLabel': - return 'Sekunden'; - case 'settings.minutesLabel': - return 'Minuten'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; - case 'settings.systemTheme': - return 'System'; - case 'settings.systemThemeDescription': - return 'Systemeinstellungen folgen'; - case 'settings.lightTheme': - return 'Hell'; - case 'settings.darkTheme': - return 'Dunkel'; - case 'settings.libraryDensity': - return 'Mediathekdichte'; - case 'settings.compact': - return 'Kompakt'; - case 'settings.compactDescription': - return 'Kleinere Karten, mehr Elemente sichtbar'; - case 'settings.normal': - return 'Normal'; - case 'settings.normalDescription': - return 'Standardgröße'; - case 'settings.comfortable': - return 'Großzügig'; - case 'settings.comfortableDescription': - return 'Größere Karten, weniger Elemente sichtbar'; - case 'settings.viewMode': - return 'Ansichtsmodus'; - case 'settings.gridView': - return 'Raster'; - case 'settings.gridViewDescription': - return 'Elemente im Raster anzeigen'; - case 'settings.listView': - return 'Liste'; - case 'settings.listViewDescription': - return 'Elemente in Listenansicht anzeigen'; - case 'settings.useSeasonPosters': - return 'Staffelposter verwenden'; - case 'settings.showHeroSection': - return 'Hero-Bereich anzeigen'; - case 'settings.hardwareDecoding': - return 'Hardware-Decodierung'; - case 'settings.hardwareDecodingDescription': - return 'Hardwarebeschleunigung verwenden, sofern verfügbar'; - case 'settings.bufferSize': - return 'Puffergröße'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Untertitel-Stil'; - case 'settings.subtitleStylingDescription': - return 'Aussehen von Untertiteln anpassen'; - case 'settings.smallSkipDuration': - return 'Kleine Sprungdauer'; - case 'settings.largeSkipDuration': - return 'Große Sprungdauer'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} Sekunden'; - case 'settings.defaultSleepTimer': - return 'Standard-Sleep-Timer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} Minuten'; - case 'settings.rememberTrackSelections': - return 'Spurauswahl pro Serie/Film merken'; - case 'settings.rememberTrackSelectionsDescription': - return 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; - case 'settings.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 'search.hint': - return 'Filme, Serien, Musik suchen...'; - case 'search.tryDifferentTerm': - return 'Anderen Suchbegriff versuchen'; - case 'search.searchYourMedia': - return 'In den eigenen Medien suchen'; - case 'search.enterTitleActorOrKeyword': - return 'Titel, Schauspieler oder Stichwort eingeben'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Kürzel löschen'; - case 'pinEntry.enterPin': - return 'PIN eingeben'; - case 'pinEntry.showPin': - return 'PIN anzeigen'; - case 'pinEntry.hidePin': - return 'PIN verbergen'; - case 'fileInfo.title': - return 'Dateiinfo'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'Datei'; - case 'fileInfo.advanced': - return 'Erweitert'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Auflösung'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Bildrate'; - case 'fileInfo.aspectRatio': - return 'Seitenverhältnis'; - case 'fileInfo.profile': - return 'Profil'; - case 'fileInfo.bitDepth': - return 'Farbtiefe'; - case 'fileInfo.colorSpace': - return 'Farbraum'; - case 'fileInfo.colorRange': - return 'Farbbereich'; - case 'fileInfo.colorPrimaries': - return 'Primärfarben'; - case 'fileInfo.chromaSubsampling': - return 'Chroma-Subsampling'; - case 'fileInfo.channels': - return 'Kanäle'; - case 'fileInfo.path': - return 'Pfad'; - case 'fileInfo.size': - return 'Größe'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Dauer'; - case 'fileInfo.optimizedForStreaming': - return 'Für Streaming optimiert'; - case 'fileInfo.has64bitOffsets': - return '64-Bit-Offsets'; - case 'mediaMenu.markAsWatched': - return 'Als gesehen markieren'; - case 'mediaMenu.markAsUnwatched': - return 'Als ungesehen markieren'; - case 'mediaMenu.removeFromContinueWatching': - return 'Aus ‚Weiterschauen‘ entfernen'; - case 'mediaMenu.goToSeries': - return 'Zur Serie'; - case 'mediaMenu.goToSeason': - return 'Zur Staffel'; - case 'mediaMenu.shufflePlay': - return 'Zufallswiedergabe'; - case 'mediaMenu.fileInfo': - return 'Dateiinfo'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, Film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, Serie'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'angesehen'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} Prozent angesehen'; - case 'accessibility.mediaCardUnwatched': - return 'ungeschaut'; - case 'accessibility.tapToPlay': - return 'Zum Abspielen tippen'; - case 'tooltips.shufflePlay': - return 'Zufallswiedergabe'; - case 'tooltips.markAsWatched': - return 'Als gesehen markieren'; - case 'tooltips.markAsUnwatched': - return 'Als ungesehen markieren'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Untertitel'; - case 'videoControls.resetToZero': - return 'Auf 0 ms zurücksetzen'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} spielt später'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} spielt früher'; - case 'videoControls.noOffset': - return 'Kein Offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Bild füllen'; - case 'videoControls.stretch': - return 'Strecken'; - case 'videoControls.lockRotation': - return 'Rotation sperren'; - case 'videoControls.unlockRotation': - return 'Rotation entsperren'; - case 'videoControls.sleepTimer': - return 'Schlaftimer'; - case 'videoControls.timerActive': - return 'Schlaftimer aktiv'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; - case 'videoControls.sleepTimerCompleted': - return 'Schlaftimer abgelaufen – Wiedergabe pausiert'; - case 'videoControls.playButton': - return 'Wiedergeben'; - case 'videoControls.pauseButton': - return 'Pause'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => '${seconds} Sekunden zurück'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => '${seconds} Sekunden vor'; - case 'videoControls.previousButton': - return 'Vorherige Episode'; - case 'videoControls.nextButton': - return 'Nächste Episode'; - case 'videoControls.previousChapterButton': - return 'Vorheriges Kapitel'; - case 'videoControls.nextChapterButton': - return 'Nächstes Kapitel'; - case 'videoControls.muteButton': - return 'Stumm schalten'; - case 'videoControls.unmuteButton': - return 'Stummschaltung aufheben'; - case 'videoControls.settingsButton': - return 'Videoeinstellungen'; - case 'videoControls.audioTrackButton': - return 'Tonspuren'; - case 'videoControls.subtitlesButton': - return 'Untertitel'; - case 'videoControls.chaptersButton': - return 'Kapitel'; - case 'videoControls.versionsButton': - return 'Videoversionen'; - case 'videoControls.aspectRatioButton': - return 'Seitenverhältnis'; - case 'videoControls.fullscreenButton': - return 'Vollbild aktivieren'; - case 'videoControls.exitFullscreenButton': - return 'Vollbild verlassen'; - case 'videoControls.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 'messages.youAreOffline': - return 'Du bist offline'; - case 'messages.offlineFeatureUnavailable': - return 'Diese Funktion erfordert eine Internetverbindung. Deine Downloads und Einstellungen sind weiterhin verfügbar.'; - case 'subtitlingStyling.stylingOptions': - return 'Stiloptionen'; - case 'subtitlingStyling.fontSize': - return 'Schriftgröße'; - case 'subtitlingStyling.textColor': - return 'Textfarbe'; - case 'subtitlingStyling.borderSize': - return 'Rahmengröße'; - case 'subtitlingStyling.borderColor': - return 'Rahmenfarbe'; - case 'subtitlingStyling.backgroundOpacity': - return 'Hintergrunddeckkraft'; - case 'subtitlingStyling.backgroundColor': - return 'Hintergrundfarbe'; - case 'dialog.confirmAction': - return 'Aktion bestätigen'; - case 'dialog.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.inviteOthers': - return 'Andere einladen'; - case 'watchTogether.syncing': - return 'Synchronisieren...'; - case 'watchTogether.participant': - return 'Teilnehmer'; - case 'watchTogether.participantsPlural': - return 'Teilnehmer'; - case 'watchTogether.copyCode': - return 'Code kopieren'; - case 'watchTogether.shareInstructions': - return 'Teile diesen Code mit anderen, damit sie deiner Schausitzung beitreten können.'; - case 'watchTogether.codeCopied': - return 'Sitzungscode in Zwischenablage kopiert'; - case 'watchTogether.share': - return 'Teilen'; - case 'watchTogether.inviteText': - return ({required Object sessionId}) => - 'Tritt meiner Gemeinsam Schauen-Sitzung bei!\n\nSitzungscode: ${sessionId}'; - case 'watchTogether.inviteSubject': - return 'Gemeinsam Schauen Einladung'; - 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'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Lädt...'; + case 'auth.signInWithPlex': return 'Mit Plex anmelden'; + case 'auth.showQRCode': return 'QR-Code anzeigen'; + case 'auth.cancel': return 'Abbrechen'; + case 'auth.authenticate': return 'Authentifizieren'; + case 'auth.retry': return 'Erneut versuchen'; + case 'auth.debugEnterToken': return 'Debug: Plex-Token eingeben'; + case 'auth.plexTokenLabel': return 'Plex-Auth-Token'; + case 'auth.plexTokenHint': return 'Plex.tv-Token eingeben'; + case 'auth.authenticationTimeout': return 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; + case 'auth.scanQRCodeInstruction': return 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; + case 'auth.waitingForAuth': return 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; + case 'common.cancel': return 'Abbrechen'; + case 'common.save': return 'Speichern'; + case 'common.close': return 'Schließen'; + case 'common.clear': return 'Leeren'; + case 'common.reset': return 'Zurücksetzen'; + case 'common.later': return 'Später'; + case 'common.submit': return 'Senden'; + case 'common.confirm': return 'Bestätigen'; + case 'common.retry': return 'Erneut versuchen'; + case 'common.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.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.useSeasonPostersDescription': return 'Staffelposter statt Serienposter für Episoden anzeigen'; + case 'settings.showHeroSectionDescription': return 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; + case 'settings.secondsLabel': return 'Sekunden'; + case 'settings.minutesLabel': return 'Minuten'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; + case 'settings.systemTheme': return 'System'; + case 'settings.systemThemeDescription': return 'Systemeinstellungen folgen'; + case 'settings.lightTheme': return 'Hell'; + case 'settings.darkTheme': return 'Dunkel'; + case 'settings.libraryDensity': return 'Mediathekdichte'; + case 'settings.compact': return 'Kompakt'; + case 'settings.compactDescription': return 'Kleinere Karten, mehr Elemente sichtbar'; + case 'settings.normal': return 'Normal'; + case 'settings.normalDescription': return 'Standardgröße'; + case 'settings.comfortable': return 'Großzügig'; + case 'settings.comfortableDescription': return 'Größere Karten, weniger Elemente sichtbar'; + case 'settings.viewMode': return 'Ansichtsmodus'; + case 'settings.gridView': return 'Raster'; + case 'settings.gridViewDescription': return 'Elemente im Raster anzeigen'; + case 'settings.listView': return 'Liste'; + case 'settings.listViewDescription': return 'Elemente in Listenansicht anzeigen'; + case 'settings.useSeasonPosters': return 'Staffelposter verwenden'; + case 'settings.showHeroSection': return 'Hero-Bereich anzeigen'; + case 'settings.hardwareDecoding': return 'Hardware-Decodierung'; + case 'settings.hardwareDecodingDescription': return 'Hardwarebeschleunigung verwenden, sofern verfügbar'; + case 'settings.bufferSize': return 'Puffergröße'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Untertitel-Stil'; + case 'settings.subtitleStylingDescription': return 'Aussehen von Untertiteln anpassen'; + case 'settings.smallSkipDuration': return 'Kleine Sprungdauer'; + case 'settings.largeSkipDuration': return 'Große Sprungdauer'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} Sekunden'; + case 'settings.defaultSleepTimer': return 'Standard-Sleep-Timer'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} Minuten'; + case 'settings.rememberTrackSelections': return 'Spurauswahl pro Serie/Film merken'; + case 'settings.rememberTrackSelectionsDescription': return 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; + case 'settings.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 'search.hint': return 'Filme, Serien, Musik suchen...'; + case 'search.tryDifferentTerm': return 'Anderen Suchbegriff versuchen'; + case 'search.searchYourMedia': return 'In den eigenen Medien suchen'; + case 'search.enterTitleActorOrKeyword': return 'Titel, Schauspieler oder Stichwort eingeben'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; + case 'hotkeys.clearShortcut': return 'Kürzel löschen'; + case 'pinEntry.enterPin': return 'PIN eingeben'; + case 'pinEntry.showPin': return 'PIN anzeigen'; + case 'pinEntry.hidePin': return 'PIN verbergen'; + case 'fileInfo.title': return 'Dateiinfo'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'Datei'; + case 'fileInfo.advanced': return 'Erweitert'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Auflösung'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Bildrate'; + case 'fileInfo.aspectRatio': return 'Seitenverhältnis'; + case 'fileInfo.profile': return 'Profil'; + case 'fileInfo.bitDepth': return 'Farbtiefe'; + case 'fileInfo.colorSpace': return 'Farbraum'; + case 'fileInfo.colorRange': return 'Farbbereich'; + case 'fileInfo.colorPrimaries': return 'Primärfarben'; + case 'fileInfo.chromaSubsampling': return 'Chroma-Subsampling'; + case 'fileInfo.channels': return 'Kanäle'; + case 'fileInfo.path': return 'Pfad'; + case 'fileInfo.size': return 'Größe'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Dauer'; + case 'fileInfo.optimizedForStreaming': return 'Für Streaming optimiert'; + case 'fileInfo.has64bitOffsets': return '64-Bit-Offsets'; + case 'mediaMenu.markAsWatched': return 'Als gesehen markieren'; + case 'mediaMenu.markAsUnwatched': return 'Als ungesehen markieren'; + case 'mediaMenu.removeFromContinueWatching': return 'Aus ‚Weiterschauen‘ entfernen'; + case 'mediaMenu.goToSeries': return 'Zur Serie'; + case 'mediaMenu.goToSeason': return 'Zur Staffel'; + case 'mediaMenu.shufflePlay': return 'Zufallswiedergabe'; + case 'mediaMenu.fileInfo': return 'Dateiinfo'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, Film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, Serie'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'angesehen'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} Prozent angesehen'; + case 'accessibility.mediaCardUnwatched': return 'ungeschaut'; + case 'accessibility.tapToPlay': return 'Zum Abspielen tippen'; + case 'tooltips.shufflePlay': return 'Zufallswiedergabe'; + case 'tooltips.markAsWatched': return 'Als gesehen markieren'; + case 'tooltips.markAsUnwatched': return 'Als ungesehen markieren'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Untertitel'; + case 'videoControls.resetToZero': return 'Auf 0 ms zurücksetzen'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} spielt später'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} spielt früher'; + case 'videoControls.noOffset': return 'Kein Offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Bild füllen'; + case 'videoControls.stretch': return 'Strecken'; + case 'videoControls.lockRotation': return 'Rotation sperren'; + case 'videoControls.unlockRotation': return 'Rotation entsperren'; + case 'videoControls.sleepTimer': return 'Schlaftimer'; + case 'videoControls.timerActive': return 'Schlaftimer aktiv'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; + case 'videoControls.sleepTimerCompleted': return 'Schlaftimer abgelaufen – Wiedergabe pausiert'; + case 'videoControls.playButton': return 'Wiedergeben'; + case 'videoControls.pauseButton': return 'Pause'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => '${seconds} Sekunden zurück'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => '${seconds} Sekunden vor'; + case 'videoControls.previousButton': return 'Vorherige Episode'; + case 'videoControls.nextButton': return 'Nächste Episode'; + case 'videoControls.previousChapterButton': return 'Vorheriges Kapitel'; + case 'videoControls.nextChapterButton': return 'Nächstes Kapitel'; + case 'videoControls.muteButton': return 'Stumm schalten'; + case 'videoControls.unmuteButton': return 'Stummschaltung aufheben'; + case 'videoControls.settingsButton': return 'Videoeinstellungen'; + case 'videoControls.audioTrackButton': return 'Tonspuren'; + case 'videoControls.subtitlesButton': return 'Untertitel'; + case 'videoControls.chaptersButton': return 'Kapitel'; + case 'videoControls.versionsButton': return 'Videoversionen'; + case 'videoControls.aspectRatioButton': return 'Seitenverhältnis'; + case 'videoControls.fullscreenButton': return 'Vollbild aktivieren'; + case 'videoControls.exitFullscreenButton': return 'Vollbild verlassen'; + case 'videoControls.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 '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'; + 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.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.useSeasonPostersDescription': - return 'Mostra il poster della stagione invece del poster della serie per gli episodi'; - case 'settings.showHeroSectionDescription': - return 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; - case 'settings.secondsLabel': - return 'Secondi'; - case 'settings.minutesLabel': - return 'Minuti'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; - case 'settings.systemTheme': - return 'Sistema'; - case 'settings.systemThemeDescription': - return 'Segui le impostazioni di sistema'; - case 'settings.lightTheme': - return 'Chiaro'; - case 'settings.darkTheme': - return 'Scuro'; - case 'settings.libraryDensity': - return 'Densità libreria'; - case 'settings.compact': - return 'Compatta'; - case 'settings.compactDescription': - return 'Schede più piccole, più elementi visibili'; - case 'settings.normal': - return 'Normale'; - case 'settings.normalDescription': - return 'Dimensione predefinita'; - case 'settings.comfortable': - return 'Comoda'; - case 'settings.comfortableDescription': - return 'Schede più grandi, meno elementi visibili'; - case 'settings.viewMode': - return 'Modalità di visualizzazione'; - case 'settings.gridView': - return 'Griglia'; - case 'settings.gridViewDescription': - return 'Visualizza gli elementi in un layout a griglia'; - case 'settings.listView': - return 'Elenco'; - case 'settings.listViewDescription': - return 'Visualizza gli elementi in un layout a elenco'; - case 'settings.useSeasonPosters': - return 'Usa poster delle stagioni'; - case 'settings.showHeroSection': - return 'Mostra sezione principale'; - case 'settings.hardwareDecoding': - return 'Decodifica Hardware'; - case 'settings.hardwareDecodingDescription': - return 'Utilizza l\'accelerazione hardware quando disponibile'; - case 'settings.bufferSize': - return 'Dimensione buffer'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Stile sottotitoli'; - case 'settings.subtitleStylingDescription': - return 'Personalizza l\'aspetto dei sottotitoli'; - case 'settings.smallSkipDuration': - return 'Durata skip breve'; - case 'settings.largeSkipDuration': - return 'Durata skip lungo'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} secondi'; - case 'settings.defaultSleepTimer': - return 'Timer spegnimento predefinito'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} minuti'; - case 'settings.rememberTrackSelections': - return 'Ricorda selezioni tracce per serie/film'; - case 'settings.rememberTrackSelectionsDescription': - return 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; - case 'settings.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 'search.hint': - return 'Cerca film. spettacoli, musica...'; - case 'search.tryDifferentTerm': - return 'Prova altri termini di ricerca'; - case 'search.searchYourMedia': - return 'Cerca nei tuoi media'; - case 'search.enterTitleActorOrKeyword': - return 'Inserisci un titolo, attore o parola chiave'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Elimina scorciatoia'; - case 'pinEntry.enterPin': - return 'Inserisci PIN'; - case 'pinEntry.showPin': - return 'Mostra PIN'; - case 'pinEntry.hidePin': - return 'Nascondi PIN'; - case 'fileInfo.title': - return 'Info sul file'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'File'; - case 'fileInfo.advanced': - return 'Avanzate'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Risoluzione'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Frame Rate'; - case 'fileInfo.aspectRatio': - return 'Aspect Ratio'; - case 'fileInfo.profile': - return 'Profilo'; - case 'fileInfo.bitDepth': - return 'Profondità colore'; - case 'fileInfo.colorSpace': - return 'Spazio colore'; - case 'fileInfo.colorRange': - return 'Gamma colori'; - case 'fileInfo.colorPrimaries': - return 'Colori primari'; - case 'fileInfo.chromaSubsampling': - return 'Sottocampionamento cromatico'; - case 'fileInfo.channels': - return 'Canali'; - case 'fileInfo.path': - return 'Percorso'; - case 'fileInfo.size': - return 'Dimensione'; - case 'fileInfo.container': - return 'Contenitore'; - case 'fileInfo.duration': - return 'Durata'; - case 'fileInfo.optimizedForStreaming': - return 'Ottimizzato per lo streaming'; - case 'fileInfo.has64bitOffsets': - return 'Offset a 64-bit'; - case 'mediaMenu.markAsWatched': - return 'Segna come visto'; - case 'mediaMenu.markAsUnwatched': - return 'Segna come non visto'; - case 'mediaMenu.removeFromContinueWatching': - return 'Rimuovi da Continua a guardare'; - case 'mediaMenu.goToSeries': - return 'Vai alle serie'; - case 'mediaMenu.goToSeason': - return 'Vai alla stagione'; - case 'mediaMenu.shufflePlay': - return 'Riproduzione casuale'; - case 'mediaMenu.fileInfo': - return 'Info sul file'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, serie TV'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'visto'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} percento visto'; - case 'accessibility.mediaCardUnwatched': - return 'non visto'; - case 'accessibility.tapToPlay': - return 'Tocca per riprodurre'; - case 'tooltips.shufflePlay': - return 'Riproduzione casuale'; - case 'tooltips.markAsWatched': - return 'Segna come visto'; - case 'tooltips.markAsUnwatched': - return 'Segna come non visto'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Sottotitoli'; - case 'videoControls.resetToZero': - return 'Riporta a 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} riprodotto dopo'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} riprodotto prima'; - case 'videoControls.noOffset': - return 'Nessun offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Riempi schermo'; - case 'videoControls.stretch': - return 'Allunga'; - case 'videoControls.lockRotation': - return 'Blocca rotazione'; - case 'videoControls.unlockRotation': - return 'Sblocca rotazione'; - case 'videoControls.sleepTimer': - return 'Timer di spegnimento'; - case 'videoControls.timerActive': - return 'Timer attivo'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Timer di spegnimento completato - riproduzione in pausa'; - case 'videoControls.playButton': - return 'Riproduci'; - case 'videoControls.pauseButton': - return 'Pausa'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => 'Avanza di ${seconds} secondi'; - case 'videoControls.previousButton': - return 'Episodio precedente'; - case 'videoControls.nextButton': - return 'Episodio successivo'; - case 'videoControls.previousChapterButton': - return 'Capitolo precedente'; - case 'videoControls.nextChapterButton': - return 'Capitolo successivo'; - case 'videoControls.muteButton': - return 'Silenzia'; - case 'videoControls.unmuteButton': - return 'Riattiva audio'; - case 'videoControls.settingsButton': - return 'Impostazioni video'; - case 'videoControls.audioTrackButton': - return 'Tracce audio'; - case 'videoControls.subtitlesButton': - return 'Sottotitoli'; - case 'videoControls.chaptersButton': - return 'Capitoli'; - case 'videoControls.versionsButton': - return 'Versioni video'; - case 'videoControls.aspectRatioButton': - return 'Proporzioni'; - case 'videoControls.fullscreenButton': - return 'Attiva schermo intero'; - case 'videoControls.exitFullscreenButton': - return 'Esci da schermo intero'; - case 'videoControls.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 'messages.youAreOffline': - return 'Sei offline'; - case 'messages.offlineFeatureUnavailable': - return 'Questa funzione richiede una connessione internet. I tuoi download e le impostazioni sono ancora disponibili.'; - case 'subtitlingStyling.stylingOptions': - return 'Opzioni stile'; - case 'subtitlingStyling.fontSize': - return 'Dimensione'; - case 'subtitlingStyling.textColor': - return 'Colore testo'; - case 'subtitlingStyling.borderSize': - return 'Dimensione bordo'; - case 'subtitlingStyling.borderColor': - return 'Colore bordo'; - case 'subtitlingStyling.backgroundOpacity': - return 'Opacità sfondo'; - case 'subtitlingStyling.backgroundColor': - return 'Colore sfondo'; - case 'dialog.confirmAction': - return 'Conferma azione'; - case 'dialog.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.inviteOthers': - return 'Invita altri'; - case 'watchTogether.syncing': - return 'Sincronizzazione...'; - case 'watchTogether.participant': - return 'partecipante'; - case 'watchTogether.participantsPlural': - return 'partecipanti'; - case 'watchTogether.copyCode': - return 'Copia codice'; - case 'watchTogether.shareInstructions': - return 'Condividi questo codice con altri per farli unire alla tua sessione di visione.'; - case 'watchTogether.codeCopied': - return 'Codice sessione copiato negli appunti'; - case 'watchTogether.share': - return 'Condividi'; - case 'watchTogether.inviteText': - return ({required Object sessionId}) => - 'Unisciti alla mia sessione Guarda Insieme!\n\nCodice Sessione: ${sessionId}'; - case 'watchTogether.inviteSubject': - return 'Invito Guarda Insieme'; - 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'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Caricamento...'; + case 'auth.signInWithPlex': return 'Accedi con Plex'; + case 'auth.showQRCode': return 'Mostra QR Code'; + case 'auth.cancel': return 'Cancella'; + case 'auth.authenticate': return 'Autenticazione'; + case 'auth.retry': return 'Riprova'; + case 'auth.debugEnterToken': return 'Debug: Inserisci Token Plex'; + case 'auth.plexTokenLabel': return 'Token Auth Plex'; + case 'auth.plexTokenHint': return 'Inserisci il tuo token di Plex.tv'; + case 'auth.authenticationTimeout': return 'Autenticazione scaduta. Riprova.'; + case 'auth.scanQRCodeInstruction': return 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; + case 'auth.waitingForAuth': return 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; + case 'common.cancel': return 'Cancella'; + case 'common.save': return 'Salva'; + case 'common.close': return 'Chiudi'; + case 'common.clear': return 'Pulisci'; + case 'common.reset': return 'Ripristina'; + case 'common.later': return 'Più tardi'; + case 'common.submit': return 'Invia'; + case 'common.confirm': return 'Conferma'; + case 'common.retry': return 'Riprova'; + case 'common.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.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.useSeasonPostersDescription': return 'Mostra il poster della stagione invece del poster della serie per gli episodi'; + case 'settings.showHeroSectionDescription': return 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; + case 'settings.secondsLabel': return 'Secondi'; + case 'settings.minutesLabel': return 'Minuti'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; + case 'settings.systemTheme': return 'Sistema'; + case 'settings.systemThemeDescription': return 'Segui le impostazioni di sistema'; + case 'settings.lightTheme': return 'Chiaro'; + case 'settings.darkTheme': return 'Scuro'; + case 'settings.libraryDensity': return 'Densità libreria'; + case 'settings.compact': return 'Compatta'; + case 'settings.compactDescription': return 'Schede più piccole, più elementi visibili'; + case 'settings.normal': return 'Normale'; + case 'settings.normalDescription': return 'Dimensione predefinita'; + case 'settings.comfortable': return 'Comoda'; + case 'settings.comfortableDescription': return 'Schede più grandi, meno elementi visibili'; + case 'settings.viewMode': return 'Modalità di visualizzazione'; + case 'settings.gridView': return 'Griglia'; + case 'settings.gridViewDescription': return 'Visualizza gli elementi in un layout a griglia'; + case 'settings.listView': return 'Elenco'; + case 'settings.listViewDescription': return 'Visualizza gli elementi in un layout a elenco'; + case 'settings.useSeasonPosters': return 'Usa poster delle stagioni'; + case 'settings.showHeroSection': return 'Mostra sezione principale'; + case 'settings.hardwareDecoding': return 'Decodifica Hardware'; + case 'settings.hardwareDecodingDescription': return 'Utilizza l\'accelerazione hardware quando disponibile'; + case 'settings.bufferSize': return 'Dimensione buffer'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Stile sottotitoli'; + case 'settings.subtitleStylingDescription': return 'Personalizza l\'aspetto dei sottotitoli'; + case 'settings.smallSkipDuration': return 'Durata skip breve'; + case 'settings.largeSkipDuration': return 'Durata skip lungo'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} secondi'; + case 'settings.defaultSleepTimer': return 'Timer spegnimento predefinito'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minuti'; + case 'settings.rememberTrackSelections': return 'Ricorda selezioni tracce per serie/film'; + case 'settings.rememberTrackSelectionsDescription': return 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; + case 'settings.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 'search.hint': return 'Cerca film. spettacoli, musica...'; + case 'search.tryDifferentTerm': return 'Prova altri termini di ricerca'; + case 'search.searchYourMedia': return 'Cerca nei tuoi media'; + case 'search.enterTitleActorOrKeyword': return 'Inserisci un titolo, attore o parola chiave'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; + case 'hotkeys.clearShortcut': return 'Elimina scorciatoia'; + case 'pinEntry.enterPin': return 'Inserisci PIN'; + case 'pinEntry.showPin': return 'Mostra PIN'; + case 'pinEntry.hidePin': return 'Nascondi PIN'; + case 'fileInfo.title': return 'Info sul file'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'File'; + case 'fileInfo.advanced': return 'Avanzate'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Risoluzione'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Frame Rate'; + case 'fileInfo.aspectRatio': return 'Aspect Ratio'; + case 'fileInfo.profile': return 'Profilo'; + case 'fileInfo.bitDepth': return 'Profondità colore'; + case 'fileInfo.colorSpace': return 'Spazio colore'; + case 'fileInfo.colorRange': return 'Gamma colori'; + case 'fileInfo.colorPrimaries': return 'Colori primari'; + case 'fileInfo.chromaSubsampling': return 'Sottocampionamento cromatico'; + case 'fileInfo.channels': return 'Canali'; + case 'fileInfo.path': return 'Percorso'; + case 'fileInfo.size': return 'Dimensione'; + case 'fileInfo.container': return 'Contenitore'; + case 'fileInfo.duration': return 'Durata'; + case 'fileInfo.optimizedForStreaming': return 'Ottimizzato per lo streaming'; + case 'fileInfo.has64bitOffsets': return 'Offset a 64-bit'; + case 'mediaMenu.markAsWatched': return 'Segna come visto'; + case 'mediaMenu.markAsUnwatched': return 'Segna come non visto'; + case 'mediaMenu.removeFromContinueWatching': return 'Rimuovi da Continua a guardare'; + case 'mediaMenu.goToSeries': return 'Vai alle serie'; + case 'mediaMenu.goToSeason': return 'Vai alla stagione'; + case 'mediaMenu.shufflePlay': return 'Riproduzione casuale'; + case 'mediaMenu.fileInfo': return 'Info sul file'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, serie TV'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'visto'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} percento visto'; + case 'accessibility.mediaCardUnwatched': return 'non visto'; + case 'accessibility.tapToPlay': return 'Tocca per riprodurre'; + case 'tooltips.shufflePlay': return 'Riproduzione casuale'; + case 'tooltips.markAsWatched': return 'Segna come visto'; + case 'tooltips.markAsUnwatched': return 'Segna come non visto'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Sottotitoli'; + case 'videoControls.resetToZero': return 'Riporta a 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} riprodotto dopo'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} riprodotto prima'; + case 'videoControls.noOffset': return 'Nessun offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Riempi schermo'; + case 'videoControls.stretch': return 'Allunga'; + case 'videoControls.lockRotation': return 'Blocca rotazione'; + case 'videoControls.unlockRotation': return 'Sblocca rotazione'; + case 'videoControls.sleepTimer': return 'Timer di spegnimento'; + case 'videoControls.timerActive': return 'Timer attivo'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Timer di spegnimento completato - riproduzione in pausa'; + case 'videoControls.playButton': return 'Riproduci'; + case 'videoControls.pauseButton': return 'Pausa'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Avanza di ${seconds} secondi'; + case 'videoControls.previousButton': return 'Episodio precedente'; + case 'videoControls.nextButton': return 'Episodio successivo'; + case 'videoControls.previousChapterButton': return 'Capitolo precedente'; + case 'videoControls.nextChapterButton': return 'Capitolo successivo'; + case 'videoControls.muteButton': return 'Silenzia'; + case 'videoControls.unmuteButton': return 'Riattiva audio'; + case 'videoControls.settingsButton': return 'Impostazioni video'; + case 'videoControls.audioTrackButton': return 'Tracce audio'; + case 'videoControls.subtitlesButton': return 'Sottotitoli'; + case 'videoControls.chaptersButton': return 'Capitoli'; + case 'videoControls.versionsButton': return 'Versioni video'; + case 'videoControls.aspectRatioButton': return 'Proporzioni'; + case 'videoControls.fullscreenButton': return 'Attiva schermo intero'; + case 'videoControls.exitFullscreenButton': return 'Esci da schermo intero'; + case 'videoControls.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 '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'; + 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.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.useSeasonPostersDescription': - return 'Toon seizoenposter in plaats van serieposter voor afleveringen'; - case 'settings.showHeroSectionDescription': - return 'Toon uitgelichte inhoud carrousel op startscherm'; - case 'settings.secondsLabel': - return 'Seconden'; - case 'settings.minutesLabel': - return 'Minuten'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; - case 'settings.systemTheme': - return 'Systeem'; - case 'settings.systemThemeDescription': - return 'Volg systeeminstellingen'; - case 'settings.lightTheme': - return 'Licht'; - case 'settings.darkTheme': - return 'Donker'; - case 'settings.libraryDensity': - return 'Bibliotheek dichtheid'; - case 'settings.compact': - return 'Compact'; - case 'settings.compactDescription': - return 'Kleinere kaarten, meer items zichtbaar'; - case 'settings.normal': - return 'Normaal'; - case 'settings.normalDescription': - return 'Standaard grootte'; - case 'settings.comfortable': - return 'Comfortabel'; - case 'settings.comfortableDescription': - return 'Grotere kaarten, minder items zichtbaar'; - case 'settings.viewMode': - return 'Weergavemodus'; - case 'settings.gridView': - return 'Raster'; - case 'settings.gridViewDescription': - return 'Items weergeven in een rasterindeling'; - case 'settings.listView': - return 'Lijst'; - case 'settings.listViewDescription': - return 'Items weergeven in een lijstindeling'; - case 'settings.useSeasonPosters': - return 'Gebruik seizoenposters'; - case 'settings.showHeroSection': - return 'Toon hoofdsectie'; - case 'settings.hardwareDecoding': - return 'Hardware decodering'; - case 'settings.hardwareDecodingDescription': - return 'Gebruik hardware versnelling indien beschikbaar'; - case 'settings.bufferSize': - return 'Buffer grootte'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Ondertitel opmaak'; - case 'settings.subtitleStylingDescription': - return 'Pas ondertitel uiterlijk aan'; - case 'settings.smallSkipDuration': - return 'Korte skip duur'; - case 'settings.largeSkipDuration': - return 'Lange skip duur'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} seconden'; - case 'settings.defaultSleepTimer': - return 'Standaard slaap timer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => 'bij ${minutes} minuten'; - case 'settings.rememberTrackSelections': - return 'Onthoud track selecties per serie/film'; - case 'settings.rememberTrackSelectionsDescription': - return 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; - case 'settings.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 'search.hint': - return 'Zoek films, series, muziek...'; - case 'search.tryDifferentTerm': - return 'Probeer een andere zoekterm'; - case 'search.searchYourMedia': - return 'Zoek in je media'; - case 'search.enterTitleActorOrKeyword': - return 'Voer een titel, acteur of trefwoord in'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Wis sneltoets'; - case 'pinEntry.enterPin': - return 'Voer PIN in'; - case 'pinEntry.showPin': - return 'Toon PIN'; - case 'pinEntry.hidePin': - return 'Verberg PIN'; - case 'fileInfo.title': - return 'Bestand info'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'Bestand'; - case 'fileInfo.advanced': - return 'Geavanceerd'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Resolutie'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Frame rate'; - case 'fileInfo.aspectRatio': - return 'Beeldverhouding'; - case 'fileInfo.profile': - return 'Profiel'; - case 'fileInfo.bitDepth': - return 'Bit diepte'; - case 'fileInfo.colorSpace': - return 'Kleurruimte'; - case 'fileInfo.colorRange': - return 'Kleurbereik'; - case 'fileInfo.colorPrimaries': - return 'Kleurprimaires'; - case 'fileInfo.chromaSubsampling': - return 'Chroma subsampling'; - case 'fileInfo.channels': - return 'Kanalen'; - case 'fileInfo.path': - return 'Pad'; - case 'fileInfo.size': - return 'Grootte'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Duur'; - case 'fileInfo.optimizedForStreaming': - return 'Geoptimaliseerd voor streaming'; - case 'fileInfo.has64bitOffsets': - return '64-bit Offsets'; - case 'mediaMenu.markAsWatched': - return 'Markeer als gekeken'; - case 'mediaMenu.markAsUnwatched': - return 'Markeer als ongekeken'; - case 'mediaMenu.removeFromContinueWatching': - return 'Verwijder uit Doorgaan met kijken'; - case 'mediaMenu.goToSeries': - return 'Ga naar serie'; - case 'mediaMenu.goToSeason': - return 'Ga naar seizoen'; - case 'mediaMenu.shufflePlay': - return 'Willekeurig afspelen'; - case 'mediaMenu.fileInfo': - return 'Bestand info'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, TV-serie'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'bekeken'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} procent bekeken'; - case 'accessibility.mediaCardUnwatched': - return 'niet bekeken'; - case 'accessibility.tapToPlay': - return 'Tik om af te spelen'; - case 'tooltips.shufflePlay': - return 'Willekeurig afspelen'; - case 'tooltips.markAsWatched': - return 'Markeer als gekeken'; - case 'tooltips.markAsUnwatched': - return 'Markeer als ongekeken'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Ondertitels'; - case 'videoControls.resetToZero': - return 'Reset naar 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} speelt later af'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} speelt eerder af'; - case 'videoControls.noOffset': - return 'Geen offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Vul scherm'; - case 'videoControls.stretch': - return 'Uitrekken'; - case 'videoControls.lockRotation': - return 'Vergrendel rotatie'; - case 'videoControls.unlockRotation': - return 'Ontgrendel rotatie'; - case 'videoControls.sleepTimer': - return 'Slaaptimer'; - case 'videoControls.timerActive': - return 'Timer actief'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Slaaptimer voltooid - afspelen gepauzeerd'; - case 'videoControls.playButton': - return 'Afspelen'; - case 'videoControls.pauseButton': - return 'Pauzeren'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; - case 'videoControls.previousButton': - return 'Vorige aflevering'; - case 'videoControls.nextButton': - return 'Volgende aflevering'; - case 'videoControls.previousChapterButton': - return 'Vorig hoofdstuk'; - case 'videoControls.nextChapterButton': - return 'Volgend hoofdstuk'; - case 'videoControls.muteButton': - return 'Dempen'; - case 'videoControls.unmuteButton': - return 'Dempen opheffen'; - case 'videoControls.settingsButton': - return 'Video-instellingen'; - case 'videoControls.audioTrackButton': - return 'Audiosporen'; - case 'videoControls.subtitlesButton': - return 'Ondertitels'; - case 'videoControls.chaptersButton': - return 'Hoofdstukken'; - case 'videoControls.versionsButton': - return 'Videoversies'; - case 'videoControls.aspectRatioButton': - return 'Beeldverhouding'; - case 'videoControls.fullscreenButton': - return 'Volledig scherm activeren'; - case 'videoControls.exitFullscreenButton': - return 'Volledig scherm verlaten'; - case 'videoControls.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 'messages.youAreOffline': - return 'Je bent offline'; - case 'messages.offlineFeatureUnavailable': - return 'Deze functie vereist een internetverbinding. Je downloads en instellingen zijn nog steeds beschikbaar.'; - case 'subtitlingStyling.stylingOptions': - return 'Opmaak opties'; - case 'subtitlingStyling.fontSize': - return 'Lettergrootte'; - case 'subtitlingStyling.textColor': - return 'Tekstkleur'; - case 'subtitlingStyling.borderSize': - return 'Rand grootte'; - case 'subtitlingStyling.borderColor': - return 'Randkleur'; - case 'subtitlingStyling.backgroundOpacity': - return 'Achtergrond transparantie'; - case 'subtitlingStyling.backgroundColor': - return 'Achtergrondkleur'; - case 'dialog.confirmAction': - return 'Bevestig actie'; - case 'dialog.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.inviteOthers': - return 'Anderen uitnodigen'; - case 'watchTogether.syncing': - return 'Synchroniseren...'; - case 'watchTogether.participant': - return 'deelnemer'; - case 'watchTogether.participantsPlural': - return 'deelnemers'; - case 'watchTogether.copyCode': - return 'Code kopiëren'; - case 'watchTogether.shareInstructions': - return 'Deel deze code met anderen om hen te laten deelnemen aan je kijksessie.'; - case 'watchTogether.codeCopied': - return 'Sessiecode gekopieerd naar klembord'; - case 'watchTogether.share': - return 'Delen'; - case 'watchTogether.inviteText': - return ({required Object sessionId}) => 'Doe mee met mijn Samen Kijken sessie!\n\nSessiecode: ${sessionId}'; - case 'watchTogether.inviteSubject': - return 'Samen Kijken Uitnodiging'; - 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'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Laden...'; + case 'auth.signInWithPlex': return 'Inloggen met Plex'; + case 'auth.showQRCode': return 'Toon QR-code'; + case 'auth.cancel': return 'Annuleren'; + case 'auth.authenticate': return 'Authenticeren'; + case 'auth.retry': return 'Opnieuw proberen'; + case 'auth.debugEnterToken': return 'Debug: Voer Plex Token in'; + case 'auth.plexTokenLabel': return 'Plex Authenticatietoken'; + case 'auth.plexTokenHint': return 'Voer je Plex.tv token in'; + case 'auth.authenticationTimeout': return 'Authenticatie verlopen. Probeer opnieuw.'; + case 'auth.scanQRCodeInstruction': return 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; + case 'auth.waitingForAuth': return 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; + case 'common.cancel': return 'Annuleren'; + case 'common.save': return 'Opslaan'; + case 'common.close': return 'Sluiten'; + case 'common.clear': return 'Wissen'; + case 'common.reset': return 'Resetten'; + case 'common.later': return 'Later'; + case 'common.submit': return 'Verzenden'; + case 'common.confirm': return 'Bevestigen'; + case 'common.retry': return 'Opnieuw proberen'; + case 'common.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.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.useSeasonPostersDescription': return 'Toon seizoenposter in plaats van serieposter voor afleveringen'; + case 'settings.showHeroSectionDescription': return 'Toon uitgelichte inhoud carrousel op startscherm'; + case 'settings.secondsLabel': return 'Seconden'; + case 'settings.minutesLabel': return 'Minuten'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; + case 'settings.systemTheme': return 'Systeem'; + case 'settings.systemThemeDescription': return 'Volg systeeminstellingen'; + case 'settings.lightTheme': return 'Licht'; + case 'settings.darkTheme': return 'Donker'; + case 'settings.libraryDensity': return 'Bibliotheek dichtheid'; + case 'settings.compact': return 'Compact'; + case 'settings.compactDescription': return 'Kleinere kaarten, meer items zichtbaar'; + case 'settings.normal': return 'Normaal'; + case 'settings.normalDescription': return 'Standaard grootte'; + case 'settings.comfortable': return 'Comfortabel'; + case 'settings.comfortableDescription': return 'Grotere kaarten, minder items zichtbaar'; + case 'settings.viewMode': return 'Weergavemodus'; + case 'settings.gridView': return 'Raster'; + case 'settings.gridViewDescription': return 'Items weergeven in een rasterindeling'; + case 'settings.listView': return 'Lijst'; + case 'settings.listViewDescription': return 'Items weergeven in een lijstindeling'; + case 'settings.useSeasonPosters': return 'Gebruik seizoenposters'; + case 'settings.showHeroSection': return 'Toon hoofdsectie'; + case 'settings.hardwareDecoding': return 'Hardware decodering'; + case 'settings.hardwareDecodingDescription': return 'Gebruik hardware versnelling indien beschikbaar'; + case 'settings.bufferSize': return 'Buffer grootte'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Ondertitel opmaak'; + case 'settings.subtitleStylingDescription': return 'Pas ondertitel uiterlijk aan'; + case 'settings.smallSkipDuration': return 'Korte skip duur'; + case 'settings.largeSkipDuration': return 'Lange skip duur'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} seconden'; + case 'settings.defaultSleepTimer': return 'Standaard slaap timer'; + case 'settings.minutesUnit': return ({required Object minutes}) => 'bij ${minutes} minuten'; + case 'settings.rememberTrackSelections': return 'Onthoud track selecties per serie/film'; + case 'settings.rememberTrackSelectionsDescription': return 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; + case 'settings.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 'search.hint': return 'Zoek films, series, muziek...'; + case 'search.tryDifferentTerm': return 'Probeer een andere zoekterm'; + case 'search.searchYourMedia': return 'Zoek in je media'; + case 'search.enterTitleActorOrKeyword': return 'Voer een titel, acteur of trefwoord in'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; + case 'hotkeys.clearShortcut': return 'Wis sneltoets'; + case 'pinEntry.enterPin': return 'Voer PIN in'; + case 'pinEntry.showPin': return 'Toon PIN'; + case 'pinEntry.hidePin': return 'Verberg PIN'; + case 'fileInfo.title': return 'Bestand info'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'Bestand'; + case 'fileInfo.advanced': return 'Geavanceerd'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Resolutie'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Frame rate'; + case 'fileInfo.aspectRatio': return 'Beeldverhouding'; + case 'fileInfo.profile': return 'Profiel'; + case 'fileInfo.bitDepth': return 'Bit diepte'; + case 'fileInfo.colorSpace': return 'Kleurruimte'; + case 'fileInfo.colorRange': return 'Kleurbereik'; + case 'fileInfo.colorPrimaries': return 'Kleurprimaires'; + case 'fileInfo.chromaSubsampling': return 'Chroma subsampling'; + case 'fileInfo.channels': return 'Kanalen'; + case 'fileInfo.path': return 'Pad'; + case 'fileInfo.size': return 'Grootte'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Duur'; + case 'fileInfo.optimizedForStreaming': return 'Geoptimaliseerd voor streaming'; + case 'fileInfo.has64bitOffsets': return '64-bit Offsets'; + case 'mediaMenu.markAsWatched': return 'Markeer als gekeken'; + case 'mediaMenu.markAsUnwatched': return 'Markeer als ongekeken'; + case 'mediaMenu.removeFromContinueWatching': return 'Verwijder uit Doorgaan met kijken'; + case 'mediaMenu.goToSeries': return 'Ga naar serie'; + case 'mediaMenu.goToSeason': return 'Ga naar seizoen'; + case 'mediaMenu.shufflePlay': return 'Willekeurig afspelen'; + case 'mediaMenu.fileInfo': return 'Bestand info'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV-serie'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'bekeken'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} procent bekeken'; + case 'accessibility.mediaCardUnwatched': return 'niet bekeken'; + case 'accessibility.tapToPlay': return 'Tik om af te spelen'; + case 'tooltips.shufflePlay': return 'Willekeurig afspelen'; + case 'tooltips.markAsWatched': return 'Markeer als gekeken'; + case 'tooltips.markAsUnwatched': return 'Markeer als ongekeken'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Ondertitels'; + case 'videoControls.resetToZero': return 'Reset naar 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} speelt later af'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} speelt eerder af'; + case 'videoControls.noOffset': return 'Geen offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Vul scherm'; + case 'videoControls.stretch': return 'Uitrekken'; + case 'videoControls.lockRotation': return 'Vergrendel rotatie'; + case 'videoControls.unlockRotation': return 'Ontgrendel rotatie'; + case 'videoControls.sleepTimer': return 'Slaaptimer'; + case 'videoControls.timerActive': return 'Timer actief'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Slaaptimer voltooid - afspelen gepauzeerd'; + case 'videoControls.playButton': return 'Afspelen'; + case 'videoControls.pauseButton': return 'Pauzeren'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; + case 'videoControls.previousButton': return 'Vorige aflevering'; + case 'videoControls.nextButton': return 'Volgende aflevering'; + case 'videoControls.previousChapterButton': return 'Vorig hoofdstuk'; + case 'videoControls.nextChapterButton': return 'Volgend hoofdstuk'; + case 'videoControls.muteButton': return 'Dempen'; + case 'videoControls.unmuteButton': return 'Dempen opheffen'; + case 'videoControls.settingsButton': return 'Video-instellingen'; + case 'videoControls.audioTrackButton': return 'Audiosporen'; + case 'videoControls.subtitlesButton': return 'Ondertitels'; + case 'videoControls.chaptersButton': return 'Hoofdstukken'; + case 'videoControls.versionsButton': return 'Videoversies'; + case 'videoControls.aspectRatioButton': return 'Beeldverhouding'; + case 'videoControls.fullscreenButton': return 'Volledig scherm activeren'; + case 'videoControls.exitFullscreenButton': return 'Volledig scherm verlaten'; + case 'videoControls.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 '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'; + 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.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.useSeasonPostersDescription': - return 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; - case 'settings.showHeroSectionDescription': - return 'Visa utvalda innehållskarusell på startsidan'; - case 'settings.secondsLabel': - return 'Sekunder'; - case 'settings.minutesLabel': - return 'Minuter'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; - case 'settings.systemTheme': - return 'System'; - case 'settings.systemThemeDescription': - return 'Följ systeminställningar'; - case 'settings.lightTheme': - return 'Ljust'; - case 'settings.darkTheme': - return 'Mörkt'; - case 'settings.libraryDensity': - return 'Biblioteksdensitet'; - case 'settings.compact': - return 'Kompakt'; - case 'settings.compactDescription': - return 'Mindre kort, fler objekt synliga'; - case 'settings.normal': - return 'Normal'; - case 'settings.normalDescription': - return 'Standardstorlek'; - case 'settings.comfortable': - return 'Bekväm'; - case 'settings.comfortableDescription': - return 'Större kort, färre objekt synliga'; - case 'settings.viewMode': - return 'Visningsläge'; - case 'settings.gridView': - return 'Rutnät'; - case 'settings.gridViewDescription': - return 'Visa objekt i rutnätslayout'; - case 'settings.listView': - return 'Lista'; - case 'settings.listViewDescription': - return 'Visa objekt i listlayout'; - case 'settings.useSeasonPosters': - return 'Använd säsongsaffischer'; - case 'settings.showHeroSection': - return 'Visa hjältesektion'; - case 'settings.hardwareDecoding': - return 'Hårdvaruavkodning'; - case 'settings.hardwareDecodingDescription': - return 'Använd hårdvaruacceleration när tillgängligt'; - case 'settings.bufferSize': - return 'Bufferstorlek'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Undertext-styling'; - case 'settings.subtitleStylingDescription': - return 'Anpassa undertextutseende'; - case 'settings.smallSkipDuration': - return 'Kort hoppvaraktighet'; - case 'settings.largeSkipDuration': - return 'Lång hoppvaraktighet'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} sekunder'; - case 'settings.defaultSleepTimer': - return 'Standard sovtimer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} minuter'; - case 'settings.rememberTrackSelections': - return 'Kom ihåg spårval per serie/film'; - case 'settings.rememberTrackSelectionsDescription': - return 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; - case 'settings.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 'search.hint': - return 'Sök filmer, serier, musik...'; - case 'search.tryDifferentTerm': - return 'Prova en annan sökterm'; - case 'search.searchYourMedia': - return 'Sök i dina media'; - case 'search.enterTitleActorOrKeyword': - return 'Ange en titel, skådespelare eller nyckelord'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => 'Sätt genväg för ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Rensa genväg'; - case 'pinEntry.enterPin': - return 'Ange PIN'; - case 'pinEntry.showPin': - return 'Visa PIN'; - case 'pinEntry.hidePin': - return 'Dölj PIN'; - case 'fileInfo.title': - return 'Filinformation'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Ljud'; - case 'fileInfo.file': - return 'Fil'; - case 'fileInfo.advanced': - return 'Avancerat'; - case 'fileInfo.codec': - return 'Kodek'; - case 'fileInfo.resolution': - return 'Upplösning'; - case 'fileInfo.bitrate': - return 'Bithastighet'; - case 'fileInfo.frameRate': - return 'Bildfrekvens'; - case 'fileInfo.aspectRatio': - return 'Bildförhållande'; - case 'fileInfo.profile': - return 'Profil'; - case 'fileInfo.bitDepth': - return 'Bitdjup'; - case 'fileInfo.colorSpace': - return 'Färgrymd'; - case 'fileInfo.colorRange': - return 'Färgområde'; - case 'fileInfo.colorPrimaries': - return 'Färggrunder'; - case 'fileInfo.chromaSubsampling': - return 'Kroma-undersampling'; - case 'fileInfo.channels': - return 'Kanaler'; - case 'fileInfo.path': - return 'Sökväg'; - case 'fileInfo.size': - return 'Storlek'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Varaktighet'; - case 'fileInfo.optimizedForStreaming': - return 'Optimerad för streaming'; - case 'fileInfo.has64bitOffsets': - return '64-bit offset'; - case 'mediaMenu.markAsWatched': - return 'Markera som sedd'; - case 'mediaMenu.markAsUnwatched': - return 'Markera som osedd'; - case 'mediaMenu.removeFromContinueWatching': - return 'Ta bort från Fortsätt titta'; - case 'mediaMenu.goToSeries': - return 'Gå till serie'; - case 'mediaMenu.goToSeason': - return 'Gå till säsong'; - case 'mediaMenu.shufflePlay': - return 'Blanda uppspelning'; - case 'mediaMenu.fileInfo': - return 'Filinformation'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, TV-serie'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'sedd'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} procent sedd'; - case 'accessibility.mediaCardUnwatched': - return 'osedd'; - case 'accessibility.tapToPlay': - return 'Tryck för att spela'; - case 'tooltips.shufflePlay': - return 'Blanda uppspelning'; - case 'tooltips.markAsWatched': - return 'Markera som sedd'; - case 'tooltips.markAsUnwatched': - return 'Markera som osedd'; - case 'videoControls.audioLabel': - return 'Ljud'; - case 'videoControls.subtitlesLabel': - return 'Undertexter'; - case 'videoControls.resetToZero': - return 'Återställ till 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} spelas senare'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} spelas tidigare'; - case 'videoControls.noOffset': - return 'Ingen offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Fyll skärm'; - case 'videoControls.stretch': - return 'Sträck'; - case 'videoControls.lockRotation': - return 'Lås rotation'; - case 'videoControls.unlockRotation': - return 'Lås upp rotation'; - case 'videoControls.sleepTimer': - return 'Sovtimer'; - case 'videoControls.timerActive': - return 'Timer aktiv'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => 'Uppspelningen pausas om ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Sovtimer slutförd - uppspelning pausad'; - case 'videoControls.playButton': - return 'Spela'; - case 'videoControls.pauseButton': - return 'Pausa'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; - case 'videoControls.previousButton': - return 'Föregående avsnitt'; - case 'videoControls.nextButton': - return 'Nästa avsnitt'; - case 'videoControls.previousChapterButton': - return 'Föregående kapitel'; - case 'videoControls.nextChapterButton': - return 'Nästa kapitel'; - case 'videoControls.muteButton': - return 'Tysta'; - case 'videoControls.unmuteButton': - return 'Slå på ljud'; - case 'videoControls.settingsButton': - return 'Videoinställningar'; - case 'videoControls.audioTrackButton': - return 'Ljudspår'; - case 'videoControls.subtitlesButton': - return 'Undertexter'; - case 'videoControls.chaptersButton': - return 'Kapitel'; - case 'videoControls.versionsButton': - return 'Videoversioner'; - case 'videoControls.aspectRatioButton': - return 'Bildförhållande'; - case 'videoControls.fullscreenButton': - return 'Aktivera helskärm'; - case 'videoControls.exitFullscreenButton': - return 'Avsluta helskärm'; - case 'videoControls.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 'messages.youAreOffline': - return 'Du är offline'; - case 'messages.offlineFeatureUnavailable': - return 'Denna funktion kräver en internetanslutning. Dina nedladdningar och inställningar är fortfarande tillgängliga.'; - case 'subtitlingStyling.stylingOptions': - return 'Stilalternativ'; - case 'subtitlingStyling.fontSize': - return 'Teckenstorlek'; - case 'subtitlingStyling.textColor': - return 'Textfärg'; - case 'subtitlingStyling.borderSize': - return 'Kantstorlek'; - case 'subtitlingStyling.borderColor': - return 'Kantfärg'; - case 'subtitlingStyling.backgroundOpacity': - return 'Bakgrundsopacitet'; - case 'subtitlingStyling.backgroundColor': - return 'Bakgrundsfärg'; - case 'dialog.confirmAction': - return 'Bekräfta åtgärd'; - case 'dialog.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.inviteOthers': - return 'Bjud in andra'; - case 'watchTogether.syncing': - return 'Synkroniserar...'; - case 'watchTogether.participant': - return 'deltagare'; - case 'watchTogether.participantsPlural': - return 'deltagare'; - case 'watchTogether.copyCode': - return 'Kopiera kod'; - case 'watchTogether.shareInstructions': - return 'Dela denna kod med andra för att låta dem gå med i din tittarsession.'; - case 'watchTogether.codeCopied': - return 'Sessionskod kopierad till urklipp'; - case 'watchTogether.share': - return 'Dela'; - case 'watchTogether.inviteText': - return ({required Object sessionId}) => 'Gå med i min Titta Tillsammans-session!\n\nSessionskod: ${sessionId}'; - case 'watchTogether.inviteSubject': - return 'Titta Tillsammans-inbjudan'; - 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'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Laddar...'; + case 'auth.signInWithPlex': return 'Logga in med Plex'; + case 'auth.showQRCode': return 'Visa QR-kod'; + case 'auth.cancel': return 'Avbryt'; + case 'auth.authenticate': return 'Autentisera'; + case 'auth.retry': return 'Försök igen'; + case 'auth.debugEnterToken': return 'Debug: Ange Plex-token'; + case 'auth.plexTokenLabel': return 'Plex-autentiseringstoken'; + case 'auth.plexTokenHint': return 'Ange din Plex.tv-token'; + case 'auth.authenticationTimeout': return 'Autentisering tog för lång tid. Försök igen.'; + case 'auth.scanQRCodeInstruction': return 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; + case 'auth.waitingForAuth': return 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; + case 'common.cancel': return 'Avbryt'; + case 'common.save': return 'Spara'; + case 'common.close': return 'Stäng'; + case 'common.clear': return 'Rensa'; + case 'common.reset': return 'Återställ'; + case 'common.later': return 'Senare'; + case 'common.submit': return 'Skicka'; + case 'common.confirm': return 'Bekräfta'; + case 'common.retry': return 'Försök igen'; + case 'common.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.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.useSeasonPostersDescription': return 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; + case 'settings.showHeroSectionDescription': return 'Visa utvalda innehållskarusell på startsidan'; + case 'settings.secondsLabel': return 'Sekunder'; + case 'settings.minutesLabel': return 'Minuter'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; + case 'settings.systemTheme': return 'System'; + case 'settings.systemThemeDescription': return 'Följ systeminställningar'; + case 'settings.lightTheme': return 'Ljust'; + case 'settings.darkTheme': return 'Mörkt'; + case 'settings.libraryDensity': return 'Biblioteksdensitet'; + case 'settings.compact': return 'Kompakt'; + case 'settings.compactDescription': return 'Mindre kort, fler objekt synliga'; + case 'settings.normal': return 'Normal'; + case 'settings.normalDescription': return 'Standardstorlek'; + case 'settings.comfortable': return 'Bekväm'; + case 'settings.comfortableDescription': return 'Större kort, färre objekt synliga'; + case 'settings.viewMode': return 'Visningsläge'; + case 'settings.gridView': return 'Rutnät'; + case 'settings.gridViewDescription': return 'Visa objekt i rutnätslayout'; + case 'settings.listView': return 'Lista'; + case 'settings.listViewDescription': return 'Visa objekt i listlayout'; + case 'settings.useSeasonPosters': return 'Använd säsongsaffischer'; + case 'settings.showHeroSection': return 'Visa hjältesektion'; + case 'settings.hardwareDecoding': return 'Hårdvaruavkodning'; + case 'settings.hardwareDecodingDescription': return 'Använd hårdvaruacceleration när tillgängligt'; + case 'settings.bufferSize': return 'Bufferstorlek'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Undertext-styling'; + case 'settings.subtitleStylingDescription': return 'Anpassa undertextutseende'; + case 'settings.smallSkipDuration': return 'Kort hoppvaraktighet'; + case 'settings.largeSkipDuration': return 'Lång hoppvaraktighet'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} sekunder'; + case 'settings.defaultSleepTimer': return 'Standard sovtimer'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minuter'; + case 'settings.rememberTrackSelections': return 'Kom ihåg spårval per serie/film'; + case 'settings.rememberTrackSelectionsDescription': return 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; + case 'settings.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 'search.hint': return 'Sök filmer, serier, musik...'; + case 'search.tryDifferentTerm': return 'Prova en annan sökterm'; + case 'search.searchYourMedia': return 'Sök i dina media'; + case 'search.enterTitleActorOrKeyword': return 'Ange en titel, skådespelare eller nyckelord'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Sätt genväg för ${actionName}'; + case 'hotkeys.clearShortcut': return 'Rensa genväg'; + case 'pinEntry.enterPin': return 'Ange PIN'; + case 'pinEntry.showPin': return 'Visa PIN'; + case 'pinEntry.hidePin': return 'Dölj PIN'; + case 'fileInfo.title': return 'Filinformation'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Ljud'; + case 'fileInfo.file': return 'Fil'; + case 'fileInfo.advanced': return 'Avancerat'; + case 'fileInfo.codec': return 'Kodek'; + case 'fileInfo.resolution': return 'Upplösning'; + case 'fileInfo.bitrate': return 'Bithastighet'; + case 'fileInfo.frameRate': return 'Bildfrekvens'; + case 'fileInfo.aspectRatio': return 'Bildförhållande'; + case 'fileInfo.profile': return 'Profil'; + case 'fileInfo.bitDepth': return 'Bitdjup'; + case 'fileInfo.colorSpace': return 'Färgrymd'; + case 'fileInfo.colorRange': return 'Färgområde'; + case 'fileInfo.colorPrimaries': return 'Färggrunder'; + case 'fileInfo.chromaSubsampling': return 'Kroma-undersampling'; + case 'fileInfo.channels': return 'Kanaler'; + case 'fileInfo.path': return 'Sökväg'; + case 'fileInfo.size': return 'Storlek'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Varaktighet'; + case 'fileInfo.optimizedForStreaming': return 'Optimerad för streaming'; + case 'fileInfo.has64bitOffsets': return '64-bit offset'; + case 'mediaMenu.markAsWatched': return 'Markera som sedd'; + case 'mediaMenu.markAsUnwatched': return 'Markera som osedd'; + case 'mediaMenu.removeFromContinueWatching': return 'Ta bort från Fortsätt titta'; + case 'mediaMenu.goToSeries': return 'Gå till serie'; + case 'mediaMenu.goToSeason': return 'Gå till säsong'; + case 'mediaMenu.shufflePlay': return 'Blanda uppspelning'; + case 'mediaMenu.fileInfo': return 'Filinformation'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV-serie'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'sedd'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} procent sedd'; + case 'accessibility.mediaCardUnwatched': return 'osedd'; + case 'accessibility.tapToPlay': return 'Tryck för att spela'; + case 'tooltips.shufflePlay': return 'Blanda uppspelning'; + case 'tooltips.markAsWatched': return 'Markera som sedd'; + case 'tooltips.markAsUnwatched': return 'Markera som osedd'; + case 'videoControls.audioLabel': return 'Ljud'; + case 'videoControls.subtitlesLabel': return 'Undertexter'; + case 'videoControls.resetToZero': return 'Återställ till 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} spelas senare'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} spelas tidigare'; + case 'videoControls.noOffset': return 'Ingen offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Fyll skärm'; + case 'videoControls.stretch': return 'Sträck'; + case 'videoControls.lockRotation': return 'Lås rotation'; + case 'videoControls.unlockRotation': return 'Lås upp rotation'; + case 'videoControls.sleepTimer': return 'Sovtimer'; + case 'videoControls.timerActive': return 'Timer aktiv'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Uppspelningen pausas om ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Sovtimer slutförd - uppspelning pausad'; + case 'videoControls.playButton': return 'Spela'; + case 'videoControls.pauseButton': return 'Pausa'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; + case 'videoControls.previousButton': return 'Föregående avsnitt'; + case 'videoControls.nextButton': return 'Nästa avsnitt'; + case 'videoControls.previousChapterButton': return 'Föregående kapitel'; + case 'videoControls.nextChapterButton': return 'Nästa kapitel'; + case 'videoControls.muteButton': return 'Tysta'; + case 'videoControls.unmuteButton': return 'Slå på ljud'; + case 'videoControls.settingsButton': return 'Videoinställningar'; + case 'videoControls.audioTrackButton': return 'Ljudspår'; + case 'videoControls.subtitlesButton': return 'Undertexter'; + case 'videoControls.chaptersButton': return 'Kapitel'; + case 'videoControls.versionsButton': return 'Videoversioner'; + case 'videoControls.aspectRatioButton': return 'Bildförhållande'; + case 'videoControls.fullscreenButton': return 'Aktivera helskärm'; + case 'videoControls.exitFullscreenButton': return 'Avsluta helskärm'; + case 'videoControls.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 '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'; + 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.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.useSeasonPostersDescription': - return '为剧集显示季海报而非剧集海报'; - case 'settings.showHeroSectionDescription': - return '在主屏幕上显示精选内容轮播区'; - case 'settings.secondsLabel': - return '秒'; - case 'settings.minutesLabel': - return '分钟'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => '输入时长 (${min}-${max})'; - case 'settings.systemTheme': - return '系统'; - case 'settings.systemThemeDescription': - return '跟随系统设置'; - case 'settings.lightTheme': - return '浅色'; - case 'settings.darkTheme': - return '深色'; - case 'settings.libraryDensity': - return '媒体库密度'; - case 'settings.compact': - return '紧凑'; - case 'settings.compactDescription': - return '卡片更小,显示更多项目'; - case 'settings.normal': - return '标准'; - case 'settings.normalDescription': - return '默认尺寸'; - case 'settings.comfortable': - return '舒适'; - case 'settings.comfortableDescription': - return '卡片更大,显示更少项目'; - case 'settings.viewMode': - return '视图模式'; - case 'settings.gridView': - return '网格视图'; - case 'settings.gridViewDescription': - return '以网格布局显示项目'; - case 'settings.listView': - return '列表视图'; - case 'settings.listViewDescription': - return '以列表布局显示项目'; - case 'settings.useSeasonPosters': - return '使用季海报'; - case 'settings.showHeroSection': - return '显示主要精选区'; - case 'settings.hardwareDecoding': - return '硬件解码'; - case 'settings.hardwareDecodingDescription': - return '如果可用,使用硬件加速'; - case 'settings.bufferSize': - return '缓冲区大小'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return '字幕样式'; - case 'settings.subtitleStylingDescription': - return '调整字幕外观'; - case 'settings.smallSkipDuration': - return '短跳过时长'; - case 'settings.largeSkipDuration': - return '长跳过时长'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} 秒'; - case 'settings.defaultSleepTimer': - return '默认睡眠定时器'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} 分钟'; - case 'settings.rememberTrackSelections': - return '记住每个剧集/电影的音轨选择'; - case 'settings.rememberTrackSelectionsDescription': - return '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; - case 'settings.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 'search.hint': - return '搜索电影、系列、音乐...'; - case 'search.tryDifferentTerm': - return '尝试不同的搜索词'; - case 'search.searchYourMedia': - return '搜索媒体'; - case 'search.enterTitleActorOrKeyword': - return '输入标题、演员或关键词'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => '为 ${actionName} 设置快捷键'; - case 'hotkeys.clearShortcut': - return '清除快捷键'; - case 'pinEntry.enterPin': - return '输入 PIN'; - case 'pinEntry.showPin': - return '显示 PIN'; - case 'pinEntry.hidePin': - return '隐藏 PIN'; - case 'fileInfo.title': - return '文件信息'; - case 'fileInfo.video': - return '视频'; - case 'fileInfo.audio': - return '音频'; - case 'fileInfo.file': - return '文件'; - case 'fileInfo.advanced': - return '高级'; - case 'fileInfo.codec': - return '编解码器'; - case 'fileInfo.resolution': - return '分辨率'; - case 'fileInfo.bitrate': - return '比特率'; - case 'fileInfo.frameRate': - return '帧率'; - case 'fileInfo.aspectRatio': - return '宽高比'; - case 'fileInfo.profile': - return '配置文件'; - case 'fileInfo.bitDepth': - return '位深度'; - case 'fileInfo.colorSpace': - return '色彩空间'; - case 'fileInfo.colorRange': - return '色彩范围'; - case 'fileInfo.colorPrimaries': - return '颜色原色'; - case 'fileInfo.chromaSubsampling': - return '色度子采样'; - case 'fileInfo.channels': - return '声道'; - case 'fileInfo.path': - return '路径'; - case 'fileInfo.size': - return '大小'; - case 'fileInfo.container': - return '容器'; - case 'fileInfo.duration': - return '时长'; - case 'fileInfo.optimizedForStreaming': - return '已优化用于流媒体'; - case 'fileInfo.has64bitOffsets': - return '64位偏移量'; - case 'mediaMenu.markAsWatched': - return '标记为已观看'; - case 'mediaMenu.markAsUnwatched': - return '标记为未观看'; - case 'mediaMenu.removeFromContinueWatching': - return '从继续观看中移除'; - case 'mediaMenu.goToSeries': - return '转到系列'; - case 'mediaMenu.goToSeason': - return '转到季'; - case 'mediaMenu.shufflePlay': - return '随机播放'; - case 'mediaMenu.fileInfo': - return '文件信息'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, 电影'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, 电视剧'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return '已观看'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '已观看 ${percent} 百分比'; - case 'accessibility.mediaCardUnwatched': - return '未观看'; - case 'accessibility.tapToPlay': - return '点击播放'; - case 'tooltips.shufflePlay': - return '随机播放'; - case 'tooltips.markAsWatched': - return '标记为已观看'; - case 'tooltips.markAsUnwatched': - return '标记为未观看'; - case 'videoControls.audioLabel': - return '音频'; - case 'videoControls.subtitlesLabel': - return '字幕'; - case 'videoControls.resetToZero': - return '重置为 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} 播放较晚'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} 播放较早'; - case 'videoControls.noOffset': - return '无偏移'; - case 'videoControls.letterbox': - return '信箱模式(Letterbox)'; - case 'videoControls.fillScreen': - return '填充屏幕'; - case 'videoControls.stretch': - return '拉伸'; - case 'videoControls.lockRotation': - return '锁定旋转'; - case 'videoControls.unlockRotation': - return '解锁旋转'; - case 'videoControls.sleepTimer': - return '睡眠定时器'; - case 'videoControls.timerActive': - return '定时器已激活'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => '播放将在 ${duration} 后暂停'; - case 'videoControls.sleepTimerCompleted': - return '睡眠定时器已完成 - 播放已暂停'; - case 'videoControls.playButton': - return '播放'; - case 'videoControls.pauseButton': - return '暂停'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => '后退 ${seconds} 秒'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => '前进 ${seconds} 秒'; - case 'videoControls.previousButton': - return '上一集'; - case 'videoControls.nextButton': - return '下一集'; - case 'videoControls.previousChapterButton': - return '上一章节'; - case 'videoControls.nextChapterButton': - return '下一章节'; - case 'videoControls.muteButton': - return '静音'; - case 'videoControls.unmuteButton': - return '取消静音'; - case 'videoControls.settingsButton': - return '视频设置'; - case 'videoControls.audioTrackButton': - return '音轨'; - case 'videoControls.subtitlesButton': - return '字幕'; - case 'videoControls.chaptersButton': - return '章节'; - case 'videoControls.versionsButton': - return '视频版本'; - case 'videoControls.aspectRatioButton': - return '宽高比'; - case 'videoControls.fullscreenButton': - return '进入全屏'; - case 'videoControls.exitFullscreenButton': - return '退出全屏'; - case 'videoControls.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 'messages.youAreOffline': - return '您已离线'; - case 'messages.offlineFeatureUnavailable': - return '此功能需要网络连接。您的下载内容和设置仍然可用。'; - case 'subtitlingStyling.stylingOptions': - return '样式选项'; - case 'subtitlingStyling.fontSize': - return '字号'; - case 'subtitlingStyling.textColor': - return '文本颜色'; - case 'subtitlingStyling.borderSize': - return '边框大小'; - case 'subtitlingStyling.borderColor': - return '边框颜色'; - case 'subtitlingStyling.backgroundOpacity': - return '背景不透明度'; - case 'subtitlingStyling.backgroundColor': - return '背景颜色'; - case 'dialog.confirmAction': - return '确认操作'; - case 'dialog.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.inviteOthers': - return '邀请他人'; - case 'watchTogether.syncing': - return '同步中...'; - case 'watchTogether.participant': - return '参与者'; - case 'watchTogether.participantsPlural': - return '参与者'; - case 'watchTogether.copyCode': - return '复制代码'; - case 'watchTogether.shareInstructions': - return '与他人分享此代码以让他们加入你的观看会话。'; - case 'watchTogether.codeCopied': - return '会话代码已复制到剪贴板'; - case 'watchTogether.share': - return '分享'; - case 'watchTogether.inviteText': - return ({required Object sessionId}) => '加入我的一起看会话!\n\n会话代码:${sessionId}'; - case 'watchTogether.inviteSubject': - 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 '加入会话失败'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return '加载中...'; + case 'auth.signInWithPlex': return '使用 Plex 登录'; + case 'auth.showQRCode': return '显示二维码'; + case 'auth.cancel': return '取消'; + case 'auth.authenticate': return '验证'; + case 'auth.retry': return '重试'; + case 'auth.debugEnterToken': return '调试:输入 Plex Token'; + case 'auth.plexTokenLabel': return 'Plex 授权令牌 (Auth Token)'; + case 'auth.plexTokenHint': return '输入你的 Plex.tv 令牌'; + case 'auth.authenticationTimeout': return '验证超时。请重试。'; + case 'auth.scanQRCodeInstruction': return '请使用已登录 Plex 的设备扫描此二维码进行验证。'; + case 'auth.waitingForAuth': return '等待验证中...\n请在你的浏览器中完成登录。'; + case 'common.cancel': return '取消'; + case 'common.save': return '保存'; + case 'common.close': return '关闭'; + case 'common.clear': return '清除'; + case 'common.reset': return '重置'; + case 'common.later': return '稍后'; + case 'common.submit': return '提交'; + case 'common.confirm': return '确认'; + case 'common.retry': return '重试'; + case 'common.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.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.useSeasonPostersDescription': return '为剧集显示季海报而非剧集海报'; + case 'settings.showHeroSectionDescription': return '在主屏幕上显示精选内容轮播区'; + case 'settings.secondsLabel': return '秒'; + case 'settings.minutesLabel': return '分钟'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => '输入时长 (${min}-${max})'; + case 'settings.systemTheme': return '系统'; + case 'settings.systemThemeDescription': return '跟随系统设置'; + case 'settings.lightTheme': return '浅色'; + case 'settings.darkTheme': return '深色'; + case 'settings.libraryDensity': return '媒体库密度'; + case 'settings.compact': return '紧凑'; + case 'settings.compactDescription': return '卡片更小,显示更多项目'; + case 'settings.normal': return '标准'; + case 'settings.normalDescription': return '默认尺寸'; + case 'settings.comfortable': return '舒适'; + case 'settings.comfortableDescription': return '卡片更大,显示更少项目'; + case 'settings.viewMode': return '视图模式'; + case 'settings.gridView': return '网格视图'; + case 'settings.gridViewDescription': return '以网格布局显示项目'; + case 'settings.listView': return '列表视图'; + case 'settings.listViewDescription': return '以列表布局显示项目'; + case 'settings.useSeasonPosters': return '使用季海报'; + case 'settings.showHeroSection': return '显示主要精选区'; + case 'settings.hardwareDecoding': return '硬件解码'; + case 'settings.hardwareDecodingDescription': return '如果可用,使用硬件加速'; + case 'settings.bufferSize': return '缓冲区大小'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return '字幕样式'; + case 'settings.subtitleStylingDescription': return '调整字幕外观'; + case 'settings.smallSkipDuration': return '短跳过时长'; + case 'settings.largeSkipDuration': return '长跳过时长'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} 秒'; + case 'settings.defaultSleepTimer': return '默认睡眠定时器'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} 分钟'; + case 'settings.rememberTrackSelections': return '记住每个剧集/电影的音轨选择'; + case 'settings.rememberTrackSelectionsDescription': return '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; + case 'settings.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 'search.hint': return '搜索电影、系列、音乐...'; + case 'search.tryDifferentTerm': return '尝试不同的搜索词'; + case 'search.searchYourMedia': return '搜索媒体'; + case 'search.enterTitleActorOrKeyword': return '输入标题、演员或关键词'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => '为 ${actionName} 设置快捷键'; + case 'hotkeys.clearShortcut': return '清除快捷键'; + case 'pinEntry.enterPin': return '输入 PIN'; + case 'pinEntry.showPin': return '显示 PIN'; + case 'pinEntry.hidePin': return '隐藏 PIN'; + case 'fileInfo.title': return '文件信息'; + case 'fileInfo.video': return '视频'; + case 'fileInfo.audio': return '音频'; + case 'fileInfo.file': return '文件'; + case 'fileInfo.advanced': return '高级'; + case 'fileInfo.codec': return '编解码器'; + case 'fileInfo.resolution': return '分辨率'; + case 'fileInfo.bitrate': return '比特率'; + case 'fileInfo.frameRate': return '帧率'; + case 'fileInfo.aspectRatio': return '宽高比'; + case 'fileInfo.profile': return '配置文件'; + case 'fileInfo.bitDepth': return '位深度'; + case 'fileInfo.colorSpace': return '色彩空间'; + case 'fileInfo.colorRange': return '色彩范围'; + case 'fileInfo.colorPrimaries': return '颜色原色'; + case 'fileInfo.chromaSubsampling': return '色度子采样'; + case 'fileInfo.channels': return '声道'; + case 'fileInfo.path': return '路径'; + case 'fileInfo.size': return '大小'; + case 'fileInfo.container': return '容器'; + case 'fileInfo.duration': return '时长'; + case 'fileInfo.optimizedForStreaming': return '已优化用于流媒体'; + case 'fileInfo.has64bitOffsets': return '64位偏移量'; + case 'mediaMenu.markAsWatched': return '标记为已观看'; + case 'mediaMenu.markAsUnwatched': return '标记为未观看'; + case 'mediaMenu.removeFromContinueWatching': return '从继续观看中移除'; + case 'mediaMenu.goToSeries': return '转到系列'; + case 'mediaMenu.goToSeason': return '转到季'; + case 'mediaMenu.shufflePlay': return '随机播放'; + case 'mediaMenu.fileInfo': return '文件信息'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, 电影'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, 电视剧'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return '已观看'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '已观看 ${percent} 百分比'; + case 'accessibility.mediaCardUnwatched': return '未观看'; + case 'accessibility.tapToPlay': return '点击播放'; + case 'tooltips.shufflePlay': return '随机播放'; + case 'tooltips.markAsWatched': return '标记为已观看'; + case 'tooltips.markAsUnwatched': return '标记为未观看'; + case 'videoControls.audioLabel': return '音频'; + case 'videoControls.subtitlesLabel': return '字幕'; + case 'videoControls.resetToZero': return '重置为 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} 播放较晚'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} 播放较早'; + case 'videoControls.noOffset': return '无偏移'; + case 'videoControls.letterbox': return '信箱模式(Letterbox)'; + case 'videoControls.fillScreen': return '填充屏幕'; + case 'videoControls.stretch': return '拉伸'; + case 'videoControls.lockRotation': return '锁定旋转'; + case 'videoControls.unlockRotation': return '解锁旋转'; + case 'videoControls.sleepTimer': return '睡眠定时器'; + case 'videoControls.timerActive': return '定时器已激活'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => '播放将在 ${duration} 后暂停'; + case 'videoControls.sleepTimerCompleted': return '睡眠定时器已完成 - 播放已暂停'; + case 'videoControls.playButton': return '播放'; + case 'videoControls.pauseButton': return '暂停'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => '后退 ${seconds} 秒'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => '前进 ${seconds} 秒'; + case 'videoControls.previousButton': return '上一集'; + case 'videoControls.nextButton': return '下一集'; + case 'videoControls.previousChapterButton': return '上一章节'; + case 'videoControls.nextChapterButton': return '下一章节'; + case 'videoControls.muteButton': return '静音'; + case 'videoControls.unmuteButton': return '取消静音'; + case 'videoControls.settingsButton': return '视频设置'; + case 'videoControls.audioTrackButton': return '音轨'; + case 'videoControls.subtitlesButton': return '字幕'; + case 'videoControls.chaptersButton': return '章节'; + case 'videoControls.versionsButton': return '视频版本'; + case 'videoControls.aspectRatioButton': return '宽高比'; + case 'videoControls.fullscreenButton': return '进入全屏'; + case 'videoControls.exitFullscreenButton': return '退出全屏'; + case 'videoControls.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 '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 '加入会话失败'; + default: return null; + } + } } diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json index 0b94f407..53a46fd4 100644 --- a/lib/i18n/strings.i18n.json +++ b/lib/i18n/strings.i18n.json @@ -285,9 +285,7 @@ "noItemsAvailable": "No items available", "failedToCreatePlayQueue": "Failed to create play queue", "failedToCreatePlayQueueNoItems": "Failed to create play queue - no items", - "failedPlayback": "Failed to ${action}: ${error}", - "youAreOffline": "You're Offline", - "offlineFeatureUnavailable": "This feature requires an internet connection. Your downloads and settings are still available." + "failedPlayback": "Failed to ${action}: ${error}" }, "subtitlingStyling": { "stylingOptions": "Styling Options", @@ -514,16 +512,8 @@ "leaveSessionConfirmOverlay": "You will be disconnected from the watch session.", "end": "End", "leave": "Leave", - "inviteOthers": "Invite others", "syncing": "Syncing...", "participant": "participant", - "participantsPlural": "participants", - "copyCode": "Copy code", - "shareInstructions": "Share this code with others to let them join your watch session.", - "codeCopied": "Session code copied to clipboard", - "share": "Share", - "inviteText": "Join my Watch Together session!\n\nSession Code: ${sessionId}", - "inviteSubject": "Watch Together Invite", "joinWatchSession": "Join Watch Session", "enterCodeHint": "Enter 8-character code", "pasteFromClipboard": "Paste from clipboard", diff --git a/lib/i18n/strings_de.i18n.json b/lib/i18n/strings_de.i18n.json index 7fbd22d9..936aca4e 100644 --- a/lib/i18n/strings_de.i18n.json +++ b/lib/i18n/strings_de.i18n.json @@ -286,9 +286,7 @@ "noItemsAvailable": "Keine Elemente verfügbar", "failedToCreatePlayQueue": "Wiedergabewarteschlange konnte nicht erstellt werden", "failedToCreatePlayQueueNoItems": "Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente", - "failedPlayback": "Wiedergabe für ${action} fehlgeschlagen: ${error}", - "youAreOffline": "Du bist offline", - "offlineFeatureUnavailable": "Diese Funktion erfordert eine Internetverbindung. Deine Downloads und Einstellungen sind weiterhin verfügbar." + "failedPlayback": "Wiedergabe für ${action} fehlgeschlagen: ${error}" }, "subtitlingStyling": { "stylingOptions": "Stiloptionen", @@ -532,16 +530,8 @@ "leaveSessionConfirmOverlay": "Du wirst von der Schausitzung getrennt.", "end": "Beenden", "leave": "Verlassen", - "inviteOthers": "Andere einladen", "syncing": "Synchronisieren...", "participant": "Teilnehmer", - "participantsPlural": "Teilnehmer", - "copyCode": "Code kopieren", - "shareInstructions": "Teile diesen Code mit anderen, damit sie deiner Schausitzung beitreten können.", - "codeCopied": "Sitzungscode in Zwischenablage kopiert", - "share": "Teilen", - "inviteText": "Tritt meiner Gemeinsam Schauen-Sitzung bei!\n\nSitzungscode: ${sessionId}", - "inviteSubject": "Gemeinsam Schauen Einladung", "joinWatchSession": "Schausitzung Beitreten", "enterCodeHint": "8-stelligen Code eingeben", "pasteFromClipboard": "Aus Zwischenablage einfügen", diff --git a/lib/i18n/strings_it.i18n.json b/lib/i18n/strings_it.i18n.json index 221d2ddb..55fc383d 100644 --- a/lib/i18n/strings_it.i18n.json +++ b/lib/i18n/strings_it.i18n.json @@ -286,9 +286,7 @@ "noItemsAvailable": "Nessun elemento disponibile", "failedToCreatePlayQueue": "Impossibile creare la coda di riproduzione", "failedToCreatePlayQueueNoItems": "Impossibile creare la coda di riproduzione - nessun elemento", - "failedPlayback": "Impossibile ${action}: ${error}", - "youAreOffline": "Sei offline", - "offlineFeatureUnavailable": "Questa funzione richiede una connessione internet. I tuoi download e le impostazioni sono ancora disponibili." + "failedPlayback": "Impossibile ${action}: ${error}" }, "subtitlingStyling": { "stylingOptions": "Opzioni stile", @@ -532,16 +530,8 @@ "leaveSessionConfirmOverlay": "Sarai disconnesso dalla sessione di visione.", "end": "Termina", "leave": "Lascia", - "inviteOthers": "Invita altri", "syncing": "Sincronizzazione...", "participant": "partecipante", - "participantsPlural": "partecipanti", - "copyCode": "Copia codice", - "shareInstructions": "Condividi questo codice con altri per farli unire alla tua sessione di visione.", - "codeCopied": "Codice sessione copiato negli appunti", - "share": "Condividi", - "inviteText": "Unisciti alla mia sessione Guarda Insieme!\n\nCodice Sessione: ${sessionId}", - "inviteSubject": "Invito Guarda Insieme", "joinWatchSession": "Unisciti alla Sessione di Visione", "enterCodeHint": "Inserisci codice di 8 caratteri", "pasteFromClipboard": "Incolla dagli appunti", diff --git a/lib/i18n/strings_nl.i18n.json b/lib/i18n/strings_nl.i18n.json index a77dbe84..d350880e 100644 --- a/lib/i18n/strings_nl.i18n.json +++ b/lib/i18n/strings_nl.i18n.json @@ -286,9 +286,7 @@ "noItemsAvailable": "Geen items beschikbaar", "failedToCreatePlayQueue": "Kan afspeelwachtrij niet maken", "failedToCreatePlayQueueNoItems": "Kan afspeelwachtrij niet maken - geen items", - "failedPlayback": "Afspelen van ${action} mislukt: ${error}", - "youAreOffline": "Je bent offline", - "offlineFeatureUnavailable": "Deze functie vereist een internetverbinding. Je downloads en instellingen zijn nog steeds beschikbaar." + "failedPlayback": "Afspelen van ${action} mislukt: ${error}" }, "subtitlingStyling": { "stylingOptions": "Opmaak opties", @@ -532,16 +530,8 @@ "leaveSessionConfirmOverlay": "Je wordt losgekoppeld van de kijksessie.", "end": "Beëindigen", "leave": "Verlaten", - "inviteOthers": "Anderen uitnodigen", "syncing": "Synchroniseren...", "participant": "deelnemer", - "participantsPlural": "deelnemers", - "copyCode": "Code kopiëren", - "shareInstructions": "Deel deze code met anderen om hen te laten deelnemen aan je kijksessie.", - "codeCopied": "Sessiecode gekopieerd naar klembord", - "share": "Delen", - "inviteText": "Doe mee met mijn Samen Kijken sessie!\n\nSessiecode: ${sessionId}", - "inviteSubject": "Samen Kijken Uitnodiging", "joinWatchSession": "Kijksessie Deelnemen", "enterCodeHint": "Voer 8-teken code in", "pasteFromClipboard": "Plakken van klembord", diff --git a/lib/i18n/strings_sv.i18n.json b/lib/i18n/strings_sv.i18n.json index 7da7cfa8..9f071af7 100644 --- a/lib/i18n/strings_sv.i18n.json +++ b/lib/i18n/strings_sv.i18n.json @@ -286,9 +286,7 @@ "noItemsAvailable": "Inga objekt tillgängliga", "failedToCreatePlayQueue": "Det gick inte att skapa uppspelningskö", "failedToCreatePlayQueueNoItems": "Det gick inte att skapa uppspelningskö – inga objekt", - "failedPlayback": "Kunde inte ${action}: ${error}", - "youAreOffline": "Du är offline", - "offlineFeatureUnavailable": "Denna funktion kräver en internetanslutning. Dina nedladdningar och inställningar är fortfarande tillgängliga." + "failedPlayback": "Kunde inte ${action}: ${error}" }, "subtitlingStyling": { "stylingOptions": "Stilalternativ", @@ -532,16 +530,8 @@ "leaveSessionConfirmOverlay": "Du kommer att kopplas bort från tittarsessionen.", "end": "Avsluta", "leave": "Lämna", - "inviteOthers": "Bjud in andra", "syncing": "Synkroniserar...", "participant": "deltagare", - "participantsPlural": "deltagare", - "copyCode": "Kopiera kod", - "shareInstructions": "Dela denna kod med andra för att låta dem gå med i din tittarsession.", - "codeCopied": "Sessionskod kopierad till urklipp", - "share": "Dela", - "inviteText": "Gå med i min Titta Tillsammans-session!\n\nSessionskod: ${sessionId}", - "inviteSubject": "Titta Tillsammans-inbjudan", "joinWatchSession": "Gå med i Tittarsession", "enterCodeHint": "Ange 8-teckens kod", "pasteFromClipboard": "Klistra in från urklipp", diff --git a/lib/i18n/strings_zh.i18n.json b/lib/i18n/strings_zh.i18n.json index e72029b8..c9bce411 100644 --- a/lib/i18n/strings_zh.i18n.json +++ b/lib/i18n/strings_zh.i18n.json @@ -286,9 +286,7 @@ "noItemsAvailable": "没有可用的项目", "failedToCreatePlayQueue": "创建播放队列失败", "failedToCreatePlayQueueNoItems": "创建播放队列失败 - 没有项目", - "failedPlayback": "无法${action}: ${error}", - "youAreOffline": "您已离线", - "offlineFeatureUnavailable": "此功能需要网络连接。您的下载内容和设置仍然可用。" + "failedPlayback": "无法${action}: ${error}" }, "subtitlingStyling": { "stylingOptions": "样式选项", @@ -532,16 +530,8 @@ "leaveSessionConfirmOverlay": "你将断开与观看会话的连接。", "end": "结束", "leave": "离开", - "inviteOthers": "邀请他人", "syncing": "同步中...", "participant": "参与者", - "participantsPlural": "参与者", - "copyCode": "复制代码", - "shareInstructions": "与他人分享此代码以让他们加入你的观看会话。", - "codeCopied": "会话代码已复制到剪贴板", - "share": "分享", - "inviteText": "加入我的一起看会话!\n\n会话代码:${sessionId}", - "inviteSubject": "一起看邀请", "joinWatchSession": "加入观看会话", "enterCodeHint": "输入8位代码", "pasteFromClipboard": "从剪贴板粘贴", diff --git a/lib/watch_together/watch_together.dart b/lib/watch_together/watch_together.dart index a3734922..98a4f831 100644 --- a/lib/watch_together/watch_together.dart +++ b/lib/watch_together/watch_together.dart @@ -13,6 +13,5 @@ export 'providers/watch_together_provider.dart'; export 'screens/watch_together_screen.dart'; // Widgets -export 'widgets/session_invite_dialog.dart'; export 'widgets/join_session_dialog.dart'; export 'widgets/watch_together_overlay.dart'; diff --git a/lib/watch_together/widgets/session_invite_dialog.dart b/lib/watch_together/widgets/session_invite_dialog.dart deleted file mode 100644 index f2d3b78c..00000000 --- a/lib/watch_together/widgets/session_invite_dialog.dart +++ /dev/null @@ -1,152 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:material_symbols_icons/symbols.dart'; -import 'package:qr_flutter/qr_flutter.dart'; -import 'package:share_plus/share_plus.dart'; - -import '../../i18n/strings.g.dart'; - -/// Dialog for sharing a watch together session with others -class SessionInviteDialog extends StatelessWidget { - final String sessionId; - final int participantCount; - - const SessionInviteDialog({super.key, required this.sessionId, required this.participantCount}); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - - return Dialog( - child: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 400), - child: Padding( - padding: const EdgeInsets.all(24), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - // Header - Row( - children: [ - Icon(Symbols.group, color: theme.colorScheme.primary), - const SizedBox(width: 12), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(t.watchTogether.title, style: theme.textTheme.titleLarge), - Text( - '$participantCount ${participantCount == 1 ? t.watchTogether.participant : t.watchTogether.participantsPlural}', - style: theme.textTheme.bodySmall?.copyWith(color: theme.colorScheme.onSurfaceVariant), - ), - ], - ), - ), - IconButton(onPressed: () => Navigator.of(context).pop(), icon: const Icon(Symbols.close)), - ], - ), - - const SizedBox(height: 24), - - // QR Code - Center( - child: Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(12)), - child: QrImageView( - data: sessionId, - version: QrVersions.auto, - size: 180, - backgroundColor: Colors.white, - eyeStyle: const QrEyeStyle(eyeShape: QrEyeShape.square, color: Colors.black), - dataModuleStyle: const QrDataModuleStyle( - dataModuleShape: QrDataModuleShape.square, - color: Colors.black, - ), - ), - ), - ), - - const SizedBox(height: 24), - - // Session ID with copy button - Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - decoration: BoxDecoration( - color: theme.colorScheme.surfaceContainerHighest, - borderRadius: BorderRadius.circular(12), - ), - child: Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - t.watchTogether.sessionCode, - style: theme.textTheme.bodySmall?.copyWith(color: theme.colorScheme.onSurfaceVariant), - ), - const SizedBox(height: 4), - SelectableText( - sessionId, - style: theme.textTheme.headlineSmall?.copyWith( - fontFamily: 'monospace', - fontWeight: FontWeight.bold, - letterSpacing: 2, - ), - ), - ], - ), - ), - IconButton( - onPressed: () => _copyToClipboard(context), - icon: const Icon(Symbols.content_copy), - tooltip: t.watchTogether.copyCode, - ), - ], - ), - ), - - const SizedBox(height: 16), - - // Instructions - Text( - t.watchTogether.shareInstructions, - style: theme.textTheme.bodyMedium?.copyWith(color: theme.colorScheme.onSurfaceVariant), - textAlign: TextAlign.center, - ), - - const SizedBox(height: 24), - - // Share button - FilledButton.icon( - onPressed: () => _share(context), - icon: const Icon(Symbols.share), - label: Text(t.watchTogether.share), - ), - ], - ), - ), - ), - ); - } - - void _copyToClipboard(BuildContext context) { - Clipboard.setData(ClipboardData(text: sessionId)); - ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(t.watchTogether.codeCopied))); - } - - void _share(BuildContext context) { - final text = t.watchTogether.inviteText(sessionId: sessionId); - Share.share(text, subject: t.watchTogether.inviteSubject); - } -} - -/// Show the session invite dialog -Future showSessionInviteDialog(BuildContext context, {required String sessionId, required int participantCount}) { - return showDialog( - context: context, - builder: (context) => SessionInviteDialog(sessionId: sessionId, participantCount: participantCount), - ); -} diff --git a/lib/watch_together/widgets/watch_together_overlay.dart b/lib/watch_together/widgets/watch_together_overlay.dart index dd25d6cc..3042c075 100644 --- a/lib/watch_together/widgets/watch_together_overlay.dart +++ b/lib/watch_together/widgets/watch_together_overlay.dart @@ -5,7 +5,6 @@ import 'package:provider/provider.dart'; import '../../i18n/strings.g.dart'; import '../models/watch_session.dart'; import '../providers/watch_together_provider.dart'; -import 'session_invite_dialog.dart'; /// Overlay shown on the video player when in a watch together session class WatchTogetherOverlay extends StatelessWidget { @@ -201,21 +200,6 @@ class _SessionMenuSheet extends StatelessWidget { const SizedBox(height: 8), // Actions - if (provider.isHost && provider.sessionId != null) - ListTile( - leading: const Icon(Symbols.share), - title: Text(t.watchTogether.inviteOthers), - onTap: () { - Navigator.pop(context); - showSessionInviteDialog( - context, - sessionId: provider.sessionId!, - participantCount: provider.participantCount, - ); - }, - contentPadding: EdgeInsets.zero, - ), - ListTile( leading: Icon(Symbols.logout, color: theme.colorScheme.error), title: Text(