From 3c89d0eba840bd78cbc812c3352becd62be2029b Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Mon, 15 Dec 2025 02:29:03 +0100 Subject: [PATCH] refactor: update formatting --- analysis_options.yaml | 3 + lib/database/app_database.dart | 51 +- lib/database/app_database.g.dart | 1522 +- lib/database/tables.dart | 9 +- lib/focus/dpad_navigator.dart | 5 +- lib/focus/focus_theme.dart | 17 +- lib/focus/focusable_chip_mixin.dart | 9 +- lib/focus/focusable_wrapper.dart | 44 +- lib/focus/input_mode_tracker.dart | 7 +- lib/focus/key_event_utils.dart | 6 +- lib/i18n/strings.g.dart | 17569 ++++++++++------ lib/main.dart | 108 +- lib/models/download_models.dart | 6 +- lib/models/play_queue_response.dart | 21 +- lib/models/play_queue_response.g.dart | 32 +- lib/models/plex_file_info.dart | 3 +- lib/models/plex_filter.dart | 14 +- lib/models/plex_home.dart | 12 +- lib/models/plex_library.dart | 3 +- lib/models/plex_library.g.dart | 25 +- lib/models/plex_media_info.dart | 19 +- lib/models/plex_media_version.dart | 4 +- lib/models/plex_metadata.dart | 9 +- lib/models/plex_metadata.g.dart | 87 +- lib/models/plex_playlist.dart | 3 +- lib/models/plex_playlist.g.dart | 39 +- lib/models/plex_role.dart | 13 +- lib/models/plex_sort.dart | 7 +- lib/models/plex_user_profile.dart | 6 +- lib/models/plex_video_playback_data.dart | 6 +- lib/mpv/android_font_loader.dart | 4 +- lib/mpv/models.dart | 45 +- lib/mpv/player/platform/player_linux.dart | 4 +- lib/mpv/player/player.dart | 7 +- lib/mpv/player/player_native.dart | 44 +- lib/mpv/player/player_state.dart | 3 +- lib/mpv/video.dart | 14 +- lib/navigation/navigation_tabs.dart | 45 +- lib/providers/download_provider.dart | 262 +- lib/providers/hidden_libraries_provider.dart | 3 +- lib/providers/multi_server_provider.dart | 22 +- lib/providers/offline_mode_provider.dart | 11 +- lib/providers/offline_watch_provider.dart | 43 +- lib/providers/playback_state_provider.dart | 55 +- lib/providers/theme_provider.dart | 17 +- lib/providers/user_profile_provider.dart | 116 +- lib/screens/auth_screen.dart | 97 +- .../base_media_list_detail_screen.dart | 47 +- lib/screens/collection_detail_screen.dart | 18 +- lib/screens/discover_screen.dart | 511 +- lib/screens/downloads/downloads_screen.dart | 33 +- lib/screens/hub_detail_screen.dart | 41 +- .../libraries/adaptive_media_grid.dart | 26 +- .../libraries/filters_bottom_sheet.dart | 47 +- lib/screens/libraries/folder_tree_item.dart | 33 +- lib/screens/libraries/folder_tree_view.dart | 39 +- lib/screens/libraries/libraries_screen.dart | 349 +- lib/screens/libraries/sort_bottom_sheet.dart | 17 +- lib/screens/libraries/state_messages.dart | 22 +- .../libraries/tabs/base_library_tab.dart | 11 +- .../libraries/tabs/library_browse_tab.dart | 94 +- .../tabs/library_collections_tab.dart | 6 +- .../tabs/library_grid_tab_state.dart | 6 +- .../libraries/tabs/library_playlists_tab.dart | 8 +- .../tabs/library_recommended_tab.dart | 18 +- lib/screens/main_screen.dart | 52 +- lib/screens/media_detail_screen.dart | 1251 +- .../playlist/playlist_detail_screen.dart | 56 +- lib/screens/playlist/playlist_item_card.dart | 34 +- lib/screens/profile/pin_entry_dialog.dart | 68 +- lib/screens/profile/profile_list_tile.dart | 22 +- .../profile/profile_switch_screen.dart | 8 +- lib/screens/profile/user_avatar_widget.dart | 46 +- lib/screens/search_screen.dart | 44 +- lib/screens/season_detail_screen.dart | 212 +- lib/screens/settings/about_screen.dart | 19 +- .../settings/hotkey_recorder_widget.dart | 32 +- lib/screens/settings/licenses_screen.dart | 60 +- lib/screens/settings/logs_screen.dart | 92 +- lib/screens/settings/settings_screen.dart | 284 +- .../settings/subtitle_styling_screen.dart | 52 +- lib/screens/video_player_screen.dart | 321 +- .../base_shared_preferences_service.dart | 4 +- lib/services/data_aggregation_service.dart | 98 +- lib/services/download_manager_service.dart | 521 +- lib/services/download_storage_service.dart | 179 +- lib/services/episode_navigation_service.dart | 13 +- lib/services/fullscreen_state_manager.dart | 3 +- lib/services/fullscreen_window_delegate.dart | 10 +- lib/services/gamepad_service.dart | 20 +- lib/services/keyboard_shortcuts_service.dart | 9 +- lib/services/media_controls_manager.dart | 36 +- lib/services/multi_server_manager.dart | 104 +- lib/services/offline_watch_sync_service.dart | 115 +- lib/services/play_queue_launcher.dart | 70 +- .../playback_initialization_service.dart | 50 +- lib/services/playback_progress_tracker.dart | 29 +- lib/services/plex_api_cache.dart | 65 +- lib/services/plex_auth_service.dart | 232 +- lib/services/plex_client.dart | 571 +- lib/services/saf_storage_service.dart | 48 +- lib/services/server_registry.dart | 52 +- lib/services/settings_service.dart | 78 +- lib/services/sleep_timer_service.dart | 8 +- lib/services/storage_service.dart | 59 +- lib/services/track_selection_service.dart | 182 +- lib/services/update_service.dart | 21 +- lib/services/video_filter_manager.dart | 15 +- lib/theme/mono_theme.dart | 20 +- lib/theme/mono_tokens.dart | 21 +- lib/utils/app_logger.dart | 27 +- lib/utils/content_utils.dart | 6 +- lib/utils/desktop_window_padding.dart | 43 +- lib/utils/dialogs.dart | 121 +- lib/utils/endpoint_failover_interceptor.dart | 32 +- lib/utils/error_message_utils.dart | 5 +- lib/utils/formatters.dart | 3 +- lib/utils/grid_size_calculator.dart | 8 +- lib/utils/language_codes.dart | 14 +- lib/utils/layout_constants.dart | 60 +- lib/utils/library_refresh_notifier.dart | 9 +- lib/utils/log_redaction_manager.dart | 19 +- lib/utils/media_navigation_helper.dart | 31 +- lib/utils/orientation_helper.dart | 10 +- lib/utils/player_utils.dart | 4 +- lib/utils/plex_cache_parser.dart | 4 +- lib/utils/plex_image_helper.dart | 24 +- lib/utils/provider_extensions.dart | 38 +- lib/utils/sliver_adaptive_media_builder.dart | 14 +- lib/utils/smart_deletion_handler.dart | 12 +- lib/utils/snackbar_helper.dart | 19 +- lib/utils/track_label_builder.dart | 7 +- lib/utils/video_player_navigation.dart | 4 +- lib/widgets/app_bar_back_button.dart | 51 +- lib/widgets/bottom_sheet_header.dart | 29 +- lib/widgets/deletion_progress_dialog.dart | 19 +- lib/widgets/desktop_app_bar.dart | 43 +- lib/widgets/download_tree_view.dart | 200 +- lib/widgets/file_info_bottom_sheet.dart | 137 +- lib/widgets/focus_builders.dart | 23 +- lib/widgets/focusable_bottom_sheet.dart | 6 +- lib/widgets/focusable_filter_chip.dart | 18 +- lib/widgets/focusable_tab_chip.dart | 9 +- .../horizontal_scroll_with_arrows.dart | 40 +- lib/widgets/hub_section.dart | 64 +- lib/widgets/media_card.dart | 220 +- lib/widgets/media_context_menu.dart | 450 +- lib/widgets/media_grid_delegate.dart | 6 +- lib/widgets/media_progress_bar.dart | 7 +- lib/widgets/placeholder_container.dart | 15 +- lib/widgets/plex_optimized_image.dart | 58 +- lib/widgets/side_navigation_rail.dart | 88 +- .../desktop_video_controls.dart | 79 +- .../helpers/track_filter_helper.dart | 5 +- .../helpers/track_selection_helper.dart | 39 +- .../video_controls/mobile_video_controls.dart | 21 +- .../painters/chapter_marker_painter.dart | 6 +- .../sheets/base_video_control_sheet.dart | 7 +- .../video_controls/sheets/chapter_sheet.dart | 53 +- .../sheets/track_selection_sheet.dart | 32 +- .../video_controls/sheets/version_sheet.dart | 15 +- .../sheets/video_control_sheet_launcher.dart | 7 +- .../sheets/video_settings_sheet.dart | 94 +- .../sheets/video_sheet_header.dart | 15 +- .../video_controls/video_control_button.dart | 7 +- .../video_controls/video_controls.dart | 535 +- .../widgets/sleep_timer_active_status.dart | 21 +- .../widgets/sleep_timer_content.dart | 12 +- .../widgets/sleep_timer_duration_list.dart | 18 +- .../widgets/sync_offset_control.dart | 16 +- .../widgets/timeline_slider.dart | 32 +- .../widgets/track_chapter_controls.dart | 53 +- .../widgets/video_controls_header.dart | 21 +- .../widgets/video_timeline_bar.dart | 5 +- .../widgets/volume_control.dart | 15 +- 175 files changed, 14599 insertions(+), 15569 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index d6f4d7bf..3de9f1c9 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -10,3 +10,6 @@ analyzer: dart_code_linter: rules: - avoid-unused-parameters + +formatter: + page_width: 120 diff --git a/lib/database/app_database.dart b/lib/database/app_database.dart index 2fd99c78..a68a0f02 100644 --- a/lib/database/app_database.dart +++ b/lib/database/app_database.dart @@ -11,9 +11,7 @@ import '../utils/app_logger.dart'; part 'app_database.g.dart'; // Simplified database with API cache for offline support -@DriftDatabase( - tables: [DownloadedMedia, DownloadQueue, ApiCache, OfflineWatchProgress], -) +@DriftDatabase(tables: [DownloadedMedia, DownloadQueue, ApiCache, OfflineWatchProgress]) class AppDatabase extends _$AppDatabase { AppDatabase() : super(_openConnection()); @@ -42,15 +40,11 @@ class AppDatabase extends _$AppDatabase { /// Get all pending offline watch actions for sync Future> getPendingWatchActions() { - return (select( - offlineWatchProgress, - )..orderBy([(t) => OrderingTerm.asc(t.createdAt)])).get(); + return (select(offlineWatchProgress)..orderBy([(t) => OrderingTerm.asc(t.createdAt)])).get(); } /// Get pending watch actions for a specific server - Future> getPendingWatchActionsForServer( - String serverId, - ) { + Future> getPendingWatchActionsForServer(String serverId) { return (select(offlineWatchProgress) ..where((t) => t.serverId.equals(serverId)) ..orderBy([(t) => OrderingTerm.asc(t.createdAt)])) @@ -70,9 +64,7 @@ class AppDatabase extends _$AppDatabase { /// /// Returns a map of globalKey -> latest action for each key. /// Keys with no actions will not be present in the returned map. - Future> getLatestWatchActionsForKeys( - Set globalKeys, - ) async { + Future> getLatestWatchActionsForKeys(Set globalKeys) async { if (globalKeys.isEmpty) return {}; // Query all actions for the given keys @@ -106,19 +98,13 @@ class AppDatabase extends _$AppDatabase { // Check for existing progress entry final existing = await (select(offlineWatchProgress) - ..where( - (t) => - t.globalKey.equals(globalKey) & - t.actionType.equals('progress'), - ) + ..where((t) => t.globalKey.equals(globalKey) & t.actionType.equals('progress')) ..limit(1)) .getSingleOrNull(); if (existing != null) { // Update existing progress entry - await (update( - offlineWatchProgress, - )..where((t) => t.id.equals(existing.id))).write( + await (update(offlineWatchProgress)..where((t) => t.id.equals(existing.id))).write( OfflineWatchProgressCompanion( viewOffset: Value(viewOffset), duration: Value(duration), @@ -155,9 +141,7 @@ class AppDatabase extends _$AppDatabase { final now = DateTime.now().millisecondsSinceEpoch; // Remove conflicting actions (opposite action type and progress) - await (delete( - offlineWatchProgress, - )..where((t) => t.globalKey.equals(globalKey))).go(); + await (delete(offlineWatchProgress)..where((t) => t.globalKey.equals(globalKey))).go(); // Insert the new action await into(offlineWatchProgress).insert( @@ -179,27 +163,20 @@ class AppDatabase extends _$AppDatabase { /// Update sync attempt count and error message Future updateSyncAttempt(int id, String? errorMessage) async { - final existing = await (select( - offlineWatchProgress, - )..where((t) => t.id.equals(id))).getSingleOrNull(); + final existing = await (select(offlineWatchProgress)..where((t) => t.id.equals(id))).getSingleOrNull(); if (existing != null) { await (update(offlineWatchProgress)..where((t) => t.id.equals(id))).write( - OfflineWatchProgressCompanion( - syncAttempts: Value(existing.syncAttempts + 1), - lastError: Value(errorMessage), - ), + OfflineWatchProgressCompanion(syncAttempts: Value(existing.syncAttempts + 1), lastError: Value(errorMessage)), ); } } /// Get count of pending sync items Future getPendingSyncCount() async { - final count = - await (selectOnly(offlineWatchProgress) - ..addColumns([offlineWatchProgress.id.count()])) - .map((row) => row.read(offlineWatchProgress.id.count())) - .getSingle(); + final count = await (selectOnly(offlineWatchProgress)..addColumns([offlineWatchProgress.id.count()])) + .map((row) => row.read(offlineWatchProgress.id.count())) + .getSingle(); return count ?? 0; } @@ -214,9 +191,7 @@ class AppDatabase extends _$AppDatabase { /// Get all downloaded media items (for syncing watch states) Future> getAllDownloadedMetadata() { - return (select( - downloadedMedia, - )..where((t) => t.status.equals(DownloadStatus.completed.index))).get(); + return (select(downloadedMedia)..where((t) => t.status.equals(DownloadStatus.completed.index))).get(); } } diff --git a/lib/database/app_database.g.dart b/lib/database/app_database.g.dart index db269630..6844c0e6 100644 --- a/lib/database/app_database.g.dart +++ b/lib/database/app_database.g.dart @@ -3,8 +3,7 @@ part of 'app_database.dart'; // ignore_for_file: type=lint -class $DownloadedMediaTable extends DownloadedMedia - with TableInfo<$DownloadedMediaTable, DownloadedMediaItem> { +class $DownloadedMediaTable extends DownloadedMedia with TableInfo<$DownloadedMediaTable, DownloadedMediaItem> { @override final GeneratedDatabase attachedDatabase; final String? _alias; @@ -18,13 +17,9 @@ class $DownloadedMediaTable extends DownloadedMedia hasAutoIncrement: true, type: DriftSqlType.int, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'PRIMARY KEY AUTOINCREMENT', - ), - ); - static const VerificationMeta _serverIdMeta = const VerificationMeta( - 'serverId', + defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT'), ); + static const VerificationMeta _serverIdMeta = const VerificationMeta('serverId'); @override late final GeneratedColumn serverId = GeneratedColumn( 'server_id', @@ -33,9 +28,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.string, requiredDuringInsert: true, ); - static const VerificationMeta _ratingKeyMeta = const VerificationMeta( - 'ratingKey', - ); + static const VerificationMeta _ratingKeyMeta = const VerificationMeta('ratingKey'); @override late final GeneratedColumn ratingKey = GeneratedColumn( 'rating_key', @@ -44,9 +37,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.string, requiredDuringInsert: true, ); - static const VerificationMeta _globalKeyMeta = const VerificationMeta( - 'globalKey', - ); + static const VerificationMeta _globalKeyMeta = const VerificationMeta('globalKey'); @override late final GeneratedColumn globalKey = GeneratedColumn( 'global_key', @@ -65,9 +56,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.string, requiredDuringInsert: true, ); - static const VerificationMeta _parentRatingKeyMeta = const VerificationMeta( - 'parentRatingKey', - ); + static const VerificationMeta _parentRatingKeyMeta = const VerificationMeta('parentRatingKey'); @override late final GeneratedColumn parentRatingKey = GeneratedColumn( 'parent_rating_key', @@ -76,17 +65,15 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.string, requiredDuringInsert: false, ); - static const VerificationMeta _grandparentRatingKeyMeta = - const VerificationMeta('grandparentRatingKey'); + static const VerificationMeta _grandparentRatingKeyMeta = const VerificationMeta('grandparentRatingKey'); @override - late final GeneratedColumn grandparentRatingKey = - GeneratedColumn( - 'grandparent_rating_key', - aliasedName, - true, - type: DriftSqlType.string, - requiredDuringInsert: false, - ); + late final GeneratedColumn grandparentRatingKey = GeneratedColumn( + 'grandparent_rating_key', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); static const VerificationMeta _statusMeta = const VerificationMeta('status'); @override late final GeneratedColumn status = GeneratedColumn( @@ -96,9 +83,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.int, requiredDuringInsert: true, ); - static const VerificationMeta _progressMeta = const VerificationMeta( - 'progress', - ); + static const VerificationMeta _progressMeta = const VerificationMeta('progress'); @override late final GeneratedColumn progress = GeneratedColumn( 'progress', @@ -108,9 +93,7 @@ class $DownloadedMediaTable extends DownloadedMedia requiredDuringInsert: false, defaultValue: const Constant(0), ); - static const VerificationMeta _totalBytesMeta = const VerificationMeta( - 'totalBytes', - ); + static const VerificationMeta _totalBytesMeta = const VerificationMeta('totalBytes'); @override late final GeneratedColumn totalBytes = GeneratedColumn( 'total_bytes', @@ -119,9 +102,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.int, requiredDuringInsert: false, ); - static const VerificationMeta _downloadedBytesMeta = const VerificationMeta( - 'downloadedBytes', - ); + static const VerificationMeta _downloadedBytesMeta = const VerificationMeta('downloadedBytes'); @override late final GeneratedColumn downloadedBytes = GeneratedColumn( 'downloaded_bytes', @@ -131,9 +112,7 @@ class $DownloadedMediaTable extends DownloadedMedia requiredDuringInsert: false, defaultValue: const Constant(0), ); - static const VerificationMeta _videoFilePathMeta = const VerificationMeta( - 'videoFilePath', - ); + static const VerificationMeta _videoFilePathMeta = const VerificationMeta('videoFilePath'); @override late final GeneratedColumn videoFilePath = GeneratedColumn( 'video_file_path', @@ -142,9 +121,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.string, requiredDuringInsert: false, ); - static const VerificationMeta _thumbPathMeta = const VerificationMeta( - 'thumbPath', - ); + static const VerificationMeta _thumbPathMeta = const VerificationMeta('thumbPath'); @override late final GeneratedColumn thumbPath = GeneratedColumn( 'thumb_path', @@ -153,9 +130,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.string, requiredDuringInsert: false, ); - static const VerificationMeta _downloadedAtMeta = const VerificationMeta( - 'downloadedAt', - ); + static const VerificationMeta _downloadedAtMeta = const VerificationMeta('downloadedAt'); @override late final GeneratedColumn downloadedAt = GeneratedColumn( 'downloaded_at', @@ -164,9 +139,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.int, requiredDuringInsert: false, ); - static const VerificationMeta _errorMessageMeta = const VerificationMeta( - 'errorMessage', - ); + static const VerificationMeta _errorMessageMeta = const VerificationMeta('errorMessage'); @override late final GeneratedColumn errorMessage = GeneratedColumn( 'error_message', @@ -175,9 +148,7 @@ class $DownloadedMediaTable extends DownloadedMedia type: DriftSqlType.string, requiredDuringInsert: false, ); - static const VerificationMeta _retryCountMeta = const VerificationMeta( - 'retryCount', - ); + static const VerificationMeta _retryCountMeta = const VerificationMeta('retryCount'); @override late final GeneratedColumn retryCount = GeneratedColumn( 'retry_count', @@ -212,132 +183,78 @@ class $DownloadedMediaTable extends DownloadedMedia String get actualTableName => $name; static const String $name = 'downloaded_media'; @override - VerificationContext validateIntegrity( - Insertable instance, { - bool isInserting = false, - }) { + VerificationContext validateIntegrity(Insertable instance, {bool isInserting = false}) { final context = VerificationContext(); final data = instance.toColumns(true); if (data.containsKey('id')) { context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); } if (data.containsKey('server_id')) { - context.handle( - _serverIdMeta, - serverId.isAcceptableOrUnknown(data['server_id']!, _serverIdMeta), - ); + context.handle(_serverIdMeta, serverId.isAcceptableOrUnknown(data['server_id']!, _serverIdMeta)); } else if (isInserting) { context.missing(_serverIdMeta); } if (data.containsKey('rating_key')) { - context.handle( - _ratingKeyMeta, - ratingKey.isAcceptableOrUnknown(data['rating_key']!, _ratingKeyMeta), - ); + context.handle(_ratingKeyMeta, ratingKey.isAcceptableOrUnknown(data['rating_key']!, _ratingKeyMeta)); } else if (isInserting) { context.missing(_ratingKeyMeta); } if (data.containsKey('global_key')) { - context.handle( - _globalKeyMeta, - globalKey.isAcceptableOrUnknown(data['global_key']!, _globalKeyMeta), - ); + context.handle(_globalKeyMeta, globalKey.isAcceptableOrUnknown(data['global_key']!, _globalKeyMeta)); } else if (isInserting) { context.missing(_globalKeyMeta); } if (data.containsKey('type')) { - context.handle( - _typeMeta, - type.isAcceptableOrUnknown(data['type']!, _typeMeta), - ); + context.handle(_typeMeta, type.isAcceptableOrUnknown(data['type']!, _typeMeta)); } else if (isInserting) { context.missing(_typeMeta); } if (data.containsKey('parent_rating_key')) { context.handle( _parentRatingKeyMeta, - parentRatingKey.isAcceptableOrUnknown( - data['parent_rating_key']!, - _parentRatingKeyMeta, - ), + parentRatingKey.isAcceptableOrUnknown(data['parent_rating_key']!, _parentRatingKeyMeta), ); } if (data.containsKey('grandparent_rating_key')) { context.handle( _grandparentRatingKeyMeta, - grandparentRatingKey.isAcceptableOrUnknown( - data['grandparent_rating_key']!, - _grandparentRatingKeyMeta, - ), + grandparentRatingKey.isAcceptableOrUnknown(data['grandparent_rating_key']!, _grandparentRatingKeyMeta), ); } if (data.containsKey('status')) { - context.handle( - _statusMeta, - status.isAcceptableOrUnknown(data['status']!, _statusMeta), - ); + context.handle(_statusMeta, status.isAcceptableOrUnknown(data['status']!, _statusMeta)); } else if (isInserting) { context.missing(_statusMeta); } if (data.containsKey('progress')) { - context.handle( - _progressMeta, - progress.isAcceptableOrUnknown(data['progress']!, _progressMeta), - ); + context.handle(_progressMeta, progress.isAcceptableOrUnknown(data['progress']!, _progressMeta)); } if (data.containsKey('total_bytes')) { - context.handle( - _totalBytesMeta, - totalBytes.isAcceptableOrUnknown(data['total_bytes']!, _totalBytesMeta), - ); + context.handle(_totalBytesMeta, totalBytes.isAcceptableOrUnknown(data['total_bytes']!, _totalBytesMeta)); } if (data.containsKey('downloaded_bytes')) { context.handle( _downloadedBytesMeta, - downloadedBytes.isAcceptableOrUnknown( - data['downloaded_bytes']!, - _downloadedBytesMeta, - ), + downloadedBytes.isAcceptableOrUnknown(data['downloaded_bytes']!, _downloadedBytesMeta), ); } if (data.containsKey('video_file_path')) { context.handle( _videoFilePathMeta, - videoFilePath.isAcceptableOrUnknown( - data['video_file_path']!, - _videoFilePathMeta, - ), + videoFilePath.isAcceptableOrUnknown(data['video_file_path']!, _videoFilePathMeta), ); } if (data.containsKey('thumb_path')) { - context.handle( - _thumbPathMeta, - thumbPath.isAcceptableOrUnknown(data['thumb_path']!, _thumbPathMeta), - ); + context.handle(_thumbPathMeta, thumbPath.isAcceptableOrUnknown(data['thumb_path']!, _thumbPathMeta)); } if (data.containsKey('downloaded_at')) { - context.handle( - _downloadedAtMeta, - downloadedAt.isAcceptableOrUnknown( - data['downloaded_at']!, - _downloadedAtMeta, - ), - ); + context.handle(_downloadedAtMeta, downloadedAt.isAcceptableOrUnknown(data['downloaded_at']!, _downloadedAtMeta)); } if (data.containsKey('error_message')) { - context.handle( - _errorMessageMeta, - errorMessage.isAcceptableOrUnknown( - data['error_message']!, - _errorMessageMeta, - ), - ); + context.handle(_errorMessageMeta, errorMessage.isAcceptableOrUnknown(data['error_message']!, _errorMessageMeta)); } if (data.containsKey('retry_count')) { - context.handle( - _retryCountMeta, - retryCount.isAcceptableOrUnknown(data['retry_count']!, _retryCountMeta), - ); + context.handle(_retryCountMeta, retryCount.isAcceptableOrUnknown(data['retry_count']!, _retryCountMeta)); } return context; } @@ -348,26 +265,11 @@ class $DownloadedMediaTable extends DownloadedMedia DownloadedMediaItem map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return DownloadedMediaItem( - id: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}id'], - )!, - serverId: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}server_id'], - )!, - ratingKey: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}rating_key'], - )!, - globalKey: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}global_key'], - )!, - type: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}type'], - )!, + id: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}id'])!, + serverId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}server_id'])!, + ratingKey: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}rating_key'])!, + globalKey: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}global_key'])!, + type: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}type'])!, parentRatingKey: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}parent_rating_key'], @@ -376,42 +278,15 @@ class $DownloadedMediaTable extends DownloadedMedia DriftSqlType.string, data['${effectivePrefix}grandparent_rating_key'], ), - status: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}status'], - )!, - progress: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}progress'], - )!, - totalBytes: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}total_bytes'], - ), - downloadedBytes: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}downloaded_bytes'], - )!, - videoFilePath: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}video_file_path'], - ), - thumbPath: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}thumb_path'], - ), - downloadedAt: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}downloaded_at'], - ), - errorMessage: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}error_message'], - ), - retryCount: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}retry_count'], - )!, + status: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}status'])!, + progress: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}progress'])!, + totalBytes: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}total_bytes']), + downloadedBytes: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}downloaded_bytes'])!, + videoFilePath: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}video_file_path']), + thumbPath: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}thumb_path']), + downloadedAt: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}downloaded_at']), + errorMessage: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}error_message']), + retryCount: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}retry_count'])!, ); } @@ -421,8 +296,7 @@ class $DownloadedMediaTable extends DownloadedMedia } } -class DownloadedMediaItem extends DataClass - implements Insertable { +class DownloadedMediaItem extends DataClass implements Insertable { final int id; final String serverId; final String ratingKey; @@ -500,38 +374,23 @@ class DownloadedMediaItem extends DataClass ratingKey: Value(ratingKey), globalKey: Value(globalKey), type: Value(type), - parentRatingKey: parentRatingKey == null && nullToAbsent - ? const Value.absent() - : Value(parentRatingKey), + parentRatingKey: parentRatingKey == null && nullToAbsent ? const Value.absent() : Value(parentRatingKey), grandparentRatingKey: grandparentRatingKey == null && nullToAbsent ? const Value.absent() : Value(grandparentRatingKey), status: Value(status), progress: Value(progress), - totalBytes: totalBytes == null && nullToAbsent - ? const Value.absent() - : Value(totalBytes), + totalBytes: totalBytes == null && nullToAbsent ? const Value.absent() : Value(totalBytes), downloadedBytes: Value(downloadedBytes), - videoFilePath: videoFilePath == null && nullToAbsent - ? const Value.absent() - : Value(videoFilePath), - thumbPath: thumbPath == null && nullToAbsent - ? const Value.absent() - : Value(thumbPath), - downloadedAt: downloadedAt == null && nullToAbsent - ? const Value.absent() - : Value(downloadedAt), - errorMessage: errorMessage == null && nullToAbsent - ? const Value.absent() - : Value(errorMessage), + videoFilePath: videoFilePath == null && nullToAbsent ? const Value.absent() : Value(videoFilePath), + thumbPath: thumbPath == null && nullToAbsent ? const Value.absent() : Value(thumbPath), + downloadedAt: downloadedAt == null && nullToAbsent ? const Value.absent() : Value(downloadedAt), + errorMessage: errorMessage == null && nullToAbsent ? const Value.absent() : Value(errorMessage), retryCount: Value(retryCount), ); } - factory DownloadedMediaItem.fromJson( - Map json, { - ValueSerializer? serializer, - }) { + factory DownloadedMediaItem.fromJson(Map json, {ValueSerializer? serializer}) { serializer ??= driftRuntimeOptions.defaultSerializer; return DownloadedMediaItem( id: serializer.fromJson(json['id']), @@ -540,9 +399,7 @@ class DownloadedMediaItem extends DataClass globalKey: serializer.fromJson(json['globalKey']), type: serializer.fromJson(json['type']), parentRatingKey: serializer.fromJson(json['parentRatingKey']), - grandparentRatingKey: serializer.fromJson( - json['grandparentRatingKey'], - ), + grandparentRatingKey: serializer.fromJson(json['grandparentRatingKey']), status: serializer.fromJson(json['status']), progress: serializer.fromJson(json['progress']), totalBytes: serializer.fromJson(json['totalBytes']), @@ -600,19 +457,13 @@ class DownloadedMediaItem extends DataClass ratingKey: ratingKey ?? this.ratingKey, globalKey: globalKey ?? this.globalKey, type: type ?? this.type, - parentRatingKey: parentRatingKey.present - ? parentRatingKey.value - : this.parentRatingKey, - grandparentRatingKey: grandparentRatingKey.present - ? grandparentRatingKey.value - : this.grandparentRatingKey, + parentRatingKey: parentRatingKey.present ? parentRatingKey.value : this.parentRatingKey, + grandparentRatingKey: grandparentRatingKey.present ? grandparentRatingKey.value : this.grandparentRatingKey, status: status ?? this.status, progress: progress ?? this.progress, totalBytes: totalBytes.present ? totalBytes.value : this.totalBytes, downloadedBytes: downloadedBytes ?? this.downloadedBytes, - videoFilePath: videoFilePath.present - ? videoFilePath.value - : this.videoFilePath, + videoFilePath: videoFilePath.present ? videoFilePath.value : this.videoFilePath, thumbPath: thumbPath.present ? thumbPath.value : this.thumbPath, downloadedAt: downloadedAt.present ? downloadedAt.value : this.downloadedAt, errorMessage: errorMessage.present ? errorMessage.value : this.errorMessage, @@ -625,33 +476,19 @@ class DownloadedMediaItem extends DataClass ratingKey: data.ratingKey.present ? data.ratingKey.value : this.ratingKey, globalKey: data.globalKey.present ? data.globalKey.value : this.globalKey, type: data.type.present ? data.type.value : this.type, - parentRatingKey: data.parentRatingKey.present - ? data.parentRatingKey.value - : this.parentRatingKey, + parentRatingKey: data.parentRatingKey.present ? data.parentRatingKey.value : this.parentRatingKey, grandparentRatingKey: data.grandparentRatingKey.present ? data.grandparentRatingKey.value : this.grandparentRatingKey, status: data.status.present ? data.status.value : this.status, progress: data.progress.present ? data.progress.value : this.progress, - totalBytes: data.totalBytes.present - ? data.totalBytes.value - : this.totalBytes, - downloadedBytes: data.downloadedBytes.present - ? data.downloadedBytes.value - : this.downloadedBytes, - videoFilePath: data.videoFilePath.present - ? data.videoFilePath.value - : this.videoFilePath, + totalBytes: data.totalBytes.present ? data.totalBytes.value : this.totalBytes, + downloadedBytes: data.downloadedBytes.present ? data.downloadedBytes.value : this.downloadedBytes, + videoFilePath: data.videoFilePath.present ? data.videoFilePath.value : this.videoFilePath, thumbPath: data.thumbPath.present ? data.thumbPath.value : this.thumbPath, - downloadedAt: data.downloadedAt.present - ? data.downloadedAt.value - : this.downloadedAt, - errorMessage: data.errorMessage.present - ? data.errorMessage.value - : this.errorMessage, - retryCount: data.retryCount.present - ? data.retryCount.value - : this.retryCount, + downloadedAt: data.downloadedAt.present ? data.downloadedAt.value : this.downloadedAt, + errorMessage: data.errorMessage.present ? data.errorMessage.value : this.errorMessage, + retryCount: data.retryCount.present ? data.retryCount.value : this.retryCount, ); } @@ -801,8 +638,7 @@ class DownloadedMediaCompanion extends UpdateCompanion { if (globalKey != null) 'global_key': globalKey, if (type != null) 'type': type, if (parentRatingKey != null) 'parent_rating_key': parentRatingKey, - if (grandparentRatingKey != null) - 'grandparent_rating_key': grandparentRatingKey, + if (grandparentRatingKey != null) 'grandparent_rating_key': grandparentRatingKey, if (status != null) 'status': status, if (progress != null) 'progress': progress, if (totalBytes != null) 'total_bytes': totalBytes, @@ -875,9 +711,7 @@ class DownloadedMediaCompanion extends UpdateCompanion { map['parent_rating_key'] = Variable(parentRatingKey.value); } if (grandparentRatingKey.present) { - map['grandparent_rating_key'] = Variable( - grandparentRatingKey.value, - ); + map['grandparent_rating_key'] = Variable(grandparentRatingKey.value); } if (status.present) { map['status'] = Variable(status.value); @@ -933,8 +767,7 @@ class DownloadedMediaCompanion extends UpdateCompanion { } } -class $DownloadQueueTable extends DownloadQueue - with TableInfo<$DownloadQueueTable, DownloadQueueItem> { +class $DownloadQueueTable extends DownloadQueue with TableInfo<$DownloadQueueTable, DownloadQueueItem> { @override final GeneratedDatabase attachedDatabase; final String? _alias; @@ -948,13 +781,9 @@ class $DownloadQueueTable extends DownloadQueue hasAutoIncrement: true, type: DriftSqlType.int, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'PRIMARY KEY AUTOINCREMENT', - ), - ); - static const VerificationMeta _mediaGlobalKeyMeta = const VerificationMeta( - 'mediaGlobalKey', + defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT'), ); + static const VerificationMeta _mediaGlobalKeyMeta = const VerificationMeta('mediaGlobalKey'); @override late final GeneratedColumn mediaGlobalKey = GeneratedColumn( 'media_global_key', @@ -964,9 +793,7 @@ class $DownloadQueueTable extends DownloadQueue requiredDuringInsert: true, defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE'), ); - static const VerificationMeta _priorityMeta = const VerificationMeta( - 'priority', - ); + static const VerificationMeta _priorityMeta = const VerificationMeta('priority'); @override late final GeneratedColumn priority = GeneratedColumn( 'priority', @@ -976,9 +803,7 @@ class $DownloadQueueTable extends DownloadQueue requiredDuringInsert: false, defaultValue: const Constant(0), ); - static const VerificationMeta _addedAtMeta = const VerificationMeta( - 'addedAt', - ); + static const VerificationMeta _addedAtMeta = const VerificationMeta('addedAt'); @override late final GeneratedColumn addedAt = GeneratedColumn( 'added_at', @@ -987,9 +812,7 @@ class $DownloadQueueTable extends DownloadQueue type: DriftSqlType.int, requiredDuringInsert: true, ); - static const VerificationMeta _downloadSubtitlesMeta = const VerificationMeta( - 'downloadSubtitles', - ); + static const VerificationMeta _downloadSubtitlesMeta = const VerificationMeta('downloadSubtitles'); @override late final GeneratedColumn downloadSubtitles = GeneratedColumn( 'download_subtitles', @@ -997,14 +820,10 @@ class $DownloadQueueTable extends DownloadQueue false, type: DriftSqlType.bool, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("download_subtitles" IN (0, 1))', - ), + defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("download_subtitles" IN (0, 1))'), defaultValue: const Constant(true), ); - static const VerificationMeta _downloadArtworkMeta = const VerificationMeta( - 'downloadArtwork', - ); + static const VerificationMeta _downloadArtworkMeta = const VerificationMeta('downloadArtwork'); @override late final GeneratedColumn downloadArtwork = GeneratedColumn( 'download_artwork', @@ -1012,30 +831,18 @@ class $DownloadQueueTable extends DownloadQueue false, type: DriftSqlType.bool, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("download_artwork" IN (0, 1))', - ), + defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("download_artwork" IN (0, 1))'), defaultValue: const Constant(true), ); @override - List get $columns => [ - id, - mediaGlobalKey, - priority, - addedAt, - downloadSubtitles, - downloadArtwork, - ]; + List get $columns => [id, mediaGlobalKey, priority, addedAt, downloadSubtitles, downloadArtwork]; @override String get aliasedName => _alias ?? actualTableName; @override String get actualTableName => $name; static const String $name = 'download_queue'; @override - VerificationContext validateIntegrity( - Insertable instance, { - bool isInserting = false, - }) { + VerificationContext validateIntegrity(Insertable instance, {bool isInserting = false}) { final context = VerificationContext(); final data = instance.toColumns(true); if (data.containsKey('id')) { @@ -1044,44 +851,29 @@ class $DownloadQueueTable extends DownloadQueue if (data.containsKey('media_global_key')) { context.handle( _mediaGlobalKeyMeta, - mediaGlobalKey.isAcceptableOrUnknown( - data['media_global_key']!, - _mediaGlobalKeyMeta, - ), + mediaGlobalKey.isAcceptableOrUnknown(data['media_global_key']!, _mediaGlobalKeyMeta), ); } else if (isInserting) { context.missing(_mediaGlobalKeyMeta); } if (data.containsKey('priority')) { - context.handle( - _priorityMeta, - priority.isAcceptableOrUnknown(data['priority']!, _priorityMeta), - ); + context.handle(_priorityMeta, priority.isAcceptableOrUnknown(data['priority']!, _priorityMeta)); } if (data.containsKey('added_at')) { - context.handle( - _addedAtMeta, - addedAt.isAcceptableOrUnknown(data['added_at']!, _addedAtMeta), - ); + context.handle(_addedAtMeta, addedAt.isAcceptableOrUnknown(data['added_at']!, _addedAtMeta)); } else if (isInserting) { context.missing(_addedAtMeta); } if (data.containsKey('download_subtitles')) { context.handle( _downloadSubtitlesMeta, - downloadSubtitles.isAcceptableOrUnknown( - data['download_subtitles']!, - _downloadSubtitlesMeta, - ), + downloadSubtitles.isAcceptableOrUnknown(data['download_subtitles']!, _downloadSubtitlesMeta), ); } if (data.containsKey('download_artwork')) { context.handle( _downloadArtworkMeta, - downloadArtwork.isAcceptableOrUnknown( - data['download_artwork']!, - _downloadArtworkMeta, - ), + downloadArtwork.isAcceptableOrUnknown(data['download_artwork']!, _downloadArtworkMeta), ); } return context; @@ -1093,22 +885,13 @@ class $DownloadQueueTable extends DownloadQueue DownloadQueueItem map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return DownloadQueueItem( - id: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}id'], - )!, + id: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}id'])!, mediaGlobalKey: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}media_global_key'], )!, - priority: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}priority'], - )!, - addedAt: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}added_at'], - )!, + priority: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}priority'])!, + addedAt: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}added_at'])!, downloadSubtitles: attachedDatabase.typeMapping.read( DriftSqlType.bool, data['${effectivePrefix}download_subtitles'], @@ -1126,8 +909,7 @@ class $DownloadQueueTable extends DownloadQueue } } -class DownloadQueueItem extends DataClass - implements Insertable { +class DownloadQueueItem extends DataClass implements Insertable { final int id; final String mediaGlobalKey; final int priority; @@ -1165,10 +947,7 @@ class DownloadQueueItem extends DataClass ); } - factory DownloadQueueItem.fromJson( - Map json, { - ValueSerializer? serializer, - }) { + factory DownloadQueueItem.fromJson(Map json, {ValueSerializer? serializer}) { serializer ??= driftRuntimeOptions.defaultSerializer; return DownloadQueueItem( id: serializer.fromJson(json['id']), @@ -1210,17 +989,11 @@ class DownloadQueueItem extends DataClass DownloadQueueItem copyWithCompanion(DownloadQueueCompanion data) { return DownloadQueueItem( id: data.id.present ? data.id.value : this.id, - mediaGlobalKey: data.mediaGlobalKey.present - ? data.mediaGlobalKey.value - : this.mediaGlobalKey, + mediaGlobalKey: data.mediaGlobalKey.present ? data.mediaGlobalKey.value : this.mediaGlobalKey, priority: data.priority.present ? data.priority.value : this.priority, addedAt: data.addedAt.present ? data.addedAt.value : this.addedAt, - downloadSubtitles: data.downloadSubtitles.present - ? data.downloadSubtitles.value - : this.downloadSubtitles, - downloadArtwork: data.downloadArtwork.present - ? data.downloadArtwork.value - : this.downloadArtwork, + downloadSubtitles: data.downloadSubtitles.present ? data.downloadSubtitles.value : this.downloadSubtitles, + downloadArtwork: data.downloadArtwork.present ? data.downloadArtwork.value : this.downloadArtwork, ); } @@ -1238,14 +1011,7 @@ class DownloadQueueItem extends DataClass } @override - int get hashCode => Object.hash( - id, - mediaGlobalKey, - priority, - addedAt, - downloadSubtitles, - downloadArtwork, - ); + int get hashCode => Object.hash(id, mediaGlobalKey, priority, addedAt, downloadSubtitles, downloadArtwork); @override bool operator ==(Object other) => identical(this, other) || @@ -1356,15 +1122,12 @@ class DownloadQueueCompanion extends UpdateCompanion { } } -class $ApiCacheTable extends ApiCache - with TableInfo<$ApiCacheTable, ApiCacheData> { +class $ApiCacheTable extends ApiCache with TableInfo<$ApiCacheTable, ApiCacheData> { @override final GeneratedDatabase attachedDatabase; final String? _alias; $ApiCacheTable(this.attachedDatabase, [this._alias]); - static const VerificationMeta _cacheKeyMeta = const VerificationMeta( - 'cacheKey', - ); + static const VerificationMeta _cacheKeyMeta = const VerificationMeta('cacheKey'); @override late final GeneratedColumn cacheKey = GeneratedColumn( 'cache_key', @@ -1390,14 +1153,10 @@ class $ApiCacheTable extends ApiCache false, type: DriftSqlType.bool, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("pinned" IN (0, 1))', - ), + defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("pinned" IN (0, 1))'), defaultValue: const Constant(false), ); - static const VerificationMeta _cachedAtMeta = const VerificationMeta( - 'cachedAt', - ); + static const VerificationMeta _cachedAtMeta = const VerificationMeta('cachedAt'); @override late final GeneratedColumn cachedAt = GeneratedColumn( 'cached_at', @@ -1415,39 +1174,24 @@ class $ApiCacheTable extends ApiCache String get actualTableName => $name; static const String $name = 'api_cache'; @override - VerificationContext validateIntegrity( - Insertable instance, { - bool isInserting = false, - }) { + VerificationContext validateIntegrity(Insertable instance, {bool isInserting = false}) { final context = VerificationContext(); final data = instance.toColumns(true); if (data.containsKey('cache_key')) { - context.handle( - _cacheKeyMeta, - cacheKey.isAcceptableOrUnknown(data['cache_key']!, _cacheKeyMeta), - ); + context.handle(_cacheKeyMeta, cacheKey.isAcceptableOrUnknown(data['cache_key']!, _cacheKeyMeta)); } else if (isInserting) { context.missing(_cacheKeyMeta); } if (data.containsKey('data')) { - context.handle( - _dataMeta, - this.data.isAcceptableOrUnknown(data['data']!, _dataMeta), - ); + context.handle(_dataMeta, this.data.isAcceptableOrUnknown(data['data']!, _dataMeta)); } else if (isInserting) { context.missing(_dataMeta); } if (data.containsKey('pinned')) { - context.handle( - _pinnedMeta, - pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta), - ); + context.handle(_pinnedMeta, pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta)); } if (data.containsKey('cached_at')) { - context.handle( - _cachedAtMeta, - cachedAt.isAcceptableOrUnknown(data['cached_at']!, _cachedAtMeta), - ); + context.handle(_cachedAtMeta, cachedAt.isAcceptableOrUnknown(data['cached_at']!, _cachedAtMeta)); } return context; } @@ -1458,22 +1202,10 @@ class $ApiCacheTable extends ApiCache ApiCacheData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return ApiCacheData( - cacheKey: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}cache_key'], - )!, - data: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}data'], - )!, - pinned: attachedDatabase.typeMapping.read( - DriftSqlType.bool, - data['${effectivePrefix}pinned'], - )!, - cachedAt: attachedDatabase.typeMapping.read( - DriftSqlType.dateTime, - data['${effectivePrefix}cached_at'], - )!, + cacheKey: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}cache_key'])!, + data: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}data'])!, + pinned: attachedDatabase.typeMapping.read(DriftSqlType.bool, data['${effectivePrefix}pinned'])!, + cachedAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}cached_at'])!, ); } @@ -1495,12 +1227,7 @@ class ApiCacheData extends DataClass implements Insertable { /// Timestamp for cache invalidation (optional future use) final DateTime cachedAt; - const ApiCacheData({ - required this.cacheKey, - required this.data, - required this.pinned, - required this.cachedAt, - }); + const ApiCacheData({required this.cacheKey, required this.data, required this.pinned, required this.cachedAt}); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -1520,10 +1247,7 @@ class ApiCacheData extends DataClass implements Insertable { ); } - factory ApiCacheData.fromJson( - Map json, { - ValueSerializer? serializer, - }) { + factory ApiCacheData.fromJson(Map json, {ValueSerializer? serializer}) { serializer ??= driftRuntimeOptions.defaultSerializer; return ApiCacheData( cacheKey: serializer.fromJson(json['cacheKey']), @@ -1543,12 +1267,7 @@ class ApiCacheData extends DataClass implements Insertable { }; } - ApiCacheData copyWith({ - String? cacheKey, - String? data, - bool? pinned, - DateTime? cachedAt, - }) => ApiCacheData( + ApiCacheData copyWith({String? cacheKey, String? data, bool? pinned, DateTime? cachedAt}) => ApiCacheData( cacheKey: cacheKey ?? this.cacheKey, data: data ?? this.data, pinned: pinned ?? this.pinned, @@ -1688,13 +1407,9 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress hasAutoIncrement: true, type: DriftSqlType.int, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'PRIMARY KEY AUTOINCREMENT', - ), - ); - static const VerificationMeta _serverIdMeta = const VerificationMeta( - 'serverId', + defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT'), ); + static const VerificationMeta _serverIdMeta = const VerificationMeta('serverId'); @override late final GeneratedColumn serverId = GeneratedColumn( 'server_id', @@ -1703,9 +1418,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.string, requiredDuringInsert: true, ); - static const VerificationMeta _ratingKeyMeta = const VerificationMeta( - 'ratingKey', - ); + static const VerificationMeta _ratingKeyMeta = const VerificationMeta('ratingKey'); @override late final GeneratedColumn ratingKey = GeneratedColumn( 'rating_key', @@ -1714,9 +1427,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.string, requiredDuringInsert: true, ); - static const VerificationMeta _globalKeyMeta = const VerificationMeta( - 'globalKey', - ); + static const VerificationMeta _globalKeyMeta = const VerificationMeta('globalKey'); @override late final GeneratedColumn globalKey = GeneratedColumn( 'global_key', @@ -1725,9 +1436,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.string, requiredDuringInsert: true, ); - static const VerificationMeta _actionTypeMeta = const VerificationMeta( - 'actionType', - ); + static const VerificationMeta _actionTypeMeta = const VerificationMeta('actionType'); @override late final GeneratedColumn actionType = GeneratedColumn( 'action_type', @@ -1736,9 +1445,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.string, requiredDuringInsert: true, ); - static const VerificationMeta _viewOffsetMeta = const VerificationMeta( - 'viewOffset', - ); + static const VerificationMeta _viewOffsetMeta = const VerificationMeta('viewOffset'); @override late final GeneratedColumn viewOffset = GeneratedColumn( 'view_offset', @@ -1747,9 +1454,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.int, requiredDuringInsert: false, ); - static const VerificationMeta _durationMeta = const VerificationMeta( - 'duration', - ); + static const VerificationMeta _durationMeta = const VerificationMeta('duration'); @override late final GeneratedColumn duration = GeneratedColumn( 'duration', @@ -1758,9 +1463,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.int, requiredDuringInsert: false, ); - static const VerificationMeta _shouldMarkWatchedMeta = const VerificationMeta( - 'shouldMarkWatched', - ); + static const VerificationMeta _shouldMarkWatchedMeta = const VerificationMeta('shouldMarkWatched'); @override late final GeneratedColumn shouldMarkWatched = GeneratedColumn( 'should_mark_watched', @@ -1768,14 +1471,10 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress false, type: DriftSqlType.bool, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("should_mark_watched" IN (0, 1))', - ), + defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("should_mark_watched" IN (0, 1))'), defaultValue: const Constant(false), ); - static const VerificationMeta _createdAtMeta = const VerificationMeta( - 'createdAt', - ); + static const VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', @@ -1784,9 +1483,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.int, requiredDuringInsert: true, ); - static const VerificationMeta _updatedAtMeta = const VerificationMeta( - 'updatedAt', - ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); @override late final GeneratedColumn updatedAt = GeneratedColumn( 'updated_at', @@ -1795,9 +1492,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress type: DriftSqlType.int, requiredDuringInsert: true, ); - static const VerificationMeta _syncAttemptsMeta = const VerificationMeta( - 'syncAttempts', - ); + static const VerificationMeta _syncAttemptsMeta = const VerificationMeta('syncAttempts'); @override late final GeneratedColumn syncAttempts = GeneratedColumn( 'sync_attempts', @@ -1807,9 +1502,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress requiredDuringInsert: false, defaultValue: const Constant(0), ); - static const VerificationMeta _lastErrorMeta = const VerificationMeta( - 'lastError', - ); + static const VerificationMeta _lastErrorMeta = const VerificationMeta('lastError'); @override late final GeneratedColumn lastError = GeneratedColumn( 'last_error', @@ -1839,98 +1532,59 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress String get actualTableName => $name; static const String $name = 'offline_watch_progress'; @override - VerificationContext validateIntegrity( - Insertable instance, { - bool isInserting = false, - }) { + VerificationContext validateIntegrity(Insertable instance, {bool isInserting = false}) { final context = VerificationContext(); final data = instance.toColumns(true); if (data.containsKey('id')) { context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); } if (data.containsKey('server_id')) { - context.handle( - _serverIdMeta, - serverId.isAcceptableOrUnknown(data['server_id']!, _serverIdMeta), - ); + context.handle(_serverIdMeta, serverId.isAcceptableOrUnknown(data['server_id']!, _serverIdMeta)); } else if (isInserting) { context.missing(_serverIdMeta); } if (data.containsKey('rating_key')) { - context.handle( - _ratingKeyMeta, - ratingKey.isAcceptableOrUnknown(data['rating_key']!, _ratingKeyMeta), - ); + context.handle(_ratingKeyMeta, ratingKey.isAcceptableOrUnknown(data['rating_key']!, _ratingKeyMeta)); } else if (isInserting) { context.missing(_ratingKeyMeta); } if (data.containsKey('global_key')) { - context.handle( - _globalKeyMeta, - globalKey.isAcceptableOrUnknown(data['global_key']!, _globalKeyMeta), - ); + context.handle(_globalKeyMeta, globalKey.isAcceptableOrUnknown(data['global_key']!, _globalKeyMeta)); } else if (isInserting) { context.missing(_globalKeyMeta); } if (data.containsKey('action_type')) { - context.handle( - _actionTypeMeta, - actionType.isAcceptableOrUnknown(data['action_type']!, _actionTypeMeta), - ); + context.handle(_actionTypeMeta, actionType.isAcceptableOrUnknown(data['action_type']!, _actionTypeMeta)); } else if (isInserting) { context.missing(_actionTypeMeta); } if (data.containsKey('view_offset')) { - context.handle( - _viewOffsetMeta, - viewOffset.isAcceptableOrUnknown(data['view_offset']!, _viewOffsetMeta), - ); + context.handle(_viewOffsetMeta, viewOffset.isAcceptableOrUnknown(data['view_offset']!, _viewOffsetMeta)); } if (data.containsKey('duration')) { - context.handle( - _durationMeta, - duration.isAcceptableOrUnknown(data['duration']!, _durationMeta), - ); + context.handle(_durationMeta, duration.isAcceptableOrUnknown(data['duration']!, _durationMeta)); } if (data.containsKey('should_mark_watched')) { context.handle( _shouldMarkWatchedMeta, - shouldMarkWatched.isAcceptableOrUnknown( - data['should_mark_watched']!, - _shouldMarkWatchedMeta, - ), + shouldMarkWatched.isAcceptableOrUnknown(data['should_mark_watched']!, _shouldMarkWatchedMeta), ); } if (data.containsKey('created_at')) { - context.handle( - _createdAtMeta, - createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta), - ); + context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); } else if (isInserting) { context.missing(_createdAtMeta); } if (data.containsKey('updated_at')) { - context.handle( - _updatedAtMeta, - updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), - ); + context.handle(_updatedAtMeta, updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta)); } else if (isInserting) { context.missing(_updatedAtMeta); } if (data.containsKey('sync_attempts')) { - context.handle( - _syncAttemptsMeta, - syncAttempts.isAcceptableOrUnknown( - data['sync_attempts']!, - _syncAttemptsMeta, - ), - ); + context.handle(_syncAttemptsMeta, syncAttempts.isAcceptableOrUnknown(data['sync_attempts']!, _syncAttemptsMeta)); } if (data.containsKey('last_error')) { - context.handle( - _lastErrorMeta, - lastError.isAcceptableOrUnknown(data['last_error']!, _lastErrorMeta), - ); + context.handle(_lastErrorMeta, lastError.isAcceptableOrUnknown(data['last_error']!, _lastErrorMeta)); } return context; } @@ -1938,60 +1592,24 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress @override Set get $primaryKey => {id}; @override - OfflineWatchProgressItem map( - Map data, { - String? tablePrefix, - }) { + OfflineWatchProgressItem map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return OfflineWatchProgressItem( - id: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}id'], - )!, - serverId: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}server_id'], - )!, - ratingKey: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}rating_key'], - )!, - globalKey: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}global_key'], - )!, - actionType: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}action_type'], - )!, - viewOffset: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}view_offset'], - ), - duration: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}duration'], - ), + id: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}id'])!, + serverId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}server_id'])!, + ratingKey: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}rating_key'])!, + globalKey: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}global_key'])!, + actionType: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}action_type'])!, + viewOffset: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}view_offset']), + duration: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}duration']), shouldMarkWatched: attachedDatabase.typeMapping.read( DriftSqlType.bool, data['${effectivePrefix}should_mark_watched'], )!, - createdAt: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}created_at'], - )!, - updatedAt: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}updated_at'], - )!, - syncAttempts: attachedDatabase.typeMapping.read( - DriftSqlType.int, - data['${effectivePrefix}sync_attempts'], - )!, - lastError: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}last_error'], - ), + createdAt: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}updated_at'])!, + syncAttempts: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}sync_attempts'])!, + lastError: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}last_error']), ); } @@ -2001,8 +1619,7 @@ class $OfflineWatchProgressTable extends OfflineWatchProgress } } -class OfflineWatchProgressItem extends DataClass - implements Insertable { +class OfflineWatchProgressItem extends DataClass implements Insertable { /// Auto-incrementing primary key final int id; @@ -2084,26 +1701,17 @@ class OfflineWatchProgressItem extends DataClass ratingKey: Value(ratingKey), globalKey: Value(globalKey), actionType: Value(actionType), - viewOffset: viewOffset == null && nullToAbsent - ? const Value.absent() - : Value(viewOffset), - duration: duration == null && nullToAbsent - ? const Value.absent() - : Value(duration), + viewOffset: viewOffset == null && nullToAbsent ? const Value.absent() : Value(viewOffset), + duration: duration == null && nullToAbsent ? const Value.absent() : Value(duration), shouldMarkWatched: Value(shouldMarkWatched), createdAt: Value(createdAt), updatedAt: Value(updatedAt), syncAttempts: Value(syncAttempts), - lastError: lastError == null && nullToAbsent - ? const Value.absent() - : Value(lastError), + lastError: lastError == null && nullToAbsent ? const Value.absent() : Value(lastError), ); } - factory OfflineWatchProgressItem.fromJson( - Map json, { - ValueSerializer? serializer, - }) { + factory OfflineWatchProgressItem.fromJson(Map json, {ValueSerializer? serializer}) { serializer ??= driftRuntimeOptions.defaultSerializer; return OfflineWatchProgressItem( id: serializer.fromJson(json['id']), @@ -2166,29 +1774,19 @@ class OfflineWatchProgressItem extends DataClass syncAttempts: syncAttempts ?? this.syncAttempts, lastError: lastError.present ? lastError.value : this.lastError, ); - OfflineWatchProgressItem copyWithCompanion( - OfflineWatchProgressCompanion data, - ) { + OfflineWatchProgressItem copyWithCompanion(OfflineWatchProgressCompanion data) { return OfflineWatchProgressItem( id: data.id.present ? data.id.value : this.id, serverId: data.serverId.present ? data.serverId.value : this.serverId, ratingKey: data.ratingKey.present ? data.ratingKey.value : this.ratingKey, globalKey: data.globalKey.present ? data.globalKey.value : this.globalKey, - actionType: data.actionType.present - ? data.actionType.value - : this.actionType, - viewOffset: data.viewOffset.present - ? data.viewOffset.value - : this.viewOffset, + actionType: data.actionType.present ? data.actionType.value : this.actionType, + viewOffset: data.viewOffset.present ? data.viewOffset.value : this.viewOffset, duration: data.duration.present ? data.duration.value : this.duration, - shouldMarkWatched: data.shouldMarkWatched.present - ? data.shouldMarkWatched.value - : this.shouldMarkWatched, + shouldMarkWatched: data.shouldMarkWatched.present ? data.shouldMarkWatched.value : this.shouldMarkWatched, createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, - syncAttempts: data.syncAttempts.present - ? data.syncAttempts.value - : this.syncAttempts, + syncAttempts: data.syncAttempts.present ? data.syncAttempts.value : this.syncAttempts, lastError: data.lastError.present ? data.lastError.value : this.lastError, ); } @@ -2245,8 +1843,7 @@ class OfflineWatchProgressItem extends DataClass other.lastError == this.lastError); } -class OfflineWatchProgressCompanion - extends UpdateCompanion { +class OfflineWatchProgressCompanion extends UpdateCompanion { final Value id; final Value serverId; final Value ratingKey; @@ -2417,23 +2014,14 @@ class OfflineWatchProgressCompanion abstract class _$AppDatabase extends GeneratedDatabase { _$AppDatabase(QueryExecutor e) : super(e); $AppDatabaseManager get managers => $AppDatabaseManager(this); - late final $DownloadedMediaTable downloadedMedia = $DownloadedMediaTable( - this, - ); + late final $DownloadedMediaTable downloadedMedia = $DownloadedMediaTable(this); late final $DownloadQueueTable downloadQueue = $DownloadQueueTable(this); late final $ApiCacheTable apiCache = $ApiCacheTable(this); - late final $OfflineWatchProgressTable offlineWatchProgress = - $OfflineWatchProgressTable(this); + late final $OfflineWatchProgressTable offlineWatchProgress = $OfflineWatchProgressTable(this); @override - Iterable> get allTables => - allSchemaEntities.whereType>(); + Iterable> get allTables => allSchemaEntities.whereType>(); @override - List get allSchemaEntities => [ - downloadedMedia, - downloadQueue, - apiCache, - offlineWatchProgress, - ]; + List get allSchemaEntities => [downloadedMedia, downloadQueue, apiCache, offlineWatchProgress]; } typedef $$DownloadedMediaTableCreateCompanionBuilder = @@ -2475,8 +2063,7 @@ typedef $$DownloadedMediaTableUpdateCompanionBuilder = Value retryCount, }); -class $$DownloadedMediaTableFilterComposer - extends Composer<_$AppDatabase, $DownloadedMediaTable> { +class $$DownloadedMediaTableFilterComposer extends Composer<_$AppDatabase, $DownloadedMediaTable> { $$DownloadedMediaTableFilterComposer({ required super.$db, required super.$table, @@ -2484,89 +2071,54 @@ class $$DownloadedMediaTableFilterComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnFilters get id => $composableBuilder( - column: $table.id, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get id => $composableBuilder(column: $table.id, builder: (column) => ColumnFilters(column)); - ColumnFilters get serverId => $composableBuilder( - column: $table.serverId, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get serverId => + $composableBuilder(column: $table.serverId, builder: (column) => ColumnFilters(column)); - ColumnFilters get ratingKey => $composableBuilder( - column: $table.ratingKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get ratingKey => + $composableBuilder(column: $table.ratingKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get globalKey => $composableBuilder( - column: $table.globalKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get globalKey => + $composableBuilder(column: $table.globalKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get type => $composableBuilder( - column: $table.type, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get type => $composableBuilder(column: $table.type, builder: (column) => ColumnFilters(column)); - ColumnFilters get parentRatingKey => $composableBuilder( - column: $table.parentRatingKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get parentRatingKey => + $composableBuilder(column: $table.parentRatingKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get grandparentRatingKey => $composableBuilder( - column: $table.grandparentRatingKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get grandparentRatingKey => + $composableBuilder(column: $table.grandparentRatingKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get status => $composableBuilder( - column: $table.status, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get status => + $composableBuilder(column: $table.status, builder: (column) => ColumnFilters(column)); - ColumnFilters get progress => $composableBuilder( - column: $table.progress, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get progress => + $composableBuilder(column: $table.progress, builder: (column) => ColumnFilters(column)); - ColumnFilters get totalBytes => $composableBuilder( - column: $table.totalBytes, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get totalBytes => + $composableBuilder(column: $table.totalBytes, builder: (column) => ColumnFilters(column)); - ColumnFilters get downloadedBytes => $composableBuilder( - column: $table.downloadedBytes, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get downloadedBytes => + $composableBuilder(column: $table.downloadedBytes, builder: (column) => ColumnFilters(column)); - ColumnFilters get videoFilePath => $composableBuilder( - column: $table.videoFilePath, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get videoFilePath => + $composableBuilder(column: $table.videoFilePath, builder: (column) => ColumnFilters(column)); - ColumnFilters get thumbPath => $composableBuilder( - column: $table.thumbPath, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get thumbPath => + $composableBuilder(column: $table.thumbPath, builder: (column) => ColumnFilters(column)); - ColumnFilters get downloadedAt => $composableBuilder( - column: $table.downloadedAt, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get downloadedAt => + $composableBuilder(column: $table.downloadedAt, builder: (column) => ColumnFilters(column)); - ColumnFilters get errorMessage => $composableBuilder( - column: $table.errorMessage, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get errorMessage => + $composableBuilder(column: $table.errorMessage, builder: (column) => ColumnFilters(column)); - ColumnFilters get retryCount => $composableBuilder( - column: $table.retryCount, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get retryCount => + $composableBuilder(column: $table.retryCount, builder: (column) => ColumnFilters(column)); } -class $$DownloadedMediaTableOrderingComposer - extends Composer<_$AppDatabase, $DownloadedMediaTable> { +class $$DownloadedMediaTableOrderingComposer extends Composer<_$AppDatabase, $DownloadedMediaTable> { $$DownloadedMediaTableOrderingComposer({ required super.$db, required super.$table, @@ -2574,89 +2126,55 @@ class $$DownloadedMediaTableOrderingComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnOrderings get id => $composableBuilder( - column: $table.id, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get id => $composableBuilder(column: $table.id, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get serverId => $composableBuilder( - column: $table.serverId, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get serverId => + $composableBuilder(column: $table.serverId, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get ratingKey => $composableBuilder( - column: $table.ratingKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get ratingKey => + $composableBuilder(column: $table.ratingKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get globalKey => $composableBuilder( - column: $table.globalKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get globalKey => + $composableBuilder(column: $table.globalKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get type => $composableBuilder( - column: $table.type, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get type => + $composableBuilder(column: $table.type, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get parentRatingKey => $composableBuilder( - column: $table.parentRatingKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get parentRatingKey => + $composableBuilder(column: $table.parentRatingKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get grandparentRatingKey => $composableBuilder( - column: $table.grandparentRatingKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get grandparentRatingKey => + $composableBuilder(column: $table.grandparentRatingKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get status => $composableBuilder( - column: $table.status, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get status => + $composableBuilder(column: $table.status, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get progress => $composableBuilder( - column: $table.progress, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get progress => + $composableBuilder(column: $table.progress, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get totalBytes => $composableBuilder( - column: $table.totalBytes, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get totalBytes => + $composableBuilder(column: $table.totalBytes, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get downloadedBytes => $composableBuilder( - column: $table.downloadedBytes, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get downloadedBytes => + $composableBuilder(column: $table.downloadedBytes, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get videoFilePath => $composableBuilder( - column: $table.videoFilePath, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get videoFilePath => + $composableBuilder(column: $table.videoFilePath, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get thumbPath => $composableBuilder( - column: $table.thumbPath, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get thumbPath => + $composableBuilder(column: $table.thumbPath, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get downloadedAt => $composableBuilder( - column: $table.downloadedAt, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get downloadedAt => + $composableBuilder(column: $table.downloadedAt, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get errorMessage => $composableBuilder( - column: $table.errorMessage, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get errorMessage => + $composableBuilder(column: $table.errorMessage, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get retryCount => $composableBuilder( - column: $table.retryCount, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get retryCount => + $composableBuilder(column: $table.retryCount, builder: (column) => ColumnOrderings(column)); } -class $$DownloadedMediaTableAnnotationComposer - extends Composer<_$AppDatabase, $DownloadedMediaTable> { +class $$DownloadedMediaTableAnnotationComposer extends Composer<_$AppDatabase, $DownloadedMediaTable> { $$DownloadedMediaTableAnnotationComposer({ required super.$db, required super.$table, @@ -2664,69 +2182,42 @@ class $$DownloadedMediaTableAnnotationComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - GeneratedColumn get id => - $composableBuilder(column: $table.id, builder: (column) => column); + GeneratedColumn get id => $composableBuilder(column: $table.id, builder: (column) => column); - GeneratedColumn get serverId => - $composableBuilder(column: $table.serverId, builder: (column) => column); + GeneratedColumn get serverId => $composableBuilder(column: $table.serverId, builder: (column) => column); - GeneratedColumn get ratingKey => - $composableBuilder(column: $table.ratingKey, builder: (column) => column); + GeneratedColumn get ratingKey => $composableBuilder(column: $table.ratingKey, builder: (column) => column); - GeneratedColumn get globalKey => - $composableBuilder(column: $table.globalKey, builder: (column) => column); + GeneratedColumn get globalKey => $composableBuilder(column: $table.globalKey, builder: (column) => column); - GeneratedColumn get type => - $composableBuilder(column: $table.type, builder: (column) => column); + GeneratedColumn get type => $composableBuilder(column: $table.type, builder: (column) => column); - GeneratedColumn get parentRatingKey => $composableBuilder( - column: $table.parentRatingKey, - builder: (column) => column, - ); + GeneratedColumn get parentRatingKey => + $composableBuilder(column: $table.parentRatingKey, builder: (column) => column); - GeneratedColumn get grandparentRatingKey => $composableBuilder( - column: $table.grandparentRatingKey, - builder: (column) => column, - ); + GeneratedColumn get grandparentRatingKey => + $composableBuilder(column: $table.grandparentRatingKey, builder: (column) => column); - GeneratedColumn get status => - $composableBuilder(column: $table.status, builder: (column) => column); + GeneratedColumn get status => $composableBuilder(column: $table.status, builder: (column) => column); - GeneratedColumn get progress => - $composableBuilder(column: $table.progress, builder: (column) => column); + GeneratedColumn get progress => $composableBuilder(column: $table.progress, builder: (column) => column); - GeneratedColumn get totalBytes => $composableBuilder( - column: $table.totalBytes, - builder: (column) => column, - ); + GeneratedColumn get totalBytes => $composableBuilder(column: $table.totalBytes, builder: (column) => column); - GeneratedColumn get downloadedBytes => $composableBuilder( - column: $table.downloadedBytes, - builder: (column) => column, - ); + GeneratedColumn get downloadedBytes => + $composableBuilder(column: $table.downloadedBytes, builder: (column) => column); - GeneratedColumn get videoFilePath => $composableBuilder( - column: $table.videoFilePath, - builder: (column) => column, - ); + GeneratedColumn get videoFilePath => + $composableBuilder(column: $table.videoFilePath, builder: (column) => column); - GeneratedColumn get thumbPath => - $composableBuilder(column: $table.thumbPath, builder: (column) => column); + GeneratedColumn get thumbPath => $composableBuilder(column: $table.thumbPath, builder: (column) => column); - GeneratedColumn get downloadedAt => $composableBuilder( - column: $table.downloadedAt, - builder: (column) => column, - ); + GeneratedColumn get downloadedAt => $composableBuilder(column: $table.downloadedAt, builder: (column) => column); - GeneratedColumn get errorMessage => $composableBuilder( - column: $table.errorMessage, - builder: (column) => column, - ); + GeneratedColumn get errorMessage => + $composableBuilder(column: $table.errorMessage, builder: (column) => column); - GeneratedColumn get retryCount => $composableBuilder( - column: $table.retryCount, - builder: (column) => column, - ); + GeneratedColumn get retryCount => $composableBuilder(column: $table.retryCount, builder: (column) => column); } class $$DownloadedMediaTableTableManager @@ -2740,30 +2231,18 @@ class $$DownloadedMediaTableTableManager $$DownloadedMediaTableAnnotationComposer, $$DownloadedMediaTableCreateCompanionBuilder, $$DownloadedMediaTableUpdateCompanionBuilder, - ( - DownloadedMediaItem, - BaseReferences< - _$AppDatabase, - $DownloadedMediaTable, - DownloadedMediaItem - >, - ), + (DownloadedMediaItem, BaseReferences<_$AppDatabase, $DownloadedMediaTable, DownloadedMediaItem>), DownloadedMediaItem, PrefetchHooks Function() > { - $$DownloadedMediaTableTableManager( - _$AppDatabase db, - $DownloadedMediaTable table, - ) : super( + $$DownloadedMediaTableTableManager(_$AppDatabase db, $DownloadedMediaTable table) + : super( TableManagerState( db: db, table: table, - createFilteringComposer: () => - $$DownloadedMediaTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $$DownloadedMediaTableOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $$DownloadedMediaTableAnnotationComposer($db: db, $table: table), + createFilteringComposer: () => $$DownloadedMediaTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => $$DownloadedMediaTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => $$DownloadedMediaTableAnnotationComposer($db: db, $table: table), updateCompanionCallback: ({ Value id = const Value.absent(), @@ -2836,9 +2315,7 @@ class $$DownloadedMediaTableTableManager errorMessage: errorMessage, retryCount: retryCount, ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + withReferenceMapper: (p0) => p0.map((e) => (e.readTable(table), BaseReferences(db, table, e))).toList(), prefetchHooksCallback: null, ), ); @@ -2854,14 +2331,7 @@ typedef $$DownloadedMediaTableProcessedTableManager = $$DownloadedMediaTableAnnotationComposer, $$DownloadedMediaTableCreateCompanionBuilder, $$DownloadedMediaTableUpdateCompanionBuilder, - ( - DownloadedMediaItem, - BaseReferences< - _$AppDatabase, - $DownloadedMediaTable, - DownloadedMediaItem - >, - ), + (DownloadedMediaItem, BaseReferences<_$AppDatabase, $DownloadedMediaTable, DownloadedMediaItem>), DownloadedMediaItem, PrefetchHooks Function() >; @@ -2884,8 +2354,7 @@ typedef $$DownloadQueueTableUpdateCompanionBuilder = Value downloadArtwork, }); -class $$DownloadQueueTableFilterComposer - extends Composer<_$AppDatabase, $DownloadQueueTable> { +class $$DownloadQueueTableFilterComposer extends Composer<_$AppDatabase, $DownloadQueueTable> { $$DownloadQueueTableFilterComposer({ required super.$db, required super.$table, @@ -2893,39 +2362,25 @@ class $$DownloadQueueTableFilterComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnFilters get id => $composableBuilder( - column: $table.id, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get id => $composableBuilder(column: $table.id, builder: (column) => ColumnFilters(column)); - ColumnFilters get mediaGlobalKey => $composableBuilder( - column: $table.mediaGlobalKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get mediaGlobalKey => + $composableBuilder(column: $table.mediaGlobalKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get priority => $composableBuilder( - column: $table.priority, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get priority => + $composableBuilder(column: $table.priority, builder: (column) => ColumnFilters(column)); - ColumnFilters get addedAt => $composableBuilder( - column: $table.addedAt, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get addedAt => + $composableBuilder(column: $table.addedAt, builder: (column) => ColumnFilters(column)); - ColumnFilters get downloadSubtitles => $composableBuilder( - column: $table.downloadSubtitles, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get downloadSubtitles => + $composableBuilder(column: $table.downloadSubtitles, builder: (column) => ColumnFilters(column)); - ColumnFilters get downloadArtwork => $composableBuilder( - column: $table.downloadArtwork, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get downloadArtwork => + $composableBuilder(column: $table.downloadArtwork, builder: (column) => ColumnFilters(column)); } -class $$DownloadQueueTableOrderingComposer - extends Composer<_$AppDatabase, $DownloadQueueTable> { +class $$DownloadQueueTableOrderingComposer extends Composer<_$AppDatabase, $DownloadQueueTable> { $$DownloadQueueTableOrderingComposer({ required super.$db, required super.$table, @@ -2933,39 +2388,25 @@ class $$DownloadQueueTableOrderingComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnOrderings get id => $composableBuilder( - column: $table.id, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get id => $composableBuilder(column: $table.id, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get mediaGlobalKey => $composableBuilder( - column: $table.mediaGlobalKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get mediaGlobalKey => + $composableBuilder(column: $table.mediaGlobalKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get priority => $composableBuilder( - column: $table.priority, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get priority => + $composableBuilder(column: $table.priority, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get addedAt => $composableBuilder( - column: $table.addedAt, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get addedAt => + $composableBuilder(column: $table.addedAt, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get downloadSubtitles => $composableBuilder( - column: $table.downloadSubtitles, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get downloadSubtitles => + $composableBuilder(column: $table.downloadSubtitles, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get downloadArtwork => $composableBuilder( - column: $table.downloadArtwork, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get downloadArtwork => + $composableBuilder(column: $table.downloadArtwork, builder: (column) => ColumnOrderings(column)); } -class $$DownloadQueueTableAnnotationComposer - extends Composer<_$AppDatabase, $DownloadQueueTable> { +class $$DownloadQueueTableAnnotationComposer extends Composer<_$AppDatabase, $DownloadQueueTable> { $$DownloadQueueTableAnnotationComposer({ required super.$db, required super.$table, @@ -2973,29 +2414,20 @@ class $$DownloadQueueTableAnnotationComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - GeneratedColumn get id => - $composableBuilder(column: $table.id, builder: (column) => column); + GeneratedColumn get id => $composableBuilder(column: $table.id, builder: (column) => column); - GeneratedColumn get mediaGlobalKey => $composableBuilder( - column: $table.mediaGlobalKey, - builder: (column) => column, - ); + GeneratedColumn get mediaGlobalKey => + $composableBuilder(column: $table.mediaGlobalKey, builder: (column) => column); - GeneratedColumn get priority => - $composableBuilder(column: $table.priority, builder: (column) => column); + GeneratedColumn get priority => $composableBuilder(column: $table.priority, builder: (column) => column); - GeneratedColumn get addedAt => - $composableBuilder(column: $table.addedAt, builder: (column) => column); + GeneratedColumn get addedAt => $composableBuilder(column: $table.addedAt, builder: (column) => column); - GeneratedColumn get downloadSubtitles => $composableBuilder( - column: $table.downloadSubtitles, - builder: (column) => column, - ); + GeneratedColumn get downloadSubtitles => + $composableBuilder(column: $table.downloadSubtitles, builder: (column) => column); - GeneratedColumn get downloadArtwork => $composableBuilder( - column: $table.downloadArtwork, - builder: (column) => column, - ); + GeneratedColumn get downloadArtwork => + $composableBuilder(column: $table.downloadArtwork, builder: (column) => column); } class $$DownloadQueueTableTableManager @@ -3009,14 +2441,7 @@ class $$DownloadQueueTableTableManager $$DownloadQueueTableAnnotationComposer, $$DownloadQueueTableCreateCompanionBuilder, $$DownloadQueueTableUpdateCompanionBuilder, - ( - DownloadQueueItem, - BaseReferences< - _$AppDatabase, - $DownloadQueueTable, - DownloadQueueItem - >, - ), + (DownloadQueueItem, BaseReferences<_$AppDatabase, $DownloadQueueTable, DownloadQueueItem>), DownloadQueueItem, PrefetchHooks Function() > { @@ -3025,12 +2450,9 @@ class $$DownloadQueueTableTableManager TableManagerState( db: db, table: table, - createFilteringComposer: () => - $$DownloadQueueTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $$DownloadQueueTableOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $$DownloadQueueTableAnnotationComposer($db: db, $table: table), + createFilteringComposer: () => $$DownloadQueueTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => $$DownloadQueueTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => $$DownloadQueueTableAnnotationComposer($db: db, $table: table), updateCompanionCallback: ({ Value id = const Value.absent(), @@ -3063,9 +2485,7 @@ class $$DownloadQueueTableTableManager downloadSubtitles: downloadSubtitles, downloadArtwork: downloadArtwork, ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + withReferenceMapper: (p0) => p0.map((e) => (e.readTable(table), BaseReferences(db, table, e))).toList(), prefetchHooksCallback: null, ), ); @@ -3081,10 +2501,7 @@ typedef $$DownloadQueueTableProcessedTableManager = $$DownloadQueueTableAnnotationComposer, $$DownloadQueueTableCreateCompanionBuilder, $$DownloadQueueTableUpdateCompanionBuilder, - ( - DownloadQueueItem, - BaseReferences<_$AppDatabase, $DownloadQueueTable, DownloadQueueItem>, - ), + (DownloadQueueItem, BaseReferences<_$AppDatabase, $DownloadQueueTable, DownloadQueueItem>), DownloadQueueItem, PrefetchHooks Function() >; @@ -3105,8 +2522,7 @@ typedef $$ApiCacheTableUpdateCompanionBuilder = Value rowid, }); -class $$ApiCacheTableFilterComposer - extends Composer<_$AppDatabase, $ApiCacheTable> { +class $$ApiCacheTableFilterComposer extends Composer<_$AppDatabase, $ApiCacheTable> { $$ApiCacheTableFilterComposer({ required super.$db, required super.$table, @@ -3114,29 +2530,19 @@ class $$ApiCacheTableFilterComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnFilters get cacheKey => $composableBuilder( - column: $table.cacheKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get cacheKey => + $composableBuilder(column: $table.cacheKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get data => $composableBuilder( - column: $table.data, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get data => $composableBuilder(column: $table.data, builder: (column) => ColumnFilters(column)); - ColumnFilters get pinned => $composableBuilder( - column: $table.pinned, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get pinned => + $composableBuilder(column: $table.pinned, builder: (column) => ColumnFilters(column)); - ColumnFilters get cachedAt => $composableBuilder( - column: $table.cachedAt, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get cachedAt => + $composableBuilder(column: $table.cachedAt, builder: (column) => ColumnFilters(column)); } -class $$ApiCacheTableOrderingComposer - extends Composer<_$AppDatabase, $ApiCacheTable> { +class $$ApiCacheTableOrderingComposer extends Composer<_$AppDatabase, $ApiCacheTable> { $$ApiCacheTableOrderingComposer({ required super.$db, required super.$table, @@ -3144,29 +2550,20 @@ class $$ApiCacheTableOrderingComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnOrderings get cacheKey => $composableBuilder( - column: $table.cacheKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get cacheKey => + $composableBuilder(column: $table.cacheKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get data => $composableBuilder( - column: $table.data, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get data => + $composableBuilder(column: $table.data, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get pinned => $composableBuilder( - column: $table.pinned, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get pinned => + $composableBuilder(column: $table.pinned, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get cachedAt => $composableBuilder( - column: $table.cachedAt, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get cachedAt => + $composableBuilder(column: $table.cachedAt, builder: (column) => ColumnOrderings(column)); } -class $$ApiCacheTableAnnotationComposer - extends Composer<_$AppDatabase, $ApiCacheTable> { +class $$ApiCacheTableAnnotationComposer extends Composer<_$AppDatabase, $ApiCacheTable> { $$ApiCacheTableAnnotationComposer({ required super.$db, required super.$table, @@ -3174,17 +2571,13 @@ class $$ApiCacheTableAnnotationComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - GeneratedColumn get cacheKey => - $composableBuilder(column: $table.cacheKey, builder: (column) => column); + GeneratedColumn get cacheKey => $composableBuilder(column: $table.cacheKey, builder: (column) => column); - GeneratedColumn get data => - $composableBuilder(column: $table.data, builder: (column) => column); + GeneratedColumn get data => $composableBuilder(column: $table.data, builder: (column) => column); - GeneratedColumn get pinned => - $composableBuilder(column: $table.pinned, builder: (column) => column); + GeneratedColumn get pinned => $composableBuilder(column: $table.pinned, builder: (column) => column); - GeneratedColumn get cachedAt => - $composableBuilder(column: $table.cachedAt, builder: (column) => column); + GeneratedColumn get cachedAt => $composableBuilder(column: $table.cachedAt, builder: (column) => column); } class $$ApiCacheTableTableManager @@ -3198,10 +2591,7 @@ class $$ApiCacheTableTableManager $$ApiCacheTableAnnotationComposer, $$ApiCacheTableCreateCompanionBuilder, $$ApiCacheTableUpdateCompanionBuilder, - ( - ApiCacheData, - BaseReferences<_$AppDatabase, $ApiCacheTable, ApiCacheData>, - ), + (ApiCacheData, BaseReferences<_$AppDatabase, $ApiCacheTable, ApiCacheData>), ApiCacheData, PrefetchHooks Function() > { @@ -3210,12 +2600,9 @@ class $$ApiCacheTableTableManager TableManagerState( db: db, table: table, - createFilteringComposer: () => - $$ApiCacheTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $$ApiCacheTableOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $$ApiCacheTableAnnotationComposer($db: db, $table: table), + createFilteringComposer: () => $$ApiCacheTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => $$ApiCacheTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => $$ApiCacheTableAnnotationComposer($db: db, $table: table), updateCompanionCallback: ({ Value cacheKey = const Value.absent(), @@ -3223,13 +2610,7 @@ class $$ApiCacheTableTableManager Value pinned = const Value.absent(), Value cachedAt = const Value.absent(), Value rowid = const Value.absent(), - }) => ApiCacheCompanion( - cacheKey: cacheKey, - data: data, - pinned: pinned, - cachedAt: cachedAt, - rowid: rowid, - ), + }) => ApiCacheCompanion(cacheKey: cacheKey, data: data, pinned: pinned, cachedAt: cachedAt, rowid: rowid), createCompanionCallback: ({ required String cacheKey, @@ -3244,9 +2625,7 @@ class $$ApiCacheTableTableManager cachedAt: cachedAt, rowid: rowid, ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + withReferenceMapper: (p0) => p0.map((e) => (e.readTable(table), BaseReferences(db, table, e))).toList(), prefetchHooksCallback: null, ), ); @@ -3262,10 +2641,7 @@ typedef $$ApiCacheTableProcessedTableManager = $$ApiCacheTableAnnotationComposer, $$ApiCacheTableCreateCompanionBuilder, $$ApiCacheTableUpdateCompanionBuilder, - ( - ApiCacheData, - BaseReferences<_$AppDatabase, $ApiCacheTable, ApiCacheData>, - ), + (ApiCacheData, BaseReferences<_$AppDatabase, $ApiCacheTable, ApiCacheData>), ApiCacheData, PrefetchHooks Function() >; @@ -3300,8 +2676,7 @@ typedef $$OfflineWatchProgressTableUpdateCompanionBuilder = Value lastError, }); -class $$OfflineWatchProgressTableFilterComposer - extends Composer<_$AppDatabase, $OfflineWatchProgressTable> { +class $$OfflineWatchProgressTableFilterComposer extends Composer<_$AppDatabase, $OfflineWatchProgressTable> { $$OfflineWatchProgressTableFilterComposer({ required super.$db, required super.$table, @@ -3309,69 +2684,43 @@ class $$OfflineWatchProgressTableFilterComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnFilters get id => $composableBuilder( - column: $table.id, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get id => $composableBuilder(column: $table.id, builder: (column) => ColumnFilters(column)); - ColumnFilters get serverId => $composableBuilder( - column: $table.serverId, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get serverId => + $composableBuilder(column: $table.serverId, builder: (column) => ColumnFilters(column)); - ColumnFilters get ratingKey => $composableBuilder( - column: $table.ratingKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get ratingKey => + $composableBuilder(column: $table.ratingKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get globalKey => $composableBuilder( - column: $table.globalKey, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get globalKey => + $composableBuilder(column: $table.globalKey, builder: (column) => ColumnFilters(column)); - ColumnFilters get actionType => $composableBuilder( - column: $table.actionType, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get actionType => + $composableBuilder(column: $table.actionType, builder: (column) => ColumnFilters(column)); - ColumnFilters get viewOffset => $composableBuilder( - column: $table.viewOffset, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get viewOffset => + $composableBuilder(column: $table.viewOffset, builder: (column) => ColumnFilters(column)); - ColumnFilters get duration => $composableBuilder( - column: $table.duration, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get duration => + $composableBuilder(column: $table.duration, builder: (column) => ColumnFilters(column)); - ColumnFilters get shouldMarkWatched => $composableBuilder( - column: $table.shouldMarkWatched, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get shouldMarkWatched => + $composableBuilder(column: $table.shouldMarkWatched, builder: (column) => ColumnFilters(column)); - ColumnFilters get createdAt => $composableBuilder( - column: $table.createdAt, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => ColumnFilters(column)); - ColumnFilters get updatedAt => $composableBuilder( - column: $table.updatedAt, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => ColumnFilters(column)); - ColumnFilters get syncAttempts => $composableBuilder( - column: $table.syncAttempts, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get syncAttempts => + $composableBuilder(column: $table.syncAttempts, builder: (column) => ColumnFilters(column)); - ColumnFilters get lastError => $composableBuilder( - column: $table.lastError, - builder: (column) => ColumnFilters(column), - ); + ColumnFilters get lastError => + $composableBuilder(column: $table.lastError, builder: (column) => ColumnFilters(column)); } -class $$OfflineWatchProgressTableOrderingComposer - extends Composer<_$AppDatabase, $OfflineWatchProgressTable> { +class $$OfflineWatchProgressTableOrderingComposer extends Composer<_$AppDatabase, $OfflineWatchProgressTable> { $$OfflineWatchProgressTableOrderingComposer({ required super.$db, required super.$table, @@ -3379,69 +2728,43 @@ class $$OfflineWatchProgressTableOrderingComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnOrderings get id => $composableBuilder( - column: $table.id, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get id => $composableBuilder(column: $table.id, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get serverId => $composableBuilder( - column: $table.serverId, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get serverId => + $composableBuilder(column: $table.serverId, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get ratingKey => $composableBuilder( - column: $table.ratingKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get ratingKey => + $composableBuilder(column: $table.ratingKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get globalKey => $composableBuilder( - column: $table.globalKey, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get globalKey => + $composableBuilder(column: $table.globalKey, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get actionType => $composableBuilder( - column: $table.actionType, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get actionType => + $composableBuilder(column: $table.actionType, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get viewOffset => $composableBuilder( - column: $table.viewOffset, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get viewOffset => + $composableBuilder(column: $table.viewOffset, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get duration => $composableBuilder( - column: $table.duration, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get duration => + $composableBuilder(column: $table.duration, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get shouldMarkWatched => $composableBuilder( - column: $table.shouldMarkWatched, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get shouldMarkWatched => + $composableBuilder(column: $table.shouldMarkWatched, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get createdAt => $composableBuilder( - column: $table.createdAt, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get updatedAt => $composableBuilder( - column: $table.updatedAt, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get syncAttempts => $composableBuilder( - column: $table.syncAttempts, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get syncAttempts => + $composableBuilder(column: $table.syncAttempts, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get lastError => $composableBuilder( - column: $table.lastError, - builder: (column) => ColumnOrderings(column), - ); + ColumnOrderings get lastError => + $composableBuilder(column: $table.lastError, builder: (column) => ColumnOrderings(column)); } -class $$OfflineWatchProgressTableAnnotationComposer - extends Composer<_$AppDatabase, $OfflineWatchProgressTable> { +class $$OfflineWatchProgressTableAnnotationComposer extends Composer<_$AppDatabase, $OfflineWatchProgressTable> { $$OfflineWatchProgressTableAnnotationComposer({ required super.$db, required super.$table, @@ -3449,49 +2772,30 @@ class $$OfflineWatchProgressTableAnnotationComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - GeneratedColumn get id => - $composableBuilder(column: $table.id, builder: (column) => column); + GeneratedColumn get id => $composableBuilder(column: $table.id, builder: (column) => column); - GeneratedColumn get serverId => - $composableBuilder(column: $table.serverId, builder: (column) => column); + GeneratedColumn get serverId => $composableBuilder(column: $table.serverId, builder: (column) => column); - GeneratedColumn get ratingKey => - $composableBuilder(column: $table.ratingKey, builder: (column) => column); + GeneratedColumn get ratingKey => $composableBuilder(column: $table.ratingKey, builder: (column) => column); - GeneratedColumn get globalKey => - $composableBuilder(column: $table.globalKey, builder: (column) => column); + GeneratedColumn get globalKey => $composableBuilder(column: $table.globalKey, builder: (column) => column); - GeneratedColumn get actionType => $composableBuilder( - column: $table.actionType, - builder: (column) => column, - ); + GeneratedColumn get actionType => $composableBuilder(column: $table.actionType, builder: (column) => column); - GeneratedColumn get viewOffset => $composableBuilder( - column: $table.viewOffset, - builder: (column) => column, - ); + GeneratedColumn get viewOffset => $composableBuilder(column: $table.viewOffset, builder: (column) => column); - GeneratedColumn get duration => - $composableBuilder(column: $table.duration, builder: (column) => column); + GeneratedColumn get duration => $composableBuilder(column: $table.duration, builder: (column) => column); - GeneratedColumn get shouldMarkWatched => $composableBuilder( - column: $table.shouldMarkWatched, - builder: (column) => column, - ); + GeneratedColumn get shouldMarkWatched => + $composableBuilder(column: $table.shouldMarkWatched, builder: (column) => column); - GeneratedColumn get createdAt => - $composableBuilder(column: $table.createdAt, builder: (column) => column); + GeneratedColumn get createdAt => $composableBuilder(column: $table.createdAt, builder: (column) => column); - GeneratedColumn get updatedAt => - $composableBuilder(column: $table.updatedAt, builder: (column) => column); + GeneratedColumn get updatedAt => $composableBuilder(column: $table.updatedAt, builder: (column) => column); - GeneratedColumn get syncAttempts => $composableBuilder( - column: $table.syncAttempts, - builder: (column) => column, - ); + GeneratedColumn get syncAttempts => $composableBuilder(column: $table.syncAttempts, builder: (column) => column); - GeneratedColumn get lastError => - $composableBuilder(column: $table.lastError, builder: (column) => column); + GeneratedColumn get lastError => $composableBuilder(column: $table.lastError, builder: (column) => column); } class $$OfflineWatchProgressTableTableManager @@ -3507,34 +2811,19 @@ class $$OfflineWatchProgressTableTableManager $$OfflineWatchProgressTableUpdateCompanionBuilder, ( OfflineWatchProgressItem, - BaseReferences< - _$AppDatabase, - $OfflineWatchProgressTable, - OfflineWatchProgressItem - >, + BaseReferences<_$AppDatabase, $OfflineWatchProgressTable, OfflineWatchProgressItem>, ), OfflineWatchProgressItem, PrefetchHooks Function() > { - $$OfflineWatchProgressTableTableManager( - _$AppDatabase db, - $OfflineWatchProgressTable table, - ) : super( + $$OfflineWatchProgressTableTableManager(_$AppDatabase db, $OfflineWatchProgressTable table) + : super( TableManagerState( db: db, table: table, - createFilteringComposer: () => - $$OfflineWatchProgressTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $$OfflineWatchProgressTableOrderingComposer( - $db: db, - $table: table, - ), - createComputedFieldComposer: () => - $$OfflineWatchProgressTableAnnotationComposer( - $db: db, - $table: table, - ), + createFilteringComposer: () => $$OfflineWatchProgressTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => $$OfflineWatchProgressTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => $$OfflineWatchProgressTableAnnotationComposer($db: db, $table: table), updateCompanionCallback: ({ Value id = const Value.absent(), @@ -3591,9 +2880,7 @@ class $$OfflineWatchProgressTableTableManager syncAttempts: syncAttempts, lastError: lastError, ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + withReferenceMapper: (p0) => p0.map((e) => (e.readTable(table), BaseReferences(db, table, e))).toList(), prefetchHooksCallback: null, ), ); @@ -3609,14 +2896,7 @@ typedef $$OfflineWatchProgressTableProcessedTableManager = $$OfflineWatchProgressTableAnnotationComposer, $$OfflineWatchProgressTableCreateCompanionBuilder, $$OfflineWatchProgressTableUpdateCompanionBuilder, - ( - OfflineWatchProgressItem, - BaseReferences< - _$AppDatabase, - $OfflineWatchProgressTable, - OfflineWatchProgressItem - >, - ), + (OfflineWatchProgressItem, BaseReferences<_$AppDatabase, $OfflineWatchProgressTable, OfflineWatchProgressItem>), OfflineWatchProgressItem, PrefetchHooks Function() >; @@ -3626,10 +2906,8 @@ class $AppDatabaseManager { $AppDatabaseManager(this._db); $$DownloadedMediaTableTableManager get downloadedMedia => $$DownloadedMediaTableTableManager(_db, _db.downloadedMedia); - $$DownloadQueueTableTableManager get downloadQueue => - $$DownloadQueueTableTableManager(_db, _db.downloadQueue); - $$ApiCacheTableTableManager get apiCache => - $$ApiCacheTableTableManager(_db, _db.apiCache); + $$DownloadQueueTableTableManager get downloadQueue => $$DownloadQueueTableTableManager(_db, _db.downloadQueue); + $$ApiCacheTableTableManager get apiCache => $$ApiCacheTableTableManager(_db, _db.apiCache); $$OfflineWatchProgressTableTableManager get offlineWatchProgress => $$OfflineWatchProgressTableTableManager(_db, _db.offlineWatchProgress); } diff --git a/lib/database/tables.dart b/lib/database/tables.dart index 89fdc492..809c183f 100644 --- a/lib/database/tables.dart +++ b/lib/database/tables.dart @@ -25,10 +25,8 @@ class DownloadQueue extends Table { TextColumn get mediaGlobalKey => text().unique()(); IntColumn get priority => integer().withDefault(const Constant(0))(); IntColumn get addedAt => integer()(); - BoolColumn get downloadSubtitles => - boolean().withDefault(const Constant(true))(); - BoolColumn get downloadArtwork => - boolean().withDefault(const Constant(true))(); + BoolColumn get downloadSubtitles => boolean().withDefault(const Constant(true))(); + BoolColumn get downloadArtwork => boolean().withDefault(const Constant(true))(); } @DataClassName('DownloadedMediaItem') @@ -80,8 +78,7 @@ class OfflineWatchProgress extends Table { /// Whether this item should be marked as watched (for progress sync) /// Auto-set to true when viewOffset >= 90% of duration - BoolColumn get shouldMarkWatched => - boolean().withDefault(const Constant(false))(); + BoolColumn get shouldMarkWatched => boolean().withDefault(const Constant(false))(); /// Timestamp when this action was recorded (milliseconds since epoch) IntColumn get createdAt => integer()(); diff --git a/lib/focus/dpad_navigator.dart b/lib/focus/dpad_navigator.dart index 4ce70d93..c7a268ce 100644 --- a/lib/focus/dpad_navigator.dart +++ b/lib/focus/dpad_navigator.dart @@ -29,10 +29,7 @@ final _backKeys = { LogicalKeyboardKey.gameButtonB, }; -final _contextMenuKeys = { - LogicalKeyboardKey.contextMenu, - LogicalKeyboardKey.gameButtonX, -}; +final _contextMenuKeys = {LogicalKeyboardKey.contextMenu, LogicalKeyboardKey.gameButtonX}; /// Extension methods for checking D-pad related keys. extension DpadKeyExtension on LogicalKeyboardKey { diff --git a/lib/focus/focus_theme.dart b/lib/focus/focus_theme.dart index 553e0cc9..bd1e6ba6 100644 --- a/lib/focus/focus_theme.dart +++ b/lib/focus/focus_theme.dart @@ -21,8 +21,7 @@ class FocusTheme { /// Get the animation duration from MonoTokens. static Duration getAnimationDuration(BuildContext context) { - return Theme.of(context).extension()?.fast ?? - const Duration(milliseconds: 150); + return Theme.of(context).extension()?.fast ?? const Duration(milliseconds: 150); } /// Build the focus border decoration. @@ -35,24 +34,16 @@ class FocusTheme { return BoxDecoration( borderRadius: BorderRadius.circular(borderRadius), - border: Border.all( - color: isFocused ? focusColor : Colors.transparent, - width: focusBorderWidth, - ), + border: Border.all(color: isFocused ? focusColor : Colors.transparent, width: focusBorderWidth), ); } /// Build focus decoration with background color instead of border. /// Useful for video controls where it should match the native hover style. - static BoxDecoration focusBackgroundDecoration({ - required bool isFocused, - double borderRadius = defaultBorderRadius, - }) { + static BoxDecoration focusBackgroundDecoration({required bool isFocused, double borderRadius = defaultBorderRadius}) { return BoxDecoration( borderRadius: BorderRadius.circular(borderRadius), - color: isFocused - ? Colors.white.withValues(alpha: 0.2) - : Colors.transparent, + color: isFocused ? Colors.white.withValues(alpha: 0.2) : Colors.transparent, ); } } diff --git a/lib/focus/focusable_chip_mixin.dart b/lib/focus/focusable_chip_mixin.dart index 8cec98ce..7ca45f61 100644 --- a/lib/focus/focusable_chip_mixin.dart +++ b/lib/focus/focusable_chip_mixin.dart @@ -61,8 +61,7 @@ mixin FocusableChipStateMixin on State { /// The active focus node (external if provided, otherwise internal). FocusNode get focusNode { - return widgetFocusNode ?? - (_internalFocusNode ??= FocusNode(debugLabel: debugLabel)); + return widgetFocusNode ?? (_internalFocusNode ??= FocusNode(debugLabel: debugLabel)); } /// Whether this widget is currently focused. @@ -102,11 +101,7 @@ mixin FocusableChipStateMixin on State { /// /// Returns [KeyEventResult.handled] if the event was consumed, /// [KeyEventResult.ignored] otherwise. - KeyEventResult handleChipKeyEvent( - FocusNode node, - KeyEvent event, - ChipKeyCallbacks callbacks, - ) { + KeyEventResult handleChipKeyEvent(FocusNode node, KeyEvent event, ChipKeyCallbacks callbacks) { if (!event.isActionable) { return KeyEventResult.ignored; } diff --git a/lib/focus/focusable_wrapper.dart b/lib/focus/focusable_wrapper.dart index 95411443..79ff5b61 100644 --- a/lib/focus/focusable_wrapper.dart +++ b/lib/focus/focusable_wrapper.dart @@ -107,8 +107,7 @@ class FocusableWrapper extends StatefulWidget { State createState() => _FocusableWrapperState(); } -class _FocusableWrapperState extends State - with SingleTickerProviderStateMixin { +class _FocusableWrapperState extends State with SingleTickerProviderStateMixin { late FocusNode _focusNode; bool _ownsNode = false; bool _isFocused = false; @@ -141,18 +140,12 @@ class _FocusableWrapperState extends State } void _initAnimations() { - _animationController = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 150), - ); + _animationController = AnimationController(vsync: this, duration: const Duration(milliseconds: 150)); - _scaleAnimation = Tween(begin: 1.0, end: FocusTheme.focusScale) - .animate( - CurvedAnimation( - parent: _animationController, - curve: Curves.easeOutCubic, - ), - ); + _scaleAnimation = Tween( + begin: 1.0, + end: FocusTheme.focusScale, + ).animate(CurvedAnimation(parent: _animationController, curve: Curves.easeOutCubic)); } @override @@ -223,10 +216,7 @@ class _FocusableWrapperState extends State // Get item's position relative to viewport final itemBox = renderObject as RenderBox; - final itemPosition = itemBox.localToGlobal( - Offset.zero, - ancestor: viewport, - ); + final itemPosition = itemBox.localToGlobal(Offset.zero, ancestor: viewport); // Check if item is already in the comfortable zone final viewportHeight = viewport.size.height; @@ -237,8 +227,7 @@ class _FocusableWrapperState extends State final comfortZoneTop = viewportHeight * 0.2; final comfortZoneBottom = viewportHeight * 0.8; - if (itemVerticalCenter >= comfortZoneTop && - itemVerticalCenter <= comfortZoneBottom) { + if (itemVerticalCenter >= comfortZoneTop && itemVerticalCenter <= comfortZoneBottom) { // Item is in comfortable zone, no need to scroll return; } @@ -343,15 +332,8 @@ class _FocusableWrapperState extends State // Choose decoration based on useBackgroundFocus final decoration = widget.useBackgroundFocus - ? FocusTheme.focusBackgroundDecoration( - isFocused: showFocus, - borderRadius: widget.borderRadius, - ) - : FocusTheme.focusDecoration( - context, - isFocused: showFocus, - borderRadius: widget.borderRadius, - ); + ? FocusTheme.focusBackgroundDecoration(isFocused: showFocus, borderRadius: widget.borderRadius) + : FocusTheme.focusDecoration(context, isFocused: showFocus, borderRadius: widget.borderRadius); Widget result = Focus( focusNode: _focusNode, @@ -377,11 +359,7 @@ class _FocusableWrapperState extends State // Add semantics if label provided if (widget.semanticLabel != null) { - result = Semantics( - label: widget.semanticLabel, - button: widget.onSelect != null, - child: result, - ); + result = Semantics(label: widget.semanticLabel, button: widget.onSelect != null, child: result); } return result; diff --git a/lib/focus/input_mode_tracker.dart b/lib/focus/input_mode_tracker.dart index 47752804..a66d75e7 100644 --- a/lib/focus/input_mode_tracker.dart +++ b/lib/focus/input_mode_tracker.dart @@ -29,8 +29,7 @@ class InputModeTracker extends StatefulWidget { /// Get the current input mode. static InputMode of(BuildContext context) { - final provider = context - .dependOnInheritedWidgetOfExactType<_InputModeProvider>(); + final provider = context.dependOnInheritedWidgetOfExactType<_InputModeProvider>(); return provider?.mode ?? InputMode.pointer; } @@ -45,9 +44,7 @@ class InputModeTracker extends StatefulWidget { class _InputModeTrackerState extends State { // Default to keyboard mode on Android TV, pointer mode elsewhere - InputMode _mode = TvDetectionService.isTVSync() - ? InputMode.keyboard - : InputMode.pointer; + InputMode _mode = TvDetectionService.isTVSync() ? InputMode.keyboard : InputMode.pointer; @override void initState() { diff --git a/lib/focus/key_event_utils.dart b/lib/focus/key_event_utils.dart index fd5be15b..ed0bf08f 100644 --- a/lib/focus/key_event_utils.dart +++ b/lib/focus/key_event_utils.dart @@ -28,11 +28,7 @@ import 'dpad_navigator.dart'; /// child: ... /// ) /// ``` -KeyEventResult handleBackKeyNavigation( - BuildContext context, - KeyEvent event, { - T? result, -}) { +KeyEventResult handleBackKeyNavigation(BuildContext context, KeyEvent event, {T? result}) { if (event is KeyDownEvent && event.logicalKey.isBackKey) { Navigator.pop(context, result); return KeyEventResult.handled; diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 8001657e..aae488e5 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -25,22 +25,31 @@ 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 @@ -70,9 +79,10 @@ 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. @@ -81,7392 +91,12617 @@ 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 _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 _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 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 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}'; + String get youAreOffline => 'You\'re Offline'; + String get offlineFeatureUnavailable => + 'This feature requires an internet connection. Your downloads and settings are still available.'; } // Path: subtitlingStyling class _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingEn._(this._root); + _StringsSubtitlingStylingEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get stylingOptions => 'Styling Options'; - String get fontSize => 'Font Size'; - String get textColor => 'Text Color'; - String get borderSize => 'Border Size'; - String get borderColor => 'Border Color'; - String get backgroundOpacity => 'Background Opacity'; - String get backgroundColor => 'Background Color'; + // Translations + String get stylingOptions => 'Styling Options'; + String get fontSize => 'Font Size'; + String get textColor => 'Text Color'; + String get borderSize => 'Border Size'; + String get borderColor => 'Border Color'; + String get backgroundOpacity => 'Background Opacity'; + String get backgroundColor => 'Background Color'; } // Path: dialog class _StringsDialogEn { - _StringsDialogEn._(this._root); + _StringsDialogEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get confirmAction => 'Confirm Action'; - String get 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: 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); + // 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); } // 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 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 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}'; + @override + String get youAreOffline => 'Du bist offline'; + @override + String get offlineFeatureUnavailable => + 'Diese Funktion erfordert eine Internetverbindung. Deine Downloads und Einstellungen sind weiterhin verfügbar.'; } // Path: subtitlingStyling class _StringsSubtitlingStylingDe implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingDe._(this._root); + _StringsSubtitlingStylingDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get stylingOptions => 'Stiloptionen'; - @override String get fontSize => 'Schriftgröße'; - @override String get textColor => 'Textfarbe'; - @override String get borderSize => 'Rahmengröße'; - @override String get borderColor => 'Rahmenfarbe'; - @override String get backgroundOpacity => 'Hintergrunddeckkraft'; - @override String get backgroundColor => 'Hintergrundfarbe'; + // Translations + @override + String get stylingOptions => 'Stiloptionen'; + @override + String get fontSize => 'Schriftgröße'; + @override + String get textColor => 'Textfarbe'; + @override + String get borderSize => 'Rahmengröße'; + @override + String get borderColor => 'Rahmenfarbe'; + @override + String get backgroundOpacity => 'Hintergrunddeckkraft'; + @override + String get backgroundColor => 'Hintergrundfarbe'; } // Path: dialog class _StringsDialogDe implements _StringsDialogEn { - _StringsDialogDe._(this._root); + _StringsDialogDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get confirmAction => 'Aktion bestätigen'; - @override String get 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: 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); + // 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); } // 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 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 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}'; + @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.'; } // 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: 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); + // 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); } // 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 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 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}'; + @override + String get youAreOffline => 'Je bent offline'; + @override + String get offlineFeatureUnavailable => + 'Deze functie vereist een internetverbinding. Je downloads en instellingen zijn nog steeds beschikbaar.'; } // Path: subtitlingStyling class _StringsSubtitlingStylingNl implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingNl._(this._root); + _StringsSubtitlingStylingNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get stylingOptions => 'Opmaak opties'; - @override String get fontSize => 'Lettergrootte'; - @override String get textColor => 'Tekstkleur'; - @override String get borderSize => 'Rand grootte'; - @override String get borderColor => 'Randkleur'; - @override String get backgroundOpacity => 'Achtergrond transparantie'; - @override String get backgroundColor => 'Achtergrondkleur'; + // Translations + @override + String get stylingOptions => 'Opmaak opties'; + @override + String get fontSize => 'Lettergrootte'; + @override + String get textColor => 'Tekstkleur'; + @override + String get borderSize => 'Rand grootte'; + @override + String get borderColor => 'Randkleur'; + @override + String get backgroundOpacity => 'Achtergrond transparantie'; + @override + String get backgroundColor => 'Achtergrondkleur'; } // Path: dialog class _StringsDialogNl implements _StringsDialogEn { - _StringsDialogNl._(this._root); + _StringsDialogNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get confirmAction => 'Bevestig actie'; - @override String get 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: 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); + // 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); } // 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 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 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}'; + @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.'; } // 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: 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); + // 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); } // 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 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 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}'; + @override + String get youAreOffline => '您已离线'; + @override + String get offlineFeatureUnavailable => '此功能需要网络连接。您的下载内容和设置仍然可用。'; } // 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: 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.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 '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.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 '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.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}'; - 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.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}'; + 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.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}'; - 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.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}'; + 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.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}'; - 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.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}'; + 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.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}'; - 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.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}'; + 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.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}'; - 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.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}'; + default: + return null; + } + } } diff --git a/lib/main.dart b/lib/main.dart index e470210a..c2500f6a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -125,15 +125,9 @@ class _MainAppState extends State with WidgetsBindingObserver { // Initialize API cache with database PlexApiCache.initialize(_appDatabase); - _downloadManager = DownloadManagerService( - database: _appDatabase, - storageService: DownloadStorageService.instance, - ); + _downloadManager = DownloadManagerService(database: _appDatabase, storageService: DownloadStorageService.instance); - _offlineWatchSyncService = OfflineWatchSyncService( - database: _appDatabase, - serverManager: _serverManager, - ); + _offlineWatchSyncService = OfflineWatchSyncService(database: _appDatabase, serverManager: _serverManager); } @override @@ -157,10 +151,7 @@ class _MainAppState extends State with WidgetsBindingObserver { // Legacy provider for backward compatibility ChangeNotifierProvider(create: (context) => PlexClientProvider()), // New multi-server providers - ChangeNotifierProvider( - create: (context) => - MultiServerProvider(_serverManager, _aggregationService), - ), + ChangeNotifierProvider(create: (context) => MultiServerProvider(_serverManager, _aggregationService)), ChangeNotifierProvider(create: (context) => ServerStateProvider()), // Offline mode provider - depends on MultiServerProvider ChangeNotifierProxyProvider( @@ -176,10 +167,7 @@ class _MainAppState extends State with WidgetsBindingObserver { }, ), // Download provider - ChangeNotifierProvider( - create: (context) => - DownloadProvider(downloadManager: _downloadManager), - ), + ChangeNotifierProvider(create: (context) => DownloadProvider(downloadManager: _downloadManager)), // Offline watch sync service ChangeNotifierProvider( create: (context) { @@ -191,18 +179,12 @@ class _MainAppState extends State with WidgetsBindingObserver { downloadProvider.refreshMetadataFromCache(); }; - _offlineWatchSyncService.startConnectivityMonitoring( - offlineModeProvider, - ); + _offlineWatchSyncService.startConnectivityMonitoring(offlineModeProvider); return _offlineWatchSyncService; }, ), // Offline watch provider - depends on sync service and download provider - ChangeNotifierProxyProvider2< - OfflineWatchSyncService, - DownloadProvider, - OfflineWatchProvider - >( + ChangeNotifierProxyProvider2( create: (context) => OfflineWatchProvider( syncService: _offlineWatchSyncService, downloadProvider: context.read(), @@ -220,14 +202,8 @@ class _MainAppState extends State with WidgetsBindingObserver { // Existing providers ChangeNotifierProvider(create: (context) => UserProfileProvider()), ChangeNotifierProvider(create: (context) => ThemeProvider()), - ChangeNotifierProvider( - create: (context) => SettingsProvider(), - lazy: true, - ), - ChangeNotifierProvider( - create: (context) => HiddenLibrariesProvider(), - lazy: true, - ), + ChangeNotifierProvider(create: (context) => SettingsProvider(), lazy: true), + ChangeNotifierProvider(create: (context) => HiddenLibrariesProvider(), lazy: true), ChangeNotifierProvider(create: (context) => PlaybackStateProvider()), ], child: Consumer( @@ -374,20 +350,14 @@ class _SetupScreenState extends State { if (servers.isEmpty) { // No servers configured - show auth screen if (mounted) { - Navigator.pushReplacement( - context, - MaterialPageRoute(builder: (context) => const AuthScreen()), - ); + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => const AuthScreen())); } return; } // Get multi-server provider if (!mounted) return; - final multiServerProvider = Provider.of( - context, - listen: false, - ); + final multiServerProvider = Provider.of(context, listen: false); try { appLogger.i('Connecting to ${servers.length} enabled servers...'); @@ -396,22 +366,18 @@ class _SetupScreenState extends State { final clientId = storage.getClientIdentifier(); // Connect to all servers in parallel - final connectedCount = await multiServerProvider.serverManager - .connectToAllServers( - servers, - clientIdentifier: clientId, - timeout: const Duration(seconds: 10), - onServerConnected: (serverId, client) { - // Set first connected client in legacy provider for backward compatibility - final legacyProvider = Provider.of( - context, - listen: false, - ); - if (legacyProvider.client == null) { - legacyProvider.setClient(client); - } - }, - ); + final connectedCount = await multiServerProvider.serverManager.connectToAllServers( + servers, + clientIdentifier: clientId, + timeout: const Duration(seconds: 10), + onServerConnected: (serverId, client) { + // Set first connected client in legacy provider for backward compatibility + final legacyProvider = Provider.of(context, listen: false); + if (legacyProvider.client == null) { + legacyProvider.setClient(client); + } + }, + ); if (connectedCount > 0) { // At least one server connected successfully @@ -423,15 +389,9 @@ class _SetupScreenState extends State { // Navigate to main screen immediately // Get first connected client for backward compatibility - final firstClient = - multiServerProvider.serverManager.onlineClients.values.first; + final firstClient = multiServerProvider.serverManager.onlineClients.values.first; - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (context) => MainScreen(client: firstClient), - ), - ); + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => MainScreen(client: firstClient))); // Check for updates in background after navigation _checkForUpdatesOnStartup(); @@ -445,26 +405,18 @@ class _SetupScreenState extends State { // User can still access Downloads and Settings Navigator.pushReplacement( context, - MaterialPageRoute( - builder: (context) => const MainScreen(isOfflineMode: true), - ), + MaterialPageRoute(builder: (context) => const MainScreen(isOfflineMode: true)), ); } } } catch (e, stackTrace) { - appLogger.e( - 'Error during multi-server connection', - error: e, - stackTrace: stackTrace, - ); + appLogger.e('Error during multi-server connection', error: e, stackTrace: stackTrace); if (mounted) { // Navigate to MainScreen in offline mode Navigator.pushReplacement( context, - MaterialPageRoute( - builder: (context) => const MainScreen(isOfflineMode: true), - ), + MaterialPageRoute(builder: (context) => const MainScreen(isOfflineMode: true)), ); } } @@ -476,11 +428,7 @@ class _SetupScreenState extends State { body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, - children: [ - const CircularProgressIndicator(), - const SizedBox(height: 16), - Text(t.app.loading), - ], + children: [const CircularProgressIndicator(), const SizedBox(height: 16), Text(t.app.loading)], ), ), ); diff --git a/lib/models/download_models.dart b/lib/models/download_models.dart index a487c20e..008d6324 100644 --- a/lib/models/download_models.dart +++ b/lib/models/download_models.dart @@ -18,8 +18,7 @@ class DownloadProgress { final int totalBytes; final double speed; // bytes per second final String? errorMessage; - final String? - currentFile; // What's being downloaded (video, subtitles, artwork) + final String? currentFile; // What's being downloaded (video, subtitles, artwork) // Thumbnail path (populated after artwork download completes) final String? thumbPath; @@ -92,8 +91,7 @@ class DeletionProgress { this.currentOperation, }); - double get progressPercent => - totalItems > 0 ? (currentItem / totalItems) : 0.0; + double get progressPercent => totalItems > 0 ? (currentItem / totalItems) : 0.0; int get progressPercentInt => (progressPercent * 100).round(); diff --git a/lib/models/play_queue_response.dart b/lib/models/play_queue_response.dart index 511989b1..dee2ca8f 100644 --- a/lib/models/play_queue_response.dart +++ b/lib/models/play_queue_response.dart @@ -49,11 +49,7 @@ class PlayQueueResponse { this.items, }); - factory PlayQueueResponse.fromJson( - Map json, { - String? serverId, - String? serverName, - }) { + factory PlayQueueResponse.fromJson(Map json, {String? serverId, String? serverName}) { // The API returns data wrapped in MediaContainer final container = json['MediaContainer'] as Map? ?? json; final response = _$PlayQueueResponseFromJson(container); @@ -61,16 +57,13 @@ class PlayQueueResponse { // Tag all items with server info if (response.items != null && (serverId != null || serverName != null)) { final taggedItems = response.items! - .map( - (item) => item.copyWith(serverId: serverId, serverName: serverName), - ) + .map((item) => item.copyWith(serverId: serverId, serverName: serverName)) .toList(); return PlayQueueResponse( playQueueID: response.playQueueID, playQueueSelectedItemID: response.playQueueSelectedItemID, playQueueSelectedItemOffset: response.playQueueSelectedItemOffset, - playQueueSelectedMetadataItemID: - response.playQueueSelectedMetadataItemID, + playQueueSelectedMetadataItemID: response.playQueueSelectedMetadataItemID, playQueueShuffled: response.playQueueShuffled, playQueueSourceURI: response.playQueueSourceURI, playQueueTotalCount: response.playQueueTotalCount, @@ -87,9 +80,7 @@ class PlayQueueResponse { PlexMetadata? get selectedItem { if (items == null || playQueueSelectedItemID == null) return null; try { - return items!.firstWhere( - (item) => item.playQueueItemID == playQueueSelectedItemID, - ); + return items!.firstWhere((item) => item.playQueueItemID == playQueueSelectedItemID); } catch (e) { return null; } @@ -98,8 +89,6 @@ class PlayQueueResponse { /// Get the index of the selected item in the current window int? get selectedItemIndex { if (items == null || playQueueSelectedItemID == null) return null; - return items!.indexWhere( - (item) => item.playQueueItemID == playQueueSelectedItemID, - ); + return items!.indexWhere((item) => item.playQueueItemID == playQueueSelectedItemID); } } diff --git a/lib/models/play_queue_response.g.dart b/lib/models/play_queue_response.g.dart index 8f8e3aa9..7a197697 100644 --- a/lib/models/play_queue_response.g.dart +++ b/lib/models/play_queue_response.g.dart @@ -6,23 +6,15 @@ part of 'play_queue_response.dart'; // JsonSerializableGenerator // ************************************************************************** -PlayQueueResponse _$PlayQueueResponseFromJson(Map json) => - PlayQueueResponse( - playQueueID: (json['playQueueID'] as num).toInt(), - playQueueSelectedItemID: (json['playQueueSelectedItemID'] as num?) - ?.toInt(), - playQueueSelectedItemOffset: (json['playQueueSelectedItemOffset'] as num?) - ?.toInt(), - playQueueSelectedMetadataItemID: - json['playQueueSelectedMetadataItemID'] as String?, - playQueueShuffled: const BoolOrIntConverter().fromJson( - json['playQueueShuffled'] as Object, - ), - playQueueSourceURI: json['playQueueSourceURI'] as String?, - playQueueTotalCount: (json['playQueueTotalCount'] as num?)?.toInt(), - playQueueVersion: (json['playQueueVersion'] as num).toInt(), - size: (json['size'] as num?)?.toInt(), - items: (json['Metadata'] as List?) - ?.map((e) => PlexMetadata.fromJson(e as Map)) - .toList(), - ); +PlayQueueResponse _$PlayQueueResponseFromJson(Map json) => PlayQueueResponse( + playQueueID: (json['playQueueID'] as num).toInt(), + playQueueSelectedItemID: (json['playQueueSelectedItemID'] as num?)?.toInt(), + playQueueSelectedItemOffset: (json['playQueueSelectedItemOffset'] as num?)?.toInt(), + playQueueSelectedMetadataItemID: json['playQueueSelectedMetadataItemID'] as String?, + playQueueShuffled: const BoolOrIntConverter().fromJson(json['playQueueShuffled'] as Object), + playQueueSourceURI: json['playQueueSourceURI'] as String?, + playQueueTotalCount: (json['playQueueTotalCount'] as num?)?.toInt(), + playQueueVersion: (json['playQueueVersion'] as num).toInt(), + size: (json['size'] as num?)?.toInt(), + items: (json['Metadata'] as List?)?.map((e) => PlexMetadata.fromJson(e as Map)).toList(), +); diff --git a/lib/models/plex_file_info.dart b/lib/models/plex_file_info.dart index ae94c400..567206c3 100644 --- a/lib/models/plex_file_info.dart +++ b/lib/models/plex_file_info.dart @@ -119,8 +119,7 @@ class PlexFileInfo { /// Format audio channels (e.g., "2 channels (stereo)") String get audioChannelsFormatted { if (audioChannels != null) { - String channelText = - '$audioChannels channel${audioChannels! > 1 ? 's' : ''}'; + String channelText = '$audioChannels channel${audioChannels! > 1 ? 's' : ''}'; if (audioChannelLayout != null) { channelText += ' ($audioChannelLayout)'; } diff --git a/lib/models/plex_filter.dart b/lib/models/plex_filter.dart index 6f76a14a..1d697637 100644 --- a/lib/models/plex_filter.dart +++ b/lib/models/plex_filter.dart @@ -24,13 +24,7 @@ class PlexFilter { } Map toJson() { - return { - 'filter': filter, - 'filterType': filterType, - 'key': key, - 'title': title, - 'type': type, - }; + return {'filter': filter, 'filterType': filterType, 'key': key, 'title': title, 'type': type}; } } @@ -42,11 +36,7 @@ class PlexFilterValue { PlexFilterValue({required this.key, required this.title, this.type}); factory PlexFilterValue.fromJson(Map json) { - return PlexFilterValue( - key: json['key'] ?? '', - title: json['title'] ?? '', - type: json['type'], - ); + return PlexFilterValue(key: json['key'] ?? '', title: json['title'] ?? '', type: json['type']); } Map toJson() { diff --git a/lib/models/plex_home.dart b/lib/models/plex_home.dart index 0554ff16..eadf3a89 100644 --- a/lib/models/plex_home.dart +++ b/lib/models/plex_home.dart @@ -21,11 +21,7 @@ class PlexHome { factory PlexHome.fromJson(Map json) { final List usersJson = json['users'] as List; - final users = usersJson - .map( - (userJson) => PlexHomeUser.fromJson(userJson as Map), - ) - .toList(); + final users = usersJson.map((userJson) => PlexHomeUser.fromJson(userJson as Map)).toList(); return PlexHome( id: (json['id'] as num?)?.toInt() ?? 0, @@ -52,11 +48,9 @@ class PlexHome { PlexHomeUser? get adminUser => users.where((user) => user.admin).firstOrNull; - List get managedUsers => - users.where((user) => !user.admin).toList(); + List get managedUsers => users.where((user) => !user.admin).toList(); - List get restrictedUsers => - users.where((user) => user.restricted).toList(); + List get restrictedUsers => users.where((user) => user.restricted).toList(); PlexHomeUser? getUserByUUID(String uuid) { try { diff --git a/lib/models/plex_library.dart b/lib/models/plex_library.dart index d5c5d088..1b84f868 100644 --- a/lib/models/plex_library.dart +++ b/lib/models/plex_library.dart @@ -43,8 +43,7 @@ class PlexLibrary with MultiServerFields { this.serverName, }); - factory PlexLibrary.fromJson(Map json) => - _$PlexLibraryFromJson(json); + factory PlexLibrary.fromJson(Map json) => _$PlexLibraryFromJson(json); Map toJson() => _$PlexLibraryToJson(this); diff --git a/lib/models/plex_library.g.dart b/lib/models/plex_library.g.dart index 78565719..cbca367d 100644 --- a/lib/models/plex_library.g.dart +++ b/lib/models/plex_library.g.dart @@ -19,16 +19,15 @@ PlexLibrary _$PlexLibraryFromJson(Map json) => PlexLibrary( hidden: (json['hidden'] as num?)?.toInt(), ); -Map _$PlexLibraryToJson(PlexLibrary instance) => - { - 'key': instance.key, - 'title': instance.title, - 'type': instance.type, - 'agent': instance.agent, - 'scanner': instance.scanner, - 'language': instance.language, - 'uuid': instance.uuid, - 'updatedAt': instance.updatedAt, - 'createdAt': instance.createdAt, - 'hidden': instance.hidden, - }; +Map _$PlexLibraryToJson(PlexLibrary instance) => { + 'key': instance.key, + 'title': instance.title, + 'type': instance.type, + 'agent': instance.agent, + 'scanner': instance.scanner, + 'language': instance.language, + 'uuid': instance.uuid, + 'updatedAt': instance.updatedAt, + 'createdAt': instance.createdAt, + 'hidden': instance.hidden, +}; diff --git a/lib/models/plex_media_info.dart b/lib/models/plex_media_info.dart index 70fb70ba..01440817 100644 --- a/lib/models/plex_media_info.dart +++ b/lib/models/plex_media_info.dart @@ -135,20 +135,12 @@ class PlexChapter { final String? title; final String? thumb; - PlexChapter({ - required this.id, - this.index, - this.startTimeOffset, - this.endTimeOffset, - this.title, - this.thumb, - }); + PlexChapter({required this.id, this.index, this.startTimeOffset, this.endTimeOffset, this.title, this.thumb}); String get label => title ?? 'Chapter ${(index ?? 0) + 1}'; Duration get startTime => Duration(milliseconds: startTimeOffset ?? 0); - Duration? get endTime => - endTimeOffset != null ? Duration(milliseconds: endTimeOffset!) : null; + Duration? get endTime => endTimeOffset != null ? Duration(milliseconds: endTimeOffset!) : null; } class PlexMarker { @@ -157,12 +149,7 @@ class PlexMarker { final int startTimeOffset; final int endTimeOffset; - PlexMarker({ - required this.id, - required this.type, - required this.startTimeOffset, - required this.endTimeOffset, - }); + PlexMarker({required this.id, required this.type, required this.startTimeOffset, required this.endTimeOffset}); Duration get startTime => Duration(milliseconds: startTimeOffset); Duration get endTime => Duration(milliseconds: endTimeOffset); diff --git a/lib/models/plex_media_version.dart b/lib/models/plex_media_version.dart index 08c159da..85676b05 100644 --- a/lib/models/plex_media_version.dart +++ b/lib/models/plex_media_version.dart @@ -26,9 +26,7 @@ class PlexMediaVersion { factory PlexMediaVersion.fromJson(Map json) { // Get the first Part key for playback final parts = json['Part'] as List?; - final partKey = parts != null && parts.isNotEmpty - ? parts[0]['key'] as String? ?? '' - : ''; + final partKey = parts != null && parts.isNotEmpty ? parts[0]['key'] as String? ?? '' : ''; return PlexMediaVersion( id: json['id'] as int? ?? 0, diff --git a/lib/models/plex_metadata.dart b/lib/models/plex_metadata.dart index 928b255c..616a5697 100644 --- a/lib/models/plex_metadata.dart +++ b/lib/models/plex_metadata.dart @@ -271,8 +271,7 @@ class PlexMetadata with MultiServerFields { final itemType = type.toLowerCase(); // For episodes and seasons, prefer grandparent title (show name) - if ((itemType == 'episode' || itemType == 'season') && - grandparentTitle != null) { + if ((itemType == 'episode' || itemType == 'season') && grandparentTitle != null) { return grandparentTitle!; } // For seasons without grandparent, check if this IS the show (parentTitle might have show name) @@ -288,8 +287,7 @@ class PlexMetadata with MultiServerFields { if (itemType == 'episode' || itemType == 'season') { // If we showed grandparent/parent as title, show this item's title as subtitle - if (grandparentTitle != null || - (itemType == 'season' && parentTitle != null)) { + if (grandparentTitle != null || (itemType == 'season' && parentTitle != null)) { return title; } } @@ -328,8 +326,7 @@ class PlexMetadata with MultiServerFields { return viewCount != null && viewCount! > 0; } - factory PlexMetadata.fromJson(Map json) => - _$PlexMetadataFromJson(json); + factory PlexMetadata.fromJson(Map json) => _$PlexMetadataFromJson(json); Map toJson() => _$PlexMetadataToJson(this); } diff --git a/lib/models/plex_metadata.g.dart b/lib/models/plex_metadata.g.dart index a4dbc4d8..7485e05c 100644 --- a/lib/models/plex_metadata.g.dart +++ b/lib/models/plex_metadata.g.dart @@ -39,9 +39,7 @@ PlexMetadata _$PlexMetadataFromJson(Map json) => PlexMetadata( leafCount: (json['leafCount'] as num?)?.toInt(), viewedLeafCount: (json['viewedLeafCount'] as num?)?.toInt(), childCount: (json['childCount'] as num?)?.toInt(), - role: (json['Role'] as List?) - ?.map((e) => PlexRole.fromJson(e as Map)) - .toList(), + role: (json['Role'] as List?)?.map((e) => PlexRole.fromJson(e as Map)).toList(), audioLanguage: json['audioLanguage'] as String?, subtitleLanguage: json['subtitleLanguage'] as String?, playlistItemID: (json['playlistItemID'] as num?)?.toInt(), @@ -50,45 +48,44 @@ PlexMetadata _$PlexMetadataFromJson(Map json) => PlexMetadata( clearLogo: json['clearLogo'] as String?, ); -Map _$PlexMetadataToJson(PlexMetadata instance) => - { - 'ratingKey': instance.ratingKey, - 'key': instance.key, - 'guid': instance.guid, - 'studio': instance.studio, - 'type': instance.type, - 'title': instance.title, - 'contentRating': instance.contentRating, - 'summary': instance.summary, - 'rating': instance.rating, - 'audienceRating': instance.audienceRating, - 'year': instance.year, - 'thumb': instance.thumb, - 'art': instance.art, - 'duration': instance.duration, - 'addedAt': instance.addedAt, - 'updatedAt': instance.updatedAt, - 'lastViewedAt': instance.lastViewedAt, - 'grandparentTitle': instance.grandparentTitle, - 'grandparentThumb': instance.grandparentThumb, - 'grandparentArt': instance.grandparentArt, - 'grandparentRatingKey': instance.grandparentRatingKey, - 'parentTitle': instance.parentTitle, - 'parentThumb': instance.parentThumb, - 'parentRatingKey': instance.parentRatingKey, - 'parentIndex': instance.parentIndex, - 'index': instance.index, - 'grandparentTheme': instance.grandparentTheme, - 'viewOffset': instance.viewOffset, - 'viewCount': instance.viewCount, - 'leafCount': instance.leafCount, - 'viewedLeafCount': instance.viewedLeafCount, - 'childCount': instance.childCount, - 'Role': instance.role, - 'audioLanguage': instance.audioLanguage, - 'subtitleLanguage': instance.subtitleLanguage, - 'playlistItemID': instance.playlistItemID, - 'playQueueItemID': instance.playQueueItemID, - 'librarySectionID': instance.librarySectionID, - 'clearLogo': instance.clearLogo, - }; +Map _$PlexMetadataToJson(PlexMetadata instance) => { + 'ratingKey': instance.ratingKey, + 'key': instance.key, + 'guid': instance.guid, + 'studio': instance.studio, + 'type': instance.type, + 'title': instance.title, + 'contentRating': instance.contentRating, + 'summary': instance.summary, + 'rating': instance.rating, + 'audienceRating': instance.audienceRating, + 'year': instance.year, + 'thumb': instance.thumb, + 'art': instance.art, + 'duration': instance.duration, + 'addedAt': instance.addedAt, + 'updatedAt': instance.updatedAt, + 'lastViewedAt': instance.lastViewedAt, + 'grandparentTitle': instance.grandparentTitle, + 'grandparentThumb': instance.grandparentThumb, + 'grandparentArt': instance.grandparentArt, + 'grandparentRatingKey': instance.grandparentRatingKey, + 'parentTitle': instance.parentTitle, + 'parentThumb': instance.parentThumb, + 'parentRatingKey': instance.parentRatingKey, + 'parentIndex': instance.parentIndex, + 'index': instance.index, + 'grandparentTheme': instance.grandparentTheme, + 'viewOffset': instance.viewOffset, + 'viewCount': instance.viewCount, + 'leafCount': instance.leafCount, + 'viewedLeafCount': instance.viewedLeafCount, + 'childCount': instance.childCount, + 'Role': instance.role, + 'audioLanguage': instance.audioLanguage, + 'subtitleLanguage': instance.subtitleLanguage, + 'playlistItemID': instance.playlistItemID, + 'playQueueItemID': instance.playQueueItemID, + 'librarySectionID': instance.librarySectionID, + 'clearLogo': instance.clearLogo, +}; diff --git a/lib/models/plex_playlist.dart b/lib/models/plex_playlist.dart index e1aaaa18..81154f6a 100644 --- a/lib/models/plex_playlist.dart +++ b/lib/models/plex_playlist.dart @@ -94,8 +94,7 @@ class PlexPlaylist with MultiServerFields { /// Playlists don't track viewed leaf count int? get viewedLeafCount => null; - factory PlexPlaylist.fromJson(Map json) => - _$PlexPlaylistFromJson(json); + factory PlexPlaylist.fromJson(Map json) => _$PlexPlaylistFromJson(json); Map toJson() => _$PlexPlaylistToJson(this); diff --git a/lib/models/plex_playlist.g.dart b/lib/models/plex_playlist.g.dart index 96647865..a21f8f84 100644 --- a/lib/models/plex_playlist.g.dart +++ b/lib/models/plex_playlist.g.dart @@ -26,23 +26,22 @@ PlexPlaylist _$PlexPlaylistFromJson(Map json) => PlexPlaylist( thumb: json['thumb'] as String?, ); -Map _$PlexPlaylistToJson(PlexPlaylist instance) => - { - 'ratingKey': instance.ratingKey, - 'key': instance.key, - 'type': instance.type, - 'title': instance.title, - 'summary': instance.summary, - 'smart': instance.smart, - 'playlistType': instance.playlistType, - 'duration': instance.duration, - 'leafCount': instance.leafCount, - 'composite': instance.composite, - 'addedAt': instance.addedAt, - 'updatedAt': instance.updatedAt, - 'lastViewedAt': instance.lastViewedAt, - 'viewCount': instance.viewCount, - 'content': instance.content, - 'guid': instance.guid, - 'thumb': instance.thumb, - }; +Map _$PlexPlaylistToJson(PlexPlaylist instance) => { + 'ratingKey': instance.ratingKey, + 'key': instance.key, + 'type': instance.type, + 'title': instance.title, + 'summary': instance.summary, + 'smart': instance.smart, + 'playlistType': instance.playlistType, + 'duration': instance.duration, + 'leafCount': instance.leafCount, + 'composite': instance.composite, + 'addedAt': instance.addedAt, + 'updatedAt': instance.updatedAt, + 'lastViewedAt': instance.lastViewedAt, + 'viewCount': instance.viewCount, + 'content': instance.content, + 'guid': instance.guid, + 'thumb': instance.thumb, +}; diff --git a/lib/models/plex_role.dart b/lib/models/plex_role.dart index afc5f04d..daae1daf 100644 --- a/lib/models/plex_role.dart +++ b/lib/models/plex_role.dart @@ -12,18 +12,9 @@ class PlexRole { final String? thumb; final int? count; - PlexRole({ - this.id, - this.filter, - required this.tag, - this.tagKey, - this.role, - this.thumb, - this.count, - }); + PlexRole({this.id, this.filter, required this.tag, this.tagKey, this.role, this.thumb, this.count}); - factory PlexRole.fromJson(Map json) => - _$PlexRoleFromJson(json); + factory PlexRole.fromJson(Map json) => _$PlexRoleFromJson(json); Map toJson() => _$PlexRoleToJson(this); } diff --git a/lib/models/plex_sort.dart b/lib/models/plex_sort.dart index 8b5317b0..b34169e0 100644 --- a/lib/models/plex_sort.dart +++ b/lib/models/plex_sort.dart @@ -4,12 +4,7 @@ class PlexSort { final String title; final String? defaultDirection; - PlexSort({ - required this.key, - this.descKey, - required this.title, - this.defaultDirection, - }); + PlexSort({required this.key, this.descKey, required this.title, this.defaultDirection}); factory PlexSort.fromJson(Map json) { return PlexSort( diff --git a/lib/models/plex_user_profile.dart b/lib/models/plex_user_profile.dart index 5c0e0424..38fed487 100644 --- a/lib/models/plex_user_profile.dart +++ b/lib/models/plex_user_profile.dart @@ -34,8 +34,7 @@ class PlexUserProfile { return PlexUserProfile( autoSelectAudio: profile['autoSelectAudio'] as bool? ?? true, - defaultAudioAccessibility: - profile['defaultAudioAccessibility'] as int? ?? 0, + defaultAudioAccessibility: profile['defaultAudioAccessibility'] as int? ?? 0, defaultAudioLanguage: profile['defaultAudioLanguage'] as String?, defaultAudioLanguages: profile['defaultAudioLanguages'] != null ? List.from(profile['defaultAudioLanguages'] as List) @@ -45,8 +44,7 @@ class PlexUserProfile { ? List.from(profile['defaultSubtitleLanguages'] as List) : null, autoSelectSubtitle: profile['autoSelectSubtitle'] as int? ?? 0, - defaultSubtitleAccessibility: - profile['defaultSubtitleAccessibility'] as int? ?? 0, + defaultSubtitleAccessibility: profile['defaultSubtitleAccessibility'] as int? ?? 0, defaultSubtitleForced: profile['defaultSubtitleForced'] as int? ?? 1, watchedIndicator: profile['watchedIndicator'] as int? ?? 1, mediaReviewsVisibility: profile['mediaReviewsVisibility'] as int? ?? 0, diff --git a/lib/models/plex_video_playback_data.dart b/lib/models/plex_video_playback_data.dart index 8f5cd912..c462f69d 100644 --- a/lib/models/plex_video_playback_data.dart +++ b/lib/models/plex_video_playback_data.dart @@ -13,11 +13,7 @@ class PlexVideoPlaybackData { /// Available media versions/qualities for this content final List availableVersions; - PlexVideoPlaybackData({ - required this.videoUrl, - required this.mediaInfo, - required this.availableVersions, - }); + PlexVideoPlaybackData({required this.videoUrl, required this.mediaInfo, required this.availableVersions}); /// Returns true if this playback data has a valid video URL bool get hasValidVideoUrl => videoUrl != null && videoUrl!.isNotEmpty; diff --git a/lib/mpv/android_font_loader.dart b/lib/mpv/android_font_loader.dart index 632eacdb..1c84210c 100644 --- a/lib/mpv/android_font_loader.dart +++ b/lib/mpv/android_font_loader.dart @@ -25,9 +25,7 @@ class AndroidFontLoader { await fontDir.create(recursive: true); } - final fontFile = File( - path.join(fontDir.path, 'go-noto-current-regular.ttf'), - ); + final fontFile = File(path.join(fontDir.path, 'go-noto-current-regular.ttf')); // Load font from assets and write to cache if it doesn't exist if (!await fontFile.exists()) { diff --git a/lib/mpv/models.dart b/lib/mpv/models.dart index 93212cd4..a4fa8cd4 100644 --- a/lib/mpv/models.dart +++ b/lib/mpv/models.dart @@ -87,8 +87,7 @@ class AudioTrack { @override bool operator ==(Object other) => - identical(this, other) || - other is AudioTrack && runtimeType == other.runtimeType && id == other.id; + identical(this, other) || other is AudioTrack && runtimeType == other.runtimeType && id == other.id; @override int get hashCode => id.hashCode; @@ -133,13 +132,7 @@ class SubtitleTrack { /// Create a subtitle track from an external URI. factory SubtitleTrack.uri(String uri, {String? title, String? language}) { - return SubtitleTrack( - id: 'external:$uri', - title: title, - language: language, - isExternal: true, - uri: uri, - ); + return SubtitleTrack(id: 'external:$uri', title: title, language: language, isExternal: true, uri: uri); } /// Auto-select track. @@ -161,10 +154,7 @@ class SubtitleTrack { @override bool operator ==(Object other) => - identical(this, other) || - other is SubtitleTrack && - runtimeType == other.runtimeType && - id == other.id; + identical(this, other) || other is SubtitleTrack && runtimeType == other.runtimeType && id == other.id; @override int get hashCode => id.hashCode; @@ -182,15 +172,11 @@ class Tracks { /// Creates a copy with the given fields replaced. Tracks copyWith({List? audio, List? subtitle}) { - return Tracks( - audio: audio ?? this.audio, - subtitle: subtitle ?? this.subtitle, - ); + return Tracks(audio: audio ?? this.audio, subtitle: subtitle ?? this.subtitle); } @override - String toString() => - 'Tracks(audio: ${audio.length}, subtitle: ${subtitle.length})'; + String toString() => 'Tracks(audio: ${audio.length}, subtitle: ${subtitle.length})'; } /// Represents the currently selected tracks. @@ -205,10 +191,7 @@ class TrackSelection { /// Creates a copy with the given fields replaced. TrackSelection copyWith({AudioTrack? audio, SubtitleTrack? subtitle}) { - return TrackSelection( - audio: audio ?? this.audio, - subtitle: subtitle ?? this.subtitle, - ); + return TrackSelection(audio: audio ?? this.audio, subtitle: subtitle ?? this.subtitle); } @override @@ -233,10 +216,7 @@ class AudioDevice { @override bool operator ==(Object other) => - identical(this, other) || - other is AudioDevice && - runtimeType == other.runtimeType && - name == other.name; + identical(this, other) || other is AudioDevice && runtimeType == other.runtimeType && name == other.name; @override int get hashCode => name.hashCode; @@ -253,11 +233,7 @@ class PlayerLog { /// The log message text. final String text; - const PlayerLog({ - required this.level, - required this.prefix, - required this.text, - }); + const PlayerLog({required this.level, required this.prefix, required this.text}); @override String toString() => '[$prefix] ${level.name}: $text'; @@ -282,10 +258,7 @@ class Media { @override bool operator ==(Object other) => identical(this, other) || - other is Media && - runtimeType == other.runtimeType && - uri == other.uri && - start == other.start; + other is Media && runtimeType == other.runtimeType && uri == other.uri && start == other.start; @override int get hashCode => uri.hashCode ^ start.hashCode; diff --git a/lib/mpv/player/platform/player_linux.dart b/lib/mpv/player/platform/player_linux.dart index a75e23c6..285d9a3f 100644 --- a/lib/mpv/player/platform/player_linux.dart +++ b/lib/mpv/player/platform/player_linux.dart @@ -22,8 +22,6 @@ class PlayerLinux extends PlayerNative { /// limitation. @override Future setControlsVisible(bool visible) async { - await _methodChannel.invokeMethod('setControlsVisible', { - 'visible': visible, - }); + await _methodChannel.invokeMethod('setControlsVisible', {'visible': visible}); } } diff --git a/lib/mpv/player/player.dart b/lib/mpv/player/player.dart index ec940c94..d22a5f12 100644 --- a/lib/mpv/player/player.dart +++ b/lib/mpv/player/player.dart @@ -90,12 +90,7 @@ abstract class Player { /// [title] - Optional display title. /// [language] - Optional language code. /// [select] - Whether to select this track immediately. - Future addSubtitleTrack({ - required String uri, - String? title, - String? language, - bool select = false, - }); + Future addSubtitleTrack({required String uri, String? title, String? language, bool select = false}); // ============================================ // Volume and Rate diff --git a/lib/mpv/player/player_native.dart b/lib/mpv/player/player_native.dart index 09d1594f..e9c8ef8b 100644 --- a/lib/mpv/player/player_native.dart +++ b/lib/mpv/player/player_native.dart @@ -43,8 +43,7 @@ class PlayerNative implements Player { final _logController = StreamController.broadcast(); final _errorController = StreamController.broadcast(); final _audioDeviceController = StreamController.broadcast(); - final _audioDevicesController = - StreamController>.broadcast(); + final _audioDevicesController = StreamController>.broadcast(); StreamSubscription? _eventSubscription; bool _disposed = false; @@ -271,15 +270,10 @@ class PlayerNative implements Player { T? selectedTrack; if (id != null && id != 'no') { - selectedTrack = tracks.firstWhere( - (track) => _getTrackId(track) == id, - orElse: () => null, - ); + selectedTrack = tracks.firstWhere((track) => _getTrackId(track) == id, orElse: () => null); } - _state = _state.copyWith( - track: selectionSetter(_state.track, selectedTrack), - ); + _state = _state.copyWith(track: selectionSetter(_state.track, selectedTrack)); _trackController.add(_state.track); } @@ -308,10 +302,7 @@ class PlayerNative implements Player { await _observeProperty('duration', 'double'); await _observeProperty('pause', 'flag'); await _observeProperty('paused-for-cache', 'flag'); - await _observeProperty( - 'track-list', - (Platform.isAndroid || Platform.isWindows) ? 'string' : 'node', - ); + await _observeProperty('track-list', (Platform.isAndroid || Platform.isWindows) ? 'string' : 'node'); await _observeProperty('eof-reached', 'flag'); await _observeProperty('volume', 'double'); await _observeProperty('aid', 'string'); @@ -323,10 +314,7 @@ class PlayerNative implements Player { } Future _observeProperty(String name, String format) async { - await _methodChannel.invokeMethod('observeProperty', { - 'name': name, - 'format': format, - }); + await _methodChannel.invokeMethod('observeProperty', {'name': name, 'format': format}); } /// Configures subtitle fonts for Android libass support. @@ -411,11 +399,7 @@ class PlayerNative implements Player { @override Future seek(Duration position) async { _checkDisposed(); - await command([ - 'seek', - (position.inMilliseconds / 1000.0).toString(), - 'absolute', - ]); + await command(['seek', (position.inMilliseconds / 1000.0).toString(), 'absolute']); } // ============================================ @@ -435,12 +419,7 @@ class PlayerNative implements Player { } @override - Future addSubtitleTrack({ - required String uri, - String? title, - String? language, - bool select = false, - }) async { + Future addSubtitleTrack({required String uri, String? title, String? language, bool select = false}) async { _checkDisposed(); final args = ['sub-add', uri, select ? 'select' : 'auto']; if (title != null) args.add('title=$title'); @@ -478,19 +457,14 @@ class PlayerNative implements Player { Future setProperty(String name, String value) async { _checkDisposed(); await _ensureInitialized(); - await _methodChannel.invokeMethod('setProperty', { - 'name': name, - 'value': value, - }); + await _methodChannel.invokeMethod('setProperty', {'name': name, 'value': value}); } @override Future getProperty(String name) async { _checkDisposed(); await _ensureInitialized(); - return await _methodChannel.invokeMethod('getProperty', { - 'name': name, - }); + return await _methodChannel.invokeMethod('getProperty', {'name': name}); } @override diff --git a/lib/mpv/player/player_state.dart b/lib/mpv/player/player_state.dart index e4f388d8..b29e834c 100644 --- a/lib/mpv/player/player_state.dart +++ b/lib/mpv/player/player_state.dart @@ -106,6 +106,5 @@ class PlayerState { } @override - String toString() => - 'PlayerState(playing: $playing, position: $position, duration: $duration)'; + String toString() => 'PlayerState(playing: $playing, position: $position, duration: $duration)'; } diff --git a/lib/mpv/video.dart b/lib/mpv/video.dart index 335d58bf..3a0c70b4 100644 --- a/lib/mpv/video.dart +++ b/lib/mpv/video.dart @@ -27,12 +27,7 @@ class Video extends StatefulWidget { /// Background color shown behind the video. final Color backgroundColor; - const Video({ - super.key, - required this.player, - this.controls, - this.backgroundColor = Colors.black, - }); + const Video({super.key, required this.player, this.controls, this.backgroundColor = Colors.black}); @override State