diff --git a/lib/components/AddDownloadLocationScreen/custom_download_location_form.dart b/lib/components/AddDownloadLocationScreen/custom_download_location_form.dart index e24ea00..8343896 100644 --- a/lib/components/AddDownloadLocationScreen/custom_download_location_form.dart +++ b/lib/components/AddDownloadLocationScreen/custom_download_location_form.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:provider/provider.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/AddToPlaylistScreen/new_playlist_dialog.dart b/lib/components/AddToPlaylistScreen/new_playlist_dialog.dart index 9b8c2e3..16decdd 100644 --- a/lib/components/AddToPlaylistScreen/new_playlist_dialog.dart +++ b/lib/components/AddToPlaylistScreen/new_playlist_dialog.dart @@ -1,6 +1,6 @@ import 'package:finamp/models/jellyfin_models.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/finamp_user_helper.dart'; diff --git a/lib/components/AlbumScreen/album_screen_content.dart b/lib/components/AlbumScreen/album_screen_content.dart index 526b521..e3a628a 100644 --- a/lib/components/AlbumScreen/album_screen_content.dart +++ b/lib/components/AlbumScreen/album_screen_content.dart @@ -2,7 +2,7 @@ import 'package:finamp/components/AlbumScreen/sync_album_or_playlist_button.dart import 'package:finamp/services/downloads_helper.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:flutter_sticky_header/flutter_sticky_header.dart'; import 'package:get_it/get_it.dart'; diff --git a/lib/components/AlbumScreen/album_screen_content_flexible_space_bar.dart b/lib/components/AlbumScreen/album_screen_content_flexible_space_bar.dart index 4cf767b..7612f61 100644 --- a/lib/components/AlbumScreen/album_screen_content_flexible_space_bar.dart +++ b/lib/components/AlbumScreen/album_screen_content_flexible_space_bar.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/AlbumScreen/delete_button.dart b/lib/components/AlbumScreen/delete_button.dart index 5619ca3..1f7cae1 100644 --- a/lib/components/AlbumScreen/delete_button.dart +++ b/lib/components/AlbumScreen/delete_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:hive/hive.dart'; diff --git a/lib/components/AlbumScreen/download_dialog.dart b/lib/components/AlbumScreen/download_dialog.dart index efd5df0..e4a876a 100644 --- a/lib/components/AlbumScreen/download_dialog.dart +++ b/lib/components/AlbumScreen/download_dialog.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:logging/logging.dart'; diff --git a/lib/components/AlbumScreen/item_info.dart b/lib/components/AlbumScreen/item_info.dart index a229270..56758d4 100644 --- a/lib/components/AlbumScreen/item_info.dart +++ b/lib/components/AlbumScreen/item_info.dart @@ -1,6 +1,6 @@ import 'package:finamp/components/artists_text_spans.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../models/jellyfin_models.dart'; import '../print_duration.dart'; diff --git a/lib/components/AlbumScreen/playlist_name_edit_button.dart b/lib/components/AlbumScreen/playlist_name_edit_button.dart index de161a5..55fb465 100644 --- a/lib/components/AlbumScreen/playlist_name_edit_button.dart +++ b/lib/components/AlbumScreen/playlist_name_edit_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../models/jellyfin_models.dart'; import 'playlist_name_edit_dialog.dart'; diff --git a/lib/components/AlbumScreen/playlist_name_edit_dialog.dart b/lib/components/AlbumScreen/playlist_name_edit_dialog.dart index 640311f..ec3b36c 100644 --- a/lib/components/AlbumScreen/playlist_name_edit_dialog.dart +++ b/lib/components/AlbumScreen/playlist_name_edit_dialog.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/AlbumScreen/song_list_tile.dart b/lib/components/AlbumScreen/song_list_tile.dart index 974fbe5..4c915cb 100644 --- a/lib/components/AlbumScreen/song_list_tile.dart +++ b/lib/components/AlbumScreen/song_list_tile.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:mini_music_visualizer/mini_music_visualizer.dart'; diff --git a/lib/components/AlbumScreen/sync_album_or_playlist_button.dart b/lib/components/AlbumScreen/sync_album_or_playlist_button.dart index 2a2553d..1bd12e3 100644 --- a/lib/components/AlbumScreen/sync_album_or_playlist_button.dart +++ b/lib/components/AlbumScreen/sync_album_or_playlist_button.dart @@ -4,7 +4,7 @@ import 'package:finamp/services/sync_helper.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:logging/logging.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; class SyncAlbumOrPlaylistButton extends StatefulWidget { const SyncAlbumOrPlaylistButton({ diff --git a/lib/components/ArtistScreen/artist_download_button.dart b/lib/components/ArtistScreen/artist_download_button.dart index c8f9734..6a78c4b 100644 --- a/lib/components/ArtistScreen/artist_download_button.dart +++ b/lib/components/ArtistScreen/artist_download_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:hive/hive.dart'; diff --git a/lib/components/ArtistScreen/artist_play_button.dart b/lib/components/ArtistScreen/artist_play_button.dart index 4ac7caf..8f0a7f7 100644 --- a/lib/components/ArtistScreen/artist_play_button.dart +++ b/lib/components/ArtistScreen/artist_play_button.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:hive/hive.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/ArtistScreen/artist_shuffle_button.dart b/lib/components/ArtistScreen/artist_shuffle_button.dart index 28d1f31..06bea34 100644 --- a/lib/components/ArtistScreen/artist_shuffle_button.dart +++ b/lib/components/ArtistScreen/artist_shuffle_button.dart @@ -3,7 +3,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:hive/hive.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/AudioServiceSettingsScreen/buffer_duration_list_tile.dart b/lib/components/AudioServiceSettingsScreen/buffer_duration_list_tile.dart index 47de14c..049369a 100644 --- a/lib/components/AudioServiceSettingsScreen/buffer_duration_list_tile.dart +++ b/lib/components/AudioServiceSettingsScreen/buffer_duration_list_tile.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/AudioServiceSettingsScreen/song_shuffle_item_count_editor.dart b/lib/components/AudioServiceSettingsScreen/song_shuffle_item_count_editor.dart index 19d08c6..91e2b93 100644 --- a/lib/components/AudioServiceSettingsScreen/song_shuffle_item_count_editor.dart +++ b/lib/components/AudioServiceSettingsScreen/song_shuffle_item_count_editor.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/AudioServiceSettingsScreen/stop_foreground_selector.dart b/lib/components/AudioServiceSettingsScreen/stop_foreground_selector.dart index 4b81f80..11cc0d3 100644 --- a/lib/components/AudioServiceSettingsScreen/stop_foreground_selector.dart +++ b/lib/components/AudioServiceSettingsScreen/stop_foreground_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/DownloadsErrorScreen/download_error_list.dart b/lib/components/DownloadsErrorScreen/download_error_list.dart index 1af8e44..f1c4a60 100644 --- a/lib/components/DownloadsErrorScreen/download_error_list.dart +++ b/lib/components/DownloadsErrorScreen/download_error_list.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/downloads_helper.dart'; diff --git a/lib/components/DownloadsErrorScreen/download_error_list_tile.dart b/lib/components/DownloadsErrorScreen/download_error_list_tile.dart index d29b425..e8397fa 100644 --- a/lib/components/DownloadsErrorScreen/download_error_list_tile.dart +++ b/lib/components/DownloadsErrorScreen/download_error_list_tile.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/DownloadsScreen/download_error_screen_button.dart b/lib/components/DownloadsScreen/download_error_screen_button.dart index c4ab150..0416d43 100644 --- a/lib/components/DownloadsScreen/download_error_screen_button.dart +++ b/lib/components/DownloadsScreen/download_error_screen_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../screens/downloads_error_screen.dart'; diff --git a/lib/components/DownloadsScreen/download_missing_images_button.dart b/lib/components/DownloadsScreen/download_missing_images_button.dart index 0c8f4cf..fa13909 100644 --- a/lib/components/DownloadsScreen/download_missing_images_button.dart +++ b/lib/components/DownloadsScreen/download_missing_images_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/downloads_helper.dart'; diff --git a/lib/components/DownloadsScreen/downloaded_albums_list.dart b/lib/components/DownloadsScreen/downloaded_albums_list.dart index ae5e68b..d1cdbe8 100644 --- a/lib/components/DownloadsScreen/downloaded_albums_list.dart +++ b/lib/components/DownloadsScreen/downloaded_albums_list.dart @@ -1,5 +1,5 @@ import 'package:finamp/services/jellyfin_api_helper.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; diff --git a/lib/components/DownloadsScreen/downloads_overview.dart b/lib/components/DownloadsScreen/downloads_overview.dart index a9d74f7..f2adc2c 100644 --- a/lib/components/DownloadsScreen/downloads_overview.dart +++ b/lib/components/DownloadsScreen/downloads_overview.dart @@ -2,7 +2,7 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:finamp/services/downloads_helper.dart'; import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/download_update_stream.dart'; diff --git a/lib/components/DownloadsScreen/sync_downloaded_playlists.dart b/lib/components/DownloadsScreen/sync_downloaded_playlists.dart index d8881a7..e8907fe 100644 --- a/lib/components/DownloadsScreen/sync_downloaded_playlists.dart +++ b/lib/components/DownloadsScreen/sync_downloaded_playlists.dart @@ -4,7 +4,7 @@ import 'package:finamp/services/downloads_helper.dart'; import 'package:finamp/services/jellyfin_api_helper.dart'; import 'package:finamp/services/sync_helper.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:logging/logging.dart'; diff --git a/lib/components/InteractionSettingsScreen/FastScrollSelector.dart b/lib/components/InteractionSettingsScreen/FastScrollSelector.dart index 3979206..8f016fc 100644 --- a/lib/components/InteractionSettingsScreen/FastScrollSelector.dart +++ b/lib/components/InteractionSettingsScreen/FastScrollSelector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/InteractionSettingsScreen/disable_gestures.dart b/lib/components/InteractionSettingsScreen/disable_gestures.dart index 10b0190..5941ded 100644 --- a/lib/components/InteractionSettingsScreen/disable_gestures.dart +++ b/lib/components/InteractionSettingsScreen/disable_gestures.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/InteractionSettingsScreen/swipe_insert_queue_next_selector.dart b/lib/components/InteractionSettingsScreen/swipe_insert_queue_next_selector.dart index c9047a4..999d196 100644 --- a/lib/components/InteractionSettingsScreen/swipe_insert_queue_next_selector.dart +++ b/lib/components/InteractionSettingsScreen/swipe_insert_queue_next_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/LanguageSelectionScreen/language_list.dart b/lib/components/LanguageSelectionScreen/language_list.dart index 1e6c308..5eacbd9 100644 --- a/lib/components/LanguageSelectionScreen/language_list.dart +++ b/lib/components/LanguageSelectionScreen/language_list.dart @@ -2,7 +2,7 @@ import 'dart:collection'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:locale_names/locale_names.dart'; import '../../services/locale_helper.dart'; diff --git a/lib/components/LayoutSettingsScreen/content_grid_view_cross_axis_count_list_tile.dart b/lib/components/LayoutSettingsScreen/content_grid_view_cross_axis_count_list_tile.dart index 7025a99..4b4c80d 100644 --- a/lib/components/LayoutSettingsScreen/content_grid_view_cross_axis_count_list_tile.dart +++ b/lib/components/LayoutSettingsScreen/content_grid_view_cross_axis_count_list_tile.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/LayoutSettingsScreen/content_view_type_dropdown_list_tile.dart b/lib/components/LayoutSettingsScreen/content_view_type_dropdown_list_tile.dart index a7d9c93..80fc08b 100644 --- a/lib/components/LayoutSettingsScreen/content_view_type_dropdown_list_tile.dart +++ b/lib/components/LayoutSettingsScreen/content_view_type_dropdown_list_tile.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/LayoutSettingsScreen/hide_song_artists_if_same_as_album_artists_selector.dart b/lib/components/LayoutSettingsScreen/hide_song_artists_if_same_as_album_artists_selector.dart index d7db182..fc71d58 100644 --- a/lib/components/LayoutSettingsScreen/hide_song_artists_if_same_as_album_artists_selector.dart +++ b/lib/components/LayoutSettingsScreen/hide_song_artists_if_same_as_album_artists_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/LayoutSettingsScreen/show_cover_as_player_background_selector.dart b/lib/components/LayoutSettingsScreen/show_cover_as_player_background_selector.dart index df031f9..9e3c183 100644 --- a/lib/components/LayoutSettingsScreen/show_cover_as_player_background_selector.dart +++ b/lib/components/LayoutSettingsScreen/show_cover_as_player_background_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/LayoutSettingsScreen/show_text_on_grid_view_selector.dart b/lib/components/LayoutSettingsScreen/show_text_on_grid_view_selector.dart index 669daa7..6a60ed9 100644 --- a/lib/components/LayoutSettingsScreen/show_text_on_grid_view_selector.dart +++ b/lib/components/LayoutSettingsScreen/show_text_on_grid_view_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../models/finamp_models.dart'; diff --git a/lib/components/LayoutSettingsScreen/theme_selector.dart b/lib/components/LayoutSettingsScreen/theme_selector.dart index 8994a67..5abbaf9 100644 --- a/lib/components/LayoutSettingsScreen/theme_selector.dart +++ b/lib/components/LayoutSettingsScreen/theme_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../services/theme_mode_helper.dart'; diff --git a/lib/components/LogsScreen/copy_logs_button.dart b/lib/components/LogsScreen/copy_logs_button.dart index 040554d..5a1936f 100644 --- a/lib/components/LogsScreen/copy_logs_button.dart +++ b/lib/components/LogsScreen/copy_logs_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/finamp_logs_helper.dart'; diff --git a/lib/components/LogsScreen/log_tile.dart b/lib/components/LogsScreen/log_tile.dart index 6711435..596d37d 100644 --- a/lib/components/LogsScreen/log_tile.dart +++ b/lib/components/LogsScreen/log_tile.dart @@ -2,7 +2,7 @@ import 'package:clipboard/clipboard.dart'; import 'package:finamp/services/censored_log.dart'; import 'package:finamp/services/contains_login.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:logging/logging.dart'; import '../error_snackbar.dart'; diff --git a/lib/components/LogsScreen/share_logs_button.dart b/lib/components/LogsScreen/share_logs_button.dart index 10fa454..eabb5b2 100644 --- a/lib/components/LogsScreen/share_logs_button.dart +++ b/lib/components/LogsScreen/share_logs_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/finamp_logs_helper.dart'; diff --git a/lib/components/MusicScreen/album_item.dart b/lib/components/MusicScreen/album_item.dart index fa20acc..2f7d1b9 100644 --- a/lib/components/MusicScreen/album_item.dart +++ b/lib/components/MusicScreen/album_item.dart @@ -2,7 +2,7 @@ import 'package:finamp/components/MusicScreen/album_item_list_tile.dart'; import 'package:finamp/services/downloads_helper.dart'; import 'package:finamp/services/finamp_settings_helper.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/MusicScreen/album_item_list_tile.dart b/lib/components/MusicScreen/album_item_list_tile.dart index 04ea4b3..dc33a6e 100644 --- a/lib/components/MusicScreen/album_item_list_tile.dart +++ b/lib/components/MusicScreen/album_item_list_tile.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/MusicScreen/music_screen_drawer.dart b/lib/components/MusicScreen/music_screen_drawer.dart index 674c183..dd9983a 100644 --- a/lib/components/MusicScreen/music_screen_drawer.dart +++ b/lib/components/MusicScreen/music_screen_drawer.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:url_launcher/url_launcher.dart'; diff --git a/lib/components/MusicScreen/offline_mode_switch_list_tile.dart b/lib/components/MusicScreen/offline_mode_switch_list_tile.dart index ec59362..c0a281c 100644 --- a/lib/components/MusicScreen/offline_mode_switch_list_tile.dart +++ b/lib/components/MusicScreen/offline_mode_switch_list_tile.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/MusicScreen/sort_by_menu_button.dart b/lib/components/MusicScreen/sort_by_menu_button.dart index b9d8818..f43f6eb 100644 --- a/lib/components/MusicScreen/sort_by_menu_button.dart +++ b/lib/components/MusicScreen/sort_by_menu_button.dart @@ -1,6 +1,6 @@ import 'package:finamp/models/finamp_models.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../models/jellyfin_models.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/MusicScreen/sort_order_button.dart b/lib/components/MusicScreen/sort_order_button.dart index 09d8cab..ab30794 100644 --- a/lib/components/MusicScreen/sort_order_button.dart +++ b/lib/components/MusicScreen/sort_order_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/PlayerScreen/add_to_playlist_button.dart b/lib/components/PlayerScreen/add_to_playlist_button.dart index 96b1586..b742117 100644 --- a/lib/components/PlayerScreen/add_to_playlist_button.dart +++ b/lib/components/PlayerScreen/add_to_playlist_button.dart @@ -1,6 +1,6 @@ import 'package:audio_service/audio_service.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../models/jellyfin_models.dart'; diff --git a/lib/components/PlayerScreen/playback_mode.dart b/lib/components/PlayerScreen/playback_mode.dart index 50f6b9f..78ad18a 100644 --- a/lib/components/PlayerScreen/playback_mode.dart +++ b/lib/components/PlayerScreen/playback_mode.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:audio_service/audio_service.dart'; import 'package:get_it/get_it.dart'; diff --git a/lib/components/PlayerScreen/player_buttons.dart b/lib/components/PlayerScreen/player_buttons.dart index 0ec1082..85bdc14 100644 --- a/lib/components/PlayerScreen/player_buttons.dart +++ b/lib/components/PlayerScreen/player_buttons.dart @@ -1,7 +1,7 @@ import 'package:audio_service/audio_service.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../../services/music_player_background_task.dart'; @@ -15,6 +15,8 @@ class PlayerButtons extends StatelessWidget { stream: audioHandler.playbackState, builder: (context, snapshot) { final PlaybackState? playbackState = snapshot.data; + final colorScheme = Theme.of(context).colorScheme; + return Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -28,41 +30,39 @@ class PlayerButtons extends StatelessWidget { playbackState == null ? AudioServiceShuffleMode.none : playbackState.shuffleMode, - Theme.of(context).colorScheme.secondary, + colorScheme.primary, ), onPressed: playbackState != null ? () async { if (playbackState.shuffleMode == AudioServiceShuffleMode.all) { - await audioHandler - .setShuffleMode(AudioServiceShuffleMode.none); + await audioHandler.setShuffleMode( + AudioServiceShuffleMode.none, + ); } else { - await audioHandler - .setShuffleMode(AudioServiceShuffleMode.all); + await audioHandler.setShuffleMode( + AudioServiceShuffleMode.all, + ); } } : null, - iconSize: 20, + iconSize: 22, ), IconButton( tooltip: AppLocalizations.of(context)!.skipToPrevious, - icon: const Icon(Icons.skip_previous), + icon: const Icon(Icons.skip_previous_rounded), onPressed: playbackState != null ? () async => await audioHandler.skipToPrevious() : null, - iconSize: 36, + iconSize: 38, + style: IconButton.styleFrom( + backgroundColor: colorScheme.surfaceVariant.withOpacity(0.44), + ), ), - SizedBox( - height: 56, - width: 56, - child: FloatingActionButton( + SizedBox.square( + dimension: 68, + child: IconButton.filled( tooltip: AppLocalizations.of(context)!.togglePlayback, - // We set a heroTag because otherwise the play button on AlbumScreenContent will do hero widget stuff - heroTag: "PlayerScreenFAB", - backgroundColor: Theme.of(context).colorScheme.primary, - foregroundColor: Theme.of(context).colorScheme.onPrimary, - splashColor: - Theme.of(context).colorScheme.onPrimary.withOpacity(0.24), onPressed: playbackState != null ? () async { if (playbackState.playing) { @@ -72,21 +72,25 @@ class PlayerButtons extends StatelessWidget { } } : null, - child: Icon( + icon: Icon( playbackState == null || playbackState.playing ? Icons.pause : Icons.play_arrow, - size: 36, + size: 42, ), ), ), IconButton( - tooltip: AppLocalizations.of(context)!.skipToNext, - icon: const Icon(Icons.skip_next), - onPressed: playbackState != null - ? () async => audioHandler.skipToNext() - : null, - iconSize: 36), + tooltip: AppLocalizations.of(context)!.skipToNext, + icon: const Icon(Icons.skip_next_rounded), + onPressed: playbackState != null + ? () async => audioHandler.skipToNext() + : null, + iconSize: 38, + style: IconButton.styleFrom( + backgroundColor: colorScheme.surfaceVariant.withOpacity(0.44), + ), + ), IconButton( tooltip: playbackState?.repeatMode == AudioServiceRepeatMode.all ? AppLocalizations.of(context)!.loopModeAllTooltip @@ -97,26 +101,29 @@ class PlayerButtons extends StatelessWidget { playbackState == null ? AudioServiceRepeatMode.none : playbackState.repeatMode, - Theme.of(context).colorScheme.secondary, + colorScheme.primary, ), onPressed: playbackState != null ? () async { // Cyles from none -> all -> one if (playbackState.repeatMode == AudioServiceRepeatMode.none) { - await audioHandler - .setRepeatMode(AudioServiceRepeatMode.all); + await audioHandler.setRepeatMode( + AudioServiceRepeatMode.all, + ); } else if (playbackState.repeatMode == AudioServiceRepeatMode.all) { - await audioHandler - .setRepeatMode(AudioServiceRepeatMode.one); + await audioHandler.setRepeatMode( + AudioServiceRepeatMode.one, + ); } else { - await audioHandler - .setRepeatMode(AudioServiceRepeatMode.none); + await audioHandler.setRepeatMode( + AudioServiceRepeatMode.none, + ); } } : null, - iconSize: 20, + iconSize: 22, ), ], ); @@ -125,7 +132,9 @@ class PlayerButtons extends StatelessWidget { } Widget _getRepeatingIcon( - AudioServiceRepeatMode repeatMode, Color iconColour) { + AudioServiceRepeatMode repeatMode, + Color iconColour, + ) { if (repeatMode == AudioServiceRepeatMode.all) { return Icon(Icons.repeat, color: iconColour); } else if (repeatMode == AudioServiceRepeatMode.one) { @@ -136,7 +145,9 @@ class PlayerButtons extends StatelessWidget { } Icon _getShufflingIcon( - AudioServiceShuffleMode shuffleMode, Color iconColour) { + AudioServiceShuffleMode shuffleMode, + Color iconColour, + ) { if (shuffleMode == AudioServiceShuffleMode.all) { return Icon(Icons.shuffle, color: iconColour); } else { diff --git a/lib/components/PlayerScreen/queue_button.dart b/lib/components/PlayerScreen/queue_button.dart index adb836b..77fcfbe 100644 --- a/lib/components/PlayerScreen/queue_button.dart +++ b/lib/components/PlayerScreen/queue_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'queue_list.dart'; class QueueButton extends StatelessWidget { diff --git a/lib/components/PlayerScreen/queue_list.dart b/lib/components/PlayerScreen/queue_list.dart index 07e3b28..3d2075f 100644 --- a/lib/components/PlayerScreen/queue_list.dart +++ b/lib/components/PlayerScreen/queue_list.dart @@ -1,6 +1,6 @@ import 'package:audio_service/audio_service.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:rxdart/rxdart.dart'; diff --git a/lib/components/PlayerScreen/sleep_timer_button.dart b/lib/components/PlayerScreen/sleep_timer_button.dart index a217801..a2f8605 100644 --- a/lib/components/PlayerScreen/sleep_timer_button.dart +++ b/lib/components/PlayerScreen/sleep_timer_button.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/music_player_background_task.dart'; diff --git a/lib/components/PlayerScreen/sleep_timer_cancel_dialog.dart b/lib/components/PlayerScreen/sleep_timer_cancel_dialog.dart index ef7c3a3..af42f04 100644 --- a/lib/components/PlayerScreen/sleep_timer_cancel_dialog.dart +++ b/lib/components/PlayerScreen/sleep_timer_cancel_dialog.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/music_player_background_task.dart'; diff --git a/lib/components/PlayerScreen/sleep_timer_dialog.dart b/lib/components/PlayerScreen/sleep_timer_dialog.dart index 208c435..fe565a0 100644 --- a/lib/components/PlayerScreen/sleep_timer_dialog.dart +++ b/lib/components/PlayerScreen/sleep_timer_dialog.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/music_player_background_task.dart'; diff --git a/lib/components/PlayerScreen/song_name.dart b/lib/components/PlayerScreen/song_name.dart index f2872d6..9e33fbd 100644 --- a/lib/components/PlayerScreen/song_name.dart +++ b/lib/components/PlayerScreen/song_name.dart @@ -4,7 +4,7 @@ import 'package:finamp/screens/artist_screen.dart'; import 'package:finamp/services/finamp_settings_helper.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../screens/album_screen.dart'; diff --git a/lib/components/SettingsScreen/logout_list_tile.dart b/lib/components/SettingsScreen/logout_list_tile.dart index 2a95cc6..f1385c5 100644 --- a/lib/components/SettingsScreen/logout_list_tile.dart +++ b/lib/components/SettingsScreen/logout_list_tile.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../screens/splash_screen.dart'; diff --git a/lib/components/TranscodingSettingsScreen/bitrate_selector.dart b/lib/components/TranscodingSettingsScreen/bitrate_selector.dart index 602a0f3..8e6f111 100644 --- a/lib/components/TranscodingSettingsScreen/bitrate_selector.dart +++ b/lib/components/TranscodingSettingsScreen/bitrate_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/TranscodingSettingsScreen/transcode_switch.dart b/lib/components/TranscodingSettingsScreen/transcode_switch.dart index 5c46a85..2a6d4c0 100644 --- a/lib/components/TranscodingSettingsScreen/transcode_switch.dart +++ b/lib/components/TranscodingSettingsScreen/transcode_switch.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import '../../services/finamp_settings_helper.dart'; diff --git a/lib/components/UserSelector/private_user_sign_in.dart b/lib/components/UserSelector/private_user_sign_in.dart index c0e4db9..6d80641 100644 --- a/lib/components/UserSelector/private_user_sign_in.dart +++ b/lib/components/UserSelector/private_user_sign_in.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../screens/logs_screen.dart'; diff --git a/lib/components/ViewSelector/no_music_libraries_message.dart b/lib/components/ViewSelector/no_music_libraries_message.dart index 16fd85d..0ecc75a 100644 --- a/lib/components/ViewSelector/no_music_libraries_message.dart +++ b/lib/components/ViewSelector/no_music_libraries_message.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; class NoMusicLibrariesMessage extends StatelessWidget { const NoMusicLibrariesMessage({ diff --git a/lib/components/error_snackbar.dart b/lib/components/error_snackbar.dart index c3f8f71..f4ba304 100644 --- a/lib/components/error_snackbar.dart +++ b/lib/components/error_snackbar.dart @@ -1,6 +1,6 @@ import 'package:chopper/chopper.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; /// Snackbar with error icon for displaying errors ScaffoldFeatureController errorSnackbar( diff --git a/lib/components/favourite_button.dart b/lib/components/favourite_button.dart index 57cf7f0..3328808 100644 --- a/lib/components/favourite_button.dart +++ b/lib/components/favourite_button.dart @@ -3,7 +3,7 @@ import 'package:finamp/models/jellyfin_models.dart'; import 'package:finamp/services/jellyfin_api_helper.dart'; import 'package:finamp/services/music_player_background_task.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; class FavoriteButton extends StatefulWidget { diff --git a/lib/components/now_playing_bar.dart b/lib/components/now_playing_bar.dart index 86b5f03..bc61420 100644 --- a/lib/components/now_playing_bar.dart +++ b/lib/components/now_playing_bar.dart @@ -13,15 +13,16 @@ import '../screens/player_screen.dart'; import 'PlayerScreen/progress_slider.dart'; class NowPlayingBar extends StatelessWidget { - const NowPlayingBar({ - Key? key, - }) : super(key: key); + const NowPlayingBar({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - // BottomNavBar's default elevation is 8 (https://api.flutter.dev/flutter/material/BottomNavigationBar/elevation.html) - const elevation = 8.0; - final color = Theme.of(context).bottomNavigationBarTheme.backgroundColor; + final theme = Theme.of(context); + final colorScheme = theme.colorScheme; + final barColor = Color.alphaBlend( + colorScheme.primary.withOpacity(0.08), + colorScheme.surface, + ); final audioHandler = GetIt.instance(); @@ -41,106 +42,151 @@ class NowPlayingBar extends StatelessWidget { // the now playing bar. if (snapshot.data!.mediaItem != null) { final item = BaseItemDto.fromJson( - snapshot.data!.mediaItem!.extras!["itemJson"]); + snapshot.data!.mediaItem!.extras!["itemJson"], + ); - return Material( - color: color, - elevation: elevation, - child: SafeArea( - child: SizedBox( - width: MediaQuery.of(context).size.width, - child: Stack( - children: [ - const ProgressSlider( - allowSeeking: false, - showBuffer: false, - showDuration: false, - showPlaceholder: false, - ), - Dismissible( - key: const Key("NowPlayingBar"), - direction: FinampSettingsHelper.finampSettings.disableGesture ? DismissDirection.none : DismissDirection.horizontal, - confirmDismiss: (direction) async { - if (direction == DismissDirection.endToStart) { - audioHandler.skipToNext(); - } else { - audioHandler.skipToPrevious(); - } - return false; - }, - background: const Padding( - padding: EdgeInsets.symmetric(horizontal: 16.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AspectRatio( - aspectRatio: 1, - child: FittedBox( - fit: BoxFit.fitHeight, - child: Padding( - padding: - EdgeInsets.symmetric(vertical: 8.0), - child: Icon(Icons.skip_previous), + return SafeArea( + minimum: const EdgeInsets.fromLTRB(12, 0, 12, 8), + child: DecoratedBox( + decoration: BoxDecoration( + color: barColor, + borderRadius: BorderRadius.circular(28), + border: Border.all( + color: colorScheme.outlineVariant.withOpacity(0.45), + ), + boxShadow: [ + BoxShadow( + color: colorScheme.shadow.withOpacity(0.16), + blurRadius: 24, + offset: const Offset(0, 10), + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(28), + child: Material( + color: Colors.transparent, + child: SizedBox( + width: MediaQuery.of(context).size.width, + height: 78, + child: Stack( + children: [ + Align( + alignment: Alignment.topCenter, + child: Opacity( + opacity: 0.9, + child: const ProgressSlider( + allowSeeking: false, + showBuffer: false, + showDuration: false, + showPlaceholder: false, + ), + ), + ), + Dismissible( + key: const Key("NowPlayingBar"), + direction: + FinampSettingsHelper + .finampSettings + .disableGesture + ? DismissDirection.none + : DismissDirection.horizontal, + confirmDismiss: (direction) async { + if (direction == DismissDirection.endToStart) { + audioHandler.skipToNext(); + } else { + audioHandler.skipToPrevious(); + } + return false; + }, + background: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 20, + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Icon( + Icons.skip_previous, + color: colorScheme.primary, ), + Icon( + Icons.skip_next, + color: colorScheme.primary, + ), + ], + ), + ), + child: ListTile( + contentPadding: const EdgeInsets.fromLTRB( + 12, + 8, + 8, + 8, + ), + minLeadingWidth: 0, + onTap: () => Navigator.of( + context, + ).pushNamed(PlayerScreen.routeName), + leading: SizedBox( + height: 54, + width: 54, + child: ClipRRect( + borderRadius: BorderRadius.circular(16), + child: AlbumImage(item: item), ), ), - AspectRatio( - aspectRatio: 1, - child: FittedBox( - fit: BoxFit.fitHeight, - child: Padding( - padding: - EdgeInsets.symmetric(vertical: 8.0), - child: Icon(Icons.skip_next), - ), + title: Text( + snapshot.data!.mediaItem!.title, + softWrap: false, + maxLines: 1, + overflow: TextOverflow.fade, + style: theme.textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.w700, ), ), - ], - ), - ), - child: ListTile( - onTap: () => Navigator.of(context) - .pushNamed(PlayerScreen.routeName), - leading: AlbumImage(item: item), - title: Text( - snapshot.data!.mediaItem!.title, - softWrap: false, - maxLines: 1, - overflow: TextOverflow.fade, - ), - subtitle: Text( - processArtist( - snapshot.data!.mediaItem!.artist, context), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (snapshot - .data!.playbackState.processingState != - AudioProcessingState.idle) - IconButton( - // We have a key here because otherwise the - // InkWell moves over to the play/pause button - key: const ValueKey("StopButton"), - icon: const Icon(Icons.stop), - onPressed: () => audioHandler.stop(), + subtitle: Text( + processArtist( + snapshot.data!.mediaItem!.artist, + context, ), - playing - ? IconButton( - icon: const Icon(Icons.pause), - onPressed: () => audioHandler.pause(), - ) - : IconButton( - icon: const Icon(Icons.play_arrow), - onPressed: () => audioHandler.play(), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: theme.textTheme.bodySmall?.copyWith( + color: colorScheme.onSurfaceVariant, + ), + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (snapshot + .data! + .playbackState + .processingState != + AudioProcessingState.idle) + IconButton( + key: const ValueKey("StopButton"), + icon: const Icon(Icons.stop_rounded), + onPressed: () => audioHandler.stop(), ), - ], + IconButton.filled( + icon: Icon( + playing + ? Icons.pause_rounded + : Icons.play_arrow_rounded, + ), + onPressed: playing + ? () => audioHandler.pause() + : () => audioHandler.play(), + ), + ], + ), + ), ), - ), + ], ), - ], + ), ), ), ), @@ -155,4 +201,4 @@ class NowPlayingBar extends StatelessWidget { ), ); } -} \ No newline at end of file +} diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart new file mode 100644 index 0000000..3cbf570 --- /dev/null +++ b/lib/l10n/app_localizations.dart @@ -0,0 +1,1528 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; + +import 'app_localizations_ar.dart'; +import 'app_localizations_bg.dart'; +import 'app_localizations_ca.dart'; +import 'app_localizations_cs.dart'; +import 'app_localizations_da.dart'; +import 'app_localizations_de.dart'; +import 'app_localizations_el.dart'; +import 'app_localizations_en.dart'; +import 'app_localizations_es.dart'; +import 'app_localizations_et.dart'; +import 'app_localizations_fi.dart'; +import 'app_localizations_fr.dart'; +import 'app_localizations_hr.dart'; +import 'app_localizations_hu.dart'; +import 'app_localizations_it.dart'; +import 'app_localizations_ja.dart'; +import 'app_localizations_ko.dart'; +import 'app_localizations_nb.dart'; +import 'app_localizations_nl.dart'; +import 'app_localizations_pl.dart'; +import 'app_localizations_pt.dart'; +import 'app_localizations_ru.dart'; +import 'app_localizations_sv.dart'; +import 'app_localizations_sw.dart'; +import 'app_localizations_szl.dart'; +import 'app_localizations_th.dart'; +import 'app_localizations_tr.dart'; +import 'app_localizations_uk.dart'; +import 'app_localizations_vi.dart'; +import 'app_localizations_zh.dart'; + +// ignore_for_file: type=lint + +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'l10n/app_localizations.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations? of(BuildContext context) { + return Localizations.of(context, AppLocalizations); + } + + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = + >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [ + Locale('ar'), + Locale('bg'), + Locale('ca'), + Locale('cs'), + Locale('da'), + Locale('de'), + Locale('el'), + Locale('en'), + Locale('es'), + Locale('et'), + Locale('fi'), + Locale('fr'), + Locale('hr'), + Locale('hu'), + Locale('it'), + Locale('ja'), + Locale('ko'), + Locale('nb'), + Locale('nl'), + Locale('pl'), + Locale('pt'), + Locale('pt', 'BR'), + Locale('ru'), + Locale('sv'), + Locale('sw'), + Locale('szl'), + Locale('th'), + Locale('tr'), + Locale('uk'), + Locale('vi'), + Locale('zh'), + Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'), + Locale.fromSubtags( + languageCode: 'zh', countryCode: 'HK', scriptCode: 'Hant') + ]; + + /// The error message that shows when startup fails. + /// + /// In en, this message translates to: + /// **'Something went wrong during app startup. The error was: {error}\n\nPlease create an issue on github.com/UnicornsOnLSD/finamp with a screenshot of this page. If this problem persists you can clear your app data to reset the app.'** + String startupError(String error); + + /// No description provided for @serverUrl. + /// + /// In en, this message translates to: + /// **'Server URL'** + String get serverUrl; + + /// Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port. + /// + /// In en, this message translates to: + /// **'If you want to be able to access your Jellyfin server remotely, you need to use your external IP.\n\nIf your server is on a HTTP port (80/443), you don\'t have to specify a port. This will likely be the case if your server is behind a reverse proxy.'** + String get internalExternalIpExplanation; + + /// Error message that shows when the user submits a login without a server URL + /// + /// In en, this message translates to: + /// **'Server URL cannot be empty'** + String get emptyServerUrl; + + /// Error message that shows when the user submits a server URL that doesn't start with http:// or https:// (for example, ftp://0.0.0.0 + /// + /// In en, this message translates to: + /// **'URL must start with http:// or https://'** + String get urlStartWithHttps; + + /// Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/) + /// + /// In en, this message translates to: + /// **'URL must not include a trailing slash'** + String get urlTrailingSlash; + + /// No description provided for @username. + /// + /// In en, this message translates to: + /// **'Username'** + String get username; + + /// No description provided for @password. + /// + /// In en, this message translates to: + /// **'Password'** + String get password; + + /// No description provided for @logs. + /// + /// In en, this message translates to: + /// **'Logs'** + String get logs; + + /// No description provided for @next. + /// + /// In en, this message translates to: + /// **'Next'** + String get next; + + /// App bar title for library select screen + /// + /// In en, this message translates to: + /// **'Select Music Libraries'** + String get selectMusicLibraries; + + /// Error message when the user does not have any libraries + /// + /// In en, this message translates to: + /// **'Could not find any libraries.'** + String get couldNotFindLibraries; + + /// No description provided for @unknownName. + /// + /// In en, this message translates to: + /// **'Unknown Name'** + String get unknownName; + + /// No description provided for @songs. + /// + /// In en, this message translates to: + /// **'Songs'** + String get songs; + + /// No description provided for @albums. + /// + /// In en, this message translates to: + /// **'Albums'** + String get albums; + + /// No description provided for @artists. + /// + /// In en, this message translates to: + /// **'Artists'** + String get artists; + + /// No description provided for @genres. + /// + /// In en, this message translates to: + /// **'Genres'** + String get genres; + + /// No description provided for @playlists. + /// + /// In en, this message translates to: + /// **'Playlists'** + String get playlists; + + /// No description provided for @startMix. + /// + /// In en, this message translates to: + /// **'Start Mix'** + String get startMix; + + /// Snackbar message that shows when the user presses the instant mix button with no artists selected + /// + /// In en, this message translates to: + /// **'Long-press an artist to add or remove it from the mix builder before starting a mix'** + String get startMixNoSongsArtist; + + /// Snackbar message that shows when the user presses the instant mix button with no albums selected + /// + /// In en, this message translates to: + /// **'Long-press an album to add or remove it from the mix builder before starting a mix'** + String get startMixNoSongsAlbum; + + /// No description provided for @music. + /// + /// In en, this message translates to: + /// **'Music'** + String get music; + + /// No description provided for @clear. + /// + /// In en, this message translates to: + /// **'Clear'** + String get clear; + + /// No description provided for @favourites. + /// + /// In en, this message translates to: + /// **'Favourites'** + String get favourites; + + /// No description provided for @shuffleAll. + /// + /// In en, this message translates to: + /// **'Shuffle all'** + String get shuffleAll; + + /// No description provided for @finamp. + /// + /// In en, this message translates to: + /// **'Finamp'** + String get finamp; + + /// No description provided for @downloads. + /// + /// In en, this message translates to: + /// **'Downloads'** + String get downloads; + + /// No description provided for @settings. + /// + /// In en, this message translates to: + /// **'Settings'** + String get settings; + + /// No description provided for @offlineMode. + /// + /// In en, this message translates to: + /// **'Offline Mode'** + String get offlineMode; + + /// No description provided for @sortOrder. + /// + /// In en, this message translates to: + /// **'Sort order'** + String get sortOrder; + + /// No description provided for @sortBy. + /// + /// In en, this message translates to: + /// **'Sort by'** + String get sortBy; + + /// No description provided for @album. + /// + /// In en, this message translates to: + /// **'Album'** + String get album; + + /// No description provided for @albumArtist. + /// + /// In en, this message translates to: + /// **'Album Artist'** + String get albumArtist; + + /// No description provided for @artist. + /// + /// In en, this message translates to: + /// **'Artist'** + String get artist; + + /// No description provided for @budget. + /// + /// In en, this message translates to: + /// **'Budget'** + String get budget; + + /// No description provided for @communityRating. + /// + /// In en, this message translates to: + /// **'Community Rating'** + String get communityRating; + + /// No description provided for @criticRating. + /// + /// In en, this message translates to: + /// **'Critic Rating'** + String get criticRating; + + /// No description provided for @dateAdded. + /// + /// In en, this message translates to: + /// **'Date Added'** + String get dateAdded; + + /// No description provided for @datePlayed. + /// + /// In en, this message translates to: + /// **'Date Played'** + String get datePlayed; + + /// No description provided for @playCount. + /// + /// In en, this message translates to: + /// **'Play Count'** + String get playCount; + + /// No description provided for @premiereDate. + /// + /// In en, this message translates to: + /// **'Premiere Date'** + String get premiereDate; + + /// No description provided for @productionYear. + /// + /// In en, this message translates to: + /// **'Production Year'** + String get productionYear; + + /// No description provided for @name. + /// + /// In en, this message translates to: + /// **'Name'** + String get name; + + /// No description provided for @random. + /// + /// In en, this message translates to: + /// **'Random'** + String get random; + + /// No description provided for @revenue. + /// + /// In en, this message translates to: + /// **'Revenue'** + String get revenue; + + /// No description provided for @runtime. + /// + /// In en, this message translates to: + /// **'Runtime'** + String get runtime; + + /// No description provided for @syncDownloadedPlaylists. + /// + /// In en, this message translates to: + /// **'Sync downloaded playlists'** + String get syncDownloadedPlaylists; + + /// No description provided for @downloadMissingImages. + /// + /// In en, this message translates to: + /// **'Download missing images'** + String get downloadMissingImages; + + /// Message that shows when the user downloads missing images + /// + /// In en, this message translates to: + /// **'{count,plural, =0{No missing images found} =1{Downloaded {count} missing image} other{Downloaded {count} missing images}}'** + String downloadedMissingImages(int count); + + /// No description provided for @downloadErrors. + /// + /// In en, this message translates to: + /// **'Download errors'** + String get downloadErrors; + + /// No description provided for @downloadCount. + /// + /// In en, this message translates to: + /// **'{count,plural, =1{{count} download} other{{count} downloads}}'** + String downloadCount(int count); + + /// No description provided for @downloadedItemsCount. + /// + /// In en, this message translates to: + /// **'{count,plural,=1{{count} item} other{{count} items}}'** + String downloadedItemsCount(int count); + + /// No description provided for @downloadedImagesCount. + /// + /// In en, this message translates to: + /// **'{count,plural,=1{{count} image} other{{count} images}}'** + String downloadedImagesCount(int count); + + /// This is for merging downloadedItemsCount and downloadedImagesCount as Flutter's intl stuff doesn't support multiple plurals in one string. https://github.com/flutter/flutter/issues/86906 + /// + /// In en, this message translates to: + /// **'{downloadedItems}, {downloadedImages}'** + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages); + + /// No description provided for @dlComplete. + /// + /// In en, this message translates to: + /// **'{count} complete'** + String dlComplete(int count); + + /// No description provided for @dlFailed. + /// + /// In en, this message translates to: + /// **'{count} failed'** + String dlFailed(int count); + + /// No description provided for @dlEnqueued. + /// + /// In en, this message translates to: + /// **'{count} enqueued'** + String dlEnqueued(int count); + + /// No description provided for @dlRunning. + /// + /// In en, this message translates to: + /// **'{count} running'** + String dlRunning(int count); + + /// No description provided for @downloadErrorsTitle. + /// + /// In en, this message translates to: + /// **'Download Errors'** + String get downloadErrorsTitle; + + /// No description provided for @noErrors. + /// + /// In en, this message translates to: + /// **'No errors!'** + String get noErrors; + + /// No description provided for @errorScreenError. + /// + /// In en, this message translates to: + /// **'An error occurred while getting the list of errors! At this point, you should probably just create an issue on GitHub and delete app data'** + String get errorScreenError; + + /// No description provided for @failedToGetSongFromDownloadId. + /// + /// In en, this message translates to: + /// **'Failed to get song from download ID'** + String get failedToGetSongFromDownloadId; + + /// Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server. + /// + /// In en, this message translates to: + /// **'Are you sure you want to delete the {itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} \'{itemName}\' from this device?'** + String deleteDownloadsPrompt(String itemName, String itemType); + + /// Shown in the confirmation dialog for deleting downloaded media from the local device. + /// + /// In en, this message translates to: + /// **'Delete'** + String get deleteDownloadsConfirmButtonText; + + /// No description provided for @deleteDownloadsAbortButtonText. + /// + /// In en, this message translates to: + /// **'Cancel'** + String get deleteDownloadsAbortButtonText; + + /// No description provided for @error. + /// + /// In en, this message translates to: + /// **'Error'** + String get error; + + /// No description provided for @discNumber. + /// + /// In en, this message translates to: + /// **'Disc {number}'** + String discNumber(int number); + + /// No description provided for @playButtonLabel. + /// + /// In en, this message translates to: + /// **'PLAY'** + String get playButtonLabel; + + /// No description provided for @shuffleButtonLabel. + /// + /// In en, this message translates to: + /// **'SHUFFLE'** + String get shuffleButtonLabel; + + /// No description provided for @songCount. + /// + /// In en, this message translates to: + /// **'{count,plural,=1{{count} Song} other{{count} Songs}}'** + String songCount(int count); + + /// No description provided for @editPlaylistNameTooltip. + /// + /// In en, this message translates to: + /// **'Edit playlist name'** + String get editPlaylistNameTooltip; + + /// No description provided for @editPlaylistNameTitle. + /// + /// In en, this message translates to: + /// **'Edit Playlist Name'** + String get editPlaylistNameTitle; + + /// No description provided for @required. + /// + /// In en, this message translates to: + /// **'Required'** + String get required; + + /// No description provided for @updateButtonLabel. + /// + /// In en, this message translates to: + /// **'UPDATE'** + String get updateButtonLabel; + + /// No description provided for @playlistNameUpdated. + /// + /// In en, this message translates to: + /// **'Playlist name updated.'** + String get playlistNameUpdated; + + /// No description provided for @favourite. + /// + /// In en, this message translates to: + /// **'Favourite'** + String get favourite; + + /// No description provided for @downloadsDeleted. + /// + /// In en, this message translates to: + /// **'Downloads deleted.'** + String get downloadsDeleted; + + /// No description provided for @addDownloads. + /// + /// In en, this message translates to: + /// **'Add Downloads'** + String get addDownloads; + + /// No description provided for @location. + /// + /// In en, this message translates to: + /// **'Location'** + String get location; + + /// No description provided for @downloadsAdded. + /// + /// In en, this message translates to: + /// **'Downloads added.'** + String get downloadsAdded; + + /// No description provided for @addButtonLabel. + /// + /// In en, this message translates to: + /// **'ADD'** + String get addButtonLabel; + + /// No description provided for @shareLogs. + /// + /// In en, this message translates to: + /// **'Share logs'** + String get shareLogs; + + /// No description provided for @logsCopied. + /// + /// In en, this message translates to: + /// **'Logs copied.'** + String get logsCopied; + + /// No description provided for @message. + /// + /// In en, this message translates to: + /// **'Message'** + String get message; + + /// No description provided for @stackTrace. + /// + /// In en, this message translates to: + /// **'Stack Trace'** + String get stackTrace; + + /// No description provided for @applicationLegalese. + /// + /// In en, this message translates to: + /// **'Licensed with the Mozilla Public License 2.0. Source code available at:\n\ngithub.com/jmshrv/finamp'** + String get applicationLegalese; + + /// No description provided for @transcoding. + /// + /// In en, this message translates to: + /// **'Transcoding'** + String get transcoding; + + /// No description provided for @downloadLocations. + /// + /// In en, this message translates to: + /// **'Download Locations'** + String get downloadLocations; + + /// No description provided for @audioService. + /// + /// In en, this message translates to: + /// **'Audio Service'** + String get audioService; + + /// No description provided for @interactions. + /// + /// In en, this message translates to: + /// **'Interactions'** + String get interactions; + + /// No description provided for @layoutAndTheme. + /// + /// In en, this message translates to: + /// **'Layout & Theme'** + String get layoutAndTheme; + + /// No description provided for @notAvailableInOfflineMode. + /// + /// In en, this message translates to: + /// **'Not available in offline mode'** + String get notAvailableInOfflineMode; + + /// No description provided for @logOut. + /// + /// In en, this message translates to: + /// **'Log Out'** + String get logOut; + + /// No description provided for @downloadedSongsWillNotBeDeleted. + /// + /// In en, this message translates to: + /// **'Downloaded songs will not be deleted'** + String get downloadedSongsWillNotBeDeleted; + + /// No description provided for @areYouSure. + /// + /// In en, this message translates to: + /// **'Are you sure?'** + String get areYouSure; + + /// No description provided for @jellyfinUsesAACForTranscoding. + /// + /// In en, this message translates to: + /// **'Jellyfin uses AAC for transcoding'** + String get jellyfinUsesAACForTranscoding; + + /// No description provided for @enableTranscoding. + /// + /// In en, this message translates to: + /// **'Enable Transcoding'** + String get enableTranscoding; + + /// No description provided for @enableTranscodingSubtitle. + /// + /// In en, this message translates to: + /// **'Transcodes music streams on the server side.'** + String get enableTranscodingSubtitle; + + /// No description provided for @bitrate. + /// + /// In en, this message translates to: + /// **'Bitrate'** + String get bitrate; + + /// No description provided for @bitrateSubtitle. + /// + /// In en, this message translates to: + /// **'A higher bitrate gives higher quality audio at the cost of higher bandwidth.'** + String get bitrateSubtitle; + + /// No description provided for @customLocation. + /// + /// In en, this message translates to: + /// **'Custom Location'** + String get customLocation; + + /// No description provided for @appDirectory. + /// + /// In en, this message translates to: + /// **'App Directory'** + String get appDirectory; + + /// No description provided for @addDownloadLocation. + /// + /// In en, this message translates to: + /// **'Add Download Location'** + String get addDownloadLocation; + + /// No description provided for @selectDirectory. + /// + /// In en, this message translates to: + /// **'Select Directory'** + String get selectDirectory; + + /// No description provided for @unknownError. + /// + /// In en, this message translates to: + /// **'Unknown Error'** + String get unknownError; + + /// No description provided for @pathReturnSlashErrorMessage. + /// + /// In en, this message translates to: + /// **'Paths that return \"/\" can\'t be used'** + String get pathReturnSlashErrorMessage; + + /// No description provided for @directoryMustBeEmpty. + /// + /// In en, this message translates to: + /// **'Directory must be empty'** + String get directoryMustBeEmpty; + + /// No description provided for @customLocationsBuggy. + /// + /// In en, this message translates to: + /// **'Custom locations are extremely buggy due to issues with permissions. I\'m thinking of ways to fix this, but for now I wouldn\'t recommend using them.'** + String get customLocationsBuggy; + + /// No description provided for @enterLowPriorityStateOnPause. + /// + /// In en, this message translates to: + /// **'Enter Low-Priority State on Pause'** + String get enterLowPriorityStateOnPause; + + /// No description provided for @enterLowPriorityStateOnPauseSubtitle. + /// + /// In en, this message translates to: + /// **'Lets the notification be swiped away when paused. Also allows Android to kill the service when paused.'** + String get enterLowPriorityStateOnPauseSubtitle; + + /// No description provided for @shuffleAllSongCount. + /// + /// In en, this message translates to: + /// **'Shuffle All Song Count'** + String get shuffleAllSongCount; + + /// No description provided for @shuffleAllSongCountSubtitle. + /// + /// In en, this message translates to: + /// **'Amount of songs to load when using the shuffle all songs button.'** + String get shuffleAllSongCountSubtitle; + + /// No description provided for @viewType. + /// + /// In en, this message translates to: + /// **'View Type'** + String get viewType; + + /// No description provided for @viewTypeSubtitle. + /// + /// In en, this message translates to: + /// **'View type for the music screen'** + String get viewTypeSubtitle; + + /// No description provided for @list. + /// + /// In en, this message translates to: + /// **'List'** + String get list; + + /// No description provided for @grid. + /// + /// In en, this message translates to: + /// **'Grid'** + String get grid; + + /// No description provided for @portrait. + /// + /// In en, this message translates to: + /// **'Portrait'** + String get portrait; + + /// No description provided for @landscape. + /// + /// In en, this message translates to: + /// **'Landscape'** + String get landscape; + + /// List tile title for grid cross axis count. Value will either be the portrait or landscape key. + /// + /// In en, this message translates to: + /// **'{value} Grid Cross-Axis Count'** + String gridCrossAxisCount(String value); + + /// List tile subtitle for grid cross axis count. Value will either be the portrait or landscape key. + /// + /// In en, this message translates to: + /// **'Amount of grid tiles to use per-row when {value}.'** + String gridCrossAxisCountSubtitle(String value); + + /// No description provided for @showTextOnGridView. + /// + /// In en, this message translates to: + /// **'Show text in grid view'** + String get showTextOnGridView; + + /// No description provided for @showTextOnGridViewSubtitle. + /// + /// In en, this message translates to: + /// **'Whether or not to show the text (title, artist etc) on the grid music screen.'** + String get showTextOnGridViewSubtitle; + + /// No description provided for @showCoverAsPlayerBackground. + /// + /// In en, this message translates to: + /// **'Show blurred cover as player background'** + String get showCoverAsPlayerBackground; + + /// No description provided for @showCoverAsPlayerBackgroundSubtitle. + /// + /// In en, this message translates to: + /// **'Whether or not to use blurred cover art as background on player screen.'** + String get showCoverAsPlayerBackgroundSubtitle; + + /// No description provided for @hideSongArtistsIfSameAsAlbumArtists. + /// + /// In en, this message translates to: + /// **'Hide song artists if same as album artists'** + String get hideSongArtistsIfSameAsAlbumArtists; + + /// No description provided for @hideSongArtistsIfSameAsAlbumArtistsSubtitle. + /// + /// In en, this message translates to: + /// **'Whether to show song artists on the album screen if not differing from album artists.'** + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle; + + /// No description provided for @disableGesture. + /// + /// In en, this message translates to: + /// **'Disable gestures'** + String get disableGesture; + + /// No description provided for @disableGestureSubtitle. + /// + /// In en, this message translates to: + /// **'Whether to disables gestures.'** + String get disableGestureSubtitle; + + /// No description provided for @showFastScroller. + /// + /// In en, this message translates to: + /// **'Show fast scroller'** + String get showFastScroller; + + /// No description provided for @theme. + /// + /// In en, this message translates to: + /// **'Theme'** + String get theme; + + /// No description provided for @system. + /// + /// In en, this message translates to: + /// **'System'** + String get system; + + /// No description provided for @light. + /// + /// In en, this message translates to: + /// **'Light'** + String get light; + + /// No description provided for @dark. + /// + /// In en, this message translates to: + /// **'Dark'** + String get dark; + + /// No description provided for @tabs. + /// + /// In en, this message translates to: + /// **'Tabs'** + String get tabs; + + /// No description provided for @cancelSleepTimer. + /// + /// In en, this message translates to: + /// **'Cancel Sleep Timer?'** + String get cancelSleepTimer; + + /// No description provided for @yesButtonLabel. + /// + /// In en, this message translates to: + /// **'YES'** + String get yesButtonLabel; + + /// No description provided for @noButtonLabel. + /// + /// In en, this message translates to: + /// **'NO'** + String get noButtonLabel; + + /// No description provided for @setSleepTimer. + /// + /// In en, this message translates to: + /// **'Set Sleep Timer'** + String get setSleepTimer; + + /// No description provided for @minutes. + /// + /// In en, this message translates to: + /// **'Minutes'** + String get minutes; + + /// No description provided for @invalidNumber. + /// + /// In en, this message translates to: + /// **'Invalid Number'** + String get invalidNumber; + + /// No description provided for @sleepTimerTooltip. + /// + /// In en, this message translates to: + /// **'Sleep timer'** + String get sleepTimerTooltip; + + /// No description provided for @addToPlaylistTooltip. + /// + /// In en, this message translates to: + /// **'Add to playlist'** + String get addToPlaylistTooltip; + + /// No description provided for @addToPlaylistTitle. + /// + /// In en, this message translates to: + /// **'Add to Playlist'** + String get addToPlaylistTitle; + + /// No description provided for @removeFromPlaylistTooltip. + /// + /// In en, this message translates to: + /// **'Remove from playlist'** + String get removeFromPlaylistTooltip; + + /// No description provided for @removeFromPlaylistTitle. + /// + /// In en, this message translates to: + /// **'Remove from Playlist'** + String get removeFromPlaylistTitle; + + /// No description provided for @newPlaylist. + /// + /// In en, this message translates to: + /// **'New Playlist'** + String get newPlaylist; + + /// No description provided for @createButtonLabel. + /// + /// In en, this message translates to: + /// **'CREATE'** + String get createButtonLabel; + + /// No description provided for @playlistCreated. + /// + /// In en, this message translates to: + /// **'Playlist created.'** + String get playlistCreated; + + /// No description provided for @noAlbum. + /// + /// In en, this message translates to: + /// **'No Album'** + String get noAlbum; + + /// No description provided for @noItem. + /// + /// In en, this message translates to: + /// **'No Item'** + String get noItem; + + /// No description provided for @noArtist. + /// + /// In en, this message translates to: + /// **'No Artist'** + String get noArtist; + + /// No description provided for @unknownArtist. + /// + /// In en, this message translates to: + /// **'Unknown Artist'** + String get unknownArtist; + + /// No description provided for @streaming. + /// + /// In en, this message translates to: + /// **'STREAMING'** + String get streaming; + + /// No description provided for @downloaded. + /// + /// In en, this message translates to: + /// **'DOWNLOADED'** + String get downloaded; + + /// No description provided for @transcode. + /// + /// In en, this message translates to: + /// **'TRANSCODE'** + String get transcode; + + /// No description provided for @direct. + /// + /// In en, this message translates to: + /// **'DIRECT'** + String get direct; + + /// No description provided for @statusError. + /// + /// In en, this message translates to: + /// **'STATUS ERROR'** + String get statusError; + + /// No description provided for @queue. + /// + /// In en, this message translates to: + /// **'Queue'** + String get queue; + + /// Popup menu item title for adding an item to the end of the play queue. + /// + /// In en, this message translates to: + /// **'Add to Queue'** + String get addToQueue; + + /// Popup menu item title for inserting an item into the play queue after the currently-playing item. + /// + /// In en, this message translates to: + /// **'Play Next'** + String get playNext; + + /// No description provided for @replaceQueue. + /// + /// In en, this message translates to: + /// **'Replace Queue'** + String get replaceQueue; + + /// No description provided for @instantMix. + /// + /// In en, this message translates to: + /// **'Instant Mix'** + String get instantMix; + + /// No description provided for @goToAlbum. + /// + /// In en, this message translates to: + /// **'Go to Album'** + String get goToAlbum; + + /// No description provided for @removeFavourite. + /// + /// In en, this message translates to: + /// **'Remove Favourite'** + String get removeFavourite; + + /// No description provided for @addFavourite. + /// + /// In en, this message translates to: + /// **'Add Favourite'** + String get addFavourite; + + /// Snackbar message that shows when the user successfully adds items to the end of the play queue. + /// + /// In en, this message translates to: + /// **'Added to queue.'** + String get addedToQueue; + + /// Snackbar message that shows when the user successfully inserts items into the play queue at a location that is not necessarily the end. + /// + /// In en, this message translates to: + /// **'Inserted into queue.'** + String get insertedIntoQueue; + + /// No description provided for @queueReplaced. + /// + /// In en, this message translates to: + /// **'Queue replaced.'** + String get queueReplaced; + + /// No description provided for @removedFromPlaylist. + /// + /// In en, this message translates to: + /// **'Removed from playlist.'** + String get removedFromPlaylist; + + /// No description provided for @startingInstantMix. + /// + /// In en, this message translates to: + /// **'Starting instant mix.'** + String get startingInstantMix; + + /// No description provided for @anErrorHasOccured. + /// + /// In en, this message translates to: + /// **'An error has occured.'** + String get anErrorHasOccured; + + /// No description provided for @responseError. + /// + /// In en, this message translates to: + /// **'{error} Status code {statusCode}.'** + String responseError(String error, int statusCode); + + /// No description provided for @responseError401. + /// + /// In en, this message translates to: + /// **'{error} Status code {statusCode}. This probably means you used the wrong username/password, or your client is no longer logged in.'** + String responseError401(String error, int statusCode); + + /// No description provided for @removeFromMix. + /// + /// In en, this message translates to: + /// **'Remove From Mix'** + String get removeFromMix; + + /// No description provided for @addToMix. + /// + /// In en, this message translates to: + /// **'Add To Mix'** + String get addToMix; + + /// No description provided for @redownloadedItems. + /// + /// In en, this message translates to: + /// **'{count,plural, =0{No redownloads needed.} =1{Redownloaded {count} item} other{Redownloaded {count} items}}'** + String redownloadedItems(int count); + + /// No description provided for @bufferDuration. + /// + /// In en, this message translates to: + /// **'Buffer Duration'** + String get bufferDuration; + + /// No description provided for @bufferDurationSubtitle. + /// + /// In en, this message translates to: + /// **'How much the player should buffer, in seconds. Requires a restart.'** + String get bufferDurationSubtitle; + + /// No description provided for @language. + /// + /// In en, this message translates to: + /// **'Language'** + String get language; + + /// No description provided for @confirm. + /// + /// In en, this message translates to: + /// **'Confirm'** + String get confirm; + + /// No description provided for @showUncensoredLogMessage. + /// + /// In en, this message translates to: + /// **'This log contains your login information. Show?'** + String get showUncensoredLogMessage; + + /// No description provided for @resetTabs. + /// + /// In en, this message translates to: + /// **'Reset tabs'** + String get resetTabs; + + /// Title for message that shows on the views screen when no music libraries could be found. + /// + /// In en, this message translates to: + /// **'No Music Libraries'** + String get noMusicLibrariesTitle; + + /// No description provided for @noMusicLibrariesBody. + /// + /// In en, this message translates to: + /// **'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'** + String get noMusicLibrariesBody; + + /// No description provided for @refresh. + /// + /// In en, this message translates to: + /// **'REFRESH'** + String get refresh; + + /// No description provided for @swipeInsertQueueNext. + /// + /// In en, this message translates to: + /// **'Play Swiped Song Next'** + String get swipeInsertQueueNext; + + /// No description provided for @swipeInsertQueueNextSubtitle. + /// + /// In en, this message translates to: + /// **'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'** + String get swipeInsertQueueNextSubtitle; + + /// No description provided for @redesignBeta. + /// + /// In en, this message translates to: + /// **'Try the Beta'** + String get redesignBeta; + + /// No description provided for @playbackOrderShuffledTooltip. + /// + /// In en, this message translates to: + /// **'Shuffling. Tap to toggle.'** + String get playbackOrderShuffledTooltip; + + /// No description provided for @playbackOrderLinearTooltip. + /// + /// In en, this message translates to: + /// **'Playing in order. Tap to toggle.'** + String get playbackOrderLinearTooltip; + + /// No description provided for @loopModeAllTooltip. + /// + /// In en, this message translates to: + /// **'Looping all. Tap to toggle.'** + String get loopModeAllTooltip; + + /// No description provided for @loopModeOneTooltip. + /// + /// In en, this message translates to: + /// **'Looping one. Tap to toggle.'** + String get loopModeOneTooltip; + + /// No description provided for @loopModeNoneTooltip. + /// + /// In en, this message translates to: + /// **'Not looping. Tap to toggle.'** + String get loopModeNoneTooltip; + + /// No description provided for @skipToPrevious. + /// + /// In en, this message translates to: + /// **'Skip to Previous Song'** + String get skipToPrevious; + + /// No description provided for @skipToNext. + /// + /// In en, this message translates to: + /// **'Skip to Next Song'** + String get skipToNext; + + /// No description provided for @togglePlayback. + /// + /// In en, this message translates to: + /// **'Toggle Playback'** + String get togglePlayback; + + /// No description provided for @playArtist. + /// + /// In en, this message translates to: + /// **'Play all albums by {artist}'** + String playArtist(String artist); + + /// No description provided for @shuffleArtist. + /// + /// In en, this message translates to: + /// **'Shuffle all albums by {artist}'** + String shuffleArtist(String artist); + + /// No description provided for @downloadArtist. + /// + /// In en, this message translates to: + /// **'Download all albums by {artist}'** + String downloadArtist(String artist); + + /// No description provided for @deleteFromDevice. + /// + /// In en, this message translates to: + /// **'Delete from Device'** + String get deleteFromDevice; + + /// No description provided for @download. + /// + /// In en, this message translates to: + /// **'Download'** + String get download; + + /// No description provided for @sync. + /// + /// In en, this message translates to: + /// **'Synchronize with Server'** + String get sync; + + /// No description provided for @about. + /// + /// In en, this message translates to: + /// **'About Finamp'** + String get about; +} + +class _AppLocalizationsDelegate + extends LocalizationsDelegate { + const _AppLocalizationsDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } + + @override + bool isSupported(Locale locale) => [ + 'ar', + 'bg', + 'ca', + 'cs', + 'da', + 'de', + 'el', + 'en', + 'es', + 'et', + 'fi', + 'fr', + 'hr', + 'hu', + 'it', + 'ja', + 'ko', + 'nb', + 'nl', + 'pl', + 'pt', + 'ru', + 'sv', + 'sw', + 'szl', + 'th', + 'tr', + 'uk', + 'vi', + 'zh' + ].contains(locale.languageCode); + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when language+script+country codes are specified. + switch (locale.toString()) { + case 'zh_Hant_HK': + return AppLocalizationsZhHantHk(); + } + + // Lookup logic when language+script codes are specified. + switch (locale.languageCode) { + case 'zh': + { + switch (locale.scriptCode) { + case 'Hant': + return AppLocalizationsZhHant(); + } + break; + } + } + + // Lookup logic when language+country codes are specified. + switch (locale.languageCode) { + case 'pt': + { + switch (locale.countryCode) { + case 'BR': + return AppLocalizationsPtBr(); + } + break; + } + } + + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'ar': + return AppLocalizationsAr(); + case 'bg': + return AppLocalizationsBg(); + case 'ca': + return AppLocalizationsCa(); + case 'cs': + return AppLocalizationsCs(); + case 'da': + return AppLocalizationsDa(); + case 'de': + return AppLocalizationsDe(); + case 'el': + return AppLocalizationsEl(); + case 'en': + return AppLocalizationsEn(); + case 'es': + return AppLocalizationsEs(); + case 'et': + return AppLocalizationsEt(); + case 'fi': + return AppLocalizationsFi(); + case 'fr': + return AppLocalizationsFr(); + case 'hr': + return AppLocalizationsHr(); + case 'hu': + return AppLocalizationsHu(); + case 'it': + return AppLocalizationsIt(); + case 'ja': + return AppLocalizationsJa(); + case 'ko': + return AppLocalizationsKo(); + case 'nb': + return AppLocalizationsNb(); + case 'nl': + return AppLocalizationsNl(); + case 'pl': + return AppLocalizationsPl(); + case 'pt': + return AppLocalizationsPt(); + case 'ru': + return AppLocalizationsRu(); + case 'sv': + return AppLocalizationsSv(); + case 'sw': + return AppLocalizationsSw(); + case 'szl': + return AppLocalizationsSzl(); + case 'th': + return AppLocalizationsTh(); + case 'tr': + return AppLocalizationsTr(); + case 'uk': + return AppLocalizationsUk(); + case 'vi': + return AppLocalizationsVi(); + case 'zh': + return AppLocalizationsZh(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.'); +} diff --git a/lib/l10n/app_localizations_ar.dart b/lib/l10n/app_localizations_ar.dart new file mode 100644 index 0000000..d3ddfeb --- /dev/null +++ b/lib/l10n/app_localizations_ar.dart @@ -0,0 +1,735 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Arabic (`ar`). +class AppLocalizationsAr extends AppLocalizations { + AppLocalizationsAr([String locale = 'ar']) : super(locale); + + @override + String startupError(String error) { + return '‐شيء خطأ حصل اثناء تفتيح التطبيك! الخطأ هو:$error\n\nاقتح تعليقةعلى في الموقع مع لقتة شاشة من هذا الصفحة. إذا هذا الخطأ يستمر, إمسح تخزين التطبيق.'; + } + + @override + String get serverUrl => 'عنوان الخادم'; + + @override + String get internalExternalIpExplanation => + 'إذا تريد ان توصل خدامة \"جلي فين\" من بعيد, يجيب ان تستعمل آي بي(IP) الخارجي.\n\nإذا خادمك يستعمل منافذ الويب(80 أو 443), لا يجب ان تحدد منفذ. هذه محتمل جدا إذا خادمك بستعمل\"Reverse proxy\".'; + + @override + String get emptyServerUrl => 'لا يمكن عنوان الخادم يكون فارغ'; + + @override + String get urlStartWithHttps => + 'العنوان يجب ان يبدأ مع \"//:http\" أو \"//:https\"'; + + @override + String get urlTrailingSlash => 'العنوان لا يمكن ان ينهي مع \"/\"'; + + @override + String get username => 'اسم المستعمل'; + + @override + String get password => 'كلمة السرية'; + + @override + String get logs => 'السجلات'; + + @override + String get next => 'التالي'; + + @override + String get selectMusicLibraries => 'إختار مكاتب الأغاني'; + + @override + String get couldNotFindLibraries => 'لا يوجد أي مكتب.'; + + @override + String get unknownName => 'إسم غير معروف'; + + @override + String get songs => 'الأغاني'; + + @override + String get albums => 'ألبومات'; + + @override + String get artists => 'الفنانين'; + + @override + String get genres => 'التصنيفات'; + + @override + String get playlists => 'قوائم الأغاني'; + + @override + String get startMix => 'خلط فوري'; + + @override + String get startMixNoSongsArtist => + 'إكبس طويل على البوم لتضيف أو تزيل هم من بناء الخلطة قبل ان تبدأ الخلطة'; + + @override + String get startMixNoSongsAlbum => + 'إكبس طويل على البوم لتضيف أو تزيل ها من بناء الخلطة قبل ان تبدأ الخلطة'; + + @override + String get music => 'موسيقى'; + + @override + String get clear => 'إمسح'; + + @override + String get favourites => 'مفضلات'; + + @override + String get shuffleAll => 'استماع عشوائي للكل'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'التنزيلات'; + + @override + String get settings => 'الإعدادات'; + + @override + String get offlineMode => 'موضع غير الإتصال'; + + @override + String get sortOrder => 'ترتيب الفرز'; + + @override + String get sortBy => 'فرز'; + + @override + String get album => 'ألبوم'; + + @override + String get albumArtist => 'فنان الألبوم'; + + @override + String get artist => 'الفنان'; + + @override + String get budget => 'ميزنية'; + + @override + String get communityRating => 'تقييم الجمهور'; + + @override + String get criticRating => 'تقييم النقاد'; + + @override + String get dateAdded => 'تاريخ الإضافة'; + + @override + String get datePlayed => 'تاريخ استماع'; + + @override + String get playCount => 'عدد الاستمعات'; + + @override + String get premiereDate => 'تاريخ عرض الأول'; + + @override + String get productionYear => 'سنة الإنتاج'; + + @override + String get name => 'إسم'; + + @override + String get random => 'عشوائي'; + + @override + String get revenue => 'إيرادات'; + + @override + String get runtime => 'وقت تشغيل'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'نزل صور المفقودة'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: ' تم تنزيل $count صور المفقودة', + one: 'تم تنزيل $count صورة مفقودة', + zero: 'لا يوجد صور مفقودة', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'اخطأ التنزيل'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count تنزيلات', + one: '$count تنزيل', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count بنود', + one: '$count بند', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count صور', + one: '$count صورة', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count متكمل'; + } + + @override + String dlFailed(int count) { + return '$count فشل'; + } + + @override + String dlEnqueued(int count) { + return '$count ينتضر النزيل'; + } + + @override + String dlRunning(int count) { + return '$count يتم تنزيل الآن'; + } + + @override + String get downloadErrorsTitle => 'اخطأ التنزيل'; + + @override + String get noErrors => 'لا يوجد اخطأ!'; + + @override + String get errorScreenError => + 'حدث خطأ اثناء حصول على قائمة الأخطأ! في هذه المرحلة ربما يجب عليك ان تفتح تعليقة على <‎GitHub> و تمسح تخزين التطبيق'; + + @override + String get failedToGetSongFromDownloadId => + 'فشل ان يجد الاغنية من رقم التنزيل'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'خطأ'; + + @override + String discNumber(int number) { + return 'القرس $number'; + } + + @override + String get playButtonLabel => 'استمع'; + + @override + String get shuffleButtonLabel => 'استمع عشوائياً'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count أغاني', + one: '$count أغتية', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'غير اسم قائمة الأغاني'; + + @override + String get editPlaylistNameTitle => 'غير اسم قائمة الأغاني'; + + @override + String get required => 'ملزوم'; + + @override + String get updateButtonLabel => 'تحديث'; + + @override + String get playlistNameUpdated => 'تم تحديث إسم قائمة الأغاني.'; + + @override + String get favourite => 'المفضل'; + + @override + String get downloadsDeleted => 'تم إزالة التنزيلات'; + + @override + String get addDownloads => 'إضافة تنزيلات'; + + @override + String get location => 'موقع'; + + @override + String get downloadsAdded => 'تم اضافة التنزيلات'; + + @override + String get addButtonLabel => 'إضافة'; + + @override + String get shareLogs => 'شارك السجلات'; + + @override + String get logsCopied => 'تم نسخ السجلات.'; + + @override + String get message => 'رسالة'; + + @override + String get stackTrace => 'إشارة تراكمية'; + + @override + String get applicationLegalese => + 'مرخص مع رخصة موزيلا العمومية . الشريفة توجد على:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'تحويل'; + + @override + String get downloadLocations => 'مواقع التنزيل'; + + @override + String get audioService => 'خدمة الصوت'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'تخطيط و ظاهرة'; + + @override + String get notAvailableInOfflineMode => 'عير متوفر في وضع غير الإتصال'; + + @override + String get logOut => 'تسجيل الخروج'; + + @override + String get downloadedSongsWillNotBeDeleted => 'لن تزيل لأغني التي تم تنزيله'; + + @override + String get areYouSure => 'هل انت متأكد؟'; + + @override + String get jellyfinUsesAACForTranscoding => + '\"جلي فين\" يستعمل مشفر للتحويل'; + + @override + String get enableTranscoding => 'تمكين التحويل'; + + @override + String get enableTranscodingSubtitle => + 'إذا ممكن, بث الموسيقى سايتحول من الخادم'; + + @override + String get bitrate => 'معدل البتات'; + + @override + String get bitrateSubtitle => + 'معدل بتات اعلى يعطي جودة صوت أحسن واكن يستعمل اكثر بيانات.'; + + @override + String get customLocation => 'موقع مخصص'; + + @override + String get appDirectory => 'مجلّد التطبيق'; + + @override + String get addDownloadLocation => 'إضافة مكان التنزيل'; + + @override + String get selectDirectory => 'إختار المجلد'; + + @override + String get unknownError => 'خطأ غير معروف'; + + @override + String get pathReturnSlashErrorMessage => + 'مسارات التي ترجع \"/\" لا يمكن ان تستعمل'; + + @override + String get directoryMustBeEmpty => 'المجلد يجب ان يكون فارغ'; + + @override + String get customLocationsBuggy => + 'المواقع المخصصة عرضة للأخطأ لأن يوجد مشاكل مع الأذونات. أنا أحوال إصلاحه, و لكن لا أنصح ان تستغدمه.'; + + @override + String get enterLowPriorityStateOnPause => + 'تشغيل وضع عندما توقف استماع مؤقتاً'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'إذا ممكن، يمكن ان تمسح الإعلام عنمدا توقف مؤقتاً للاستماع. و يمكن \"اندرويد\" ان يقتل الخدمة.'; + + @override + String get shuffleAllSongCount => 'استماع عشوائي لعدد الأغاني'; + + @override + String get shuffleAllSongCountSubtitle => + 'عدد الأغاني التي تحمل عندما تستعمل كبسة \"استماع عشوائ لكل الأغاني\".'; + + @override + String get viewType => 'نوع العرض'; + + @override + String get viewTypeSubtitle => 'نوع عرض لصفة الموسيقى'; + + @override + String get list => 'قائمة'; + + @override + String get grid => 'شبكة'; + + @override + String get portrait => 'عمودي'; + + @override + String get landscape => 'اقفي'; + + @override + String gridCrossAxisCount(String value) { + return 'عدد محور معامد في عرض $value'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'كم مربعات تستعمل لكل صف عندما الشاشة تكون $value.'; + } + + @override + String get showTextOnGridView => 'أظهر كلمات على عرض الشبك'; + + @override + String get showTextOnGridViewSubtitle => + 'سواء ان تظهر كلمات [الإسم، الفنان، أو الباقي] على صفحة الموسيقى التي تستعمل عرض الشبكي.'; + + @override + String get showCoverAsPlayerBackground => + 'أظهر مخلاف البوم غائم على مشغل الموسيقى'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'سواء ان تستعمل مخلاف البوم غائم على مشغل الموسيقى.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'إخفاء أسماء فنانين اﻷغنية إذا هن نفس أسماء فنانين الأابوم'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'سواء ان تخفي فنانين الأغنية من صفحة الألبوم إذا يختلف من فنانين الألبوم.'; + + @override + String get disableGesture => 'Disable gestures'; + + @override + String get disableGestureSubtitle => 'Whether to disables gestures.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'الألوان التطبيق'; + + @override + String get system => 'نظام'; + + @override + String get light => 'ابيض'; + + @override + String get dark => 'غامق'; + + @override + String get tabs => 'التبويبات'; + + @override + String get cancelSleepTimer => 'هل تريد ان تلغي مؤقت النوم؟'; + + @override + String get yesButtonLabel => 'نعم'; + + @override + String get noButtonLabel => 'ﻷ'; + + @override + String get setSleepTimer => 'حدد مؤقت النوم'; + + @override + String get minutes => 'دقائق'; + + @override + String get invalidNumber => 'رقم خاطىء'; + + @override + String get sleepTimerTooltip => 'مؤقت النوم'; + + @override + String get addToPlaylistTooltip => 'إضافة إلى قائمة اغاني'; + + @override + String get addToPlaylistTitle => 'إضافة إلى قائمة اغاني'; + + @override + String get removeFromPlaylistTooltip => 'إزالة من قائمة الأغاني'; + + @override + String get removeFromPlaylistTitle => 'إزالة من قائمة الأغاني'; + + @override + String get newPlaylist => 'قائمة اغاني جديد'; + + @override + String get createButtonLabel => 'إنشاء'; + + @override + String get playlistCreated => 'تم إنشاء قائمة الأغاني.'; + + @override + String get noAlbum => 'بدون البوم'; + + @override + String get noItem => 'لا يوجد بند'; + + @override + String get noArtist => 'بدون فنان'; + + @override + String get unknownArtist => 'فنان غير معروف'; + + @override + String get streaming => 'بث'; + + @override + String get downloaded => 'نزلت'; + + @override + String get transcode => 'تحويل'; + + @override + String get direct => 'مباشر'; + + @override + String get statusError => 'خطأ حالة'; + + @override + String get queue => 'قائمة الإنتظار'; + + @override + String get addToQueue => 'إضافة إلى قائمة الانتظار'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'تبديل قائمة الإنتظار'; + + @override + String get instantMix => 'خلط فوري'; + + @override + String get goToAlbum => 'إذهب إلى الألبوم'; + + @override + String get removeFavourite => 'إزالة من المفضلات'; + + @override + String get addFavourite => 'إضافة إلى المفضلات'; + + @override + String get addedToQueue => 'تم إضافة إالى قائمة الانتظار'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'تم تبديل قائمة الإنتظار.'; + + @override + String get removedFromPlaylist => 'تمت الإزالة من قائمة الأغاني.'; + + @override + String get startingInstantMix => 'ابتداء خلط فوري.'; + + @override + String get anErrorHasOccured => 'حدث خطأ.'; + + @override + String responseError(String error, int statusCode) { + return '$error رمز الخطأ $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error رمز الخطأ $statusCode. ربما يعني ان استخدمت الإسم أو الكامة السرية الخاطئة, أو عميلك لا يعد موثوق.'; + } + + @override + String get removeFromMix => 'إزالة من الخلطة'; + + @override + String get addToMix => 'إضافة إالى الخلطة'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redownloaded $count items', + one: 'Redownloaded $count item', + zero: 'No redownloads needed.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer Duration'; + + @override + String get bufferDurationSubtitle => + 'How much the player should buffer, in seconds. Requires a restart.'; + + @override + String get language => 'اللغة'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_bg.dart b/lib/l10n/app_localizations_bg.dart new file mode 100644 index 0000000..666b24a --- /dev/null +++ b/lib/l10n/app_localizations_bg.dart @@ -0,0 +1,740 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Bulgarian (`bg`). +class AppLocalizationsBg extends AppLocalizations { + AppLocalizationsBg([String locale = 'bg']) : super(locale); + + @override + String startupError(String error) { + return 'Нещо се обърка по време на стартиране на приложението. Грешката беше:$error\n\nДокладвайте проблема, с екранна снимка, на github.com/UnicornsOnLSD/finamp, Ако проблемът продължава, изчистете кеша или преинсталирайте приложението.'; + } + + @override + String get serverUrl => 'URL на сървъра'; + + @override + String get internalExternalIpExplanation => + 'В случай, че искате да имате достъп до вашия Jellyfin сървър дистанционно, трябва да използвате външния си IP адрес.\n\nВ случай, че сървърът ви работи на HTTP порт (80/443), не е нужно да посочвате такъв. Например ако използвате обратно прокси.'; + + @override + String get emptyServerUrl => 'URL адресът на сървъра не може да бъде празен'; + + @override + String get urlStartWithHttps => + 'URL адресът трябва да започва с http:// или https://'; + + @override + String get urlTrailingSlash => + 'URL адресът не трябва да включва наклонена черта'; + + @override + String get username => 'Потребителско име'; + + @override + String get password => 'Парола'; + + @override + String get logs => 'Логове'; + + @override + String get next => 'Следващ'; + + @override + String get selectMusicLibraries => 'Изберете музикални библиотеки'; + + @override + String get couldNotFindLibraries => 'Не могат да бъдат открити библиотеки.'; + + @override + String get unknownName => 'Неизвестно Име'; + + @override + String get songs => 'Песни'; + + @override + String get albums => 'Албуми'; + + @override + String get artists => 'Изпълнители'; + + @override + String get genres => 'Жанрове'; + + @override + String get playlists => 'Плейлисти'; + + @override + String get startMix => 'Стартирайте разбъркано възпроизвеждане'; + + @override + String get startMixNoSongsArtist => + 'Натиснете и задръжте върху изпълнител, за да го добавите или премахнете, от разбъркано възпроизвеждане'; + + @override + String get startMixNoSongsAlbum => + 'Натиснете и задръжте върху албум, за да го добавите или премахнете от разбъркано възпроизвеждане'; + + @override + String get music => 'Музика'; + + @override + String get clear => 'Изчисти'; + + @override + String get favourites => 'Любими'; + + @override + String get shuffleAll => 'Възпроизвеждане в случаен ред'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Изтегляния'; + + @override + String get settings => 'Настройки'; + + @override + String get offlineMode => 'Офлайн режим'; + + @override + String get sortOrder => 'Подредба'; + + @override + String get sortBy => 'Подредба по'; + + @override + String get album => 'Албум'; + + @override + String get albumArtist => 'Изпълнител на албума'; + + @override + String get artist => 'Изпълнител'; + + @override + String get budget => 'Бюджет'; + + @override + String get communityRating => 'Обществен рейтинг'; + + @override + String get criticRating => 'Рейтинг на професионалната общност'; + + @override + String get dateAdded => 'Дата на добавяне'; + + @override + String get datePlayed => 'Дата на последно изпълнение'; + + @override + String get playCount => 'Брой изпълнения'; + + @override + String get premiereDate => 'Премиерна дата'; + + @override + String get productionYear => 'Година на издаване'; + + @override + String get name => 'Име'; + + @override + String get random => 'Произволно'; + + @override + String get revenue => 'Приходи'; + + @override + String get runtime => 'Продължителност'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Изтегляне на липсващите изображения'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Изтегляне $count липсващи изображения', + one: 'Изтегляне $count липсващи изображения', + zero: 'Не са открити липсващи изображения', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Грешки при изтеглянето'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count изтегляне', + one: '$count изтегляне', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count елементи', + one: '$count елемент', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count изображения', + one: '$count изображение', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count завършено'; + } + + @override + String dlFailed(int count) { + return '$count грешка'; + } + + @override + String dlEnqueued(int count) { + return '$count опашка'; + } + + @override + String dlRunning(int count) { + return '$count изпълнява се'; + } + + @override + String get downloadErrorsTitle => 'Грешки при изтегляне'; + + @override + String get noErrors => 'Без грешки!'; + + @override + String get errorScreenError => + 'Възникна грешка при получаване на списъка с грешки! Преинсталирайте приложението и съобщете за проблема на GitHub'; + + @override + String get failedToGetSongFromDownloadId => + 'Неуспех при получаване на песен, посредством ID на изтегляне'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Грешка'; + + @override + String discNumber(int number) { + return 'Диск $number'; + } + + @override + String get playButtonLabel => 'ПУСНИ'; + + @override + String get shuffleButtonLabel => 'РАЗБЪРКАНО'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Песни', + one: '$count Песен', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => + 'Редактирай името на списъка за изпълнение'; + + @override + String get editPlaylistNameTitle => + 'Редактирай името на списъка за изпълнение'; + + @override + String get required => 'Задължително'; + + @override + String get updateButtonLabel => 'АКТУАЛИЗАЦИЯ'; + + @override + String get playlistNameUpdated => + 'Името на списъка за изпълнение е обновено.'; + + @override + String get favourite => 'Любими'; + + @override + String get downloadsDeleted => 'Изтеглянията са изтрити.'; + + @override + String get addDownloads => 'Добави за изтегляне'; + + @override + String get location => 'Местоположение'; + + @override + String get downloadsAdded => 'Добавено в изтегляния.'; + + @override + String get addButtonLabel => 'ДОБАВИ'; + + @override + String get shareLogs => 'Споделете логовете'; + + @override + String get logsCopied => 'Логове копирани.'; + + @override + String get message => 'Съобщение'; + + @override + String get stackTrace => 'Проследяване на стека'; + + @override + String get applicationLegalese => + 'Лиценз Mozilla Public License 2.0. Програмният код е достъпен на:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Транскодиране'; + + @override + String get downloadLocations => 'Местоположение на изтеглянията'; + + @override + String get audioService => 'Аудио услуга'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Оформление и тема'; + + @override + String get notAvailableInOfflineMode => 'Недостъпно в офлайн режим'; + + @override + String get logOut => 'Излезте от профила си'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Изтеглените песни няма да бъдат изтрити'; + + @override + String get areYouSure => 'Сигурни ли сте?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin използва AAC за транскодиране'; + + @override + String get enableTranscoding => 'Активиране на транскодирането'; + + @override + String get enableTranscodingSubtitle => + 'Транскодирането на музикалните потоци се осъществява от страна на сървъра.'; + + @override + String get bitrate => 'Битрейт'; + + @override + String get bitrateSubtitle => + 'По-високият битрейт гарантира висококачествено аудио за сметка на завишен мрежови трафик.'; + + @override + String get customLocation => 'Персонализирано местоположение'; + + @override + String get appDirectory => 'Директория на приложението'; + + @override + String get addDownloadLocation => 'Добавете местоположение за изтегляне'; + + @override + String get selectDirectory => 'Изберете директория'; + + @override + String get unknownError => 'Неизвестна грешка'; + + @override + String get pathReturnSlashErrorMessage => + 'Невъзможно е указването на път, използващ \"/\"'; + + @override + String get directoryMustBeEmpty => 'Директорията трябва да е празна'; + + @override + String get customLocationsBuggy => + 'Персонализираните местоположения са изключително нестабилни, поради проблеми с правата. Обмислям варианти са справяне с проблема, но за сега непрепоръчвам тяхното използване.'; + + @override + String get enterLowPriorityStateOnPause => + 'При пауза, използвай режим на нисък приоритет'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Известията да бъдат отхвърлени при пауза. Също така позволи на Android да прекрати услугата при пауза.'; + + @override + String get shuffleAllSongCount => 'Разбъркайте всички песни'; + + @override + String get shuffleAllSongCountSubtitle => + 'Брой песни за зареждане при използване на бутона за разбъркване на всички песни.'; + + @override + String get viewType => 'Вид преглед'; + + @override + String get viewTypeSubtitle => 'Вид преглед на плейъра'; + + @override + String get list => 'Списък'; + + @override + String get grid => 'Решетка'; + + @override + String get portrait => 'Портретен'; + + @override + String get landscape => 'Пейзажен'; + + @override + String gridCrossAxisCount(String value) { + return '$value Брой елементи в решетката'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Броят на показваните елементи на ред, когато $value.'; + } + + @override + String get showTextOnGridView => 'Показване на текст в решетъчен изглед'; + + @override + String get showTextOnGridViewSubtitle => + 'Дали да се показва или не текст (името на песента, изпълнителя и т.н.), в решетъчен режим.'; + + @override + String get showCoverAsPlayerBackground => + 'Показване на замъглена обложка като фон на плейъра'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Дали да се показва или не, замъглена обложка на албума като фон на плейъра.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Скриване изпълнителя на песента, ако е същият като изпълнителя на албума'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Дали да се покаже изпълнителят на песента на екрана, ако не се различава от изпълнителя на албума.'; + + @override + String get disableGesture => 'Disable gestures'; + + @override + String get disableGestureSubtitle => 'Whether to disables gestures.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Тема'; + + @override + String get system => 'Система'; + + @override + String get light => 'Светла'; + + @override + String get dark => 'Тъмна'; + + @override + String get tabs => 'Раздели'; + + @override + String get cancelSleepTimer => 'Отмяна на таймера?'; + + @override + String get yesButtonLabel => 'Да'; + + @override + String get noButtonLabel => 'Не'; + + @override + String get setSleepTimer => 'Задаване на таймер'; + + @override + String get minutes => 'Минути'; + + @override + String get invalidNumber => 'Невалидно число'; + + @override + String get sleepTimerTooltip => 'Таймер'; + + @override + String get addToPlaylistTooltip => 'Добавяне към списъка за изпълнение'; + + @override + String get addToPlaylistTitle => 'Добавяне към списъка за изпълнение'; + + @override + String get removeFromPlaylistTooltip => 'Remove from playlist'; + + @override + String get removeFromPlaylistTitle => 'Remove from Playlist'; + + @override + String get newPlaylist => 'Нов списък за изпълнение'; + + @override + String get createButtonLabel => 'Създаване'; + + @override + String get playlistCreated => 'Списъкът за изпълнение е създаден.'; + + @override + String get noAlbum => 'Липсващ албум'; + + @override + String get noItem => 'Липсващ файл'; + + @override + String get noArtist => 'Липсващ изпълнител'; + + @override + String get unknownArtist => 'Неизвестен изпълнител'; + + @override + String get streaming => 'Стрийминг'; + + @override + String get downloaded => 'Изтегляне'; + + @override + String get transcode => 'Транскодиране'; + + @override + String get direct => 'Непосредствен'; + + @override + String get statusError => 'Грешка в състоянието'; + + @override + String get queue => 'Опашка'; + + @override + String get addToQueue => 'Добавяне към опашката'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Заменете опашката'; + + @override + String get instantMix => 'Незабавен микс'; + + @override + String get goToAlbum => 'Отидете в албума'; + + @override + String get removeFavourite => 'Премахнете любими'; + + @override + String get addFavourite => 'Добавете в любими'; + + @override + String get addedToQueue => 'Добавено към опашката.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Опашката е заменена.'; + + @override + String get removedFromPlaylist => 'Removed from playlist.'; + + @override + String get startingInstantMix => 'Стартиране на незабавен микс.'; + + @override + String get anErrorHasOccured => 'Появи се грешка.'; + + @override + String responseError(String error, int statusCode) { + return '$error Код на грешката $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Код на грешката $statusCode. Това вероятно означава, че сте използвали грешно потребителско име/парола, или вашият клиент вече не е удостоверен.'; + } + + @override + String get removeFromMix => 'Премахни от микса'; + + @override + String get addToMix => 'Добави към микса'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Повторно изтегляне $count елементи', + one: 'Повторно изтегляне $count елемент', + zero: 'Не е необходимо повторно изтегляне.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer Duration'; + + @override + String get bufferDurationSubtitle => + 'How much the player should buffer, in seconds. Requires a restart.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_ca.dart b/lib/l10n/app_localizations_ca.dart new file mode 100644 index 0000000..787b30e --- /dev/null +++ b/lib/l10n/app_localizations_ca.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Catalan Valencian (`ca`). +class AppLocalizationsCa extends AppLocalizations { + AppLocalizationsCa([String locale = 'ca']) : super(locale); + + @override + String startupError(String error) { + return 'S\'ha produït un error durant l\'inici de l\'aplicació. L\'error va ser: $error\n\nCreeu un problema a github.com/UnicornsOnLSD/finamp amb una captura de pantalla d\'aquesta pàgina. Si aquest problema persisteix, podeu esborrar les dades de l\'aplicació per restablir-la.'; + } + + @override + String get serverUrl => 'URL del servidor'; + + @override + String get internalExternalIpExplanation => + 'Si voleu poder accedir al vostre servidor Jellyfin de forma remota, heu d\'utilitzar la vostra IP externa.\n\nSi el vostre servidor està en un port HTTP (80/443), no cal que especifiqueu cap port. És probable que aquest sigui el cas si el vostre servidor està darrere d\'un servidor intermediari invers.'; + + @override + String get emptyServerUrl => 'Server URL cannot be empty'; + + @override + String get urlStartWithHttps => 'URL must start with http:// or https://'; + + @override + String get urlTrailingSlash => 'URL must not include a trailing slash'; + + @override + String get username => 'Username'; + + @override + String get password => 'Password'; + + @override + String get logs => 'Logs'; + + @override + String get next => 'Next'; + + @override + String get selectMusicLibraries => 'Select Music Libraries'; + + @override + String get couldNotFindLibraries => 'Could not find any libraries.'; + + @override + String get unknownName => 'Unknown Name'; + + @override + String get songs => 'Songs'; + + @override + String get albums => 'Albums'; + + @override + String get artists => 'Artists'; + + @override + String get genres => 'Genres'; + + @override + String get playlists => 'Playlists'; + + @override + String get startMix => 'Start Mix'; + + @override + String get startMixNoSongsArtist => + 'Long-press an artist to add or remove it from the mix builder before starting a mix'; + + @override + String get startMixNoSongsAlbum => + 'Long-press an album to add or remove it from the mix builder before starting a mix'; + + @override + String get music => 'Music'; + + @override + String get clear => 'Clear'; + + @override + String get favourites => 'Favourites'; + + @override + String get shuffleAll => 'Shuffle all'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Downloads'; + + @override + String get settings => 'Settings'; + + @override + String get offlineMode => 'Offline Mode'; + + @override + String get sortOrder => 'Sort order'; + + @override + String get sortBy => 'Sort by'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Album Artist'; + + @override + String get artist => 'Artist'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Community Rating'; + + @override + String get criticRating => 'Critic Rating'; + + @override + String get dateAdded => 'Date Added'; + + @override + String get datePlayed => 'Date Played'; + + @override + String get playCount => 'Play Count'; + + @override + String get premiereDate => 'Premiere Date'; + + @override + String get productionYear => 'Production Year'; + + @override + String get name => 'Name'; + + @override + String get random => 'Random'; + + @override + String get revenue => 'Revenue'; + + @override + String get runtime => 'Runtime'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Download missing images'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Downloaded $count missing images', + one: 'Downloaded $count missing image', + zero: 'No missing images found', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Download errors'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count downloads', + one: '$count download', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count items', + one: '$count item', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count images', + one: '$count image', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count complete'; + } + + @override + String dlFailed(int count) { + return '$count failed'; + } + + @override + String dlEnqueued(int count) { + return '$count enqueued'; + } + + @override + String dlRunning(int count) { + return '$count running'; + } + + @override + String get downloadErrorsTitle => 'Download Errors'; + + @override + String get noErrors => 'No errors!'; + + @override + String get errorScreenError => + 'An error occurred while getting the list of errors! At this point, you should probably just create an issue on GitHub and delete app data'; + + @override + String get failedToGetSongFromDownloadId => + 'Failed to get song from download ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Error'; + + @override + String discNumber(int number) { + return 'Disc $number'; + } + + @override + String get playButtonLabel => 'PLAY'; + + @override + String get shuffleButtonLabel => 'SHUFFLE'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Songs', + one: '$count Song', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Edit playlist name'; + + @override + String get editPlaylistNameTitle => 'Edit Playlist Name'; + + @override + String get required => 'Required'; + + @override + String get updateButtonLabel => 'UPDATE'; + + @override + String get playlistNameUpdated => 'Playlist name updated.'; + + @override + String get favourite => 'Favourite'; + + @override + String get downloadsDeleted => 'Downloads deleted.'; + + @override + String get addDownloads => 'Add Downloads'; + + @override + String get location => 'Location'; + + @override + String get downloadsAdded => 'Downloads added.'; + + @override + String get addButtonLabel => 'ADD'; + + @override + String get shareLogs => 'Share logs'; + + @override + String get logsCopied => 'Logs copied.'; + + @override + String get message => 'Message'; + + @override + String get stackTrace => 'Stack Trace'; + + @override + String get applicationLegalese => + 'Licensed with the Mozilla Public License 2.0. Source code available at:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcoding'; + + @override + String get downloadLocations => 'Download Locations'; + + @override + String get audioService => 'Audio Service'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Layout & Theme'; + + @override + String get notAvailableInOfflineMode => 'Not available in offline mode'; + + @override + String get logOut => 'Log Out'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Downloaded songs will not be deleted'; + + @override + String get areYouSure => 'Are you sure?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin uses AAC for transcoding'; + + @override + String get enableTranscoding => 'Enable Transcoding'; + + @override + String get enableTranscodingSubtitle => + 'Transcodes music streams on the server side.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'A higher bitrate gives higher quality audio at the cost of higher bandwidth.'; + + @override + String get customLocation => 'Custom Location'; + + @override + String get appDirectory => 'App Directory'; + + @override + String get addDownloadLocation => 'Add Download Location'; + + @override + String get selectDirectory => 'Select Directory'; + + @override + String get unknownError => 'Unknown Error'; + + @override + String get pathReturnSlashErrorMessage => + 'Paths that return \"/\" can\'t be used'; + + @override + String get directoryMustBeEmpty => 'Directory must be empty'; + + @override + String get customLocationsBuggy => + 'Custom locations are extremely buggy due to issues with permissions. I\'m thinking of ways to fix this, but for now I wouldn\'t recommend using them.'; + + @override + String get enterLowPriorityStateOnPause => + 'Enter Low-Priority State on Pause'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Lets the notification be swiped away when paused. Also allows Android to kill the service when paused.'; + + @override + String get shuffleAllSongCount => 'Shuffle All Song Count'; + + @override + String get shuffleAllSongCountSubtitle => + 'Amount of songs to load when using the shuffle all songs button.'; + + @override + String get viewType => 'View Type'; + + @override + String get viewTypeSubtitle => 'View type for the music screen'; + + @override + String get list => 'List'; + + @override + String get grid => 'Grid'; + + @override + String get portrait => 'Portrait'; + + @override + String get landscape => 'Landscape'; + + @override + String gridCrossAxisCount(String value) { + return '$value Grid Cross-Axis Count'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Amount of grid tiles to use per-row when $value.'; + } + + @override + String get showTextOnGridView => 'Show text in grid view'; + + @override + String get showTextOnGridViewSubtitle => + 'Whether or not to show the text (title, artist etc) on the grid music screen.'; + + @override + String get showCoverAsPlayerBackground => + 'Show blurred cover as player background'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Whether or not to use blurred cover art as background on player screen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Hide song artists if same as album artists'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Whether to show song artists on the album screen if not differing from album artists.'; + + @override + String get disableGesture => 'Disable gestures'; + + @override + String get disableGestureSubtitle => 'Whether to disables gestures.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Theme'; + + @override + String get system => 'System'; + + @override + String get light => 'Light'; + + @override + String get dark => 'Dark'; + + @override + String get tabs => 'Tabs'; + + @override + String get cancelSleepTimer => 'Cancel Sleep Timer?'; + + @override + String get yesButtonLabel => 'YES'; + + @override + String get noButtonLabel => 'NO'; + + @override + String get setSleepTimer => 'Set Sleep Timer'; + + @override + String get minutes => 'Minutes'; + + @override + String get invalidNumber => 'Invalid Number'; + + @override + String get sleepTimerTooltip => 'Sleep timer'; + + @override + String get addToPlaylistTooltip => 'Add to playlist'; + + @override + String get addToPlaylistTitle => 'Add to Playlist'; + + @override + String get removeFromPlaylistTooltip => 'Remove from playlist'; + + @override + String get removeFromPlaylistTitle => 'Remove from Playlist'; + + @override + String get newPlaylist => 'New Playlist'; + + @override + String get createButtonLabel => 'CREATE'; + + @override + String get playlistCreated => 'Playlist created.'; + + @override + String get noAlbum => 'No Album'; + + @override + String get noItem => 'No Item'; + + @override + String get noArtist => 'No Artist'; + + @override + String get unknownArtist => 'Unknown Artist'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'DESCARREGAT'; + + @override + String get transcode => 'TRANSCODIFICACIÓ'; + + @override + String get direct => 'DIRECTE'; + + @override + String get statusError => 'ERROR D\'ESTAT'; + + @override + String get queue => 'Cua'; + + @override + String get addToQueue => 'Afegir a la cua'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Substitueix la cua'; + + @override + String get instantMix => 'Barreja instantània'; + + @override + String get goToAlbum => 'Vés a l\'àlbum'; + + @override + String get removeFavourite => 'Suprimeix el favorit'; + + @override + String get addFavourite => 'Afegeix favorit'; + + @override + String get addedToQueue => 'S\'ha afegit a la cua.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'S\'ha substituït la cua.'; + + @override + String get removedFromPlaylist => + 'S\'ha suprimit de la llista de reproducció.'; + + @override + String get startingInstantMix => 'Inici de la barreja instantània.'; + + @override + String get anErrorHasOccured => 'S\'ha produït un error.'; + + @override + String responseError(String error, int statusCode) { + return '$error Codi d\'estat $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Codi d\'estat $statusCode. Això probablement vol dir que heu utilitzat un nom d\'usuari/contrasenya incorrecte o que el vostre client ha tancat la sessió.'; + } + + @override + String get removeFromMix => 'Eliminar de la barreja'; + + @override + String get addToMix => 'Afegir a la barreja'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redownloaded $count items', + one: 'Redownloaded $count item', + zero: 'No redownloads needed.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer Duration'; + + @override + String get bufferDurationSubtitle => + 'How much the player should buffer, in seconds. Requires a restart.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_cs.dart b/lib/l10n/app_localizations_cs.dart new file mode 100644 index 0000000..c2317fe --- /dev/null +++ b/lib/l10n/app_localizations_cs.dart @@ -0,0 +1,744 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Czech (`cs`). +class AppLocalizationsCs extends AppLocalizations { + AppLocalizationsCs([String locale = 'cs']) : super(locale); + + @override + String startupError(String error) { + return 'Při spouštění aplikace se něco pokazilo. Chyba: $error\n\nNahlaste prosím problém na stránce github.com/UnicornsOnLSD/finamp společně se snímkem obrazovky této stránky. Pokud tento problém přetrvává, můžete vymazat data aplikace pro její obnovení.'; + } + + @override + String get serverUrl => 'Adresa URL serveru'; + + @override + String get internalExternalIpExplanation => + 'Pokud budete chtít vzdáleně přistupovat k vašemu serveru Jellyfin, budete muset použít vaši externí IP.\n\nPokud je váš server na portu HTTP (80/443), nemusíte specifikovat port. Toto bývá obvyklé, když máte server za reverzní proxy.'; + + @override + String get emptyServerUrl => 'Adresa URL serveru nemůže být prázdná'; + + @override + String get urlStartWithHttps => + 'Adresa URL musí začínat s http:// nebo https://'; + + @override + String get urlTrailingSlash => 'Adresa URL nesmí obsahovat koncové lomítko'; + + @override + String get username => 'Uživatelské jméno'; + + @override + String get password => 'Heslo'; + + @override + String get logs => 'Protokoly'; + + @override + String get next => 'Další'; + + @override + String get selectMusicLibraries => 'Vyberte hudební knihovny'; + + @override + String get couldNotFindLibraries => 'Nebyly nalezeny žádné knihovny.'; + + @override + String get unknownName => 'Neznámý název'; + + @override + String get songs => 'Skladby'; + + @override + String get albums => 'Alba'; + + @override + String get artists => 'Umělci'; + + @override + String get genres => 'Žánry'; + + @override + String get playlists => 'Seznamy skladeb'; + + @override + String get startMix => 'Spustit mix'; + + @override + String get startMixNoSongsArtist => + 'Dlouze podržte prst na umělci pro jeho přidání nebo odebrání z tvorby mixu před jeho spuštěním'; + + @override + String get startMixNoSongsAlbum => + 'Dlouze podržte prst na albu pro jeho přidání nebo odebrání z tvorby mixu před jeho spuštěním'; + + @override + String get music => 'Hudba'; + + @override + String get clear => 'Vymazat'; + + @override + String get favourites => 'Oblíbené'; + + @override + String get shuffleAll => 'Vše náhodně'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Stažené'; + + @override + String get settings => 'Nastavení'; + + @override + String get offlineMode => 'Režim offline'; + + @override + String get sortOrder => 'Pořadí řazení'; + + @override + String get sortBy => 'Řadit podle'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Umělec alba'; + + @override + String get artist => 'Umělec'; + + @override + String get budget => 'Rozpočet'; + + @override + String get communityRating => 'Komunitní hodnocení'; + + @override + String get criticRating => 'Hodnocení kritiků'; + + @override + String get dateAdded => 'Datum přidání'; + + @override + String get datePlayed => 'Datum přehrání'; + + @override + String get playCount => 'Počet přehrání'; + + @override + String get premiereDate => 'Datum premiéry'; + + @override + String get productionYear => 'Rok produkce'; + + @override + String get name => 'Název'; + + @override + String get random => 'Náhodně'; + + @override + String get revenue => 'Výnos'; + + @override + String get runtime => 'Doba běhu'; + + @override + String get syncDownloadedPlaylists => + 'Synchronizovat stažené seznamy skladeb'; + + @override + String get downloadMissingImages => 'Stáhnout chybějící obrázky'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Staženo $count chybějících obrázků', + few: 'Staženy $count chybějící obrázky', + one: 'Stažen $count chybějící obrázek', + zero: 'Nenalezeny žádné chybějící obrázky', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Chyby stahování'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count stahování', + one: '$count stahování', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count položek', + few: '$count položky', + one: '$count položka', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count obrázků', + few: '$count obrázky', + one: '$count obrázek', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count dokončeno'; + } + + @override + String dlFailed(int count) { + return '$count selhalo'; + } + + @override + String dlEnqueued(int count) { + return '$count ve frontě'; + } + + @override + String dlRunning(int count) { + return '$count běží'; + } + + @override + String get downloadErrorsTitle => 'Chyby stahování'; + + @override + String get noErrors => 'Žádné chyby!'; + + @override + String get errorScreenError => + 'Při načítání seznamu chyb došlo k chybě! Vytvořte prosím problém na GitHubu a vymažte data aplikace'; + + @override + String get failedToGetSongFromDownloadId => + 'Error nelze sehnat skladbu s ID pro stažení'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'seznam skladeb', + 'artist': 'umělce', + 'genre': 'žánr', + 'track': 'skladbu', + 'other': '', + }, + ); + return 'Opravdu chcete odstranit $_temp0 \'$itemName\' z tohoto zařízení?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Odstranit'; + + @override + String get deleteDownloadsAbortButtonText => 'Zrušit'; + + @override + String get error => 'Chyba'; + + @override + String discNumber(int number) { + return 'Disk $number'; + } + + @override + String get playButtonLabel => 'PŘEHRÁT'; + + @override + String get shuffleButtonLabel => 'NÁHODNĚ'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count skladeb', + few: '$count skladby', + one: '$count skladba', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Upravit název seznamu skladeb'; + + @override + String get editPlaylistNameTitle => 'Upravit název seznamu skladeb'; + + @override + String get required => 'Vyžadováno'; + + @override + String get updateButtonLabel => 'UPRAVIT'; + + @override + String get playlistNameUpdated => 'Název seznamu skladeb upraven.'; + + @override + String get favourite => 'Oblíbené'; + + @override + String get downloadsDeleted => 'Stahování odstraněna.'; + + @override + String get addDownloads => 'Přidat stahování'; + + @override + String get location => 'Umístění'; + + @override + String get downloadsAdded => 'Stahování přidána.'; + + @override + String get addButtonLabel => 'PŘIDAT'; + + @override + String get shareLogs => 'Sdílet protokoly'; + + @override + String get logsCopied => 'Protokoly zkopírovány.'; + + @override + String get message => 'Zpráva'; + + @override + String get stackTrace => 'Trasování'; + + @override + String get applicationLegalese => + 'Licence Mozilla Public License 2.0. Zdrojový kód je dostupný na stránce:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Překódování'; + + @override + String get downloadLocations => 'Umístění stažených'; + + @override + String get audioService => 'Služba zvuku'; + + @override + String get interactions => 'Interakce'; + + @override + String get layoutAndTheme => 'Rozložení a motiv'; + + @override + String get notAvailableInOfflineMode => 'Není dostupné v režimu offline'; + + @override + String get logOut => 'Odhlásit se'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Stažené skladby nebudou odstraněny'; + + @override + String get areYouSure => 'Opravdu?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin používá pro překódování formát AAC'; + + @override + String get enableTranscoding => 'Zapnout překódování'; + + @override + String get enableTranscodingSubtitle => + 'Překóduje hudební streamy na straně serveru.'; + + @override + String get bitrate => 'Datový tok'; + + @override + String get bitrateSubtitle => + 'Vyšší datový tok poskytuje vyšší kvalitu zvuku, ale zvýší využití internetu.'; + + @override + String get customLocation => 'Vlastní umístění'; + + @override + String get appDirectory => 'Adresář aplikací'; + + @override + String get addDownloadLocation => 'Přidat umístění stažených'; + + @override + String get selectDirectory => 'Vybrat adresář'; + + @override + String get unknownError => 'Neznámá chyba'; + + @override + String get pathReturnSlashErrorMessage => + 'Cesty, které vracejí „/“, nelze použít'; + + @override + String get directoryMustBeEmpty => 'Adresář musí být prázdný'; + + @override + String get customLocationsBuggy => + 'Vlastní umístění bývají kvůli problémům s oprávněními extrémně chybové. Snažíme se tento problém opravit, do té doby ale nedoporučujeme jejich používání.'; + + @override + String get enterLowPriorityStateOnPause => + 'Po pozastavení vstoupit do stavu nízké priority'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Umožní odstranění notifikace při pozastavení. Také umožní systému ukončit službu.'; + + @override + String get shuffleAllSongCount => + 'Počet skladeb pro náhodné přehrávání všeho'; + + @override + String get shuffleAllSongCountSubtitle => + 'Počet skladeb, které se mají načíst při použití tlačítka náhodného přehrávání všech skladeb.'; + + @override + String get viewType => 'Typ zobrazení'; + + @override + String get viewTypeSubtitle => 'Typ zobrazení pro hudební obrazovku'; + + @override + String get list => 'Seznam'; + + @override + String get grid => 'Mřížka'; + + @override + String get portrait => 'Na výšku'; + + @override + String get landscape => 'Na šířku'; + + @override + String gridCrossAxisCount(String value) { + return 'Počet položek mřížky $value'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Počet položek mřížky na řádek $value.'; + } + + @override + String get showTextOnGridView => 'Zobrazit text v zobrazení v mřížce'; + + @override + String get showTextOnGridViewSubtitle => + 'Zda zobrazit text (název, umělce atd.) v mřížkovém zobrazení hudební obrazovky.'; + + @override + String get showCoverAsPlayerBackground => + 'Zobrazit rozmazaný obal jako pozadí přehrávače'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Zda použít rozmazaný obal alba jako pozadí na obrazovce přehrávače.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Nezobrazovat umělce, pokud je totožný s umělcem alba'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Zda zobrazit umělce skladby na obrazovce alba, pokud se neliší od umělců alba.'; + + @override + String get disableGesture => 'Zakázat gesta'; + + @override + String get disableGestureSubtitle => 'Zda zakázat gesta.'; + + @override + String get showFastScroller => 'Zobrazit rychlý posuvník'; + + @override + String get theme => 'Motiv'; + + @override + String get system => 'Systémový'; + + @override + String get light => 'Světlý'; + + @override + String get dark => 'Tmavý'; + + @override + String get tabs => 'Karty'; + + @override + String get cancelSleepTimer => 'Zrušit časovač spánku?'; + + @override + String get yesButtonLabel => 'ANO'; + + @override + String get noButtonLabel => 'NE'; + + @override + String get setSleepTimer => 'Nastavit časovač spánku'; + + @override + String get minutes => 'Minuty'; + + @override + String get invalidNumber => 'Neplatné číslo'; + + @override + String get sleepTimerTooltip => 'Časovač spánku'; + + @override + String get addToPlaylistTooltip => 'Přidat do seznamu skladeb'; + + @override + String get addToPlaylistTitle => 'Přidat do seznamu skladeb'; + + @override + String get removeFromPlaylistTooltip => 'Odebrat ze seznamu skladeb'; + + @override + String get removeFromPlaylistTitle => 'Odebrat ze seznamu skladeb'; + + @override + String get newPlaylist => 'Nový seznam skladeb'; + + @override + String get createButtonLabel => 'VYTVOŘIT'; + + @override + String get playlistCreated => 'Seznam skladeb vytvořen.'; + + @override + String get noAlbum => 'Žádné album'; + + @override + String get noItem => 'Žádná položka'; + + @override + String get noArtist => 'Žádný umělec'; + + @override + String get unknownArtist => 'Neznámý umělec'; + + @override + String get streaming => 'STREAMOVÁNÍ'; + + @override + String get downloaded => 'STAŽENO'; + + @override + String get transcode => 'PŘEKÓDOVÁNÍ'; + + @override + String get direct => 'PŘÍMÝ'; + + @override + String get statusError => 'CHYBA STAVU'; + + @override + String get queue => 'Fronta'; + + @override + String get addToQueue => 'Přidat do fronty'; + + @override + String get playNext => 'Přehrát další'; + + @override + String get replaceQueue => 'Nahradit frontu'; + + @override + String get instantMix => 'Okamžitý mix'; + + @override + String get goToAlbum => 'Přejít na album'; + + @override + String get removeFavourite => 'Odebrat z oblíbených'; + + @override + String get addFavourite => 'Přidat do oblíbených'; + + @override + String get addedToQueue => 'Přidáno do fronty.'; + + @override + String get insertedIntoQueue => 'Vloženo do fronty.'; + + @override + String get queueReplaced => 'Fronta nahrazena.'; + + @override + String get removedFromPlaylist => 'Odebráno ze seznamu skladeb.'; + + @override + String get startingInstantMix => 'Spouštění okamžitého mixu.'; + + @override + String get anErrorHasOccured => 'Vyskytla se chyba.'; + + @override + String responseError(String error, int statusCode) { + return '$error Stavový kód $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Stavový kód $statusCode. Toto nejspíše znamená, že jste použili nesprávné uživatelské jméno / heslo, nebo váš klient již není přihlášen.'; + } + + @override + String get removeFromMix => 'Odebrat z mixu'; + + @override + String get addToMix => 'Přidat do mixu'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Znovu staženo $count položek', + few: 'Znovu staženy$count položky', + one: 'Znovu stažena$count položka', + zero: 'Nejsou potřeba žádná opětovná stažení.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Trvání vyrovnávací paměti'; + + @override + String get bufferDurationSubtitle => + 'Kolik sekund dopředu by měl přehrávač uložit do vyrovnávací paměti. Vyžaduje restart aplikace.'; + + @override + String get language => 'Jazyk'; + + @override + String get confirm => 'Potvrdit'; + + @override + String get showUncensoredLogMessage => + 'Tento protokol zobrazuje vaše přihlašovací informace. Chcete jej zobrazit?'; + + @override + String get resetTabs => 'Obnovit karty'; + + @override + String get noMusicLibrariesTitle => 'Žádné hudební knihovny'; + + @override + String get noMusicLibrariesBody => + 'Finamp nenalezl žádné hudební knihovny. Ujistěte se prosím, že váš server Jellyfin obsahuje alespoň jednu knihovnu s typem obsahu nastaveným na „Hudba“.'; + + @override + String get refresh => 'OBNOVIT'; + + @override + String get swipeInsertQueueNext => 'Přehrát posunutou skladbu jako další'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Zapněte pro vložení skladby jako další položku do fronty po posunutí prstem na skladbě v seznamu skladeb, místo jejího přiřazení na konec.'; + + @override + String get redesignBeta => 'Vyzkoušejte beta verzi'; + + @override + String get playbackOrderShuffledTooltip => 'Náhodně. Klepnutím přepnete.'; + + @override + String get playbackOrderLinearTooltip => + 'Přehrávání v pořadí. Klepnutím přepnete.'; + + @override + String get loopModeAllTooltip => 'Opakování všeho. Klepnutím přepnete.'; + + @override + String get loopModeOneTooltip => 'Opakování jedné. Klepnutím přepnete.'; + + @override + String get loopModeNoneTooltip => 'Bez opakování. Klepnutím přepnete.'; + + @override + String get skipToPrevious => 'Přeskočit na předchozí skladbu'; + + @override + String get skipToNext => 'Přeskočit na další skladbu'; + + @override + String get togglePlayback => 'Přepnout přehrávání'; + + @override + String playArtist(String artist) { + return 'Přehrát všechna alba umělce $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Přehrát náhodně všechna alba umělce $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Stáhnout všechna alba umělce $artist'; + } + + @override + String get deleteFromDevice => 'Smazat ze zařízení'; + + @override + String get download => 'Stáhnout'; + + @override + String get sync => 'Synchronizovat se serverem'; + + @override + String get about => 'O aplikaci Finamp'; +} diff --git a/lib/l10n/app_localizations_da.dart b/lib/l10n/app_localizations_da.dart new file mode 100644 index 0000000..2cbe224 --- /dev/null +++ b/lib/l10n/app_localizations_da.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Danish (`da`). +class AppLocalizationsDa extends AppLocalizations { + AppLocalizationsDa([String locale = 'da']) : super(locale); + + @override + String startupError(String error) { + return 'Noget gik galt under app opstarten. Fejlen er $error\n\nVenligst opret en sag på github.com/UnicornsOnLSD/finamp med et skærmbillede af denne side. Hvis dette problem forbliver, så kan du fjerne dine app data for at nulstille appen.'; + } + + @override + String get serverUrl => 'Server URL'; + + @override + String get internalExternalIpExplanation => + 'Hvis du vil være i stand til at tilgå din Jellyfin server udefra, skal du bruge din eksterne IP.\n\nHvis din server er på HTTP porten (80/443), behøver du ikke angive en port. Dette er som regel tilfældet, hvis din server er bag en reverse proxy.'; + + @override + String get emptyServerUrl => 'Server URL kan ikke være tom'; + + @override + String get urlStartWithHttps => 'URL skal starte med http:// eller https://'; + + @override + String get urlTrailingSlash => + 'URL må ikke indeholde en efterfølgnede stråstreg'; + + @override + String get username => 'Brugernavn'; + + @override + String get password => 'Adgangskode'; + + @override + String get logs => 'Log'; + + @override + String get next => 'Næste'; + + @override + String get selectMusicLibraries => 'Vælg musik biblioteker'; + + @override + String get couldNotFindLibraries => 'Kunne ikke finde nogle biblioteker.'; + + @override + String get unknownName => 'Ukendt navn'; + + @override + String get songs => 'Sange'; + + @override + String get albums => 'Albummer'; + + @override + String get artists => 'Kunstnere'; + + @override + String get genres => 'Genre'; + + @override + String get playlists => 'Afspilningslister'; + + @override + String get startMix => 'Start blanding'; + + @override + String get startMixNoSongsArtist => + 'Tryk (lang tid) på en kunstner for at tilføje eller fjerne den fra blandingen før du starter en blanding'; + + @override + String get startMixNoSongsAlbum => + 'Tryk (lang tid) på et album for at tilføje eller fjerne det fra blandingen for du starter en blanding'; + + @override + String get music => 'Musik'; + + @override + String get clear => 'Ryd'; + + @override + String get favourites => 'Favoritter'; + + @override + String get shuffleAll => 'Bland alle'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Overførelser'; + + @override + String get settings => 'Indstillinger'; + + @override + String get offlineMode => 'Offline tilstand'; + + @override + String get sortOrder => 'Sorter efter'; + + @override + String get sortBy => 'Sortér efter'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Album kunstner'; + + @override + String get artist => 'Kunstner'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Fællesskab bedømmelse'; + + @override + String get criticRating => 'Kritiker bedømmelse'; + + @override + String get dateAdded => 'Dato tilføjet'; + + @override + String get datePlayed => 'Afspillet den'; + + @override + String get playCount => 'Antal afspilninger'; + + @override + String get premiereDate => 'Udgivelsesdato'; + + @override + String get productionYear => 'Produktionsår'; + + @override + String get name => 'Navn'; + + @override + String get random => 'Tilfældig'; + + @override + String get revenue => 'Omsætning'; + + @override + String get runtime => 'Spilletid'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Overførelse mangler billeder'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Overførte $count manglende billeder', + one: 'Overførte $count manglende billeder', + zero: 'Ingen manglende billeder blev fundet', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Overførelsesfejl'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count overførelser', + one: '$count overført', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count emner', + one: '$count emne', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count billeder', + one: '$count billede', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count færdige'; + } + + @override + String dlFailed(int count) { + return '$count fejlede'; + } + + @override + String dlEnqueued(int count) { + return '$count i kø'; + } + + @override + String dlRunning(int count) { + return '$count er igang'; + } + + @override + String get downloadErrorsTitle => 'Overførelsesfejl'; + + @override + String get noErrors => 'Ingen fejl!'; + + @override + String get errorScreenError => + 'Der opstod en fejl under hentningen af listen med fejl! På dette tidspunkt, bedes du oprette en fejl på Github og slette appens data'; + + @override + String get failedToGetSongFromDownloadId => + 'Fejlede under hentning af sang fra overførelse ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Fejl'; + + @override + String discNumber(int number) { + return 'Disk $number'; + } + + @override + String get playButtonLabel => 'AFSPIL'; + + @override + String get shuffleButtonLabel => 'BLAND'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Sange', + one: '$count Sang', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Rediger afspilningslistens navn'; + + @override + String get editPlaylistNameTitle => 'Rediger afspilningslistens navn'; + + @override + String get required => 'Påkrævet'; + + @override + String get updateButtonLabel => 'OPDATÉR'; + + @override + String get playlistNameUpdated => 'Afspilningslistens navn er opdateret.'; + + @override + String get favourite => 'Favorit'; + + @override + String get downloadsDeleted => 'Overførelser slettet.'; + + @override + String get addDownloads => 'Tilføj overførelser'; + + @override + String get location => 'Placering'; + + @override + String get downloadsAdded => 'Overførelse tilføjet.'; + + @override + String get addButtonLabel => 'TILFØJ'; + + @override + String get shareLogs => 'Del log'; + + @override + String get logsCopied => 'Log kopieret.'; + + @override + String get message => 'Besked'; + + @override + String get stackTrace => 'Bunke spor'; + + @override + String get applicationLegalese => + 'Licenseret med Mozilla Public License 2.0. Kildeteksten er tilgængelig på:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Omkoder'; + + @override + String get downloadLocations => 'Overførelse placering'; + + @override + String get audioService => 'Lyd tjeneste'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Udseende & tema'; + + @override + String get notAvailableInOfflineMode => 'Ikke tilgængelig i offline tilstand'; + + @override + String get logOut => 'Log af'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Overførte sange vil ikke blive slettet'; + + @override + String get areYouSure => 'Er du sikker?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin bruger AAC ved omkodning'; + + @override + String get enableTranscoding => 'Aktivér omkodning'; + + @override + String get enableTranscodingSubtitle => + 'Omkoder musik under afspilning på serveren.'; + + @override + String get bitrate => 'Bithastighed'; + + @override + String get bitrateSubtitle => + 'En højere bithastighed giver højere lydkvalitet men bruger mere båndbredde.'; + + @override + String get customLocation => 'Vælg placering'; + + @override + String get appDirectory => 'App katalog'; + + @override + String get addDownloadLocation => 'Tilføj overførelse placering'; + + @override + String get selectDirectory => 'Vælg katalog'; + + @override + String get unknownError => 'Ukendt fejl'; + + @override + String get pathReturnSlashErrorMessage => + 'Stier, der returnerer \"/\", kan ikke anvendes'; + + @override + String get directoryMustBeEmpty => 'Katalog skal være tomt'; + + @override + String get customLocationsBuggy => + 'Valgfrie placeringer er ekstremt fejlramte grundet manglende rettigheder. Jeg prøver at finde måder at løse dette, men for nu anbefaler jeg ikke, at de anvendes.'; + + @override + String get enterLowPriorityStateOnPause => + 'Gå i lav prioritet tilstand når musik afspilning er på pause'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Tillader notifikationer bliver strøget væk, når afspilning er sat på pause. Dette tillader også Android, at afbryde servicen når den er på pause.'; + + @override + String get shuffleAllSongCount => 'Bland alle sange antal'; + + @override + String get shuffleAllSongCountSubtitle => + 'Mængde af sange der skal indlæses, når bland alle sange knappen bruges.'; + + @override + String get viewType => 'Visning tilstand'; + + @override + String get viewTypeSubtitle => 'Visningstype for musik skærmen'; + + @override + String get list => 'Liste'; + + @override + String get grid => 'Gitter'; + + @override + String get portrait => 'Portræt'; + + @override + String get landscape => 'Landskab'; + + @override + String gridCrossAxisCount(String value) { + return '$value Gitter tværakse antal'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Antal gitrebrikker som bruges per række $value.'; + } + + @override + String get showTextOnGridView => 'Vis tekst i gitter visning'; + + @override + String get showTextOnGridViewSubtitle => + 'Vælg om tekst skal vises (titel, kunstner osv.) på gitteret musik skærm.'; + + @override + String get showCoverAsPlayerBackground => + 'Vis sløret cover som afspiller baggrund'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Vælg om der skal bruges sløret omslagskunst som vises som baggrund på afspiller skærmen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Skjul sang kunstner, hvis det er den samme som albummets kunstner'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Vælg om sangens kunstner skal vises på albummet, hvis den ikke er forskellig fra albummets kunstner.'; + + @override + String get disableGesture => 'Deaktivér bevægelser'; + + @override + String get disableGestureSubtitle => 'Vælg om bevægelser skal deaktiveres.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'System'; + + @override + String get light => 'Lys'; + + @override + String get dark => 'Mørk'; + + @override + String get tabs => 'Faner'; + + @override + String get cancelSleepTimer => 'Vil du annullere sove timeren?'; + + @override + String get yesButtonLabel => 'JA'; + + @override + String get noButtonLabel => 'NEJ'; + + @override + String get setSleepTimer => 'Indtil sove timer'; + + @override + String get minutes => 'Minutter'; + + @override + String get invalidNumber => 'Ugyldig nummer'; + + @override + String get sleepTimerTooltip => 'Sove timer'; + + @override + String get addToPlaylistTooltip => 'Tilføj til afspilningsliste'; + + @override + String get addToPlaylistTitle => 'Tilføj til afspilningsliste'; + + @override + String get removeFromPlaylistTooltip => 'Fjern fra afspilningsliste'; + + @override + String get removeFromPlaylistTitle => 'Fjern fra afspilningsliste'; + + @override + String get newPlaylist => 'Ny afspilningsliste'; + + @override + String get createButtonLabel => 'OPRET'; + + @override + String get playlistCreated => 'Afspilningsliste er oprettet.'; + + @override + String get noAlbum => 'Intet album'; + + @override + String get noItem => 'Intet objekt'; + + @override + String get noArtist => 'Ingen kunstner'; + + @override + String get unknownArtist => 'Ukendt kunstner'; + + @override + String get streaming => 'STREAMER'; + + @override + String get downloaded => 'OVERFØRELSER'; + + @override + String get transcode => 'OMKOD'; + + @override + String get direct => 'DIREKTE'; + + @override + String get statusError => 'Status fejl'; + + @override + String get queue => 'Kø'; + + @override + String get addToQueue => 'Tilføj til kø'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Udskift køen'; + + @override + String get instantMix => 'Hurtig blanding'; + + @override + String get goToAlbum => 'Gå til album'; + + @override + String get removeFavourite => 'Fjern favorit'; + + @override + String get addFavourite => 'Tilføj favorit'; + + @override + String get addedToQueue => 'Tilføjet til kø.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Køen er udskiftet.'; + + @override + String get removedFromPlaylist => 'Fjernet fra afspilningslisten.'; + + @override + String get startingInstantMix => 'Starter hurtig blanding.'; + + @override + String get anErrorHasOccured => 'Der opstod en fejl.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status kode $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Status kode $statusCode. Dette betyder, at du har anvendt et forkert brugernavn/adgangskode eller at din klient ikke længere er logget på.'; + } + + @override + String get removeFromMix => 'Fjern fra blanding'; + + @override + String get addToMix => 'Tilføj til blanding'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Genoverfører $count objekter', + one: 'Genoverførte $count objekt', + zero: 'Ingen genoverførsel er nødvendig.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer varighed'; + + @override + String get bufferDurationSubtitle => + 'Hvor meget afspilleren skal forudindlæse i sekunder. En genstart er nødvendig.'; + + @override + String get language => 'Sprog'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart new file mode 100644 index 0000000..12c6f32 --- /dev/null +++ b/lib/l10n/app_localizations_de.dart @@ -0,0 +1,738 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for German (`de`). +class AppLocalizationsDe extends AppLocalizations { + AppLocalizationsDe([String locale = 'de']) : super(locale); + + @override + String startupError(String error) { + return 'Während dem Starten der App ist etwas schief gelaufen. Der Fehler war: $error\n\nBitte öffne ein Issue auf github.com/UnicornsOnLSD/finamp mit einem Bildschirmfoto von dieser Seite. Wenn dieses Problem weiterhin besteht, kannst du deine App-Daten löschen, um die App zurückzusetzen.'; + } + + @override + String get serverUrl => 'Server-URL'; + + @override + String get internalExternalIpExplanation => + 'Wenn du deinen Jellyfin Server aus der Ferne erreichen möchtest, benötigst du eine externe IP.\n\nWenn dein Server einen HTTP Port (80/443) benutzt, musst du keinen Port festlegen. Dies ist vermutlich der Fall wenn dein Server sich hinter einer Reverse Proxy befindet.'; + + @override + String get emptyServerUrl => 'Server-URL darf nicht leer sein'; + + @override + String get urlStartWithHttps => 'URL muss mit http:// oder https:// beginnen'; + + @override + String get urlTrailingSlash => + 'URL darf keinen Schrägstrich am Ende enthalten'; + + @override + String get username => 'Benutzername'; + + @override + String get password => 'Passwort'; + + @override + String get logs => 'Protokolle'; + + @override + String get next => 'Weiter'; + + @override + String get selectMusicLibraries => 'Musikbibliotheken auswählen'; + + @override + String get couldNotFindLibraries => 'Konnte keine Bibliotheken finden.'; + + @override + String get unknownName => 'Unbekannter Name'; + + @override + String get songs => 'Lieder'; + + @override + String get albums => 'Alben'; + + @override + String get artists => 'Künstler'; + + @override + String get genres => 'Genres'; + + @override + String get playlists => 'Playlists'; + + @override + String get startMix => 'Starte Mix'; + + @override + String get startMixNoSongsArtist => + 'Vor dem Starten eines Mixes lange auf einen Künstler gedrückt halten, um ihn zum Mixzusammensteller hinzuzufügen oder zu entfernen'; + + @override + String get startMixNoSongsAlbum => + 'Vor dem Starten eines Mixes lange auf ein Album gedrückt halten, um es zum Mixzusammensteller hinzuzufügen oder zu entfernen'; + + @override + String get music => 'Musik'; + + @override + String get clear => 'Entfernen'; + + @override + String get favourites => 'Favoriten'; + + @override + String get shuffleAll => 'Alle mischen'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Downloads'; + + @override + String get settings => 'Einstellungen'; + + @override + String get offlineMode => 'Offline-Modus'; + + @override + String get sortOrder => 'Sortierreihenfolge'; + + @override + String get sortBy => 'Sortieren nach'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Albumkünstler'; + + @override + String get artist => 'Künstler'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Community-Bewertung'; + + @override + String get criticRating => 'Kritikerbewertung'; + + @override + String get dateAdded => 'Datum hinzugefügt'; + + @override + String get datePlayed => 'Datum gespielt'; + + @override + String get playCount => 'Anzahl abgespielt'; + + @override + String get premiereDate => 'Erscheinungsdatum'; + + @override + String get productionYear => 'Produktionsjahr'; + + @override + String get name => 'Name'; + + @override + String get random => 'Zufällig'; + + @override + String get revenue => 'Einspielergebnis'; + + @override + String get runtime => 'Dauer'; + + @override + String get syncDownloadedPlaylists => + 'Heruntergeladene Playlisten synchronisieren'; + + @override + String get downloadMissingImages => 'Fehlende Bilder herunterladen'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count fehlende Bilder heruntergeladen', + one: '$count fehlendes Bild heruntergeladen', + zero: 'Keine fehlenden Bilder gefunden', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Download-Fehler'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Downloads', + one: '$count Download', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Elemente', + one: '$count Element', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Bilder', + one: '$count Bild', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count fertiggestellt'; + } + + @override + String dlFailed(int count) { + return '$count fehlgeschlagen'; + } + + @override + String dlEnqueued(int count) { + return '$count in der Warteschlange'; + } + + @override + String dlRunning(int count) { + return '$count laufend'; + } + + @override + String get downloadErrorsTitle => 'Download-Fehler'; + + @override + String get noErrors => 'Keine Fehler!'; + + @override + String get errorScreenError => + 'Beim Erstellen der Fehlerliste kam es zu einem Fehler! An dieser Stelle solltest du ein Fehlerticket auf GitHub erstellen und die App-Daten löschen'; + + @override + String get failedToGetSongFromDownloadId => + 'Song konnte nicht über die Download-ID abgerufen werden'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Bist du sicher, dass du $_temp0 \'$itemName\' von diesem Gerät löschen willst?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Löschen'; + + @override + String get deleteDownloadsAbortButtonText => 'Abbrechen'; + + @override + String get error => 'Fehler'; + + @override + String discNumber(int number) { + return 'CD $number'; + } + + @override + String get playButtonLabel => 'ABSPIELEN'; + + @override + String get shuffleButtonLabel => 'MISCHEN'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Titel', + one: '$count Titel', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Wiedergabeliste-Name editieren'; + + @override + String get editPlaylistNameTitle => 'Wiedergabeliste-Name editieren'; + + @override + String get required => 'Erforderlich'; + + @override + String get updateButtonLabel => 'AKTUALISIERUNG'; + + @override + String get playlistNameUpdated => 'Wiedergabeliste-Name aktualisiert.'; + + @override + String get favourite => 'Favorit'; + + @override + String get downloadsDeleted => 'Downloads gelöscht.'; + + @override + String get addDownloads => 'Downloads hinzufügen'; + + @override + String get location => 'Ort'; + + @override + String get downloadsAdded => 'Downloads hinzugefügt.'; + + @override + String get addButtonLabel => 'Hinzufügen'; + + @override + String get shareLogs => 'Protokolle teilen'; + + @override + String get logsCopied => 'Protokolle kopiert.'; + + @override + String get message => 'Nachricht'; + + @override + String get stackTrace => 'Stacktrace'; + + @override + String get applicationLegalese => + 'Lizensiert mit der Mozilla Public License 2.0. Quellcode verfügbar unter:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transkodierung'; + + @override + String get downloadLocations => 'Download Orte'; + + @override + String get audioService => 'Audio Service'; + + @override + String get interactions => 'Interaktionen'; + + @override + String get layoutAndTheme => 'Aufbau & Thema'; + + @override + String get notAvailableInOfflineMode => 'Im Offline-Modus nicht verfügbar'; + + @override + String get logOut => 'Abmelden'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Heruntergeladene Lieder werden nicht gelöscht'; + + @override + String get areYouSure => 'Bist du sicher?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin verwendet AAC zur Transkodierung'; + + @override + String get enableTranscoding => 'Transkodierung aktivieren'; + + @override + String get enableTranscodingSubtitle => + 'Transkodiert Musikstreams serverseitig.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Eine höhere Bitrate verbessert die Audioqualität auf Kosten der benötigten Bandbreite.'; + + @override + String get customLocation => 'Benutzerdefinierter Ort'; + + @override + String get appDirectory => 'App-Verzeichnis'; + + @override + String get addDownloadLocation => 'Download-Ort hinzufügen'; + + @override + String get selectDirectory => 'Verzeichnis auswählen'; + + @override + String get unknownError => 'Unbekannter Fehler'; + + @override + String get pathReturnSlashErrorMessage => + 'Pfade die mit \"/\" antworten können nicht genutzt werden'; + + @override + String get directoryMustBeEmpty => 'Verzeichnis muss leer sein'; + + @override + String get customLocationsBuggy => + 'Benutzerdefinierte Orte sind extrem fehlerbehaftet aufgrund von Problemen mit Berechtigungen. Ich denke über Möglichkeiten nach, um dies zu beheben, aber im Moment würde ich davon abraten, diese zu nutzen.'; + + @override + String get enterLowPriorityStateOnPause => + 'Niedrige Priorität-Modus beim Pausieren aktivieren'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Ermöglicht, dass die Benachrichtigung im pausierten Zustand weggewischt werden kann. Dies erlaubt es Android ebenfalls, den Prozess im pausierten Zustand zu terminieren.'; + + @override + String get shuffleAllSongCount => 'Mische-Alle Titelanzahl'; + + @override + String get shuffleAllSongCountSubtitle => + 'Die Anzahl der zu ladenden Titel wenn der Mische-Alle Knopf betätigt wird.'; + + @override + String get viewType => 'Ansichtsart'; + + @override + String get viewTypeSubtitle => 'Ansichtsart für den Musik-Bildschirm'; + + @override + String get list => 'Liste'; + + @override + String get grid => 'Raster'; + + @override + String get portrait => 'Portrait'; + + @override + String get landscape => 'Landschaft'; + + @override + String gridCrossAxisCount(String value) { + return '$value Raster Querachsen-Anzahl'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Menge der zu benutzenden Rasterkacheln wenn $value.'; + } + + @override + String get showTextOnGridView => 'Text in Rasteransicht anzeigen'; + + @override + String get showTextOnGridViewSubtitle => + 'Ob oder nicht Text (Titel, Künstler etc.) auf dem Raster des Musikbildschirms angezeigt werden soll.'; + + @override + String get showCoverAsPlayerBackground => + 'Zeige verschwommene Cover als Player-Hintergrund'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Ob oder nicht verschwommene Cover als Hintergrund im Player-Bildschirm benutzt werden sollen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Verstecke Titel-Künstler falls derselbe wie Album-Künstler'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Ob Titel-Künstler in der Albenansicht angezeigt werden sollen, falls sie sich nicht von den Album-Künstlern unterscheiden.'; + + @override + String get disableGesture => 'Gesten deaktivieren'; + + @override + String get disableGestureSubtitle => 'Ob Gesten deaktiviert werden sollen.'; + + @override + String get showFastScroller => 'Schnellen Scroller anzeigen'; + + @override + String get theme => 'Thema'; + + @override + String get system => 'System'; + + @override + String get light => 'Hell'; + + @override + String get dark => 'Dunkel'; + + @override + String get tabs => 'Tabs'; + + @override + String get cancelSleepTimer => 'Schlaf-Timer abbrechen?'; + + @override + String get yesButtonLabel => 'JA'; + + @override + String get noButtonLabel => 'NEIN'; + + @override + String get setSleepTimer => 'Schlaf-Timer einstellen'; + + @override + String get minutes => 'Minuten'; + + @override + String get invalidNumber => 'Ungültige Zahl'; + + @override + String get sleepTimerTooltip => 'Schlaf-Timer'; + + @override + String get addToPlaylistTooltip => 'Zur Wiedergabeliste hinzufügen'; + + @override + String get addToPlaylistTitle => 'Zur Wiedergabeliste hinzufügen'; + + @override + String get removeFromPlaylistTooltip => 'Aus Wiedergabeliste entfernen'; + + @override + String get removeFromPlaylistTitle => 'Aus Wiedergabeliste entfernen'; + + @override + String get newPlaylist => 'Neue Wiedergabeliste'; + + @override + String get createButtonLabel => 'ERSTELLEN'; + + @override + String get playlistCreated => 'Wiedergabeliste erstellt.'; + + @override + String get noAlbum => 'Kein Album'; + + @override + String get noItem => 'Kein Element'; + + @override + String get noArtist => 'Kein Künstler'; + + @override + String get unknownArtist => 'Unbekannter Künstler'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'HERUNTERGELADEN'; + + @override + String get transcode => 'TRANSKODIERUNG'; + + @override + String get direct => 'DIREKT'; + + @override + String get statusError => 'STATUS FEHLER'; + + @override + String get queue => 'Warteschlange'; + + @override + String get addToQueue => 'Zur Warteschlange hinzufügen'; + + @override + String get playNext => 'Als Nächstes wiedergeben'; + + @override + String get replaceQueue => 'Warteschlange austauschen'; + + @override + String get instantMix => 'Sofort Mix'; + + @override + String get goToAlbum => 'Gehe zu Album'; + + @override + String get removeFavourite => 'Favorit entfernen'; + + @override + String get addFavourite => 'Favorit hinzufügen'; + + @override + String get addedToQueue => 'Zur Warteschlange hinzugefügt.'; + + @override + String get insertedIntoQueue => 'Zur Warteschlange hinzufügen.'; + + @override + String get queueReplaced => 'Warteschlange ausgetauscht.'; + + @override + String get removedFromPlaylist => 'Aus der Wiedergabeliste entfernt.'; + + @override + String get startingInstantMix => 'Starte Sofort-Mix.'; + + @override + String get anErrorHasOccured => 'Ein Fehler ist aufgetreten.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status Code $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Status Code $statusCode. Dies bedeutet vermutlich, dass du den falschen Benutzernamen oder Passwort benutzt hast oder dass dein Client nicht länger authentifiziert ist.'; + } + + @override + String get removeFromMix => 'Aus Mix entfernen'; + + @override + String get addToMix => 'Zu Mix hinzufügen'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Elemente erneut heruntergeladen', + one: '$count Element erneut heruntergeladen', + zero: 'Keine erneuten Downloads notwendig.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Pufferdauer'; + + @override + String get bufferDurationSubtitle => + 'Wie viel gepuffert werden soll, in Sekunden. Neustart erforderlich.'; + + @override + String get language => 'Sprache'; + + @override + String get confirm => 'Bestätigen'; + + @override + String get showUncensoredLogMessage => + 'Dieses Protokoll enthält deine Anmeldedaten. Anzeigen?'; + + @override + String get resetTabs => 'Tabs zurücksetzen'; + + @override + String get noMusicLibrariesTitle => 'Keine Musik-Bibliotheken'; + + @override + String get noMusicLibrariesBody => + 'Finamp konnte keine Musikbibliotheken finden. Bitte stelle sicher, dass dein Jellyfin-Server mindestens eine Bibliothek mit dem Medientyp \"Musik\" enthält.'; + + @override + String get refresh => 'AKTUALISIEREN'; + + @override + String get swipeInsertQueueNext => 'Gewischtes Lied als Nächstes abspielen'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Aktivieren, um das in der Liste nach links/rechts gewischte Lied als Nächstes abzuspielen, statt es am Ende der Warteschlange einzufügen.'; + + @override + String get redesignBeta => 'Teste die Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Mischen. Zum Umschalten tippen.'; + + @override + String get playbackOrderLinearTooltip => + 'Abspielen in Reihenfolge. Zum umschalten tippen.'; + + @override + String get loopModeAllTooltip => 'Wiederhole alle. Zum umschalten tippen.'; + + @override + String get loopModeOneTooltip => 'Wiederhole einen. Zum umschalten tippen.'; + + @override + String get loopModeNoneTooltip => 'Wiederholt nicht. Zum umschalten tippen.'; + + @override + String get skipToPrevious => 'Springe zum vorherigen Lied'; + + @override + String get skipToNext => 'Springe zum nächsten Lied'; + + @override + String get togglePlayback => 'Wiedergabe umschalten'; + + @override + String playArtist(String artist) { + return 'Spiele alle Alben von $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Spiele alle Alben von $artist in zufälliger Reihenfolge'; + } + + @override + String downloadArtist(String artist) { + return 'Lade alle Alben von $artist herunter'; + } + + @override + String get deleteFromDevice => 'Vom Gerät Löschen'; + + @override + String get download => 'Herunterladen'; + + @override + String get sync => 'Mit Server synchronisieren'; + + @override + String get about => 'Über Finamp'; +} diff --git a/lib/l10n/app_localizations_el.dart b/lib/l10n/app_localizations_el.dart new file mode 100644 index 0000000..06a14fa --- /dev/null +++ b/lib/l10n/app_localizations_el.dart @@ -0,0 +1,740 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Modern Greek (`el`). +class AppLocalizationsEl extends AppLocalizations { + AppLocalizationsEl([String locale = 'el']) : super(locale); + + @override + String startupError(String error) { + return 'Ωχ, κάτι δεν πήγε καλά κατά την έναρξη της εφαρμογής. Ο αριθμός σφάλματος είναι:$error\nΔημιούργησε ένα issue στο\ngithub.com/UnicornsOnLSD/finamp μαζί με ένα στιγμιότυπο οθόνης από αυτήν την σελίδα. Εάν το πρόβλημα παραμένει μπορείς να διαγράψεις τα δεδομένα της εφαρμογής με σκοπό την επαναφορά της.'; + } + + @override + String get serverUrl => 'Διεύθυνση διακομιστή'; + + @override + String get internalExternalIpExplanation => + 'Αν θέλεις να έχεις πρόσβαση στον jellyfin διακομιστή σου εξ-αποστασεως, πρέπει να χρησιμοποιήσεις την εξωτερική Διεύθυνση IP.\n\nΑν ο διακομιστής βρίσκεται σε πύλη HTTP(80/443), δεν είναι απαραίτητος ο ορισμός πύλης. Αυτό είναι πιθανόν εφόσον ο διακομιστής σου βρίσκεται πίσω από reverse proxy.'; + + @override + String get emptyServerUrl => + 'Η διεύθυνση διακομιστή δεν μπορεί να είναι κενή'; + + @override + String get urlStartWithHttps => + 'Η διεύθυνση πρέπει να ξεκινά με http:// ή https://'; + + @override + String get urlTrailingSlash => + 'Η διεύθυνση δεν πρέπει να περιέχει ακολουθούμενη κάθετο'; + + @override + String get username => 'Όνομα χρήστη'; + + @override + String get password => 'Συνθηματικό χρήστη'; + + @override + String get logs => 'Αρχείο καταγραφών'; + + @override + String get next => 'Επόμενο'; + + @override + String get selectMusicLibraries => 'Επέλεξε τις βιβλιοθήκες μουσικής σου'; + + @override + String get couldNotFindLibraries => 'Δεν βρέθηκαν συλλογές.'; + + @override + String get unknownName => 'Άγνωστη όνομα'; + + @override + String get songs => 'Τραγούδια'; + + @override + String get albums => 'Άλμπουμ'; + + @override + String get artists => 'Καλλιτέχνες'; + + @override + String get genres => 'Είδη'; + + @override + String get playlists => 'Λίστες αναπαραγωγής'; + + @override + String get startMix => 'Έναρξη μίξης'; + + @override + String get startMixNoSongsArtist => + 'Κράτησε πατημένο έναν καλλιτέχνη, προκειμένου να προστεθεί ή να αφαιρεθεί από τον κατασκευαστή μίξεων, προ-εκκινήσεως μίξης'; + + @override + String get startMixNoSongsAlbum => + 'Κράτησε πατημένο ένα άλμπουμ, προκειμένου να προστεθεί ή να αφαιρεθεί από τον κατασκευαστή μίξεων, προ-εκκινήσεως μίξης'; + + @override + String get music => 'Μουσική'; + + @override + String get clear => 'Εκκαθάριση'; + + @override + String get favourites => 'Αγαπημένα'; + + @override + String get shuffleAll => 'Τυχαία αναπαραγωγή'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Λήψεις'; + + @override + String get settings => 'Ρυθμίσεις'; + + @override + String get offlineMode => 'Λειτουργία εκτός σύνδεσης'; + + @override + String get sortOrder => 'Σειρά ταξινόμησης'; + + @override + String get sortBy => 'Ταξινόμηση κατά'; + + @override + String get album => 'Άλμπουμ'; + + @override + String get albumArtist => 'Καλλιτέχνης άλμπουμ'; + + @override + String get artist => 'Καλλιτέχνης'; + + @override + String get budget => 'Προϋπολογισμός'; + + @override + String get communityRating => 'Βαθμολογία κοινότητας'; + + @override + String get criticRating => 'Βαθμολογία κριτών'; + + @override + String get dateAdded => 'Ημερομηνία προσθήκης'; + + @override + String get datePlayed => 'Ημερομηνία αναπαραγωγής'; + + @override + String get playCount => 'Πλήθος αναπαραγωγών'; + + @override + String get premiereDate => 'Ημερομηνία πρεμιέρας'; + + @override + String get productionYear => 'Χρονολογία παραγωγής'; + + @override + String get name => 'Όνομα'; + + @override + String get random => 'Τυχαίο'; + + @override + String get revenue => 'Έσοδα'; + + @override + String get runtime => 'Διάρκεια'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Λήψη ελλείποντων εικόνων'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'ελήφθησαν $count ελλειπής εικόνες', + one: 'ελήφθησαν $count ελλειπής εικόνες', + zero: 'δεν βρέθηκαν ελλειπείς εικόνες', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Σφάλμα στην λήψη'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count λήψεις', + one: '$count λήψη', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count αντικείμενα', + one: '$count αντικείμενο', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count εικόνες', + one: '$count εικόνα', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count ολοκληρώθηκαν'; + } + + @override + String dlFailed(int count) { + return '$count απέτυχαν'; + } + + @override + String dlEnqueued(int count) { + return '$count στην σειρά'; + } + + @override + String dlRunning(int count) { + return '$count τρέχοντα'; + } + + @override + String get downloadErrorsTitle => 'Σφάλματα λήψης'; + + @override + String get noErrors => 'Κανένα σφάλμα!'; + + @override + String get errorScreenError => + 'Προέκυψε σφάλμα κατά την λήψη λίστας σφαλμάτων! Σε αυτό το σημείο, καλό είναι να δημιουργήσεις issue στο GitHub και να διαγράψεις τα δεδομένα της εφαρμογής'; + + @override + String get failedToGetSongFromDownloadId => + 'Απέτυχε η λήψη τραγουδιού από το download ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Σφάλμα'; + + @override + String discNumber(int number) { + return 'Δίσκος $number'; + } + + @override + String get playButtonLabel => 'Αναπαραγωγή'; + + @override + String get shuffleButtonLabel => 'Τυχαία αναπαραγωγή'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count τίτλοι', + one: '$count τίτλος', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Τροποποίηση λίστας αναπαραγωγής'; + + @override + String get editPlaylistNameTitle => 'Τροποποίηση ονόματος λίστας'; + + @override + String get required => 'Απαραίτητο'; + + @override + String get updateButtonLabel => 'Ανανέωση'; + + @override + String get playlistNameUpdated => 'Ανανεώθηκε το όνομα λίστας αναπαραγωγής.'; + + @override + String get favourite => 'Αγαπημένο'; + + @override + String get downloadsDeleted => 'Διαγράφτηκαν οι λήψεις.'; + + @override + String get addDownloads => 'Προσθήκη λήψεων'; + + @override + String get location => 'Τοποθεσία'; + + @override + String get downloadsAdded => 'Προστέθηκαν λήψεις.'; + + @override + String get addButtonLabel => 'Προσθήκη'; + + @override + String get shareLogs => 'Μοιραστείτε τις καταγραφές'; + + @override + String get logsCopied => 'Αντιγράφηκαν οι καταγραφές.'; + + @override + String get message => 'Μύνημα'; + + @override + String get stackTrace => 'Stack Trace'; + + @override + String get applicationLegalese => + 'Αδειοδοτηθηκε με την Άδεια Δημόσιας Χρήσης της Mozilla Public License2.0. Ο κώδικας πηγής διαθέσιμος στο:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Μετακωδικοποίηση'; + + @override + String get downloadLocations => 'Τοποθεσίες λήψεων'; + + @override + String get audioService => 'Audio Service'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Διάταξη καί εμφάνιση'; + + @override + String get notAvailableInOfflineMode => + 'Μη διαθέσιμο σε λειτουργία εκτός σύνδεσης'; + + @override + String get logOut => 'Έξοδος'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Κατεβασμένα τραγούδια δεν θα διαγραφούν'; + + @override + String get areYouSure => 'Είσαι σίγουρος?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Το Jellyfin χρησιμοποιεί AAC για την μετακωδικοποίηση'; + + @override + String get enableTranscoding => 'Ενεργοποίηση μετακωδικοποίησης'; + + @override + String get enableTranscodingSubtitle => + 'μετακωδικοποιει την ροή μουσικής από την πλευρά του διακομιστή.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Ο ψηλότερος bitrate προσφέρει υψηλότερης ποιότητας ήχο σε βάρος εύρους ζώνης.'; + + @override + String get customLocation => 'Εξατομικευμένη τοποθεσία'; + + @override + String get appDirectory => 'Κατάλογος εφαρμογής'; + + @override + String get addDownloadLocation => 'Προσθήκη τοποθεσίας λήψεως'; + + @override + String get selectDirectory => 'Επέλεξε κατάλογο'; + + @override + String get unknownError => 'Άγνωστο σφάλμα'; + + @override + String get pathReturnSlashErrorMessage => + 'Μονοπάτια που επιστρέφουν \"/\" δεν μπορούν να χρησιμοποιηθούν'; + + @override + String get directoryMustBeEmpty => 'Ο κατάλογος πρέπει να είναι άδειος'; + + @override + String get customLocationsBuggy => + 'Οι εξατομικευμένες τοποθεσίες έχουν αρκετά bugs λόγω θεμάτων αδειών.\nΣκέφτομαι τρόπους να φτιάξω τα προβλήμματα, όμως για τώρα δεν προτείνω την χρήση τους.'; + + @override + String get enterLowPriorityStateOnPause => + 'Ενεργοποίηση χαμηλής-προτεραιοτητας κατάσταση κατά την παύση'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Επιτρέπει την απόσβεση της ειδοποίησης κατά την παύση. Επίσης επιτρέπει στο σύστημα να \"σκοτώνει\" την υπηρεσία κατά την παύση.'; + + @override + String get shuffleAllSongCount => + 'Τυχαία αναπαραγωγή όλων των Πλήθων τραγουδιών'; + + @override + String get shuffleAllSongCountSubtitle => + 'Πλήθος τραγουδιών να φορτώσουν όταν χρησιμοποιείται το κουμπί τυχαίας αναπαραγωγής όλων.'; + + @override + String get viewType => 'Τύπος προβολής'; + + @override + String get viewTypeSubtitle => 'Τρόπος προβολής για την οθόνη μουσικής'; + + @override + String get list => 'Λίστα'; + + @override + String get grid => 'Πλέγμα'; + + @override + String get portrait => 'Κάθετο'; + + @override + String get landscape => 'Οριζόντιο'; + + @override + String gridCrossAxisCount(String value) { + return '$value πλήθος τεμνοντων αξόνων πλέγματος'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Πλήθος τετραγώνων πλέγματος ανά Πλειάδες$value.'; + } + + @override + String get showTextOnGridView => 'Εμφάνιση αναγραφων στην προβολή πλέγματος'; + + @override + String get showTextOnGridViewSubtitle => + 'Whether or not to show the text (title, artist etc) on the grid music screen.'; + + @override + String get showCoverAsPlayerBackground => + 'Show blurred cover as player background'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Whether or not to use blurred cover art as background on player screen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Hide song artists if same as album artists'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Whether to show song artists on the album screen if not differing from album artists.'; + + @override + String get disableGesture => 'Disable gestures'; + + @override + String get disableGestureSubtitle => 'Whether to disables gestures.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Θέμα'; + + @override + String get system => 'Σύστημα'; + + @override + String get light => 'Φωτεινό'; + + @override + String get dark => 'Σκοτεινό'; + + @override + String get tabs => 'Καρτέλες'; + + @override + String get cancelSleepTimer => 'Ακύρωση χρονοδιακόπτη ύπνου;'; + + @override + String get yesButtonLabel => 'ΝΑΙ'; + + @override + String get noButtonLabel => 'ΟΧΙ'; + + @override + String get setSleepTimer => 'Ρύθμιση Χρονοδιακόπτη Ύπνου'; + + @override + String get minutes => 'Λεπτά'; + + @override + String get invalidNumber => 'Μη Έγκυρος Αριθμός'; + + @override + String get sleepTimerTooltip => 'Χρονοδιακόπτης Ύπνου'; + + @override + String get addToPlaylistTooltip => 'Προσθήκη στην λίστα αναπαραγωγής'; + + @override + String get addToPlaylistTitle => 'Προσθήκη στην Λίστα Αναπαραγωγής'; + + @override + String get removeFromPlaylistTooltip => 'Αφαίρεση από την λίστα αναπαραγωγής'; + + @override + String get removeFromPlaylistTitle => 'Αφαίρεση από την Λίστα Αναπαραγωγής'; + + @override + String get newPlaylist => 'Νέα Λίστα Αναπαραγωγής'; + + @override + String get createButtonLabel => 'ΔΗΜΙΟΥΡΓΙΑ'; + + @override + String get playlistCreated => 'Η Λίστα Αναπαραγωγής δημιουργήθηκε.'; + + @override + String get noAlbum => 'No Album'; + + @override + String get noItem => 'No Item'; + + @override + String get noArtist => 'No Artist'; + + @override + String get unknownArtist => 'Unknown Artist'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'DOWNLOADED'; + + @override + String get transcode => 'TRANSCODE'; + + @override + String get direct => 'DIRECT'; + + @override + String get statusError => 'STATUS ERROR'; + + @override + String get queue => 'Queue'; + + @override + String get addToQueue => 'Add to Queue'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Replace Queue'; + + @override + String get instantMix => 'Instant Mix'; + + @override + String get goToAlbum => 'Go to Album'; + + @override + String get removeFavourite => 'Remove Favourite'; + + @override + String get addFavourite => 'Add Favourite'; + + @override + String get addedToQueue => 'Added to queue.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Queue replaced.'; + + @override + String get removedFromPlaylist => 'Removed from playlist.'; + + @override + String get startingInstantMix => 'Starting instant mix.'; + + @override + String get anErrorHasOccured => 'An error has occured.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status code $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Status code $statusCode. This probably means you used the wrong username/password, or your client is no longer logged in.'; + } + + @override + String get removeFromMix => 'Remove From Mix'; + + @override + String get addToMix => 'Add To Mix'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redownloaded $count items', + one: 'Redownloaded $count item', + zero: 'No redownloads needed.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer Duration'; + + @override + String get bufferDurationSubtitle => + 'How much the player should buffer, in seconds. Requires a restart.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart new file mode 100644 index 0000000..8abacad --- /dev/null +++ b/lib/l10n/app_localizations_en.dart @@ -0,0 +1,735 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String startupError(String error) { + return 'Something went wrong during app startup. The error was: $error\n\nPlease create an issue on github.com/UnicornsOnLSD/finamp with a screenshot of this page. If this problem persists you can clear your app data to reset the app.'; + } + + @override + String get serverUrl => 'Server URL'; + + @override + String get internalExternalIpExplanation => + 'If you want to be able to access your Jellyfin server remotely, you need to use your external IP.\n\nIf your server is on a HTTP port (80/443), you don\'t have to specify a port. This will likely be the case if your server is behind a reverse proxy.'; + + @override + String get emptyServerUrl => 'Server URL cannot be empty'; + + @override + String get urlStartWithHttps => 'URL must start with http:// or https://'; + + @override + String get urlTrailingSlash => 'URL must not include a trailing slash'; + + @override + String get username => 'Username'; + + @override + String get password => 'Password'; + + @override + String get logs => 'Logs'; + + @override + String get next => 'Next'; + + @override + String get selectMusicLibraries => 'Select Music Libraries'; + + @override + String get couldNotFindLibraries => 'Could not find any libraries.'; + + @override + String get unknownName => 'Unknown Name'; + + @override + String get songs => 'Songs'; + + @override + String get albums => 'Albums'; + + @override + String get artists => 'Artists'; + + @override + String get genres => 'Genres'; + + @override + String get playlists => 'Playlists'; + + @override + String get startMix => 'Start Mix'; + + @override + String get startMixNoSongsArtist => + 'Long-press an artist to add or remove it from the mix builder before starting a mix'; + + @override + String get startMixNoSongsAlbum => + 'Long-press an album to add or remove it from the mix builder before starting a mix'; + + @override + String get music => 'Music'; + + @override + String get clear => 'Clear'; + + @override + String get favourites => 'Favourites'; + + @override + String get shuffleAll => 'Shuffle all'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Downloads'; + + @override + String get settings => 'Settings'; + + @override + String get offlineMode => 'Offline Mode'; + + @override + String get sortOrder => 'Sort order'; + + @override + String get sortBy => 'Sort by'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Album Artist'; + + @override + String get artist => 'Artist'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Community Rating'; + + @override + String get criticRating => 'Critic Rating'; + + @override + String get dateAdded => 'Date Added'; + + @override + String get datePlayed => 'Date Played'; + + @override + String get playCount => 'Play Count'; + + @override + String get premiereDate => 'Premiere Date'; + + @override + String get productionYear => 'Production Year'; + + @override + String get name => 'Name'; + + @override + String get random => 'Random'; + + @override + String get revenue => 'Revenue'; + + @override + String get runtime => 'Runtime'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Download missing images'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Downloaded $count missing images', + one: 'Downloaded $count missing image', + zero: 'No missing images found', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Download errors'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count downloads', + one: '$count download', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count items', + one: '$count item', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count images', + one: '$count image', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count complete'; + } + + @override + String dlFailed(int count) { + return '$count failed'; + } + + @override + String dlEnqueued(int count) { + return '$count enqueued'; + } + + @override + String dlRunning(int count) { + return '$count running'; + } + + @override + String get downloadErrorsTitle => 'Download Errors'; + + @override + String get noErrors => 'No errors!'; + + @override + String get errorScreenError => + 'An error occurred while getting the list of errors! At this point, you should probably just create an issue on GitHub and delete app data'; + + @override + String get failedToGetSongFromDownloadId => + 'Failed to get song from download ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Error'; + + @override + String discNumber(int number) { + return 'Disc $number'; + } + + @override + String get playButtonLabel => 'PLAY'; + + @override + String get shuffleButtonLabel => 'SHUFFLE'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Songs', + one: '$count Song', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Edit playlist name'; + + @override + String get editPlaylistNameTitle => 'Edit Playlist Name'; + + @override + String get required => 'Required'; + + @override + String get updateButtonLabel => 'UPDATE'; + + @override + String get playlistNameUpdated => 'Playlist name updated.'; + + @override + String get favourite => 'Favourite'; + + @override + String get downloadsDeleted => 'Downloads deleted.'; + + @override + String get addDownloads => 'Add Downloads'; + + @override + String get location => 'Location'; + + @override + String get downloadsAdded => 'Downloads added.'; + + @override + String get addButtonLabel => 'ADD'; + + @override + String get shareLogs => 'Share logs'; + + @override + String get logsCopied => 'Logs copied.'; + + @override + String get message => 'Message'; + + @override + String get stackTrace => 'Stack Trace'; + + @override + String get applicationLegalese => + 'Licensed with the Mozilla Public License 2.0. Source code available at:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcoding'; + + @override + String get downloadLocations => 'Download Locations'; + + @override + String get audioService => 'Audio Service'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Layout & Theme'; + + @override + String get notAvailableInOfflineMode => 'Not available in offline mode'; + + @override + String get logOut => 'Log Out'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Downloaded songs will not be deleted'; + + @override + String get areYouSure => 'Are you sure?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin uses AAC for transcoding'; + + @override + String get enableTranscoding => 'Enable Transcoding'; + + @override + String get enableTranscodingSubtitle => + 'Transcodes music streams on the server side.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'A higher bitrate gives higher quality audio at the cost of higher bandwidth.'; + + @override + String get customLocation => 'Custom Location'; + + @override + String get appDirectory => 'App Directory'; + + @override + String get addDownloadLocation => 'Add Download Location'; + + @override + String get selectDirectory => 'Select Directory'; + + @override + String get unknownError => 'Unknown Error'; + + @override + String get pathReturnSlashErrorMessage => + 'Paths that return \"/\" can\'t be used'; + + @override + String get directoryMustBeEmpty => 'Directory must be empty'; + + @override + String get customLocationsBuggy => + 'Custom locations are extremely buggy due to issues with permissions. I\'m thinking of ways to fix this, but for now I wouldn\'t recommend using them.'; + + @override + String get enterLowPriorityStateOnPause => + 'Enter Low-Priority State on Pause'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Lets the notification be swiped away when paused. Also allows Android to kill the service when paused.'; + + @override + String get shuffleAllSongCount => 'Shuffle All Song Count'; + + @override + String get shuffleAllSongCountSubtitle => + 'Amount of songs to load when using the shuffle all songs button.'; + + @override + String get viewType => 'View Type'; + + @override + String get viewTypeSubtitle => 'View type for the music screen'; + + @override + String get list => 'List'; + + @override + String get grid => 'Grid'; + + @override + String get portrait => 'Portrait'; + + @override + String get landscape => 'Landscape'; + + @override + String gridCrossAxisCount(String value) { + return '$value Grid Cross-Axis Count'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Amount of grid tiles to use per-row when $value.'; + } + + @override + String get showTextOnGridView => 'Show text in grid view'; + + @override + String get showTextOnGridViewSubtitle => + 'Whether or not to show the text (title, artist etc) on the grid music screen.'; + + @override + String get showCoverAsPlayerBackground => + 'Show blurred cover as player background'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Whether or not to use blurred cover art as background on player screen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Hide song artists if same as album artists'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Whether to show song artists on the album screen if not differing from album artists.'; + + @override + String get disableGesture => 'Disable gestures'; + + @override + String get disableGestureSubtitle => 'Whether to disables gestures.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Theme'; + + @override + String get system => 'System'; + + @override + String get light => 'Light'; + + @override + String get dark => 'Dark'; + + @override + String get tabs => 'Tabs'; + + @override + String get cancelSleepTimer => 'Cancel Sleep Timer?'; + + @override + String get yesButtonLabel => 'YES'; + + @override + String get noButtonLabel => 'NO'; + + @override + String get setSleepTimer => 'Set Sleep Timer'; + + @override + String get minutes => 'Minutes'; + + @override + String get invalidNumber => 'Invalid Number'; + + @override + String get sleepTimerTooltip => 'Sleep timer'; + + @override + String get addToPlaylistTooltip => 'Add to playlist'; + + @override + String get addToPlaylistTitle => 'Add to Playlist'; + + @override + String get removeFromPlaylistTooltip => 'Remove from playlist'; + + @override + String get removeFromPlaylistTitle => 'Remove from Playlist'; + + @override + String get newPlaylist => 'New Playlist'; + + @override + String get createButtonLabel => 'CREATE'; + + @override + String get playlistCreated => 'Playlist created.'; + + @override + String get noAlbum => 'No Album'; + + @override + String get noItem => 'No Item'; + + @override + String get noArtist => 'No Artist'; + + @override + String get unknownArtist => 'Unknown Artist'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'DOWNLOADED'; + + @override + String get transcode => 'TRANSCODE'; + + @override + String get direct => 'DIRECT'; + + @override + String get statusError => 'STATUS ERROR'; + + @override + String get queue => 'Queue'; + + @override + String get addToQueue => 'Add to Queue'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Replace Queue'; + + @override + String get instantMix => 'Instant Mix'; + + @override + String get goToAlbum => 'Go to Album'; + + @override + String get removeFavourite => 'Remove Favourite'; + + @override + String get addFavourite => 'Add Favourite'; + + @override + String get addedToQueue => 'Added to queue.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Queue replaced.'; + + @override + String get removedFromPlaylist => 'Removed from playlist.'; + + @override + String get startingInstantMix => 'Starting instant mix.'; + + @override + String get anErrorHasOccured => 'An error has occured.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status code $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Status code $statusCode. This probably means you used the wrong username/password, or your client is no longer logged in.'; + } + + @override + String get removeFromMix => 'Remove From Mix'; + + @override + String get addToMix => 'Add To Mix'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redownloaded $count items', + one: 'Redownloaded $count item', + zero: 'No redownloads needed.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer Duration'; + + @override + String get bufferDurationSubtitle => + 'How much the player should buffer, in seconds. Requires a restart.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart new file mode 100644 index 0000000..be012d6 --- /dev/null +++ b/lib/l10n/app_localizations_es.dart @@ -0,0 +1,745 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Spanish Castilian (`es`). +class AppLocalizationsEs extends AppLocalizations { + AppLocalizationsEs([String locale = 'es']) : super(locale); + + @override + String startupError(String error) { + return '¡Algo ha salido mal en el arranque de la aplicación! El error es: $error\n\nPor favor crea una incidencia en github.com/UnicornsOnLSD/finamp con una captura de pantalla de esta página. Si el problema persiste, borra los datos de la aplicación para resetearla.'; + } + + @override + String get serverUrl => 'URL del servidor'; + + @override + String get internalExternalIpExplanation => + 'Si quieres acceder a tu servidor Jellyfin remotamente, tendrás que usar tu dirección IP externa.\n\nSi tu servidor está en un puerto HTTP (80/443), no tendrás que especificar el puerto. Este probablemente sea tu caso si tu servidor está detrás de un proxy inverso.'; + + @override + String get emptyServerUrl => 'La URL del servidor no puede estar vacia'; + + @override + String get urlStartWithHttps => 'La URL debe empezar por http:// o https://'; + + @override + String get urlTrailingSlash => 'La URL no debe incluir una barra al final'; + + @override + String get username => 'Nombre de usuario'; + + @override + String get password => 'Contraseña'; + + @override + String get logs => 'Registros'; + + @override + String get next => 'Siguiente'; + + @override + String get selectMusicLibraries => 'Seleccionar las bibliotecas de música'; + + @override + String get couldNotFindLibraries => + 'No se pudo encontrar ninguna biblioteca.'; + + @override + String get unknownName => 'Nombre desconocido'; + + @override + String get songs => 'Canciones'; + + @override + String get albums => 'Álbumes'; + + @override + String get artists => 'Artistas'; + + @override + String get genres => 'Géneros'; + + @override + String get playlists => 'Listas'; + + @override + String get startMix => 'Empezar mezcla'; + + @override + String get startMixNoSongsArtist => + 'Mantén pulsado un artista para añadirlo o eliminarlo del creador de mezclas antes de empezar una mezcla'; + + @override + String get startMixNoSongsAlbum => + 'Mantén pulsado un álbum para añadirlo o eliminarlo del creador de mezclas antes de empezar una mezcla'; + + @override + String get music => 'Música'; + + @override + String get clear => 'Limpiar'; + + @override + String get favourites => 'Favoritos'; + + @override + String get shuffleAll => 'Reproducir aleatoriamente todas las canciones'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Descargas'; + + @override + String get settings => 'Ajustes'; + + @override + String get offlineMode => 'Modo sin conexión'; + + @override + String get sortOrder => 'Ordenar'; + + @override + String get sortBy => 'Ordenar por'; + + @override + String get album => 'Álbum'; + + @override + String get albumArtist => 'Artista del álbum'; + + @override + String get artist => 'Artista'; + + @override + String get budget => 'Presupuesto'; + + @override + String get communityRating => 'Valoración de la comunidad'; + + @override + String get criticRating => 'Valoración de los críticos'; + + @override + String get dateAdded => 'Fecha de añadido'; + + @override + String get datePlayed => 'Fecha de reproducción'; + + @override + String get playCount => 'Reproducciones'; + + @override + String get premiereDate => 'Fecha de lanzamiento'; + + @override + String get productionYear => 'Año de producción'; + + @override + String get name => 'Nombre'; + + @override + String get random => 'Aleatorio'; + + @override + String get revenue => 'Ingresos'; + + @override + String get runtime => 'Duración'; + + @override + String get syncDownloadedPlaylists => + 'Sincroniza las listas de reproducción descargadas'; + + @override + String get downloadMissingImages => 'Descargar las imágenes que faltan'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Descargadas $count que faltaban', + one: 'Descargada $count imagen que faltaba', + zero: 'No se han encontrado imágenes que faltan', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Errores en la descarga'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count descargas', + one: '$count descarga', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count elementos', + one: '$count elemento', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count imágenes', + one: '$count imagen', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count completadas'; + } + + @override + String dlFailed(int count) { + return '$count han fallado'; + } + + @override + String dlEnqueued(int count) { + return '$count en cola'; + } + + @override + String dlRunning(int count) { + return '$count en progreso'; + } + + @override + String get downloadErrorsTitle => 'Error al descargar'; + + @override + String get noErrors => '¡Sin errores!'; + + @override + String get errorScreenError => + '¡Se ha producido un error al obtener la lista de errores! Llegados a este punto, probablemente deberías crear una incidencia en GitHub y eliminar los datos de la aplicación'; + + @override + String get failedToGetSongFromDownloadId => + 'No se ha podido obtener la canción desde el identificador de descarga'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'género', + 'track': 'song', + 'other': '', + }, + ); + return '¿Estás seguro de que quieres eliminar la $_temp0 \'$itemName\' de este dispositivo?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Borrar'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancelar'; + + @override + String get error => 'Error'; + + @override + String discNumber(int number) { + return 'Disco $number'; + } + + @override + String get playButtonLabel => 'REPRODUCIR'; + + @override + String get shuffleButtonLabel => 'ALEATORIO'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Canciones', + one: '$count Canción', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => + 'Editar el nombre de la lista de reproducción'; + + @override + String get editPlaylistNameTitle => + 'Modificar el nombre de la lista de reproducción'; + + @override + String get required => 'Requerido'; + + @override + String get updateButtonLabel => 'ACTUALIZAR'; + + @override + String get playlistNameUpdated => 'Se actualizó el nombre de la lista.'; + + @override + String get favourite => 'Favorito'; + + @override + String get downloadsDeleted => 'Se borraron las descargas.'; + + @override + String get addDownloads => 'Añadir descargas'; + + @override + String get location => 'Ubicación'; + + @override + String get downloadsAdded => 'Se añadieron las descargas.'; + + @override + String get addButtonLabel => 'AÑADIR'; + + @override + String get shareLogs => 'Compartir registros'; + + @override + String get logsCopied => 'Se copiaron los registros.'; + + @override + String get message => 'Mensaje'; + + @override + String get stackTrace => 'Trazado de pila'; + + @override + String get applicationLegalese => + 'Licenciado con la Mozilla Public License 2.0. El código fuente disponible en:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcodificar'; + + @override + String get downloadLocations => 'Ubicaciones de descarga'; + + @override + String get audioService => 'Servicio de audio'; + + @override + String get interactions => 'Interacciones'; + + @override + String get layoutAndTheme => 'Diseño y tema'; + + @override + String get notAvailableInOfflineMode => + 'No está disponible en el modo sin conexión'; + + @override + String get logOut => 'Cerrar sesión'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Las canciones descargadas no serán eliminadas'; + + @override + String get areYouSure => '¿Estás seguro?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin usa AAC para transcodificar'; + + @override + String get enableTranscoding => 'Habilitar transcodificación'; + + @override + String get enableTranscodingSubtitle => + 'Transcodifica los streams de música en el servidor.'; + + @override + String get bitrate => 'Tasa de bits'; + + @override + String get bitrateSubtitle => + 'Una tasa de bits más alta da una mayor calidad de audio a costa de un mayor ancho de banda.'; + + @override + String get customLocation => 'Ubicación personalizada'; + + @override + String get appDirectory => 'Directorio de la aplicación'; + + @override + String get addDownloadLocation => 'Añadir ubicación de descarga'; + + @override + String get selectDirectory => 'Seleccionar directorio'; + + @override + String get unknownError => 'Error desconocido'; + + @override + String get pathReturnSlashErrorMessage => + 'No se pueden utilizar ubicaciones que contengan \"/\"'; + + @override + String get directoryMustBeEmpty => 'El directorio debe estar vacío'; + + @override + String get customLocationsBuggy => + 'Las ubicaciones personalizadas son extremadamente problemáticas por problemas con los permisos. Estoy pensando en maneras de arreglarlo, pero por ahora no recomiendo usarlas.'; + + @override + String get enterLowPriorityStateOnPause => + 'Entrar en estado de baja prioridad al pausar'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Permite que la notificación se pueda deslizar cuando la música esté pausada. También permite a Android matar el servicio cuando la música esté pausada.'; + + @override + String get shuffleAllSongCount => + 'Cantidad de canciones al reproducir aleatoriamente'; + + @override + String get shuffleAllSongCountSubtitle => + 'Cantidad de canciones a cargar cuando se use el botón de reproducir todo aleatoriamente.'; + + @override + String get viewType => 'Tipo de vista'; + + @override + String get viewTypeSubtitle => 'Tipo de vista para la pantalla de música'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Cuadrícula'; + + @override + String get portrait => 'Vertical'; + + @override + String get landscape => 'Horizontal'; + + @override + String gridCrossAxisCount(String value) { + return 'Columnas en vista de cuadrícula en $value'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Cantidad de columnas al usar por fila al estar el dispositivo en $value.'; + } + + @override + String get showTextOnGridView => 'Mostrar texto en vista de cuadrícula'; + + @override + String get showTextOnGridViewSubtitle => + 'Muestra el texto (título, artista, etc) en la pantalla de música al usar la vista de cuadrícula.'; + + @override + String get showCoverAsPlayerBackground => + 'Mostrar la carátula con desenfoque como fondo del reproductor'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Usa la carátula del álbum desenfocada como fondo del reproductor.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Ocultar los artistas de canciones si son los mismos que los artistas del álbum'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Oculta a los artistas de las canciones en la pantalla del álbum si no son diferentes de los artistas del álbum.'; + + @override + String get disableGesture => 'Deshabilitar los gestos'; + + @override + String get disableGestureSubtitle => 'Si desea desactivar los gestos.'; + + @override + String get showFastScroller => 'Mostrar desplazamiento rápido'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'Sistema'; + + @override + String get light => 'Claro'; + + @override + String get dark => 'Oscuro'; + + @override + String get tabs => 'Pestañas'; + + @override + String get cancelSleepTimer => '¿Cancelar el temporizador de sueño?'; + + @override + String get yesButtonLabel => 'SÍ'; + + @override + String get noButtonLabel => 'NO'; + + @override + String get setSleepTimer => 'Ajustar temporizador de sueño'; + + @override + String get minutes => 'Minutos'; + + @override + String get invalidNumber => 'Número inválido'; + + @override + String get sleepTimerTooltip => 'Temporizador de sueño'; + + @override + String get addToPlaylistTooltip => 'Añadir a lista de reproducción'; + + @override + String get addToPlaylistTitle => 'Agregar a lista de reproducción'; + + @override + String get removeFromPlaylistTooltip => + 'Eliminar de la lista de reproducción'; + + @override + String get removeFromPlaylistTitle => 'Borrar de la lista de reproducción'; + + @override + String get newPlaylist => 'Nueva lista'; + + @override + String get createButtonLabel => 'CREAR'; + + @override + String get playlistCreated => 'Se creó la lista.'; + + @override + String get noAlbum => 'Sin álbum'; + + @override + String get noItem => 'Ningún elemento'; + + @override + String get noArtist => 'Sin artista'; + + @override + String get unknownArtist => 'Artista desconocido'; + + @override + String get streaming => 'TRANSMITIENDO'; + + @override + String get downloaded => 'DESCARGADO'; + + @override + String get transcode => 'TRANSCODIFICADO'; + + @override + String get direct => 'DIRECTO'; + + @override + String get statusError => 'ERROR DE ESTADO'; + + @override + String get queue => 'Cola'; + + @override + String get addToQueue => 'Añadir a la cola'; + + @override + String get playNext => 'Reproducir la siguiente'; + + @override + String get replaceQueue => 'Reemplazar la cola'; + + @override + String get instantMix => 'Mezcla instantánea'; + + @override + String get goToAlbum => 'Ir al álbum'; + + @override + String get removeFavourite => 'Eliminar favorito'; + + @override + String get addFavourite => 'Añadir favorito'; + + @override + String get addedToQueue => 'Añadido a la cola.'; + + @override + String get insertedIntoQueue => 'Insertado en la cola.'; + + @override + String get queueReplaced => 'Se reemplazó la cola.'; + + @override + String get removedFromPlaylist => 'Eliminado de la lista de reproducción.'; + + @override + String get startingInstantMix => 'Empezando mezcla instantánea.'; + + @override + String get anErrorHasOccured => 'Ha ocurrido un error.'; + + @override + String responseError(String error, int statusCode) { + return '$error Código de estado $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Código de estado $statusCode. Esto posiblemente significa que has usado el nombre de usuario o la contraseña incorrecta, o que tu cliente ya no está autenticado.'; + } + + @override + String get removeFromMix => 'Eliminar de la mezcla'; + + @override + String get addToMix => 'Añadir a la mezcla'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redescargados $count elementos', + one: 'Redescargado $count elemento', + zero: 'No hace falta volver a descargar nada.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Duración del búfer'; + + @override + String get bufferDurationSubtitle => + 'Cuánto debe almacenar en el búfer el reproductor, en segundos. Requiere un reinicio.'; + + @override + String get language => 'Idioma'; + + @override + String get confirm => 'Confirmar'; + + @override + String get showUncensoredLogMessage => + 'Este registro contiene tu información de acceso. ¿Mostrar?'; + + @override + String get resetTabs => 'Restablecer las pestañas'; + + @override + String get noMusicLibrariesTitle => 'Sin bibliotecas de música'; + + @override + String get noMusicLibrariesBody => + 'Finamp no ha podido encontrar ninguna biblioteca de música. Asegúrate de que tu servidor Jellyfin contiene al menos una biblioteca con el tipo de \"Música\".'; + + @override + String get refresh => 'REFRESCAR'; + + @override + String get swipeInsertQueueNext => + 'Reproducir la siguiente canción al deslizarla'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Permite insertar una canción como siguiente elemento en la cola cuando se desliza en la lista de reproducción en lugar de añadirla al final.'; + + @override + String get redesignBeta => 'Prueba la versión Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Mezclando. Toca para alternar.'; + + @override + String get playbackOrderLinearTooltip => + 'Reproducción en orden. Toca para alternar.'; + + @override + String get loopModeAllTooltip => 'Repitiendo todo. Toca para alternar.'; + + @override + String get loopModeOneTooltip => 'En bucle. Toca para alternar.'; + + @override + String get loopModeNoneTooltip => + 'No se reproduce en bucle. Toca para alternar.'; + + @override + String get skipToPrevious => 'Saltar a la canción anterior'; + + @override + String get skipToNext => 'Saltar a la siguiente canción'; + + @override + String get togglePlayback => 'Alternar reproducción'; + + @override + String playArtist(String artist) { + return 'Reproducir todos los álbumes de $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Reproducir aleatoriamente todos los álbumes de $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Descargar todos los álbumes de $artist'; + } + + @override + String get deleteFromDevice => 'Eliminar del dispositivo'; + + @override + String get download => 'Descargar'; + + @override + String get sync => 'Sincronizar con el servidor'; + + @override + String get about => 'Acerca de Finamp'; +} diff --git a/lib/l10n/app_localizations_et.dart b/lib/l10n/app_localizations_et.dart new file mode 100644 index 0000000..a84dad6 --- /dev/null +++ b/lib/l10n/app_localizations_et.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Estonian (`et`). +class AppLocalizationsEt extends AppLocalizations { + AppLocalizationsEt([String locale = 'et']) : super(locale); + + @override + String startupError(String error) { + return 'Rakenduse käivitamisel läks midagi valesti. Viga oli: $error\n\nPalun loo probleem github.com/UnicornsOnLSD/finamp koos ekraanipildiga sellest leheküljest. Kui see probleem püsib, võiks rakenduse lähtestamiseks kustutada rakenduse andmed.'; + } + + @override + String get serverUrl => 'Serveri URL'; + + @override + String get internalExternalIpExplanation => + 'Kui soovid oma Jellyfini serverile kaugjuurdepääsu saada, pead kasutama oma välist IP-d.\n\nKui server kasutab HTTP-porti (80/443), ei pea porti määrama. See on tõenäoliselt nii, kui server on pöördpuhverserveri taga.'; + + @override + String get emptyServerUrl => 'Serveri URL ei tohi olla tühi'; + + @override + String get urlStartWithHttps => 'URL alguses peab olema http:// või https://'; + + @override + String get urlTrailingSlash => 'URL ei tohi lõppeda kaldkriipsuga'; + + @override + String get username => 'Kasutajanimi'; + + @override + String get password => 'Parool'; + + @override + String get logs => 'Logid'; + + @override + String get next => 'Järgmine'; + + @override + String get selectMusicLibraries => 'Vali muusikakogu'; + + @override + String get couldNotFindLibraries => 'Ühtki muusikakogu ei leitud.'; + + @override + String get unknownName => 'Tundmatu nimi'; + + @override + String get songs => 'Lood'; + + @override + String get albums => 'Albumid'; + + @override + String get artists => 'Esitajad'; + + @override + String get genres => 'Žanrid'; + + @override + String get playlists => 'Esitusloendid'; + + @override + String get startMix => 'Käivita miks'; + + @override + String get startMixNoSongsArtist => + 'Vajuta pikalt esitajale, et lisada või eemaldada ta enne miksi koostamise alustamist koostajast'; + + @override + String get startMixNoSongsAlbum => + 'Vajuta pikalt albumile, et lisada või eemaldada ta enne miksi koostamise alustamist koostajast'; + + @override + String get music => 'Muusika'; + + @override + String get clear => 'Puhasta'; + + @override + String get favourites => 'Lemmikud'; + + @override + String get shuffleAll => 'Sega kõik'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Allalaadimised'; + + @override + String get settings => 'Seaded'; + + @override + String get offlineMode => 'Võrguühenduseta režiim'; + + @override + String get sortOrder => 'Sortimisjärjestus'; + + @override + String get sortBy => 'Sordi'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Albumi esitaja'; + + @override + String get artist => 'Esitaja'; + + @override + String get budget => 'Eelarve'; + + @override + String get communityRating => 'Kogukonna hinnang'; + + @override + String get criticRating => 'Kriitikute hinnang'; + + @override + String get dateAdded => 'Lisamise kuupäev'; + + @override + String get datePlayed => 'Esituse kuupäev'; + + @override + String get playCount => 'Esituste arv'; + + @override + String get premiereDate => 'Avaldamise kuupäev'; + + @override + String get productionYear => 'Tootmisaasta'; + + @override + String get name => 'Nimi'; + + @override + String get random => 'Juhuslik'; + + @override + String get revenue => 'Tulud'; + + @override + String get runtime => 'Kestus'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Laadi alla puuduvad pildid'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Allalaetud $count puuduvat pilti', + one: 'Allalaetud $count puuduv pilt', + zero: 'Puuduvaid pilte ei leitud', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Allalaadimisvead'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count allalaadimist', + one: '$count allalaadimine', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count üksust', + one: '$count üksus', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count pilti', + one: '$count pilt', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count tehtud'; + } + + @override + String dlFailed(int count) { + return '$count nurjus'; + } + + @override + String dlEnqueued(int count) { + return '$count järjekorras'; + } + + @override + String dlRunning(int count) { + return '$count käsil'; + } + + @override + String get downloadErrorsTitle => 'Allalaadimisvead'; + + @override + String get noErrors => 'Pole vigu!'; + + @override + String get errorScreenError => + 'Vigade loendi saamisel tekkis viga! Siinkohal peaksid ilmselt lihtsalt looma probleemi GitHubis ja kustutama rakenduse andmed'; + + @override + String get failedToGetSongFromDownloadId => + 'Allalaadimise ID-st laulu hankimine nurjus'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Viga'; + + @override + String discNumber(int number) { + return 'Plaat $number'; + } + + @override + String get playButtonLabel => 'MÄNGI'; + + @override + String get shuffleButtonLabel => 'SEGA'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count lugu', + one: '$count lugu', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Muuda esitusloendi nime'; + + @override + String get editPlaylistNameTitle => 'Muuda esitusloendi nime'; + + @override + String get required => 'Nõutav'; + + @override + String get updateButtonLabel => 'UUENDA'; + + @override + String get playlistNameUpdated => 'Esitusloendi nimi uuendatud.'; + + @override + String get favourite => 'Lemmik'; + + @override + String get downloadsDeleted => 'Allalaadimised kustutati.'; + + @override + String get addDownloads => 'Lisa allalaadimised'; + + @override + String get location => 'Asukoht'; + + @override + String get downloadsAdded => 'Allalaadimised lisatud.'; + + @override + String get addButtonLabel => 'LISA'; + + @override + String get shareLogs => 'Jaga logisid'; + + @override + String get logsCopied => 'Logid kopeeriti.'; + + @override + String get message => 'Sõnum'; + + @override + String get stackTrace => 'Stack Trace'; + + @override + String get applicationLegalese => + 'Litsentsitud Mozilla avaliku litsentsiga 2.0. Lähtekood on saadaval aadressil:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transkoodimine'; + + @override + String get downloadLocations => 'Allalaadimiste asukohad'; + + @override + String get audioService => 'Heliteenus'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Paigutus ja teema'; + + @override + String get notAvailableInOfflineMode => + 'Pole võrguühenduseta režiimis saadaval'; + + @override + String get logOut => 'Logi välja'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Allalaaditud lugusid ei kustutata'; + + @override + String get areYouSure => 'Kas oled kindel?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin kasutab transkodeerimiseks AAC-d'; + + @override + String get enableTranscoding => 'Luba transkodeerimine'; + + @override + String get enableTranscodingSubtitle => + 'Transkodeerib muusikavooge serveri poolel.'; + + @override + String get bitrate => 'Bitikiirus'; + + @override + String get bitrateSubtitle => + 'Suurem bitikiirus annab kvaliteetsema heli, kuid see nõuab suuremat ribalaiust.'; + + @override + String get customLocation => 'Kohandatud asukoht'; + + @override + String get appDirectory => 'Rakenduse kataloog'; + + @override + String get addDownloadLocation => 'Lisa allalaadimise asukoht'; + + @override + String get selectDirectory => 'Vali kataloog'; + + @override + String get unknownError => 'Tundmatu viga'; + + @override + String get pathReturnSlashErrorMessage => + 'Radu, mis tagastavad \"/\", ei saa kasutada'; + + @override + String get directoryMustBeEmpty => 'Kataloog peab olema tühi'; + + @override + String get customLocationsBuggy => + 'Kohandatud asukohad on äärmiselt vigased, kuna on probleeme õigustega. Ma mõtlen, kuidas seda parandada, kuid praegu ma ei soovitaks neid kasutada.'; + + @override + String get enterLowPriorityStateOnPause => + 'Kasuta pausil madala prioriteediga olekut'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Laseb pausi ajal märguande ära pühkida. Võimaldab Androidil ka teenuse pausi ajal lõpetada.'; + + @override + String get shuffleAllSongCount => '\'Sega kõik lood\' arv'; + + @override + String get shuffleAllSongCountSubtitle => + 'Laaditavate lugude hulk, kui kasutada nuppu \'Sega kõik lood\'.'; + + @override + String get viewType => 'Vaate tüüp'; + + @override + String get viewTypeSubtitle => 'Muusikaekraani vaate tüüp'; + + @override + String get list => 'Loend'; + + @override + String get grid => 'Ruudustik'; + + @override + String get portrait => 'Portree'; + + @override + String get landscape => 'Lai pilt'; + + @override + String gridCrossAxisCount(String value) { + return '$value Ruudustiku risttelgede arv'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Ruudustiku plaatide arv, mida kasutatakse rea kohta, kui $value.'; + } + + @override + String get showTextOnGridView => 'Kuva teksti ruudustikuvaates'; + + @override + String get showTextOnGridViewSubtitle => + 'Kas kuvada teksti (pealkiri, esitaja jne) muusikaekraani ruudustikul või mitte.'; + + @override + String get showCoverAsPlayerBackground => + 'Kuva hägustatud kaanepilt mängija taustana'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Kas kasutada mängija ekraanil taustaks hägustatud kaanekujundust või mitte.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Peida laulu esitajad, kui need on samad kui albumi esitajad'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Kas näidata lugude esitajaid albumiekraanil, kui need ei erine albumi esitajatest.'; + + @override + String get disableGesture => 'Keela žestid'; + + @override + String get disableGestureSubtitle => 'Kas keelata žestid.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Teema'; + + @override + String get system => 'Süsteem'; + + @override + String get light => 'Hele'; + + @override + String get dark => 'Tume'; + + @override + String get tabs => 'Vahekaardid'; + + @override + String get cancelSleepTimer => 'Kas tühistada unetaimer?'; + + @override + String get yesButtonLabel => 'JAH'; + + @override + String get noButtonLabel => 'EI'; + + @override + String get setSleepTimer => 'Määra unetaimer'; + + @override + String get minutes => 'minutit'; + + @override + String get invalidNumber => 'Sobimatu number'; + + @override + String get sleepTimerTooltip => 'Unetaimer'; + + @override + String get addToPlaylistTooltip => 'Lisa esitusloendisse'; + + @override + String get addToPlaylistTitle => 'Lisa esitusloendisse'; + + @override + String get removeFromPlaylistTooltip => 'Remove from playlist'; + + @override + String get removeFromPlaylistTitle => 'Remove from Playlist'; + + @override + String get newPlaylist => 'Uus esitusloend'; + + @override + String get createButtonLabel => 'LOO'; + + @override + String get playlistCreated => 'Esitusloend on loodud.'; + + @override + String get noAlbum => 'Albumit pole'; + + @override + String get noItem => 'Üksust pole'; + + @override + String get noArtist => 'Esitajat pole'; + + @override + String get unknownArtist => 'Tundmatu esitaja'; + + @override + String get streaming => 'VOOGESITUS'; + + @override + String get downloaded => 'ALLALAADITUD'; + + @override + String get transcode => 'TRANSKOODI'; + + @override + String get direct => 'OTSE'; + + @override + String get statusError => 'OLEKUVIGA'; + + @override + String get queue => 'Järjekord'; + + @override + String get addToQueue => 'Lisa järjekorda'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Asenda järjekord'; + + @override + String get instantMix => 'Kiirmiks'; + + @override + String get goToAlbum => 'Ava album'; + + @override + String get removeFavourite => 'Eemalda lemmik'; + + @override + String get addFavourite => 'Lisa lemmik'; + + @override + String get addedToQueue => 'Lisatud järjekorda.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Järjekord asendatud.'; + + @override + String get removedFromPlaylist => 'Removed from playlist.'; + + @override + String get startingInstantMix => 'Kiirmiksi käivitamine.'; + + @override + String get anErrorHasOccured => 'Ilmnes tõrge.'; + + @override + String responseError(String error, int statusCode) { + return '$error Olekukood $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Olekukood $statusCode. Tõenäoliselt tähendab see, et kasutasid vale kasutajanime/parooli või klient pole enam autenditud.'; + } + + @override + String get removeFromMix => 'Eemalda miksist'; + + @override + String get addToMix => 'Lisa miksi'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Uuesti laeti alla $count üksust', + one: 'Uuesti laeti alla $count üksus', + zero: 'Allalaadimine pole vajalik.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Puhvri kestus'; + + @override + String get bufferDurationSubtitle => + 'Kui palju mängija peaks puhverdama sekundites. Nõuab taaskäivitamist.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_fi.dart b/lib/l10n/app_localizations_fi.dart new file mode 100644 index 0000000..229dea3 --- /dev/null +++ b/lib/l10n/app_localizations_fi.dart @@ -0,0 +1,737 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Finnish (`fi`). +class AppLocalizationsFi extends AppLocalizations { + AppLocalizationsFi([String locale = 'fi']) : super(locale); + + @override + String startupError(String error) { + return 'Jokin meni pieleen sovelluksen käynnistyksen aikana. Virhe oli: $error\n\nOle hyvä ja luo virheilmoitus osoitteessa github.com/UnicornsOnLSD/finamp, jossa on kuvakaappaus tästä sivusta. Jos ongelma jatkuu, voit tyhjentää sovelluksen tiedot nollataksesi sovelluksen.'; + } + + @override + String get serverUrl => 'Palvelimen URL'; + + @override + String get internalExternalIpExplanation => + 'Jos haluat käyttää Jellyfin-palvelintasi etänä, sinun on käytettävä ulkoista IP-osoitettasi.\n\nJos palvelimesi käyttää HTTP-porttia (80/443), sinun ei tarvitse määrittää porttia. Näin on todennäköisesti, jos palvelimesi on reverse proxyn takana.'; + + @override + String get emptyServerUrl => 'Palvelimen URL ei voi olla tyhjä'; + + @override + String get urlStartWithHttps => 'URL pitää alkaa http:// tai https://'; + + @override + String get urlTrailingSlash => 'URL ei saa päättyä vinoviivaan'; + + @override + String get username => 'Käyttäjätunnus'; + + @override + String get password => 'Salasana'; + + @override + String get logs => 'Lokit'; + + @override + String get next => 'Seuraava'; + + @override + String get selectMusicLibraries => 'Valitse musiikkikirjastot'; + + @override + String get couldNotFindLibraries => 'Yhtään kirjastoa ei löytynyt.'; + + @override + String get unknownName => 'Tuntematon Nimi'; + + @override + String get songs => 'Kappaleet'; + + @override + String get albums => 'Albumit'; + + @override + String get artists => 'Artistit'; + + @override + String get genres => 'Tyylilajit'; + + @override + String get playlists => 'Soittolistat'; + + @override + String get startMix => 'Aloita sekoitus'; + + @override + String get startMixNoSongsArtist => + 'Paina pitkään artistia lisätäksesi tai poistaaksesi sen miksaukseen ennen miksauksen aloittamista'; + + @override + String get startMixNoSongsAlbum => + 'Paina albumia pitkään lisätäksesi tai poistaaksesi sen miksaukseen ennen miksauksen aloittamista'; + + @override + String get music => 'Musiikki'; + + @override + String get clear => 'Tyhjennä'; + + @override + String get favourites => 'Suosikit'; + + @override + String get shuffleAll => 'Sekoita kaikki'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Lataukset'; + + @override + String get settings => 'Asetukset'; + + @override + String get offlineMode => 'Offline tila'; + + @override + String get sortOrder => 'Lajittelujärjestys'; + + @override + String get sortBy => 'Järjestä'; + + @override + String get album => 'Albumi'; + + @override + String get albumArtist => 'Albumin artisti'; + + @override + String get artist => 'Artisti'; + + @override + String get budget => 'Budjetti'; + + @override + String get communityRating => 'Yhteisön arvostelu'; + + @override + String get criticRating => 'Kriitikoiden arvostelu'; + + @override + String get dateAdded => 'Lisäämisen päivämäärä'; + + @override + String get datePlayed => 'Toiston päivämäärä'; + + @override + String get playCount => 'Toistolaskuri'; + + @override + String get premiereDate => 'Ensiesityspäivä'; + + @override + String get productionYear => 'Tuotantovuosi'; + + @override + String get name => 'Nimi'; + + @override + String get random => 'Satunnainen'; + + @override + String get revenue => 'Tulot'; + + @override + String get runtime => 'Kesto'; + + @override + String get syncDownloadedPlaylists => 'Synkronoi ladatut soittolistat'; + + @override + String get downloadMissingImages => 'Lataa puuttuvat kuvat'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'ladattu $count puuttuvia kuvia', + one: 'Ladattu $count puuttuvaa kuvaa', + zero: 'Puuttuvia kuvia ei löytynyt', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Latauksen virheet'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count lataukset', + one: '$count lataus', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count kohteet', + one: '$count kohde', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count kuvat', + one: '$count kuva', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count valmistunut'; + } + + @override + String dlFailed(int count) { + return '$count epäonnistui'; + } + + @override + String dlEnqueued(int count) { + return '$count Jonossa'; + } + + @override + String dlRunning(int count) { + return '$count käynnissä'; + } + + @override + String get downloadErrorsTitle => 'Latauksen virheet'; + + @override + String get noErrors => 'Ei virheitä!'; + + @override + String get errorScreenError => + 'Virhe tapahtui virheiden luettelon hakemisessa! Tässä vaiheessa sinun pitäisi luultavasti vain luoda virheilmoitus GitHubiin ja poistaa sovelluksen tiedot'; + + @override + String get failedToGetSongFromDownloadId => + 'Kappaleen nouto lataus ID:stä epäonnistui'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Oletko varma, että haluat poistaa $_temp0 \'$itemName\' tästä laitteesta?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Poista'; + + @override + String get deleteDownloadsAbortButtonText => 'Peruuta'; + + @override + String get error => 'Virhe'; + + @override + String discNumber(int number) { + return 'Levy $number'; + } + + @override + String get playButtonLabel => 'TOISTA'; + + @override + String get shuffleButtonLabel => 'SEKOITA'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Kappaleita', + one: '$count Kappale', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Muokkaa soittolistan nimeä'; + + @override + String get editPlaylistNameTitle => 'Muokkaa soittolistan nimeä'; + + @override + String get required => 'Pakollinen'; + + @override + String get updateButtonLabel => 'PÄIVITÄ'; + + @override + String get playlistNameUpdated => 'Soittolistan nimi päivitetty.'; + + @override + String get favourite => 'Suosikki'; + + @override + String get downloadsDeleted => 'Lataukset poistettu.'; + + @override + String get addDownloads => 'Lisää lataukset'; + + @override + String get location => 'Sijainti'; + + @override + String get downloadsAdded => 'Lataukset lisätty.'; + + @override + String get addButtonLabel => 'LISÄÄ'; + + @override + String get shareLogs => 'Jaa lokit'; + + @override + String get logsCopied => 'Lokit kopioitu.'; + + @override + String get message => 'Viesti'; + + @override + String get stackTrace => 'Pinon jäljitys'; + + @override + String get applicationLegalese => + 'Lisensoitu Mozilla Public License 2.0 -lisenssillä. Lähdekoodi saatavilla osoitteessa:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transkoodaus'; + + @override + String get downloadLocations => 'Latauksen sijainnit'; + + @override + String get audioService => 'Äänipalvelu'; + + @override + String get interactions => 'Vuorovaikutukset'; + + @override + String get layoutAndTheme => 'Asettelu ja Teema'; + + @override + String get notAvailableInOfflineMode => 'Ei saatavilla offline tilassa'; + + @override + String get logOut => 'Kirjaudu ulos'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Ladattuja kappaleita ei poisteta'; + + @override + String get areYouSure => 'Oletko varma?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin käyttää AAC:tä transkoodaukseen'; + + @override + String get enableTranscoding => 'Ota transkoodaus käyttöön'; + + @override + String get enableTranscodingSubtitle => + 'Transkoodaa musiikin suoratoiston palvelimen päässä.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Suurempi bitrate antaa laadukkaamman äänen, mutta sen käyttämä kaistanleveys on suurempi.'; + + @override + String get customLocation => 'Mukautettu sijainti'; + + @override + String get appDirectory => 'Sovelluksen hakemisto'; + + @override + String get addDownloadLocation => 'Lisää latauksen hakemisto'; + + @override + String get selectDirectory => 'Valitse hakemisto'; + + @override + String get unknownError => 'Tuntematon virhe'; + + @override + String get pathReturnSlashErrorMessage => + 'Polkuja jotka palauttavat \"/\" ei voi käyttää'; + + @override + String get directoryMustBeEmpty => 'Hakemiston pitää olla tyhjä'; + + @override + String get customLocationsBuggy => + 'Mukautetut sijainnit ovat erittäin bugisia käyttöoikeusongelmien vuoksi. Mietin tapoja korjata tämä, mutta toistaiseksi en suosittele niiden käyttöä.'; + + @override + String get enterLowPriorityStateOnPause => + 'Siirtyminen matalan prioriteetin tilaan tauon aikana'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Sallii ilmoituksen pyyhkäisemisen pois, kun toisto on pysäytetty. Antaa myös Androidin lopettaa palvelun, kun toisto on keskeytetty.'; + + @override + String get shuffleAllSongCount => 'Kaikkien sekoitettujen kappaleiden määrä'; + + @override + String get shuffleAllSongCountSubtitle => + 'Ladattavien kappaleiden määrä, kun käytät sekoita kaikki kappaleet painiketta.'; + + @override + String get viewType => 'Näkymän Tyyppi'; + + @override + String get viewTypeSubtitle => 'Musiikkinäytön näkymätyyppi'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Ruudukko'; + + @override + String get portrait => 'Pysty'; + + @override + String get landscape => 'Vaaka'; + + @override + String gridCrossAxisCount(String value) { + return '$value Ruudukon poikittaisakselien lukumäärä'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Rivikohtaisesti käytettävien ruudukkotiilien määrä, kun $value.'; + } + + @override + String get showTextOnGridView => 'Näytä teksti ruudukkonäkymässä'; + + @override + String get showTextOnGridViewSubtitle => + 'Näytetäänkö teksti (nimi, artisti jne.) ruudukon musiikkinäytöllä vai ei.'; + + @override + String get showCoverAsPlayerBackground => + 'Näytä sumennettu kansikuva soittimen taustakuvana'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Käytetäänkö sumeaa kansikuvitusta taustana soittimen näytöllä vai ei.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Piilota kappaleen artistit, jos samat kuin albumin artistit'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Näytetäänkö kappaleiden artistit albumin näytöllä, jos ne eivät poikkea albumin artisteista.'; + + @override + String get disableGesture => 'Poista eleet käytöstä'; + + @override + String get disableGestureSubtitle => 'Poistaa eleet käytöstä.'; + + @override + String get showFastScroller => 'Näytä nopea vieritin'; + + @override + String get theme => 'Teema'; + + @override + String get system => 'Järjestelmä'; + + @override + String get light => 'Vaalea'; + + @override + String get dark => 'Tumma'; + + @override + String get tabs => 'Välilehdet'; + + @override + String get cancelSleepTimer => 'Peruuta uniajastin?'; + + @override + String get yesButtonLabel => 'KYLLÄ'; + + @override + String get noButtonLabel => 'EI'; + + @override + String get setSleepTimer => 'Aseta uniajastin'; + + @override + String get minutes => 'Minuutit'; + + @override + String get invalidNumber => 'Virheellinen numero'; + + @override + String get sleepTimerTooltip => 'Uniajastin'; + + @override + String get addToPlaylistTooltip => 'Lisää soittolistalle'; + + @override + String get addToPlaylistTitle => 'Lisää soittolistalle'; + + @override + String get removeFromPlaylistTooltip => 'Poista soittolistalta'; + + @override + String get removeFromPlaylistTitle => 'Poista soittolistalta'; + + @override + String get newPlaylist => 'Uusi soittolista'; + + @override + String get createButtonLabel => 'LUO'; + + @override + String get playlistCreated => 'Soittolista on luotu.'; + + @override + String get noAlbum => 'Ei albumia'; + + @override + String get noItem => 'Ei kohdetta'; + + @override + String get noArtist => 'Ei Artistia'; + + @override + String get unknownArtist => 'Tuntematon artisti'; + + @override + String get streaming => 'SUORATOISTAA'; + + @override + String get downloaded => 'LADATTU'; + + @override + String get transcode => 'TRANSKOODI'; + + @override + String get direct => 'SUORA'; + + @override + String get statusError => 'TILAVIRHE'; + + @override + String get queue => 'Jono'; + + @override + String get addToQueue => 'Lisää jonoon'; + + @override + String get playNext => 'Toista seuraava'; + + @override + String get replaceQueue => 'Korvaa Jono'; + + @override + String get instantMix => 'Välitön Sekoitus'; + + @override + String get goToAlbum => 'Mene albumiin'; + + @override + String get removeFavourite => 'Poista suosikki'; + + @override + String get addFavourite => 'Lisää suosikki'; + + @override + String get addedToQueue => 'Lisätty jonoon.'; + + @override + String get insertedIntoQueue => 'Asetettu jonoon.'; + + @override + String get queueReplaced => 'Jono korvattu.'; + + @override + String get removedFromPlaylist => 'Poistettu soittolistalta.'; + + @override + String get startingInstantMix => 'Käynnistetään välitön sekoitus.'; + + @override + String get anErrorHasOccured => 'Tapahtui virhe.'; + + @override + String responseError(String error, int statusCode) { + return '$error Tilakoodi $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Tilakoodi $statusCode. Tämä tarkoittaa todennäköisesti, että olet käyttänyt väärää käyttäjätunnusta/salasanaa tai että sovellus ei ole enää kirjautuneena sisään.'; + } + + @override + String get removeFromMix => 'Poista Sekoituksesta'; + + @override + String get addToMix => 'Lisää Sekoitukseen'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Uudelleenladatut $count kohteet', + one: 'Uudelleenladattu $count kohde', + zero: 'Ei tarvitse ladata uudelleen.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Puskurin kesto'; + + @override + String get bufferDurationSubtitle => + 'Kuinka paljon soittimen pitäisi puskuroida, sekunteina. Vaatii uudelleenkäynnistyksen.'; + + @override + String get language => 'Kieli'; + + @override + String get confirm => 'Vahvista'; + + @override + String get showUncensoredLogMessage => + 'Tämä loki sisältää kirjautumistietosi. Näytä?'; + + @override + String get resetTabs => 'Nollaa välilehdet'; + + @override + String get noMusicLibrariesTitle => 'Ei musiikkikirjastoja'; + + @override + String get noMusicLibrariesBody => + 'Finamp ei löytänyt musiikkikirjastoja. Varmista, että Jellyfin-palvelimellasi on vähintään yksi kirjasto, jonka sisältötyypiksi on asetettu \"Musiikki\".'; + + @override + String get refresh => 'VIRKISTÄ'; + + @override + String get swipeInsertQueueNext => 'Toista Pyyhkäisty Kappale Seuraavaksi'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Mahdollistaa kappaleen lisäämisen jonon seuraavaksi kohteeksi, kun sitä pyyhkäistään kappaleiden luettelossa sen sijaan, että se liitettäisiin loppuun.'; + + @override + String get redesignBeta => 'Kokeile Betaa'; + + @override + String get playbackOrderShuffledTooltip => + 'Sekoittaminen. Vaihda napauttamalla.'; + + @override + String get playbackOrderLinearTooltip => + 'Toistaminen järjestyksessä. Vaihda napauttamalla.'; + + @override + String get loopModeAllTooltip => 'Toista kaikki. Vaihda napauttamalla.'; + + @override + String get loopModeOneTooltip => 'Toista yksi. Vaihda napauttamalla.'; + + @override + String get loopModeNoneTooltip => 'Älä toista. Vaihda napauttamalla.'; + + @override + String get skipToPrevious => 'Siirry edelliseen kappaleeseen'; + + @override + String get skipToNext => 'Siirry seuraavaan kappaleeseen'; + + @override + String get togglePlayback => 'Toiston vaihtaminen'; + + @override + String playArtist(String artist) { + return 'Toista kaikki $artist:n albumit'; + } + + @override + String shuffleArtist(String artist) { + return 'Sekoita kaikki $artist:n albumit'; + } + + @override + String downloadArtist(String artist) { + return 'Lataa kaikki $artist:n albumit'; + } + + @override + String get deleteFromDevice => 'Poista laitteelta'; + + @override + String get download => 'Lataa'; + + @override + String get sync => 'Synkronoi palvelimen kanssa'; + + @override + String get about => 'Tietoja Finampista'; +} diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart new file mode 100644 index 0000000..f12c688 --- /dev/null +++ b/lib/l10n/app_localizations_fr.dart @@ -0,0 +1,757 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for French (`fr`). +class AppLocalizationsFr extends AppLocalizations { + AppLocalizationsFr([String locale = 'fr']) : super(locale); + + @override + String startupError(String error) { + return 'Une erreur est survenue lors du démarrage de l\'application. L\'erreur est: $error\n\nPlease create an issue on github.com/UnicornsOnLSD/finamp with a screenshot of this page. If this problem persists you can clear your app data to reset the app.'; + } + + @override + String get serverUrl => 'Adresse du serveur'; + + @override + String get internalExternalIpExplanation => + 'Si vous souhaitez pouvoir accéder à votre serveur Jellyfin à distance, vous devez utiliser votre adresse IP externe.\n\nSi votre serveur utilise un port HTTP (80/443), vous n\'avez pas besoin de spécifier de port. C\'est probablement le cas si votre serveur est derrière un reverse proxy.'; + + @override + String get emptyServerUrl => 'Vous devez indiquez l\'adresse du serveur.'; + + @override + String get urlStartWithHttps => + 'L\'adresse doit commencer par http:// ou https://'; + + @override + String get urlTrailingSlash => + 'L\'adresse ne doit pas inclure de slash final.'; + + @override + String get username => 'Nom d\'utilisateur'; + + @override + String get password => 'Mot de passe'; + + @override + String get logs => 'Logs'; + + @override + String get next => 'Prochain'; + + @override + String get selectMusicLibraries => 'Selectionner des bibliothèques'; + + @override + String get couldNotFindLibraries => 'Aucune bibliothèque trouvée'; + + @override + String get unknownName => 'Nom inconnu'; + + @override + String get songs => 'Titres'; + + @override + String get albums => 'Albums'; + + @override + String get artists => 'Artistes'; + + @override + String get genres => 'Genres'; + + @override + String get playlists => 'Playlists'; + + @override + String get startMix => 'Commencer un Mix'; + + @override + String get startMixNoSongsArtist => + 'Appuyer longuement sur un artiste pour l\'ajouter ou le retirer du mix avant de commencer'; + + @override + String get startMixNoSongsAlbum => + 'Appuyer longuement sur un album pour l\'ajouter ou le retirer du mix avant de commencer'; + + @override + String get music => 'Musique'; + + @override + String get clear => 'Effacer'; + + @override + String get favourites => 'Favoris'; + + @override + String get shuffleAll => 'Tout mélanger'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Téléchargements'; + + @override + String get settings => 'Réglages'; + + @override + String get offlineMode => 'Mode hors-ligne'; + + @override + String get sortOrder => 'Ordre de tri'; + + @override + String get sortBy => 'Trier par'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Artiste de l\'album'; + + @override + String get artist => 'Artiste'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Note de la communauté'; + + @override + String get criticRating => 'Note de la critique'; + + @override + String get dateAdded => 'Date d\'ajout'; + + @override + String get datePlayed => 'Date de lecture'; + + @override + String get playCount => 'nombre de lectures'; + + @override + String get premiereDate => 'Date de première'; + + @override + String get productionYear => 'Date de production'; + + @override + String get name => 'Nom'; + + @override + String get random => 'Aléatoire'; + + @override + String get revenue => 'Recettes'; + + @override + String get runtime => 'Durée d\'exécution'; + + @override + String get syncDownloadedPlaylists => + 'Synchroniser les playlists téléchargées'; + + @override + String get downloadMissingImages => 'Télécharger les images manquantes'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count images téléchargées', + one: '$count image téléchargée', + zero: 'Pas d\'image manquante', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Télécharger les erreurs'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count téléchargements', + one: '$count téléchargement', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count éléments', + one: '$count élément', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count images', + one: '$count image', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count complétés', + one: '$count complété', + ); + return '$_temp0'; + } + + @override + String dlFailed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count échecs', + one: '$count échec', + ); + return '$_temp0'; + } + + @override + String dlEnqueued(int count) { + return '$count en attente'; + } + + @override + String dlRunning(int count) { + return '$count en cours'; + } + + @override + String get downloadErrorsTitle => 'Erreurs de téléchargement'; + + @override + String get noErrors => 'Pas d\'erreur!'; + + @override + String get errorScreenError => + 'Une erreur est survenue lors de la récupération de la liste des erreurs ! À ce stade, il serait probablement préférable de créer une issue sur GitHub et de supprimer les données de l\'application.'; + + @override + String get failedToGetSongFromDownloadId => + 'Échec de récupération de la chanson à partir de l\'ID de téléchargement'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'l\'album', + 'playlist': 'la playlist', + 'artist': 'l\'artiste', + 'genre': 'le genre', + 'track': 'le titre', + 'other': '', + }, + ); + return 'Êtes vour sûr de vouloir supprimer $_temp0 \'$itemName\' de cet appareil ?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Supprimer'; + + @override + String get deleteDownloadsAbortButtonText => 'Annuler'; + + @override + String get error => 'Erreur'; + + @override + String discNumber(int number) { + return 'Disque $number'; + } + + @override + String get playButtonLabel => 'LIRE'; + + @override + String get shuffleButtonLabel => 'ALÉATOIRE'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count titres', + one: '$count titre', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Modifier le titre de la playlist'; + + @override + String get editPlaylistNameTitle => 'Edit Playlist Name'; + + @override + String get required => 'Requis'; + + @override + String get updateButtonLabel => 'METTRE À JOUR'; + + @override + String get playlistNameUpdated => 'Titre de la playlist mis à jour.'; + + @override + String get favourite => 'Favoris'; + + @override + String get downloadsDeleted => 'Téléchargements supprimés.'; + + @override + String get addDownloads => 'Ajouter les téléchargements'; + + @override + String get location => 'Emplacement'; + + @override + String get downloadsAdded => 'Téléchargements ajoutés.'; + + @override + String get addButtonLabel => 'AJOUTER'; + + @override + String get shareLogs => 'Partager les journaux.'; + + @override + String get logsCopied => 'Journaux copiés.'; + + @override + String get message => 'Message'; + + @override + String get stackTrace => 'Stack Trace'; + + @override + String get applicationLegalese => + 'Soumis à la licence Mozilla Public License 2.0. Le code source est disponible sur :\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcodage'; + + @override + String get downloadLocations => 'Emplacements des téléchargements'; + + @override + String get audioService => 'Service audio'; + + @override + String get interactions => 'Intéractions'; + + @override + String get layoutAndTheme => 'Disposition & Apparence'; + + @override + String get notAvailableInOfflineMode => 'Indisponible en mode hors-ligne'; + + @override + String get logOut => 'Déconnexion'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Les chansons téléchargées ne seront pas supprimées'; + + @override + String get areYouSure => 'Êtes-vous sûr ?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin utilise AAC lors du transcodage'; + + @override + String get enableTranscoding => 'Activer le transcodage'; + + @override + String get enableTranscodingSubtitle => + 'Transcode les flux musicaux côté serveur.'; + + @override + String get bitrate => 'Débit binaire'; + + @override + String get bitrateSubtitle => + 'Un débit binaire plus élevé offre une meilleure qualité audio au prix d\'une bande passante plus importante.'; + + @override + String get customLocation => 'Emplacement personnalisé'; + + @override + String get appDirectory => 'Répertoire de l\'application'; + + @override + String get addDownloadLocation => 'Ajouter un emplacement de téléchargement'; + + @override + String get selectDirectory => 'Sélectionner un répertoire'; + + @override + String get unknownError => 'Erreur inconnue'; + + @override + String get pathReturnSlashErrorMessage => + 'Les chemins qui retournent \"/\" ne peuvent pas être utilisés'; + + @override + String get directoryMustBeEmpty => 'Le répertoire doit être vide'; + + @override + String get customLocationsBuggy => + 'Les emplacements personnalisés sont très bogués en raison de problèmes de permissions. Je réfléchis à des solutions pour corriger cela, mais pour l\'instant, je ne recommande pas de les utiliser.'; + + @override + String get enterLowPriorityStateOnPause => + 'Faible priorité de l\'application lorsque la lecture est en pause'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Permet de supprimer la notification lorsque la lecture est en pause. Permet également à Android de fermer le service lorsqu\'il est en pause.'; + + @override + String get shuffleAllSongCount => 'Nombre de chansons à mélanger'; + + @override + String get shuffleAllSongCountSubtitle => + 'Nombre de chansons à charger lors de l\'utilisation du bouton \'Tout mélanger\'.'; + + @override + String get viewType => 'Disposition de l\'affichage'; + + @override + String get viewTypeSubtitle => + 'Règle la manière dont les musiques sont diposées'; + + @override + String get list => 'Liste'; + + @override + String get grid => 'Grille'; + + @override + String get portrait => 'Portrait'; + + @override + String get landscape => 'Paysage'; + + @override + String gridCrossAxisCount(String value) { + return 'Nombre de tuiles par ligne en orientation $value'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Le nombre de tuiles à utiliser par rangée en orientation $value lorsque l\'affichage est en mode mosaïque.'; + } + + @override + String get showTextOnGridView => 'Afficher le texte dans la grille de vue'; + + @override + String get showTextOnGridViewSubtitle => + 'Afficher ou non le texte (titre, artiste, etc.) sur l\'écran de la grille musicale.'; + + @override + String get showCoverAsPlayerBackground => + 'Afficher la couverture floutée en arrière-plan du lecteur'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Choisir d\'utiliser ou non l\'illustration floutée comme arrière-plan sur l\'écran du lecteur.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Masquer les artistes des chansons si identiques aux artistes de l\'album'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Afficher ou non les artistes des chansons sur l\'écran de l\'album si différents des artistes de l\'album.'; + + @override + String get disableGesture => 'Désactiver les gestes'; + + @override + String get disableGestureSubtitle => + 'Indique si les gestes doivent être désactivés.'; + + @override + String get showFastScroller => 'Afficher le défileur rapide'; + + @override + String get theme => 'Thème'; + + @override + String get system => 'Système'; + + @override + String get light => 'Claire'; + + @override + String get dark => 'Sombre'; + + @override + String get tabs => 'Onglets'; + + @override + String get cancelSleepTimer => 'Annuler le minuteur de sommeil ?'; + + @override + String get yesButtonLabel => 'OUI'; + + @override + String get noButtonLabel => 'NON'; + + @override + String get setSleepTimer => 'Configurer le minuteur de sommeil'; + + @override + String get minutes => 'Minutes'; + + @override + String get invalidNumber => 'Nombre invalide'; + + @override + String get sleepTimerTooltip => 'Minuteur de sommeil'; + + @override + String get addToPlaylistTooltip => 'Ajouter à une playlist'; + + @override + String get addToPlaylistTitle => 'Ajouter à une playlist'; + + @override + String get removeFromPlaylistTooltip => 'Retirer de la playlist'; + + @override + String get removeFromPlaylistTitle => 'Retirer de la playlist'; + + @override + String get newPlaylist => 'Nouvelle Playlist'; + + @override + String get createButtonLabel => 'CRÉER'; + + @override + String get playlistCreated => 'Playlist créée.'; + + @override + String get noAlbum => 'Aucun album'; + + @override + String get noItem => 'Aucun élément'; + + @override + String get noArtist => 'Aucun artiste'; + + @override + String get unknownArtist => 'Artiste inconnu'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'TÉLÉCHARGÉ'; + + @override + String get transcode => 'TRANSCODAGE'; + + @override + String get direct => 'DIRECT'; + + @override + String get statusError => 'STATUS D\'ERREUR'; + + @override + String get queue => 'File d\'attente'; + + @override + String get addToQueue => 'Ajouter à la file d\'attente'; + + @override + String get playNext => 'Lire ensuite'; + + @override + String get replaceQueue => 'Remplacer la file d\'attente'; + + @override + String get instantMix => 'Mix instantané'; + + @override + String get goToAlbum => 'Voir l\'album'; + + @override + String get removeFavourite => 'Retirer des favoris'; + + @override + String get addFavourite => 'Ajouter aux favoris'; + + @override + String get addedToQueue => 'Ajouté à la fin de la file d\'attente.'; + + @override + String get insertedIntoQueue => 'Ajouté à la file d\'attente.'; + + @override + String get queueReplaced => 'File d\'attente remplacée.'; + + @override + String get removedFromPlaylist => 'Retiré de la playlist.'; + + @override + String get startingInstantMix => 'Mix instantané lancé.'; + + @override + String get anErrorHasOccured => 'Une erreur s\'est produite.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status code $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Code de statut $statusCode. Cela signifie probablement que vous avez utilisé un mauvais nom d\'utilisateur/mot de passe, ou que votre client n\'est plus connecté.'; + } + + @override + String get removeFromMix => 'Retirer du Mix'; + + @override + String get addToMix => 'Ajouter au Mix'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count éléments re-téléchargés', + one: '$count élément re-téléchargé', + zero: 'Aucun re-téléchargement nécessaire', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Taille du tampon'; + + @override + String get bufferDurationSubtitle => + 'Taille du tampon du lecteur, en secondes. Changer ce paramètre nécessite un redémarrage.'; + + @override + String get language => 'Langue'; + + @override + String get confirm => 'Confirmé'; + + @override + String get showUncensoredLogMessage => + 'Ce journal contient vos informations de connexion. Afficher tout de même ?'; + + @override + String get resetTabs => 'Réinitialiser les onglets'; + + @override + String get noMusicLibrariesTitle => 'Aucune bibliothèque musicale'; + + @override + String get noMusicLibrariesBody => + 'Finamp n\'a pas trouvé de bibliothèques musicales. Veuillez vous assurer que votre serveur Jellyfin contient au moins une bibliothèque avec le type de contenu défini sur \"Musique\".'; + + @override + String get refresh => 'RAFRAÎCHIR'; + + @override + String get swipeInsertQueueNext => 'Lire la chanson balayée en prochain'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Activer l\'insertion d\'une chanson comme élément suivant dans la file d\'attente lorsqu\'elle est balayée dans la liste des chansons, au lieu de l\'ajouter à la fin.'; + + @override + String get redesignBeta => 'Essayer la bêta'; + + @override + String get playbackOrderShuffledTooltip => + 'Lecture en aléatoire. Touchez pour activer/désactiver.'; + + @override + String get playbackOrderLinearTooltip => + 'Lecture dans l\'ordre. Touchez pour activer/désactiver.'; + + @override + String get loopModeAllTooltip => + 'Lecture en boucle de l\'ensemble. Touchez pour activer/désactiver.'; + + @override + String get loopModeOneTooltip => + 'Lecture en boucle d\'un seul. Touchez pour activer/désactiver.'; + + @override + String get loopModeNoneTooltip => + 'Ne pas lire en boucle. Touchez pour activer/désactiver.'; + + @override + String get skipToPrevious => 'Passer à la chanson précédente'; + + @override + String get skipToNext => 'Passer à la chanson suivante'; + + @override + String get togglePlayback => 'Activer/désactiver la lecture'; + + @override + String playArtist(String artist) { + return 'Lire tous les albums de $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Lire aléatoirement tous les albums de $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Télécharger tous les albums de $artist'; + } + + @override + String get deleteFromDevice => 'Supprimer de l\'appareil'; + + @override + String get download => 'Télécharger'; + + @override + String get sync => 'Synchroniser avec le serveur'; + + @override + String get about => 'À propos de Finamp'; +} diff --git a/lib/l10n/app_localizations_hr.dart b/lib/l10n/app_localizations_hr.dart new file mode 100644 index 0000000..1b5007c --- /dev/null +++ b/lib/l10n/app_localizations_hr.dart @@ -0,0 +1,748 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Croatian (`hr`). +class AppLocalizationsHr extends AppLocalizations { + AppLocalizationsHr([String locale = 'hr']) : super(locale); + + @override + String startupError(String error) { + return 'Dogodila se greška prilikom pokretanja aplikacije. Greška: $error\n\nPrijavi problem na github.com/UnicornsOnLSD/finamp sa snimkom ekrana ove stranice. Ako ovaj problem ustraje, izbriši svoje podatke aplikacije i resetiraj aplikaciju.'; + } + + @override + String get serverUrl => 'URL servera'; + + @override + String get internalExternalIpExplanation => + 'Ako želiš pristupiti Jellyfin serveru na daljinski način moraš korisititi tvoju externu IP adresu.\n\nAko je tvoj server na HTTP priključku (80/443), ne moraš navesti priključak. To će vjerojatno slučaj ako se tvoj server nalazi iza obrnutog proxija.'; + + @override + String get emptyServerUrl => 'URL servera ne smije biti prazan'; + + @override + String get urlStartWithHttps => 'URL mora početi s http:// ili https://'; + + @override + String get urlTrailingSlash => 'URL ne smije sadržavati kosu crtu na kraju'; + + @override + String get username => 'Korisničko ime'; + + @override + String get password => 'Lozinka'; + + @override + String get logs => 'Zapisi'; + + @override + String get next => 'Dalje'; + + @override + String get selectMusicLibraries => 'Odaberi fonoteke'; + + @override + String get couldNotFindLibraries => + 'Nije bilo moguće pronaći niti jednu fonoteku.'; + + @override + String get unknownName => 'Nepoznato ime'; + + @override + String get songs => 'Pjesme'; + + @override + String get albums => 'Albumi'; + + @override + String get artists => 'Izvođači'; + + @override + String get genres => 'Žanrovi'; + + @override + String get playlists => 'Playliste'; + + @override + String get startMix => 'Pokreni miks'; + + @override + String get startMixNoSongsArtist => + 'Pritisni dugo na izvođača za dodavanje ili uklanjanje izvođača iz miksera prije pokretanja miksa'; + + @override + String get startMixNoSongsAlbum => + 'Pritisni dugo na album za dodavanje ili uklanjanje albuma iz miksera prije pokretanja miksa'; + + @override + String get music => 'Glazba'; + + @override + String get clear => 'Izbriši'; + + @override + String get favourites => 'Omiljeno'; + + @override + String get shuffleAll => 'Izmiješaj sve'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Preuzimanja'; + + @override + String get settings => 'Postavke'; + + @override + String get offlineMode => 'Neumrežen modus'; + + @override + String get sortOrder => 'Redoslijed razvrstavanja'; + + @override + String get sortBy => 'Razvrstaj po'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Izvođač albuma'; + + @override + String get artist => 'Izvođač'; + + @override + String get budget => 'Budžet'; + + @override + String get communityRating => 'Ocjena zajednice'; + + @override + String get criticRating => 'Ocjena kritičara'; + + @override + String get dateAdded => 'Datum dodavanja'; + + @override + String get datePlayed => 'Datum reprodukcije'; + + @override + String get playCount => 'Broj reprodukcija'; + + @override + String get premiereDate => 'Datum premijere'; + + @override + String get productionYear => 'Godina produkcije'; + + @override + String get name => 'Ime'; + + @override + String get random => 'Slučajno'; + + @override + String get revenue => 'Prihod'; + + @override + String get runtime => 'Vrijeme trajanja'; + + @override + String get syncDownloadedPlaylists => 'Sinkroniziraj preuzete playliste'; + + @override + String get downloadMissingImages => 'Preuzmi nedostajuće slike'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Preuzeto je $count nedostajućih slika', + few: 'Preuzete su $count nedostajuće slike', + one: 'Preuzeta je $count nedostajuća slika', + zero: 'Nema nedostajućih slika', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Greške preuzimanja'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count preuzimanja', + few: '$count preuzimanja', + one: '$count preuzimanje', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count stavki', + few: '$count stavke', + one: '$count stavka', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count slika', + few: '$count slike', + one: '$count slika', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count dovršeno'; + } + + @override + String dlFailed(int count) { + return '$count neuspjelo'; + } + + @override + String dlEnqueued(int count) { + return '$count dodano u red'; + } + + @override + String dlRunning(int count) { + return '$count u tijeku'; + } + + @override + String get downloadErrorsTitle => 'Greške preuzimanja'; + + @override + String get noErrors => 'Nema grešaka!'; + + @override + String get errorScreenError => + 'Dogodila se greška prilikom dohvaćanja popisa grešaka! Prijavi problem na GitHubu i izbriši podatke aplikacije'; + + @override + String get failedToGetSongFromDownloadId => + 'Neuspjelo dohvaćanje pjesme s ID-a preuzimanja'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlistu', + 'artist': 'izvođača', + 'genre': 'žanr', + 'track': 'pjesmu', + 'other': '', + }, + ); + return 'Stvarno želiš izbrisati $_temp0 \'$itemName\' s ovog uređaja?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Izbriši'; + + @override + String get deleteDownloadsAbortButtonText => 'Odustani'; + + @override + String get error => 'Greška'; + + @override + String discNumber(int number) { + return 'Disk $number'; + } + + @override + String get playButtonLabel => 'POKRENI'; + + @override + String get shuffleButtonLabel => 'IZMIJEŠAJ'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count pjesama', + few: '$count pjesme', + one: '$count pjesma', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Uredi ime playliste'; + + @override + String get editPlaylistNameTitle => 'Uredi ime playliste'; + + @override + String get required => 'Obavezno'; + + @override + String get updateButtonLabel => 'AŽURIRAJ'; + + @override + String get playlistNameUpdated => 'Ime playliste je ažurirano.'; + + @override + String get favourite => 'Omiljeno'; + + @override + String get downloadsDeleted => 'Preuzimanja izbrisana.'; + + @override + String get addDownloads => 'Dodaj preuzimanja'; + + @override + String get location => 'Lokacija'; + + @override + String get downloadsAdded => 'Preuzimanja dodana.'; + + @override + String get addButtonLabel => 'DODAJ'; + + @override + String get shareLogs => 'Dijeli zapise'; + + @override + String get logsCopied => 'Zapisi su kopirani.'; + + @override + String get message => 'Poruka'; + + @override + String get stackTrace => 'Trag Stacka'; + + @override + String get applicationLegalese => + 'Licenca: Mozilla Public License 2.0. Izvorni kod je dostupan na:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transkodiranje'; + + @override + String get downloadLocations => 'Lokacija preuzimanja'; + + @override + String get audioService => 'Usluga audioreprodukcije'; + + @override + String get interactions => 'Interakcije'; + + @override + String get layoutAndTheme => 'Izgled i tema'; + + @override + String get notAvailableInOfflineMode => 'Nije dostupno u neumreženom modusu'; + + @override + String get logOut => 'Odjavi se'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Preuzete pjesme neće biti izbrisane'; + + @override + String get areYouSure => 'Jeste li sigurni?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin koristi AAC za transkodiranje'; + + @override + String get enableTranscoding => 'Omogući transkodiranje'; + + @override + String get enableTranscodingSubtitle => + 'Transkodira stream glazbe na server strani.'; + + @override + String get bitrate => 'Brzina prijenosa'; + + @override + String get bitrateSubtitle => + 'Veća brzina prijenosa daje veću kvalitetu zvuka, ali troši veću količinu prometa.'; + + @override + String get customLocation => 'Prilagođena lokacija'; + + @override + String get appDirectory => 'Direktorij aplikacije'; + + @override + String get addDownloadLocation => 'Dodaj lokaciju preuzimanja'; + + @override + String get selectDirectory => 'Odaberi direktorij'; + + @override + String get unknownError => 'Nepoznata greška'; + + @override + String get pathReturnSlashErrorMessage => + 'Staze sa znakom „/” se ne mogu koristiti'; + + @override + String get directoryMustBeEmpty => 'Direktorij mora biti prazan'; + + @override + String get customLocationsBuggy => + 'Prilagođene lokacije su izrazito pune grešaka zbog problema oko dozvola. Razmišljam o načinima da ovo ispravim, ali za sada ne bih preporučio korištenje.'; + + @override + String get enterLowPriorityStateOnPause => + 'Unesite stanje niskog prioriteta za vrijeme pauze'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Omogućuje brisanje obavijesti kada je pauzirano. Također omogućuje Androidu da prekine uslugu kada je pauzirana.'; + + @override + String get shuffleAllSongCount => 'Broj pjesama za miješanje'; + + @override + String get shuffleAllSongCountSubtitle => + 'Broj pjesama koje se učitavaju kada se koristi gumb „Izmiješaj sve pjesme”.'; + + @override + String get viewType => 'Vrsta prikaza'; + + @override + String get viewTypeSubtitle => 'Vrsta prikaza za ekran glazbe'; + + @override + String get list => 'Popis'; + + @override + String get grid => 'Rešetka'; + + @override + String get portrait => 'Uspravno'; + + @override + String get landscape => 'Polegnuto'; + + @override + String gridCrossAxisCount(String value) { + return '$value broj rešetkastih linija'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Količina rešetkastih polja po redu kada $value.'; + } + + @override + String get showTextOnGridView => 'Prikaži tekst u rešetkastom prikazu'; + + @override + String get showTextOnGridViewSubtitle => + 'Da li prikazati tekst (naslov, izvođač itd.) u rešetkastom ekranu glazbe.'; + + @override + String get showCoverAsPlayerBackground => + 'Prikaži mutnu sliku omota kao pozadinu playera'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Da li koristiti mutnu sliku omota kao pozadinu na ekranu playera.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Sakrij izvođače pjesama ako su isti kao izvođači albuma'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Da li prikazati izvođače pjesama na ekranu albuma ako se ne razlikuju od izvođača albuma.'; + + @override + String get disableGesture => 'Deaktiviraj geste'; + + @override + String get disableGestureSubtitle => 'Da li deaktivirati geste.'; + + @override + String get showFastScroller => 'Prikaži traku za brzo listanje'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'Sustav'; + + @override + String get light => 'Svijetla'; + + @override + String get dark => 'Tamna'; + + @override + String get tabs => 'Kartice'; + + @override + String get cancelSleepTimer => 'Prekinuti odbrojavanje?'; + + @override + String get yesButtonLabel => 'DA'; + + @override + String get noButtonLabel => 'NE'; + + @override + String get setSleepTimer => 'Postavi odbrojavanje'; + + @override + String get minutes => 'Minute'; + + @override + String get invalidNumber => 'Neispravan broj'; + + @override + String get sleepTimerTooltip => 'Odbrojavanje'; + + @override + String get addToPlaylistTooltip => 'Dodaj u playlistu'; + + @override + String get addToPlaylistTitle => 'Dodaj u playlistu'; + + @override + String get removeFromPlaylistTooltip => 'Ukloni iz playliste'; + + @override + String get removeFromPlaylistTitle => 'Ukloni iz playliste'; + + @override + String get newPlaylist => 'Nova playlista'; + + @override + String get createButtonLabel => 'STVORI'; + + @override + String get playlistCreated => 'Playlista je stvorena.'; + + @override + String get noAlbum => 'Nema albuma'; + + @override + String get noItem => 'Nema stavki'; + + @override + String get noArtist => 'Nema izvođača'; + + @override + String get unknownArtist => 'Nepoznat izvođač'; + + @override + String get streaming => 'PRIJENOS'; + + @override + String get downloaded => 'PREUZETO'; + + @override + String get transcode => 'TRANSKODIRAJ'; + + @override + String get direct => 'DIREKTNO'; + + @override + String get statusError => 'GREŠKA STANJA'; + + @override + String get queue => 'Red čekanja'; + + @override + String get addToQueue => 'Dodaj u red čekanja'; + + @override + String get playNext => 'Reproduciraj kao sljedeću'; + + @override + String get replaceQueue => 'Zamijeni red čekanja'; + + @override + String get instantMix => 'Instant miks'; + + @override + String get goToAlbum => 'Idi na album'; + + @override + String get removeFavourite => 'Izbriši omiljene'; + + @override + String get addFavourite => 'Dodaj omiljene'; + + @override + String get addedToQueue => 'Dodano u red čekanja.'; + + @override + String get insertedIntoQueue => 'Umetnuto u red čekanja.'; + + @override + String get queueReplaced => 'Red čekanja je zamijenjen.'; + + @override + String get removedFromPlaylist => 'Uklonjeno iz playliste.'; + + @override + String get startingInstantMix => 'Pokretanje instant miksa.'; + + @override + String get anErrorHasOccured => 'Dogodila se greška.'; + + @override + String responseError(String error, int statusCode) { + return '$error Kȏd stanja $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Kȏd stanja $statusCode. Ovo vjerojatno znači da si koristio/la pokrešno korisničko ime/lozinku ili da tvoj klijent više nije prijavljen.'; + } + + @override + String get removeFromMix => 'Ukloni iz miksa'; + + @override + String get addToMix => 'Dodaj u miks'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Ponovo je preuzeto $count stavki', + few: 'Ponovo su preuzete $count stavke', + one: 'Ponovo je preuzeta $count stavka', + zero: 'Ponovna preuzimanja nisu potrebna.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Trajanje međuspremnika'; + + @override + String get bufferDurationSubtitle => + 'Količina koju player treba spremiti u međuspremnik, u sekundama. Zahtijeva ponovno pokretanje.'; + + @override + String get language => 'Jezik'; + + @override + String get confirm => 'Potvrdi'; + + @override + String get showUncensoredLogMessage => + 'Ovaj zapis sadrži tvoje podatke za prijavu. Prikazati?'; + + @override + String get resetTabs => 'Resetiraj kartice'; + + @override + String get noMusicLibrariesTitle => 'Nema fonoteka'; + + @override + String get noMusicLibrariesBody => + 'Finamp nije mogao pronaći nijednu fonoteku. Provjeri sadrži li tvoj Jellyfin poslužitelj barem jednu biblioteku s vrstom sadržaja postavljenom na „Glazba”.'; + + @override + String get refresh => 'AKTUALIZIRAJ'; + + @override + String get swipeInsertQueueNext => + 'Reproduciraj pjesmu kao sljedeću povlačenjem'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Omogući umetanje pjesme kao sljedeću pjesmu u redu reprodukcije povlačenjem pjesme iz popisa pjesama umjesto dodavanja pjesme na kraj popisa.'; + + @override + String get redesignBeta => 'Probaj beta verziju'; + + @override + String get playbackOrderShuffledTooltip => + 'Miješanje. Uključi/isključi dodirom.'; + + @override + String get playbackOrderLinearTooltip => + 'Reprodukcija redom. Uključi/isključi dodirom.'; + + @override + String get loopModeAllTooltip => + 'Ponavljanje svih. Uključi/isključi dodirom.'; + + @override + String get loopModeOneTooltip => + 'Ponavljanje jedne. Uključi/isključi dodirom.'; + + @override + String get loopModeNoneTooltip => + 'Bez ponavljanja. Uključi/isključi dodirom.'; + + @override + String get skipToPrevious => 'Prijeđi na prethodnu pjesmu'; + + @override + String get skipToNext => 'Prijeđi na sljedeću pjesmu'; + + @override + String get togglePlayback => 'Uključi/isključi reprodukciju'; + + @override + String playArtist(String artist) { + return 'Reproduciraj sve albume od $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Izmiješaj sve albume od $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Preuzmi sve albume od $artist'; + } + + @override + String get deleteFromDevice => 'Izbriši s uređaja'; + + @override + String get download => 'Preuzmi'; + + @override + String get sync => 'Sinkroniziraj sa serverom'; + + @override + String get about => 'O aplikaciji Finamp'; +} diff --git a/lib/l10n/app_localizations_hu.dart b/lib/l10n/app_localizations_hu.dart new file mode 100644 index 0000000..64362e1 --- /dev/null +++ b/lib/l10n/app_localizations_hu.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Hungarian (`hu`). +class AppLocalizationsHu extends AppLocalizations { + AppLocalizationsHu([String locale = 'hu']) : super(locale); + + @override + String startupError(String error) { + return 'Hiba történt az alkalmazás indításakor! A hiba a következő volt: $error\n\nKérjük, hozzon létre egyGithub-problémát a github.com/UnicornsOnLSD/finamp oldalon az oldal képernyőképével. Ha a probléma továbbra is fennáll, törölje az alkalmazás adatait az alkalmazás visszaállításához.'; + } + + @override + String get serverUrl => 'Szerver webcíme'; + + @override + String get internalExternalIpExplanation => + 'Ha távolról szeretné elérni Jellyfin szerverét, akkor külső IP-címét kell használnia.\n\nHa a szerver HTTP porton (80/443) van, akkor nem kell portot megadnia. Valószínűleg ez a helyzet akkor, ha a szervere fordított proxy mögött van.'; + + @override + String get emptyServerUrl => 'A szerver URL-címe nem lehet üres'; + + @override + String get urlStartWithHttps => + 'Az URL-nek \"http://\" vagy \"https://\" előtaggal kell kezdődnie'; + + @override + String get urlTrailingSlash => 'Az URL végén nem lehet \"/\"-jel'; + + @override + String get username => 'Felhasználónév'; + + @override + String get password => 'Jelszó'; + + @override + String get logs => 'Naplók'; + + @override + String get next => 'Következő'; + + @override + String get selectMusicLibraries => 'Zenei könyvtárak kiválasztása'; + + @override + String get couldNotFindLibraries => 'Nem található könyvtár.'; + + @override + String get unknownName => 'Ismeretlen név'; + + @override + String get songs => 'Dalok'; + + @override + String get albums => 'Albumok'; + + @override + String get artists => 'Előadók'; + + @override + String get genres => 'Műfajok'; + + @override + String get playlists => 'Lejátszási listák'; + + @override + String get startMix => 'Mix elindítása'; + + @override + String get startMixNoSongsArtist => + 'Nyomd meg hosszan az előadót, hogy hozzáadja vagy eltávolítsa őket a mixkészítőből, mielőtt elkezdené a keverést'; + + @override + String get startMixNoSongsAlbum => + 'Nyomd meg hosszan az albumot, hogy hozzáadja vagy eltávolítsa őket a mixkészítőből, mielőtt elkezdené a keverést'; + + @override + String get music => 'Zene'; + + @override + String get clear => 'Törlés'; + + @override + String get favourites => 'Kedvencek'; + + @override + String get shuffleAll => 'Összes keverése'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Letöltések'; + + @override + String get settings => 'Beállítások'; + + @override + String get offlineMode => 'Offline mód'; + + @override + String get sortOrder => 'Rendezési sorrend'; + + @override + String get sortBy => 'Sorrend eszerint'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Album előadó'; + + @override + String get artist => 'Előadó'; + + @override + String get budget => 'Költségvetés'; + + @override + String get communityRating => 'Közösségi értékelés'; + + @override + String get criticRating => 'Kritikusok értékelése'; + + @override + String get dateAdded => 'Hozzáadás dátuma'; + + @override + String get datePlayed => 'Lejátszva ekkor'; + + @override + String get playCount => 'Lejátszások száma'; + + @override + String get premiereDate => 'Premier dátuma'; + + @override + String get productionYear => 'Gyártási év'; + + @override + String get name => 'Név'; + + @override + String get random => 'Véletlen'; + + @override + String get revenue => 'Bevétel'; + + @override + String get runtime => 'Futásidő'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Töltse le a hiányzó képeket'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Letöltött $count hiányzó képet', + one: 'Letöltődött $count hiányzó kép', + zero: 'Nem található hiányzó kép', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Letöltési hibák'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count downloads', + one: '$count download', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count items', + one: '$count item', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count images', + one: '$count image', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count kész'; + } + + @override + String dlFailed(int count) { + return '$count nem sikerült'; + } + + @override + String dlEnqueued(int count) { + return '$count a sorban'; + } + + @override + String dlRunning(int count) { + return '$count Fut'; + } + + @override + String get downloadErrorsTitle => 'Letöltési Hibák'; + + @override + String get noErrors => 'Nincsenek hibák!'; + + @override + String get errorScreenError => + 'Hiba történt a hibalista lekérésekor! Ezen a ponton valószínűleg csak problémát kell létrehoznia a GitHubon, és törölnie kell az alkalmazásadatokat'; + + @override + String get failedToGetSongFromDownloadId => + 'Nem sikerült letölteni a dalt, a letöltési azonosítóból'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Hiba'; + + @override + String discNumber(int number) { + return 'CD $number'; + } + + @override + String get playButtonLabel => 'LEJÁTSZÁS'; + + @override + String get shuffleButtonLabel => 'KEVERÉS'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Songs', + one: '$count Song', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Lejátszási lista címének szerkesztése'; + + @override + String get editPlaylistNameTitle => 'Lejátszási lista címének szerkesztése'; + + @override + String get required => 'Szükséges'; + + @override + String get updateButtonLabel => 'FRISSÍTÉS'; + + @override + String get playlistNameUpdated => 'A lejátszási lista neve frissítve.'; + + @override + String get favourite => 'Kedvenc'; + + @override + String get downloadsDeleted => 'Letöltések törölve.'; + + @override + String get addDownloads => 'Letöltések hozzáadása'; + + @override + String get location => 'Elhelyezkedés'; + + @override + String get downloadsAdded => 'Letöltések hozzáadva.'; + + @override + String get addButtonLabel => 'HOZZÁADÁS'; + + @override + String get shareLogs => 'Naplók megosztása'; + + @override + String get logsCopied => 'A naplók másolva.'; + + @override + String get message => 'Üzenet'; + + @override + String get stackTrace => 'Kötegelt visszalépés'; + + @override + String get applicationLegalese => + 'A Mozilla Public License 2.0 licenccel. A forráskód elérhető:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transzkódolás'; + + @override + String get downloadLocations => 'Letöltési hely'; + + @override + String get audioService => 'Hangszolgáltatás'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Elrendezés & Téma'; + + @override + String get notAvailableInOfflineMode => 'Offline módban nem elérhető'; + + @override + String get logOut => 'Kijelentkezés'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'A letöltött dalok nem törlődnek'; + + @override + String get areYouSure => 'Biztos vagy ebben?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin AAC-t használ az transzkódoláshoz'; + + @override + String get enableTranscoding => 'Transzkódolás engedélyezése'; + + @override + String get enableTranscodingSubtitle => + 'Transzkódolja a zenestreameket a szerver oldalon.'; + + @override + String get bitrate => 'Bitráta'; + + @override + String get bitrateSubtitle => + 'A nagyobb bitráta jobb hangminőséget biztosít nagyobb sávszélesség mellett.'; + + @override + String get customLocation => 'Egyéni hely'; + + @override + String get appDirectory => 'Alkalmazás Könyvtára'; + + @override + String get addDownloadLocation => 'Letöltési hely hozzáadása'; + + @override + String get selectDirectory => 'Könyvtár kiválasztása'; + + @override + String get unknownError => 'Ismeretlen hiba'; + + @override + String get pathReturnSlashErrorMessage => + 'A „/” karaktert használó elérési utak nem értelmezhetőek'; + + @override + String get directoryMustBeEmpty => 'A könyvtárnak üresnek kell lennie'; + + @override + String get customLocationsBuggy => + 'Az egyéni helyek rendkívül bugosak az engedélyekkel kapcsolatos problémák miatt. Gondolkozom a megoldáson, de egyelőre nem javaslom ezek használatát.'; + + @override + String get enterLowPriorityStateOnPause => + 'Lépjen az Alacsony-prioritású állapotba a Szünet módban'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Lehetővé teszi az értesítés elcsúsztatását, amikor szünetel. Azt is lehetővé teszi, hogy az Android leállítsa a szolgáltatást, amikor szünetel.'; + + @override + String get shuffleAllSongCount => 'Az összes szám véletlenszerű lejátszása'; + + @override + String get shuffleAllSongCountSubtitle => + 'A betöltendő zeneszámok száma az \"Összes dal keverése\" gombbal.'; + + @override + String get viewType => 'Nézet típusa'; + + @override + String get viewTypeSubtitle => 'Nézettípus a zenei képernyőhöz'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Rács'; + + @override + String get portrait => 'Álló'; + + @override + String get landscape => 'Fekvő'; + + @override + String gridCrossAxisCount(String value) { + return '$value rács kereszttengelyek száma'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'A soronként használandó rácscsempék száma $value esetén.'; + } + + @override + String get showTextOnGridView => 'Szöveg megjelenítése rácsnézetben'; + + @override + String get showTextOnGridViewSubtitle => + 'Megjelenik-e a szöveg (cím, előadó stb.) a rácszene képernyőn.'; + + @override + String get showCoverAsPlayerBackground => + 'Elmosódott borító megjelenítése lejátszási háttérként'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Használja-e az elmosódott borítót háttérként a lejátszó képernyőjén.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'A dal előadóinak elrejtése, ha megegyezik az album előadóival'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Megjeleníti-e a dal előadóit az album képernyőjén, ha nem különbözik az album előadóitól.'; + + @override + String get disableGesture => 'Gesztusok letiltása'; + + @override + String get disableGestureSubtitle => 'A gesztusok letiltása.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Téma'; + + @override + String get system => 'Rendszer'; + + @override + String get light => 'Világos'; + + @override + String get dark => 'Sötét'; + + @override + String get tabs => 'Tabok'; + + @override + String get cancelSleepTimer => 'Törlöd az elalvásidőzítőt?'; + + @override + String get yesButtonLabel => 'IGEN'; + + @override + String get noButtonLabel => 'NEM'; + + @override + String get setSleepTimer => 'Elalvásidőzítő beállítása'; + + @override + String get minutes => 'Percek'; + + @override + String get invalidNumber => 'Érvénytelen szám'; + + @override + String get sleepTimerTooltip => 'Elalvás időzítő'; + + @override + String get addToPlaylistTooltip => 'Hozzáadás a lejátszási listához'; + + @override + String get addToPlaylistTitle => 'Hozzáadás a Lejátszási Listához'; + + @override + String get removeFromPlaylistTooltip => 'Remove from playlist'; + + @override + String get removeFromPlaylistTitle => 'Remove from Playlist'; + + @override + String get newPlaylist => 'Új lejátszási lista'; + + @override + String get createButtonLabel => 'LÉTREHOZÁS'; + + @override + String get playlistCreated => 'Lejátszási lista létrehozva.'; + + @override + String get noAlbum => 'Album nélkül'; + + @override + String get noItem => 'Nincs tárgy'; + + @override + String get noArtist => 'Nincs előadó'; + + @override + String get unknownArtist => 'Ismeretlen Előadó'; + + @override + String get streaming => 'STREAMELÉS'; + + @override + String get downloaded => 'LETÖLTVE'; + + @override + String get transcode => 'TRANSZKÓD'; + + @override + String get direct => 'DIREKT'; + + @override + String get statusError => 'ÁLLAPOT HIBA'; + + @override + String get queue => 'Sor'; + + @override + String get addToQueue => 'Hozzáadás a sorhoz'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Sor kicserélése'; + + @override + String get instantMix => 'Instant Keverés'; + + @override + String get goToAlbum => 'Ugrás az albumra'; + + @override + String get removeFavourite => 'Kedvenc eltávolítása'; + + @override + String get addFavourite => 'Hozzáadás a kedvencekhez'; + + @override + String get addedToQueue => 'Hozzáadva a sorhoz.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Sor cserélve.'; + + @override + String get removedFromPlaylist => 'Removed from playlist.'; + + @override + String get startingInstantMix => 'Instant mix indítása.'; + + @override + String get anErrorHasOccured => 'Hiba történt.'; + + @override + String responseError(String error, int statusCode) { + return '$error Állapotkód $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Állapotkód: $statusCode. Ez valószínűleg azt jelenti, hogy rossz felhasználónevet/jelszót használt, vagy a kliens már nincs hitelesítve.'; + } + + @override + String get removeFromMix => 'Kivétel a Mixből'; + + @override + String get addToMix => 'Hozzáadás a Mix-hez'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count elemek újra letöltve', + one: ' $count elem újra letöltve', + zero: 'Nincs szükség újratöltésre..', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Puffer időtartama'; + + @override + String get bufferDurationSubtitle => + 'Mennyit kell pufferelnie a lejátszónak másodpercben. Újraindítást igényel.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart new file mode 100644 index 0000000..0346019 --- /dev/null +++ b/lib/l10n/app_localizations_it.dart @@ -0,0 +1,739 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Italian (`it`). +class AppLocalizationsIt extends AppLocalizations { + AppLocalizationsIt([String locale = 'it']) : super(locale); + + @override + String startupError(String error) { + return 'Qualcosa è andato storto durante l\'avvio dell\'app. L\'errore è stato: $error\n\nPerfavore apri una segnalazione su github.com/UnicornsOnLSD/finamp con uno screenshot di questa pagina. Se il problema persiste puoi cancellare i dati dell\'app per riportarla alle impostazioni iniziali.'; + } + + @override + String get serverUrl => 'URL del Server'; + + @override + String get internalExternalIpExplanation => + 'Se vuoi accedere al tuo server di Jellyfin da remoto devi usare il tuo IP pubblico.\n\nSe il tuo server usa una porta HTTP (80/443) non è necessario specificare la porta. Può verificarsi se il tuo server ad esempio si trova dietro un reverse proxy.'; + + @override + String get emptyServerUrl => 'l\'URL del Server non può essere vuoto'; + + @override + String get urlStartWithHttps => 'l\'URL deve iniziare con http:// o https://'; + + @override + String get urlTrailingSlash => + 'l\'URL non deve contenere il carattere (/) alla fine'; + + @override + String get username => 'Nome utente'; + + @override + String get password => 'Password'; + + @override + String get logs => 'Log'; + + @override + String get next => 'Avanti'; + + @override + String get selectMusicLibraries => 'Seleziona le Librerie Musicali'; + + @override + String get couldNotFindLibraries => + 'Non è possibile trovare alcuna libreria.'; + + @override + String get unknownName => 'Nome Sconosciuto'; + + @override + String get songs => 'Brani'; + + @override + String get albums => 'Album'; + + @override + String get artists => 'Artisti'; + + @override + String get genres => 'Generi'; + + @override + String get playlists => 'Playlist'; + + @override + String get startMix => 'Riproduco Mix'; + + @override + String get startMixNoSongsArtist => + 'Effettua una pressione prolungata su un artista per aggiungerlo o rimuoverlo dal mix builder prima di far partire un mix'; + + @override + String get startMixNoSongsAlbum => + 'Effettua una pressione prolungata su un album per aggiungerlo o rimuoverlo dal mix builder prima di far partire un mix'; + + @override + String get music => 'Musica'; + + @override + String get clear => 'Cancella'; + + @override + String get favourites => 'Preferiti'; + + @override + String get shuffleAll => 'Riproduci casualmente tutti'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Download'; + + @override + String get settings => 'Impostazioni'; + + @override + String get offlineMode => 'Modailtà Offline'; + + @override + String get sortOrder => 'Ordinamento'; + + @override + String get sortBy => 'Ordina per'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Artista dell\'Album'; + + @override + String get artist => 'Artista'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Valutazione della comunità'; + + @override + String get criticRating => 'Punteggio della critica'; + + @override + String get dateAdded => 'Data di Aggiunta'; + + @override + String get datePlayed => 'Data di Riproduzione'; + + @override + String get playCount => 'Conteggio Riproduzioni'; + + @override + String get premiereDate => 'Data di Rilascio'; + + @override + String get productionYear => 'Anno di Produzione'; + + @override + String get name => 'Nome'; + + @override + String get random => 'Casuale'; + + @override + String get revenue => 'Incassi'; + + @override + String get runtime => 'Tempo di esecuzione'; + + @override + String get syncDownloadedPlaylists => 'Sincronizza playlists scaricate'; + + @override + String get downloadMissingImages => 'Scarica immagini mancanti'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Scaricate $count immagini mancanti', + one: 'Scaricata $count immagine mancante', + zero: 'Non ho trovato alcuna immagine mancante', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Errori durante il download'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count download', + one: '$count download', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count oggetti', + one: '$count oggetto', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count immagini', + one: '$count immagine', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count finito'; + } + + @override + String dlFailed(int count) { + return '$count falliti'; + } + + @override + String dlEnqueued(int count) { + return '$count in coda'; + } + + @override + String dlRunning(int count) { + return '$count in riproduzione'; + } + + @override + String get downloadErrorsTitle => 'Errori durante il Download'; + + @override + String get noErrors => 'Nessun errore!'; + + @override + String get errorScreenError => + 'Si è verificato un errore mentre tentavo di ottenere la lista degli errori! A questo punto probabilmente dovresti aprire una issue su GitHub e cancellare i dati dell\'app'; + + @override + String get failedToGetSongFromDownloadId => + 'Impossibile ottenere il brano dall\'ID di download'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Elimina'; + + @override + String get deleteDownloadsAbortButtonText => 'Annulla'; + + @override + String get error => 'Errore'; + + @override + String discNumber(int number) { + return 'Disco $number'; + } + + @override + String get playButtonLabel => 'RIPRODUCI'; + + @override + String get shuffleButtonLabel => 'RIPRODUCI CASUALMENTE'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Brani', + one: '$count Brano', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Modifica il nome della playlist'; + + @override + String get editPlaylistNameTitle => 'Modifica il Nome della Playlist'; + + @override + String get required => 'Richiesto'; + + @override + String get updateButtonLabel => 'AGGIORNAMENTO'; + + @override + String get playlistNameUpdated => 'Playlist nome aggiornato.'; + + @override + String get favourite => 'Preferiti'; + + @override + String get downloadsDeleted => 'Download cancellati.'; + + @override + String get addDownloads => 'Aggiungi Download'; + + @override + String get location => 'Posizione'; + + @override + String get downloadsAdded => 'Download aggiunti.'; + + @override + String get addButtonLabel => 'AGGIUNGI'; + + @override + String get shareLogs => 'Condividi i log'; + + @override + String get logsCopied => 'Log copiati.'; + + @override + String get message => 'Messaggio'; + + @override + String get stackTrace => 'Stack Trace'; + + @override + String get applicationLegalese => + 'Concesso in licenza con \"Mozilla Public License 2.0\". Codice Sorgente disponibile su:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcodifica'; + + @override + String get downloadLocations => 'Cartella di Download'; + + @override + String get audioService => 'Servizio Audio'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Aspetto & Temi'; + + @override + String get notAvailableInOfflineMode => 'Non disponibile in modalità offline'; + + @override + String get logOut => 'Disconnetti'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'I brani scaricati non saranno cancellati'; + + @override + String get areYouSure => 'Sei sicuro?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin usa AAC per la transcodifica'; + + @override + String get enableTranscoding => 'Attiva Transcodifica'; + + @override + String get enableTranscodingSubtitle => + 'Transcodifica I flussi di musica dal lato server.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Un bitrate più alto permette di avere una qualità audio più alta al costo di un più alto consumo della connessione dati.'; + + @override + String get customLocation => 'Posizione Personalizzata'; + + @override + String get appDirectory => 'Cartella dell\'App'; + + @override + String get addDownloadLocation => 'Aggiungi la posizione per i Download'; + + @override + String get selectDirectory => 'Seleziona Cartella'; + + @override + String get unknownError => 'Errore Sconosciuto'; + + @override + String get pathReturnSlashErrorMessage => + 'Non possono essere usati percorsi che terminano con \"/\"'; + + @override + String get directoryMustBeEmpty => 'La cartella deve essere vuota'; + + @override + String get customLocationsBuggy => + 'Le posizioni personalizzate sono estremamente instabili a causa di problemi con i permessi. Sto pensando a un modo di aggiustarle, ma per adesso non ne consiglio l\'utilizzo.'; + + @override + String get enterLowPriorityStateOnPause => + 'Entra nello Stato a Bassa-Priorità quando in Pausa'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Permette di scartare una notifica quando la riproduzione è in pausa. Inoltre consente ad Android di terminare il servizio quando la riproduzione è in pausa.'; + + @override + String get shuffleAllSongCount => + 'Riproduci Casualmente Tutte Le Canzoni Conteggiate'; + + @override + String get shuffleAllSongCountSubtitle => + 'Numero di brani da caricare quando si usa il tasto per la riproduzione casuale di tutti i brani.'; + + @override + String get viewType => 'Modalità di Visualizzazione'; + + @override + String get viewTypeSubtitle => + 'Modalità di visualizzazione per la schermata musica'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Griglia'; + + @override + String get portrait => 'Visualizzazione verticale'; + + @override + String get landscape => 'Visualizzazione orizzontale'; + + @override + String gridCrossAxisCount(String value) { + return '$value Numero di Colonne nella Vista a griglia'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Numero di colonne da usare per ciascuna riga quando $value.'; + } + + @override + String get showTextOnGridView => 'Mostra testo nella vista a griglia'; + + @override + String get showTextOnGridViewSubtitle => + 'Mostrare il testo (titolo, artista, etc.) nella Vista a griglia della schermata della musica.'; + + @override + String get showCoverAsPlayerBackground => + 'Mostra le copertine sfocate quando il player è in background'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Usare o meno cover sfocate come sfondo nella schermata di riproduzione.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Nascondi l\'artista del brano se uguale all\'artista dell\'album'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Se mostrare gli artisti del brano nella visualizzazione album nel caso coincidano con gli artisti dell\'album.'; + + @override + String get disableGesture => 'Disabilita gesti'; + + @override + String get disableGestureSubtitle => 'Se vuoi disabilitare i gesti.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'Sistema'; + + @override + String get light => 'Chiaro'; + + @override + String get dark => 'Scuro'; + + @override + String get tabs => 'Schede'; + + @override + String get cancelSleepTimer => 'Cancellare il Timer di spegnimento?'; + + @override + String get yesButtonLabel => 'SI'; + + @override + String get noButtonLabel => 'NO'; + + @override + String get setSleepTimer => 'Imposta Timer di Spegnimento'; + + @override + String get minutes => 'Minuti'; + + @override + String get invalidNumber => 'Numero non valido'; + + @override + String get sleepTimerTooltip => 'Timer di spegnimento'; + + @override + String get addToPlaylistTooltip => 'Aggiungi alla playlist'; + + @override + String get addToPlaylistTitle => 'Aggiungi alla Playlist'; + + @override + String get removeFromPlaylistTooltip => 'Rimuovi dalla playlist'; + + @override + String get removeFromPlaylistTitle => 'Rimuovi dalla playlist'; + + @override + String get newPlaylist => 'Nuova Playlist'; + + @override + String get createButtonLabel => 'CREA'; + + @override + String get playlistCreated => 'Playlist creata.'; + + @override + String get noAlbum => 'Nessun Album'; + + @override + String get noItem => 'Nessun Oggetto'; + + @override + String get noArtist => 'Nessun Artista'; + + @override + String get unknownArtist => 'Artista Sconosciuto'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'Scaricato'; + + @override + String get transcode => 'TRANSCODIFICA'; + + @override + String get direct => 'DIRETTO'; + + @override + String get statusError => 'ERRORE DI STATO'; + + @override + String get queue => 'Coda'; + + @override + String get addToQueue => 'Aggiungi alla Coda'; + + @override + String get playNext => 'Suona il prossimo'; + + @override + String get replaceQueue => 'Sostituisci Coda'; + + @override + String get instantMix => 'Mix Istantaneo'; + + @override + String get goToAlbum => 'Vai all\'Album'; + + @override + String get removeFavourite => 'Rimuovi Preferito'; + + @override + String get addFavourite => 'Aggiungi Favorito'; + + @override + String get addedToQueue => 'Aggiunto alla coda.'; + + @override + String get insertedIntoQueue => 'Inserito nella coda.'; + + @override + String get queueReplaced => 'Coda sostituita.'; + + @override + String get removedFromPlaylist => 'Rimosso dalla playlist.'; + + @override + String get startingInstantMix => 'Riproduco un mix istantaneo.'; + + @override + String get anErrorHasOccured => 'Si è verificato un errore.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status code $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Codice errore $statusCode. Questo probabilmente significa che hai usato username/password errati, o il tuo client non è più autenticato.'; + } + + @override + String get removeFromMix => 'Rimuovi dal Mix'; + + @override + String get addToMix => 'Aggiungi al Mix'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Riscaricati $count oggetti', + one: 'Riscaricato $count oggetto', + zero: 'Non è necessario riscaricare nulla.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Durata Buffer'; + + @override + String get bufferDurationSubtitle => + 'Quanto buffer, in secondi, deve avere il player. Richiede riavvio.'; + + @override + String get language => 'Lingua'; + + @override + String get confirm => 'Conferma'; + + @override + String get showUncensoredLogMessage => + 'Questo log contiene le tue credenziali di accesso. Vuoi vederlo?'; + + @override + String get resetTabs => 'Resettare le schede'; + + @override + String get noMusicLibrariesTitle => 'Nessuna raccolta musicale'; + + @override + String get noMusicLibrariesBody => + 'Finamp non è riuscito a trovare nessuna raccolta musicale. Sei pregato di controllare che il tuo server Jellyfin contenga almeno una raccolta con il genere configurato come \"Musica\".'; + + @override + String get refresh => 'AGGIORNA'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart new file mode 100644 index 0000000..2a4c118 --- /dev/null +++ b/lib/l10n/app_localizations_ja.dart @@ -0,0 +1,722 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Japanese (`ja`). +class AppLocalizationsJa extends AppLocalizations { + AppLocalizationsJa([String locale = 'ja']) : super(locale); + + @override + String startupError(String error) { + return '起動時に問題が起こりました。エラー内容: $error\n\ngithub.com/UnicornsOnLSD/finamp でイシューを作成し、このページのスクリーンショットを付けてください。問題が継続した場合はアプリデータをクリアしてアプリを初期化して下さい。'; + } + + @override + String get serverUrl => 'サーバー URL'; + + @override + String get internalExternalIpExplanation => + 'リモートからJellyfinサーバーにアクセスするには外部IPを指定する必要があります。\n\nサーバーがHTTPポート(80/443)で動いている場合にはポートは不要です。サーバーがリバースプロキシの後ろにある場合はこれが一般的です。'; + + @override + String get emptyServerUrl => 'サーバーURLを入力してください'; + + @override + String get urlStartWithHttps => 'URL は http:// か https:// で始まらなければなりません'; + + @override + String get urlTrailingSlash => 'URL の末尾にスラッシュがあってはなりません'; + + @override + String get username => 'ユーザー名'; + + @override + String get password => 'パスワード'; + + @override + String get logs => 'ログ'; + + @override + String get next => '次'; + + @override + String get selectMusicLibraries => 'ミュージック・ライブラリを選択'; + + @override + String get couldNotFindLibraries => 'ライブラリが見つかりません。'; + + @override + String get unknownName => 'タイトル不明'; + + @override + String get songs => '曲'; + + @override + String get albums => 'アルバム'; + + @override + String get artists => 'アーティスト'; + + @override + String get genres => 'ジャンル'; + + @override + String get playlists => 'プレイリスト'; + + @override + String get startMix => 'ミックス開始'; + + @override + String get startMixNoSongsArtist => 'アーティスト名を長押しすることでミックス対象に追加または削除できます'; + + @override + String get startMixNoSongsAlbum => 'アルバムを長押しすることでミックス対象に追加または削除できます'; + + @override + String get music => 'ミュージック'; + + @override + String get clear => 'クリア'; + + @override + String get favourites => 'お気に入り'; + + @override + String get shuffleAll => '全てシャッフル'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'ダウンロード'; + + @override + String get settings => '設定'; + + @override + String get offlineMode => 'オフライン・モード'; + + @override + String get sortOrder => '並び順'; + + @override + String get sortBy => '並び基準'; + + @override + String get album => 'アルバム'; + + @override + String get albumArtist => 'アルバム・アーティスト'; + + @override + String get artist => 'アーティスト'; + + @override + String get budget => '予算'; + + @override + String get communityRating => 'コミュニティ評価'; + + @override + String get criticRating => '評論家評価'; + + @override + String get dateAdded => '追加日'; + + @override + String get datePlayed => '再生日'; + + @override + String get playCount => '再生回数'; + + @override + String get premiereDate => '公開日'; + + @override + String get productionYear => '作成年'; + + @override + String get name => '曲名'; + + @override + String get random => 'ランダム'; + + @override + String get revenue => '収入'; + + @override + String get runtime => '再生時間'; + + @override + String get syncDownloadedPlaylists => 'ダウンロードしたプレイリストの同期'; + + @override + String get downloadMissingImages => '欠けている画像をダウンロード'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '欠けている画像を $count 枚ダウンロード', + one: '欠けている画像を $count 枚ダウンロード', + zero: '欠けている画像が見つかりません', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'ダウンロード・エラー'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count個ダウンロード', + one: '$count 個ダウンロード', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$countアイテム', + one: '$count アイテム', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count枚の画像', + one: '$count 枚の画像', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count 個完了'; + } + + @override + String dlFailed(int count) { + return '$count個失敗'; + } + + @override + String dlEnqueued(int count) { + return '$count 個キューに追加'; + } + + @override + String dlRunning(int count) { + return '$count 個再生中'; + } + + @override + String get downloadErrorsTitle => 'ダウンロード・エラー'; + + @override + String get noErrors => 'エラーなし!'; + + @override + String get errorScreenError => + 'エラーリスト取得時にエラーが発生しました!この時点では、GitHub で issue を作成し、アプリデータを削除することをお勧めします'; + + @override + String get failedToGetSongFromDownloadId => 'ダウンロード ID から曲が取得できません'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'このデバイスから$_temp0 \'$itemName\'を削除してもよろしいですか?'; + } + + @override + String get deleteDownloadsConfirmButtonText => '削除'; + + @override + String get deleteDownloadsAbortButtonText => 'キャンセル'; + + @override + String get error => 'エラー'; + + @override + String discNumber(int number) { + return 'ディスク $number'; + } + + @override + String get playButtonLabel => '再生'; + + @override + String get shuffleButtonLabel => 'シャッフル'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count曲', + one: '$count曲', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'プレイリスト名を編集'; + + @override + String get editPlaylistNameTitle => 'プレイリスト名を編集'; + + @override + String get required => '必須'; + + @override + String get updateButtonLabel => '更新'; + + @override + String get playlistNameUpdated => 'プレイリスト名を更新しました。'; + + @override + String get favourite => 'お気に入り'; + + @override + String get downloadsDeleted => 'ダウンロードを削除しました。'; + + @override + String get addDownloads => 'ダウンロードを追加'; + + @override + String get location => '場所'; + + @override + String get downloadsAdded => 'ダウンロードを追加しました。'; + + @override + String get addButtonLabel => '追加'; + + @override + String get shareLogs => 'ログ共有'; + + @override + String get logsCopied => 'ログをコピーしました。'; + + @override + String get message => 'メッセージ'; + + @override + String get stackTrace => 'スタックトレース'; + + @override + String get applicationLegalese => + 'Mozilla Public License 2.0 でライセンスされています。ソース コードは以下から入手できます:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'トランスコード'; + + @override + String get downloadLocations => 'ダウンロード場所'; + + @override + String get audioService => 'オーディオ・サービス'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'レイアウト&テーマ'; + + @override + String get notAvailableInOfflineMode => 'オフライン・モードでは無効'; + + @override + String get logOut => 'ログアウト'; + + @override + String get downloadedSongsWillNotBeDeleted => 'ダウロード済みの曲は削除されません'; + + @override + String get areYouSure => 'よろしいですか?'; + + @override + String get jellyfinUsesAACForTranscoding => 'Jellyfin はトランスコードに AAC を利用します'; + + @override + String get enableTranscoding => 'トランスコード有効'; + + @override + String get enableTranscodingSubtitle => 'サーバー側の音楽ストリームをトランスコードします。'; + + @override + String get bitrate => 'ビットレート'; + + @override + String get bitrateSubtitle => '高いビットレートではオーディオの質が高くなりますが、転送容量も高くなります。'; + + @override + String get customLocation => '指定の場所'; + + @override + String get appDirectory => 'Appのディレクトリ'; + + @override + String get addDownloadLocation => 'ダウンロード場所を追加'; + + @override + String get selectDirectory => 'ディレクトリを選択'; + + @override + String get unknownError => '不明なエラー'; + + @override + String get pathReturnSlashErrorMessage => '\"/\" を返すパスは利用できません'; + + @override + String get directoryMustBeEmpty => 'ディレクトリは空でなければなりません'; + + @override + String get customLocationsBuggy => + 'カスタムの場所は、権限の問題により、非常にバグが多くなります。これを修正する方法を考えていますが、今のところは使用しないことをお勧めします。'; + + @override + String get enterLowPriorityStateOnPause => '一時停止時は低優先度状態'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + '一時停止時に通知をスワイプで除去できます。また Android では一時停止時にサービスを停止できます。'; + + @override + String get shuffleAllSongCount => '曲がシャッフル化される回数'; + + @override + String get shuffleAllSongCountSubtitle => 'すべての曲をシャッフルする時、ここで指定した曲数をロードします。'; + + @override + String get viewType => 'ビューの形式'; + + @override + String get viewTypeSubtitle => 'ミュージック画面の表示形式'; + + @override + String get list => 'リスト'; + + @override + String get grid => 'グリッド'; + + @override + String get portrait => '縦表示'; + + @override + String get landscape => '横表示'; + + @override + String gridCrossAxisCount(String value) { + return '$value のアイテム数'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return '$valueの場合一行当たりのグリッドタイル数。'; + } + + @override + String get showTextOnGridView => 'グリッド・ビューでテキストを表示する'; + + @override + String get showTextOnGridViewSubtitle => + 'グリッド音楽画面でテキスト(タイトル、アーティスト等)を表示させるか。'; + + @override + String get showCoverAsPlayerBackground => 'プレイヤー背景にジャケット画像をぼかして表示する'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'プレイヤー画面で背景にジャケット画像をぼかして表示させるか。'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + '曲のアーティストがアルバム・アーティストと同じの場合、表示しない'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + '曲のアーティストがアルバムのアーティストと一致した場合、アルバム画面に表示させるか。'; + + @override + String get disableGesture => 'ジェスチャーを無効'; + + @override + String get disableGestureSubtitle => 'ジェスチャーを無効にするか。'; + + @override + String get showFastScroller => '高速スクロールを表示'; + + @override + String get theme => 'テーマ'; + + @override + String get system => 'システム'; + + @override + String get light => '明るい'; + + @override + String get dark => '暗い'; + + @override + String get tabs => 'タブ'; + + @override + String get cancelSleepTimer => 'スリープ・タイマーをキャンセルしますか?'; + + @override + String get yesButtonLabel => 'はい'; + + @override + String get noButtonLabel => 'いいえ'; + + @override + String get setSleepTimer => 'スリープ・タイマーを設定'; + + @override + String get minutes => '分'; + + @override + String get invalidNumber => '無効な数値'; + + @override + String get sleepTimerTooltip => 'スリープ・タイマー'; + + @override + String get addToPlaylistTooltip => 'プレイリストに追加'; + + @override + String get addToPlaylistTitle => 'プレイリストに追加'; + + @override + String get removeFromPlaylistTooltip => 'プレイリストから外す'; + + @override + String get removeFromPlaylistTitle => 'プレイリストから外す'; + + @override + String get newPlaylist => '新規プレイリスト'; + + @override + String get createButtonLabel => '作成'; + + @override + String get playlistCreated => 'プレイリストを作成しました。'; + + @override + String get noAlbum => 'アルバム無し'; + + @override + String get noItem => 'アイテム無し'; + + @override + String get noArtist => 'アーティスト無し'; + + @override + String get unknownArtist => 'アーティスト不明'; + + @override + String get streaming => 'ストリーミング'; + + @override + String get downloaded => 'ダウンロード済み'; + + @override + String get transcode => 'トランスコード'; + + @override + String get direct => '直接'; + + @override + String get statusError => 'ステータス・エラー'; + + @override + String get queue => 'キュー'; + + @override + String get addToQueue => 'キューに追加'; + + @override + String get playNext => '再生次'; + + @override + String get replaceQueue => 'キューを置き換え'; + + @override + String get instantMix => 'インスタント・ミックス'; + + @override + String get goToAlbum => 'アルバムに行く'; + + @override + String get removeFavourite => 'お気に入りを削除'; + + @override + String get addFavourite => 'お気に入りを追加'; + + @override + String get addedToQueue => 'キューに追加。'; + + @override + String get insertedIntoQueue => 'キューに挿入されました。'; + + @override + String get queueReplaced => 'キューを置き換えました。'; + + @override + String get removedFromPlaylist => 'プレイリストから外しました。'; + + @override + String get startingInstantMix => 'インスタント・ミックス開始。'; + + @override + String get anErrorHasOccured => 'エラーが発生しました。'; + + @override + String responseError(String error, int statusCode) { + return '$error ステータスコード $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Status code $statusCode. ユーザー名/パスワードが間違っているか、クライアントがログインしていません。'; + } + + @override + String get removeFromMix => 'ミックスから外す'; + + @override + String get addToMix => 'ミックスに追加'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redownloaded $count items', + one: 'Redownloaded $count item', + zero: 'No redownloads needed.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'バッファ容量'; + + @override + String get bufferDurationSubtitle => 'プレイヤーがバッファする容量(秒単位)。リスタートが必要です。'; + + @override + String get language => '言語'; + + @override + String get confirm => '確認する'; + + @override + String get showUncensoredLogMessage => 'このログはあなたのログイン情報を含みます。表示しますか?'; + + @override + String get resetTabs => 'タブリセット'; + + @override + String get noMusicLibrariesTitle => '音楽ライブラリなし'; + + @override + String get noMusicLibrariesBody => + 'Finamp は音楽ライブラリを見つけることができませんでした。Jellyfin サーバーに、コンテンツ タイプが「音楽」に設定されているライブラリが少なくとも 1 つ含まれていることを確認してください。'; + + @override + String get refresh => 'リフレッシュ'; + + @override + String get swipeInsertQueueNext => 'スワイプした曲を再生する'; + + @override + String get swipeInsertQueueNextSubtitle => + '曲リストでスワイプしたときに、曲を最後に追加するのではなく、キューの次の項目として挿入できるようにします。'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart new file mode 100644 index 0000000..f03021b --- /dev/null +++ b/lib/l10n/app_localizations_ko.dart @@ -0,0 +1,727 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Korean (`ko`). +class AppLocalizationsKo extends AppLocalizations { + AppLocalizationsKo([String locale = 'ko']) : super(locale); + + @override + String startupError(String error) { + return '앱 시작중에 문제가 발생했습니다. 오류 내용:$error\n\n\"github.com/UnicornsOnLSD/finamp\"에 이 페이지의 캡처 화면을 첨부하여 \'이슈\'를 등록 해주세요. 이 문제가 지속되면 당신은 앱 데이터를 삭제하여 앱을 초기화 할 수 있습니다.'; + } + + @override + String get serverUrl => '서버 URL'; + + @override + String get internalExternalIpExplanation => + '귀하의 Jellyfin 서버에 원격으로 접속하려면, 외부 IP 주소를 사용해야 합니다.\n\n귀하의 서버가 HTTP 포트(80/443)에 있거나 역방향 프록시(Reverse Proxy) 뒤에 있는 경우, 포트를 지정할 필요는 없습니다.'; + + @override + String get emptyServerUrl => '서버 URL은 필수값 입니다'; + + @override + String get urlStartWithHttps => 'URL은 \"http://\" 또는 \"https://\"로 시작해야 합니다'; + + @override + String get urlTrailingSlash => 'URL 끝부분에 슬래시(/, 후행 슬래시)를 붙이지 마세요'; + + @override + String get username => '사용자 이름(아이디)'; + + @override + String get password => '암호'; + + @override + String get logs => '로그(사용기록)'; + + @override + String get next => '다음'; + + @override + String get selectMusicLibraries => '음악 라이브러리 선택'; + + @override + String get couldNotFindLibraries => '라이브러리를 찾을 수 없습니다.'; + + @override + String get unknownName => '알 수 없는 이름'; + + @override + String get songs => '노래'; + + @override + String get albums => '앨범'; + + @override + String get artists => '아티스트'; + + @override + String get genres => '장르'; + + @override + String get playlists => '플레이리스트'; + + @override + String get startMix => '믹스 시작하기'; + + @override + String get startMixNoSongsArtist => + '믹스를 시작하기 전에 \'아티스트\'를 길게 탭하여 믹스 빌더에서 추가하거나 제거하세요'; + + @override + String get startMixNoSongsAlbum => + '믹스를 시작하기 전에 \'앨범\'을 길게 탭하여 믹스 빌더에서 추가하거나 제거하세요'; + + @override + String get music => '음악'; + + @override + String get clear => '삭제(비우기)'; + + @override + String get favourites => '즐겨찾기'; + + @override + String get shuffleAll => '임의 재생(모두)'; + + @override + String get finamp => '핀앰프(Finamp)'; + + @override + String get downloads => '다운로드'; + + @override + String get settings => '설정'; + + @override + String get offlineMode => '오프라인 모드'; + + @override + String get sortOrder => '정렬 순서'; + + @override + String get sortBy => '정렬 기준'; + + @override + String get album => '앨범'; + + @override + String get albumArtist => '앨범 아티스트'; + + @override + String get artist => '아티스트'; + + @override + String get budget => '예산'; + + @override + String get communityRating => '커뮤니티 평점'; + + @override + String get criticRating => '비평가 평점'; + + @override + String get dateAdded => '추가된 날짜'; + + @override + String get datePlayed => '재생한 날짜'; + + @override + String get playCount => '재생 횟수'; + + @override + String get premiereDate => '초연(프리미어) 날짜'; + + @override + String get productionYear => '제작년도'; + + @override + String get name => '이름'; + + @override + String get random => '랜덤'; + + @override + String get revenue => '수익'; + + @override + String get runtime => '런타임(상영 시간)'; + + @override + String get syncDownloadedPlaylists => '다운로드한 플레이리스트 동기화'; + + @override + String get downloadMissingImages => '누락된 이미지 다운로드'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '누락된 이미지 $count건 다운로드', + one: '누락된 이미지 $count건 다운로드', + zero: '누락된 이미지 없음', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => '다운로드 에러'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count건 다운로드', + one: '$count건 다운로드', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 아이템', + one: '$count 아이템', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '이미지 $count건', + one: '이미지 $count건', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count건 완료'; + } + + @override + String dlFailed(int count) { + return '$count건 실패'; + } + + @override + String dlEnqueued(int count) { + return '$count건 대기열에 추가됨'; + } + + @override + String dlRunning(int count) { + return '$count건 진행중'; + } + + @override + String get downloadErrorsTitle => '다운로드 오류'; + + @override + String get noErrors => '오류가 없습니다!'; + + @override + String get errorScreenError => + '오류 목록을 가져오지 못했습니다! 이 시점에서는 GitHub에 문제를 등록하고 앱 데이터를 삭제해야 합니다'; + + @override + String get failedToGetSongFromDownloadId => '다운로드 ID에서 노래를 가져오지 못했습니다'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return '이 기기에서 $_temp0 \'$itemName\'를 삭제하시겠습니까?'; + } + + @override + String get deleteDownloadsConfirmButtonText => '삭제'; + + @override + String get deleteDownloadsAbortButtonText => '취소'; + + @override + String get error => '오류'; + + @override + String discNumber(int number) { + return '디스크 $number'; + } + + @override + String get playButtonLabel => '재생'; + + @override + String get shuffleButtonLabel => '임의 재생'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 곡', + one: '$count 곡', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => '플레이리스트 이름 수정'; + + @override + String get editPlaylistNameTitle => '플레이리스트 이름 수정'; + + @override + String get required => '필수 항목'; + + @override + String get updateButtonLabel => '업데이트'; + + @override + String get playlistNameUpdated => '플레이리스트 이름을 갱신했습니다.'; + + @override + String get favourite => '즐겨찾기'; + + @override + String get downloadsDeleted => '다운로드 항목을 삭제했습니다.'; + + @override + String get addDownloads => '다운로드 추가'; + + @override + String get location => '위치'; + + @override + String get downloadsAdded => '다운로드를 추가했습니다.'; + + @override + String get addButtonLabel => '추가'; + + @override + String get shareLogs => '로그(사용기록) 공유'; + + @override + String get logsCopied => '로그(사용기록) 복사함.'; + + @override + String get message => '메시지'; + + @override + String get stackTrace => '스택 추적'; + + @override + String get applicationLegalese => + 'Mozilla Public License 2.0에 따라 라이선스가 부여됐습니다. 소스 코드는 다음에서 확인할 수 있습니다:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => '트랜스코딩'; + + @override + String get downloadLocations => '다운로드 위치'; + + @override + String get audioService => '오디오 서비스'; + + @override + String get interactions => '상호작용'; + + @override + String get layoutAndTheme => '레이아웃 & 테마'; + + @override + String get notAvailableInOfflineMode => '오프라인 모드에서는 사용할 수 없습니다'; + + @override + String get logOut => '로그아웃'; + + @override + String get downloadedSongsWillNotBeDeleted => '다운로드한 노래는 삭제되지 않습니다'; + + @override + String get areYouSure => '확실한가요?'; + + @override + String get jellyfinUsesAACForTranscoding => 'Jellyfin은 트랜스코딩에 AAC를 사용합니다'; + + @override + String get enableTranscoding => '트랜스코딩 활성화'; + + @override + String get enableTranscodingSubtitle => '서버 측에서 음악 스트리밍을 트랜스코딩 합니다.'; + + @override + String get bitrate => '비트레이트'; + + @override + String get bitrateSubtitle => + '비트레이트가 높으면 고품질의 음악을 들을 수 있습니다. 데이터 사용량도 증가합니다.'; + + @override + String get customLocation => '사용자 지정 위치'; + + @override + String get appDirectory => '앱 디렉토리'; + + @override + String get addDownloadLocation => '다운로드 위치 추가'; + + @override + String get selectDirectory => '디렉토리 선택'; + + @override + String get unknownError => '알수 없는 오류'; + + @override + String get pathReturnSlashErrorMessage => '\"/(슬래시)\"로 끝나는 경로는 사용할 수 없습니다'; + + @override + String get directoryMustBeEmpty => '디렉토리는 비어 있어야 합니다'; + + @override + String get customLocationsBuggy => + '사용자 지정 위치는 권한 문제 때문에 버그가 매우 많습니다. 이 문제를 해결할 방법을 찾을 때 까지는 사용을 권장하지 않습니다.'; + + @override + String get enterLowPriorityStateOnPause => '일시 중지시 낮은 우선순위 상태로 전환합니다'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + '일시 중지시 알림창을 밀어서 사라지게 합니다. 안드로이드(OS)에서는 일시 중지시 서비스를 강제 종료할 수 있게 합니다.'; + + @override + String get shuffleAllSongCount => '전곡 임의 재생시 곡 수'; + + @override + String get shuffleAllSongCountSubtitle => + '\'전곡 임의 재생\' 버튼을 사용할 때 불러올 곡의 개수입니다.'; + + @override + String get viewType => '보기 유형'; + + @override + String get viewTypeSubtitle => '음악 화면 보기 유형'; + + @override + String get list => '목록'; + + @override + String get grid => '그리드(격자)'; + + @override + String get portrait => '세로 보기'; + + @override + String get landscape => '가로 보기'; + + @override + String gridCrossAxisCount(String value) { + return '$value 그리드 열 갯수'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return '$value 일때 한 행당 그리드 타일의 개수.'; + } + + @override + String get showTextOnGridView => '그리드 보기에서 텍스트를 보여줌'; + + @override + String get showTextOnGridViewSubtitle => + '그리드 음악 화면에서 \'텍스트(곡목, 아티스트 등)\' 표시 여부를 설정합니다.'; + + @override + String get showCoverAsPlayerBackground => '흐릿한 커버를 재생 화면 배경으로 보여줌'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + '재생 화면에서 \'흐릿한 앨범 커버 배경\' 사용 여부를 설정합니다.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + '앨범 아티스트와 동일한 경우, 곡 아티스트를 숨김'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + '앨범 화면에서 앨범 아티스트와 동일한 \'곡 아티스트\' 표시 여부를 설정합니다.'; + + @override + String get disableGesture => '제스처 비활성화'; + + @override + String get disableGestureSubtitle => '제스처 비활성화 여부를 설정합니다.'; + + @override + String get showFastScroller => '빠른 스크롤 표시'; + + @override + String get theme => '테마'; + + @override + String get system => '시스템'; + + @override + String get light => '밝은 테마'; + + @override + String get dark => '어두운 테마'; + + @override + String get tabs => '탭'; + + @override + String get cancelSleepTimer => '취침 타이머를 취소할까요?'; + + @override + String get yesButtonLabel => '네'; + + @override + String get noButtonLabel => '아니오'; + + @override + String get setSleepTimer => '취침 타이머 설정'; + + @override + String get minutes => '분'; + + @override + String get invalidNumber => '잘못된 숫자'; + + @override + String get sleepTimerTooltip => '취침 타이머'; + + @override + String get addToPlaylistTooltip => '플레이리스트에 추가'; + + @override + String get addToPlaylistTitle => '플레이리스트에 추가'; + + @override + String get removeFromPlaylistTooltip => '플레이리스트에서 삭제'; + + @override + String get removeFromPlaylistTitle => '플레이리스트에서 삭제'; + + @override + String get newPlaylist => '새 플레이리스트'; + + @override + String get createButtonLabel => '만들기'; + + @override + String get playlistCreated => '플레이리스트 생성됨.'; + + @override + String get noAlbum => '앨범 없음'; + + @override + String get noItem => '곡 없음'; + + @override + String get noArtist => '아티스트 없음'; + + @override + String get unknownArtist => '알 수 없는 아티스트'; + + @override + String get streaming => '스트리밍'; + + @override + String get downloaded => '다운로드됨'; + + @override + String get transcode => '트랜스코딩'; + + @override + String get direct => '다이렉트'; + + @override + String get statusError => '상태 오류'; + + @override + String get queue => '대기열'; + + @override + String get addToQueue => '대기열에 추가'; + + @override + String get playNext => '다음 곡 재생'; + + @override + String get replaceQueue => '대기열 교체'; + + @override + String get instantMix => '인스턴트 믹스'; + + @override + String get goToAlbum => '앨범으로 이동'; + + @override + String get removeFavourite => '즐겨찾기 삭제'; + + @override + String get addFavourite => '즐겨찾기 추가'; + + @override + String get addedToQueue => '대기열 끝에 추가.'; + + @override + String get insertedIntoQueue => '대기열 중간에 추가.'; + + @override + String get queueReplaced => '대기열이 교체됨.'; + + @override + String get removedFromPlaylist => '플레이리스트에서 삭제됨.'; + + @override + String get startingInstantMix => '인스턴트 믹스 시작.'; + + @override + String get anErrorHasOccured => '오류가 발생했습니다.'; + + @override + String responseError(String error, int statusCode) { + return '$error 상태 코드 $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error 상태 코드 $statusCode. 이것은 아마도 잘못된 로그인 정보를 사용했거나, 더 이상 로그인되어 있지 않음을 의미합니다.'; + } + + @override + String get removeFromMix => '믹스에서 삭제'; + + @override + String get addToMix => '믹스에 추가'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 아이템 다시 다운로드함', + one: '$count 아이템 다시 다운로드함', + zero: '다시 다운로드할 필요가 없습니다.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => '버퍼 시간'; + + @override + String get bufferDurationSubtitle => '플레이어가 버퍼링해야 하는 시간(초) 입니다. 다시 시작해야 합니다.'; + + @override + String get language => '언어'; + + @override + String get confirm => '확인'; + + @override + String get showUncensoredLogMessage => + '이 로그(사용기록)는 귀하의 로그인 정보를 포함합니다. 표시할까요?'; + + @override + String get resetTabs => '탭 초기화'; + + @override + String get noMusicLibrariesTitle => '음악 라이브러리 없음'; + + @override + String get noMusicLibrariesBody => + 'Finamp가 음악 라이브러리를 찾을 수 없습니다. 귀하의 Jellyfin 서버에 콘텐츠 유형이 \"음악\"으로 설정된 라이브러리가 하나 이상 있는지 확인하세요.'; + + @override + String get refresh => '새로고침'; + + @override + String get swipeInsertQueueNext => '스와이프한 노래 재생'; + + @override + String get swipeInsertQueueNextSubtitle => + '노래 목록에서 스와이프 했을 때, 노래를 대기열 끝에 추가하는 대신 바로 다음 곡으로 삽입할 수 있습니다.'; + + @override + String get redesignBeta => '베타 버전 사용해보기'; + + @override + String get playbackOrderShuffledTooltip => '임의 재생. 전환하려면 탭하세요.'; + + @override + String get playbackOrderLinearTooltip => '순차 재생. 전환하려면 탭하세요.'; + + @override + String get loopModeAllTooltip => '모두 반복. 전환하려면 탭하세요.'; + + @override + String get loopModeOneTooltip => '한곡 반복. 전환하려면 탭하세요.'; + + @override + String get loopModeNoneTooltip => '반복 안 함. 전환하려면 탭하세요.'; + + @override + String get skipToPrevious => '이전 곡으로 넘기기'; + + @override + String get skipToNext => '다음 곡으로 넘기기'; + + @override + String get togglePlayback => '재생 전환하기'; + + @override + String playArtist(String artist) { + return '$artist의 모든 앨범 재생'; + } + + @override + String shuffleArtist(String artist) { + return '$artist의 모든 앨범 임의 재생'; + } + + @override + String downloadArtist(String artist) { + return '$artist의 모든 앨범 다운로드'; + } + + @override + String get deleteFromDevice => '기기에서 삭제하기'; + + @override + String get download => '다운로드'; + + @override + String get sync => '서버와 동기화하기'; + + @override + String get about => 'Finamp(핀앰프) 소개'; +} diff --git a/lib/l10n/app_localizations_nb.dart b/lib/l10n/app_localizations_nb.dart new file mode 100644 index 0000000..268b5de --- /dev/null +++ b/lib/l10n/app_localizations_nb.dart @@ -0,0 +1,737 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Norwegian Bokmål (`nb`). +class AppLocalizationsNb extends AppLocalizations { + AppLocalizationsNb([String locale = 'nb']) : super(locale); + + @override + String startupError(String error) { + return 'Noe gikk galt under oppstart av programmet. Feilen var: $error\n\nOpprett en feilrapport på github.com/UnicornsOnLSD/finamp med en skjermavbildning av denne siden. Hvis problemet vedvarer kan du tømme programdata for å tilbakestille programmet.'; + } + + @override + String get serverUrl => 'Tjener-nettadresse'; + + @override + String get internalExternalIpExplanation => + 'Hvis du vil ha tilgang til Jellyfin-tjeneren din annensteds fra må du bruke din eksterne IP-adresse.\n\nHvis tjeneren din er på en HTTP-port (80/443) må du angi en port. Dette er sannsynligvis tilfelle hvis tjeneren din er bak en omvendt mellomtjener.'; + + @override + String get emptyServerUrl => 'Tjener-nettadressen kan ikke stå tom'; + + @override + String get urlStartWithHttps => + 'Nettadressen må starte med http:// eller https://'; + + @override + String get urlTrailingSlash => + 'Nettadressen kan ikke inneholde avsluttende skråstrek'; + + @override + String get username => 'Brukernavn'; + + @override + String get password => 'Passord'; + + @override + String get logs => 'Loggføring'; + + @override + String get next => 'Neste'; + + @override + String get selectMusicLibraries => 'Velg musikkbibliotek'; + + @override + String get couldNotFindLibraries => 'Fant ikke noen bibliotek.'; + + @override + String get unknownName => 'Ukjent navn'; + + @override + String get songs => 'Spor'; + + @override + String get albums => 'Album'; + + @override + String get artists => 'Artister'; + + @override + String get genres => 'Sjangere'; + + @override + String get playlists => 'Spillelister'; + + @override + String get startMix => 'Start miks'; + + @override + String get startMixNoSongsArtist => + 'Lang-trykk på en artist for å legge til eller fjerne vedkommende fra miksbyggeren før du starter en miks'; + + @override + String get startMixNoSongsAlbum => + 'Lang-trykk et album for å legge til eller fjerne det fra miksbyggeren før du starter en miks'; + + @override + String get music => 'Musikk'; + + @override + String get clear => 'Tøm'; + + @override + String get favourites => 'Favoritter'; + + @override + String get shuffleAll => 'Tilfelding avspilling av alt'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Nedlastninger'; + + @override + String get settings => 'Innstillinger'; + + @override + String get offlineMode => 'Frakoblet modus'; + + @override + String get sortOrder => 'Sorteringsrekkefølge'; + + @override + String get sortBy => 'Sorter etter'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Albumsartist'; + + @override + String get artist => 'Artist'; + + @override + String get budget => 'Budsjett'; + + @override + String get communityRating => 'Gemenskapsvurdering'; + + @override + String get criticRating => 'Kritikervurdering'; + + @override + String get dateAdded => 'Dato lagt til'; + + @override + String get datePlayed => 'Dato avspilt'; + + @override + String get playCount => 'Avspillingsantall'; + + @override + String get premiereDate => 'Premieredato'; + + @override + String get productionYear => 'Produksjonsår'; + + @override + String get name => 'Navn'; + + @override + String get random => 'Tilfeldig'; + + @override + String get revenue => 'Omsetning'; + + @override + String get runtime => 'Lengde'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Last ned manglende bilder'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Lastet ned $count manglende bilder', + one: 'Lastet ned $count manglende bilde', + zero: 'Fant ingen manglende bilder', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Nedlastingsfeil'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count nedlastinger', + one: '$count nedlasting', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count elementer', + one: '$count element', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count bilder', + one: '$count bilde', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count fullført'; + } + + @override + String dlFailed(int count) { + return '$count mislykket'; + } + + @override + String dlEnqueued(int count) { + return '$count i kø'; + } + + @override + String dlRunning(int count) { + return '$count kjører'; + } + + @override + String get downloadErrorsTitle => 'Nedlastingsfeil'; + + @override + String get noErrors => 'Ingen feil.'; + + @override + String get errorScreenError => + 'En feil inntraff under innhenting av listen over feil. Herfra bør du kanskje opprette en feilrapport på GitHub og slette programdataen.'; + + @override + String get failedToGetSongFromDownloadId => + 'Klarte ikke å hente spor fra nedlastings-ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Feil'; + + @override + String discNumber(int number) { + return 'Disk $number'; + } + + @override + String get playButtonLabel => 'Spill'; + + @override + String get shuffleButtonLabel => 'Tilfeldig avspilling'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count spor', + one: '$count spor', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Rediger spillelistenavn'; + + @override + String get editPlaylistNameTitle => 'Rediger spillelistenavn'; + + @override + String get required => 'Påkrevd'; + + @override + String get updateButtonLabel => 'Oppdater'; + + @override + String get playlistNameUpdated => 'Spillelistenavn oppdatert.'; + + @override + String get favourite => 'Favorittmerk'; + + @override + String get downloadsDeleted => 'Nedlastinger slettet.'; + + @override + String get addDownloads => 'Legg til nedlastinger'; + + @override + String get location => 'Sted'; + + @override + String get downloadsAdded => 'Nedlastinger lagt til.'; + + @override + String get addButtonLabel => 'Legg til'; + + @override + String get shareLogs => 'Del logger'; + + @override + String get logsCopied => 'Logger kopiert'; + + @override + String get message => 'Melding'; + + @override + String get stackTrace => 'Stabelspor'; + + @override + String get applicationLegalese => + 'Lisensiert MPL 2.0, med kildekode tilgjengelig på\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transkoding'; + + @override + String get downloadLocations => 'Nedlastingssteder'; + + @override + String get audioService => 'Lydtjeneste'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Posisjonering og draktvalg'; + + @override + String get notAvailableInOfflineMode => 'Ikke tilgjengelig i frakoblet modus'; + + @override + String get logOut => 'Logg ut'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Nedlastede spor vil ikke slettes'; + + @override + String get areYouSure => 'Er du sikker?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin bruker AAC for transkoding'; + + @override + String get enableTranscoding => 'Skru på transkoding'; + + @override + String get enableTranscodingSubtitle => + 'Transkoder musikkstrømmer på tjenersiden.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Høyere bitrate gir lyd i bedre kvalitet, på bekostning av høyere båndbreddebruk.'; + + @override + String get customLocation => 'Egendefinert sted'; + + @override + String get appDirectory => 'Programmappe'; + + @override + String get addDownloadLocation => 'Legg til nedlastingssted'; + + @override + String get selectDirectory => 'Velg mappe'; + + @override + String get unknownError => 'Ukjent feil'; + + @override + String get pathReturnSlashErrorMessage => + 'Stier som returnerer «/» kan ikke brukes.'; + + @override + String get directoryMustBeEmpty => 'Mappen må være tom'; + + @override + String get customLocationsBuggy => + 'Egendefinerte steder fungerer dårlig som følge av problemer med tilganger. Måter å løse det på vurderes, men akkurat nå anbefales ikke bruk.'; + + @override + String get enterLowPriorityStateOnPause => + 'Gå inn i lavprioritetstilstand ved pause'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Lar merknaden bli dratt unna under pause. Tillater også Android å drepe tjenesten når pauset.'; + + @override + String get shuffleAllSongCount => 'Antall spor for tilfeldig avspilling'; + + @override + String get shuffleAllSongCountSubtitle => + 'Mengden spor å laste inn ved bruk av «Tilfeldig avspilling av alle spor»-knappen.'; + + @override + String get viewType => 'Visningstype'; + + @override + String get viewTypeSubtitle => 'Visningstype for musikkskjermen'; + + @override + String get list => 'Liste'; + + @override + String get grid => 'Rutenett'; + + @override + String get portrait => 'Stående'; + + @override + String get landscape => 'Liggende'; + + @override + String gridCrossAxisCount(String value) { + return '$value rutenettsakseantall'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Mengden rutenettsflis å bruke per rad i $value-modus.'; + } + + @override + String get showTextOnGridView => 'Vis tekst i rutenettsvisning'; + + @override + String get showTextOnGridViewSubtitle => + 'Hvorvidt tekst (navn, artist, osv.( skal vises i rutenettsmusikkskjermen.'; + + @override + String get showCoverAsPlayerBackground => + 'Vis tilslørt omslag som avspillerbakgrunn'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Hvorvidt tilslørt omslag skal brukes som bakgrunn på avspillerskjermen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Skjul artister for sporet hvis samme som albumsartister'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Hvorvidt sporartister skal vises på albumsskjermen hvis forskjellig fra albumsartister.'; + + @override + String get disableGesture => 'Skru av håndvendinger'; + + @override + String get disableGestureSubtitle => 'Hvorvidt håndvendinger skal skrus av.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Drakt'; + + @override + String get system => 'System'; + + @override + String get light => 'Lys'; + + @override + String get dark => 'Mørk'; + + @override + String get tabs => 'Faner'; + + @override + String get cancelSleepTimer => 'Avbryt søvntidsur?'; + + @override + String get yesButtonLabel => 'Ja'; + + @override + String get noButtonLabel => 'Nei'; + + @override + String get setSleepTimer => 'Sett søvntidsur'; + + @override + String get minutes => 'Minutter'; + + @override + String get invalidNumber => 'Ugyldig tall'; + + @override + String get sleepTimerTooltip => 'Søvntidsur'; + + @override + String get addToPlaylistTooltip => 'Legg til i spilleliste'; + + @override + String get addToPlaylistTitle => 'Legg til i spilleliste'; + + @override + String get removeFromPlaylistTooltip => 'Fjern fra spilleliste'; + + @override + String get removeFromPlaylistTitle => 'Fjern fra spilleliste'; + + @override + String get newPlaylist => 'Ny spilleliste'; + + @override + String get createButtonLabel => 'Opprett'; + + @override + String get playlistCreated => 'Spilleliste opprettet.'; + + @override + String get noAlbum => 'Ingen album'; + + @override + String get noItem => 'Ingen elementer'; + + @override + String get noArtist => 'Ingen artister'; + + @override + String get unknownArtist => 'Ukjent artist'; + + @override + String get streaming => 'Strømming'; + + @override + String get downloaded => 'Nedlastet'; + + @override + String get transcode => 'Transkod'; + + @override + String get direct => 'Direkte'; + + @override + String get statusError => 'Statusfeil'; + + @override + String get queue => 'Kø'; + + @override + String get addToQueue => 'Legg til i kø'; + + @override + String get playNext => 'Spill neste'; + + @override + String get replaceQueue => 'Erstatt kø'; + + @override + String get instantMix => 'Umiddelbar miks'; + + @override + String get goToAlbum => 'Gå til album'; + + @override + String get removeFavourite => 'Fjern favoritt'; + + @override + String get addFavourite => 'Legg til favoritt'; + + @override + String get addedToQueue => 'Lagt til i kø.'; + + @override + String get insertedIntoQueue => 'Lagt i kø.'; + + @override + String get queueReplaced => 'Kø erstattet.'; + + @override + String get removedFromPlaylist => 'Fjernet fra spilleliste.'; + + @override + String get startingInstantMix => 'Starter umiddelbar miks …'; + + @override + String get anErrorHasOccured => 'Noe gikk galt.'; + + @override + String responseError(String error, int statusCode) { + return '$error Statuskode $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Statuskode $statusCode. Dette betyr antagelig at du bruker feil brukernavn eller passord, eller at klienten din ikke lenger er innloget.'; + } + + @override + String get removeFromMix => 'Fjern fra miks'; + + @override + String get addToMix => 'Legg til i miks'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Lastet ned igjen $count elementer', + one: 'Lastet ned igjen $count element', + zero: 'Ingenting trenger å lastes ned igjen.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Hurtiglagervarighet'; + + @override + String get bufferDurationSubtitle => + 'Antall sekunder avspilleren skal mellomlagre. Krever programomstart.'; + + @override + String get language => 'Språk'; + + @override + String get confirm => 'Bekreft'; + + @override + String get showUncensoredLogMessage => + 'Denne loggen inneholder din innloggingsinfo. Vis?'; + + @override + String get resetTabs => 'Tilbakestill faner'; + + @override + String get noMusicLibrariesTitle => 'Ingen musikkbibliotek'; + + @override + String get noMusicLibrariesBody => + 'Finamp fant ingen musikkbibliotek. Forsikre deg om at din Jellyfin-tjener inneholder minst ett bibliotek med innholdstype satt til «Musikk».'; + + @override + String get refresh => 'Gjenoppfrisk'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_nl.dart b/lib/l10n/app_localizations_nl.dart new file mode 100644 index 0000000..8776c87 --- /dev/null +++ b/lib/l10n/app_localizations_nl.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Dutch Flemish (`nl`). +class AppLocalizationsNl extends AppLocalizations { + AppLocalizationsNl([String locale = 'nl']) : super(locale); + + @override + String startupError(String error) { + return 'Er ging iets mis bij het starten van de app. Dit was de foutmelding: $error\n\nCreëer een issue op github.com/UnicornsOnLSD/finamp met een schermafbeelding van deze pagina. Wanneer het probleem zich vaker voordoet, kan je de app-data verwijderen om de app te resetten.'; + } + + @override + String get serverUrl => 'Server URL'; + + @override + String get internalExternalIpExplanation => + 'Om toegang tot de Jellyfin server te krijgen op afstand, dien je een extern IP te gebruiken.\n\nWanneer de server een HTTP-poort (80 of 443) gebruikt, hoef je deze niet in te vullen. Dit is waarschijnlijk het geval wanneer de server zich achter een reverse proxy bevindt.'; + + @override + String get emptyServerUrl => 'De URL van je server mag niet leeg zijn'; + + @override + String get urlStartWithHttps => + 'De URL moet beginnen met http:// of https://'; + + @override + String get urlTrailingSlash => 'De URL mag geen / bevatten aan het einde'; + + @override + String get username => 'Gebruikersnaam'; + + @override + String get password => 'Wachtwoord'; + + @override + String get logs => 'Logbestanden'; + + @override + String get next => 'Volgende'; + + @override + String get selectMusicLibraries => 'Selecteer Muziekbibliotheken'; + + @override + String get couldNotFindLibraries => 'Kon geen bibliotheken vinden.'; + + @override + String get unknownName => 'Onbekende Naam'; + + @override + String get songs => 'Liedjes'; + + @override + String get albums => 'Albums'; + + @override + String get artists => 'Artiesten'; + + @override + String get genres => 'Genres'; + + @override + String get playlists => 'Afspeellijsten'; + + @override + String get startMix => 'Mix starten'; + + @override + String get startMixNoSongsArtist => + 'Druk lang op een artiest om deze toe te voegen of te verwijderen van de mix-bouwer alvorens de mix te starten'; + + @override + String get startMixNoSongsAlbum => + 'Druk lang op een album om deze toe te voegen of te verwijderen van de mix-bouwer alvorens de mix te starten'; + + @override + String get music => 'Muziek'; + + @override + String get clear => 'Opschonen'; + + @override + String get favourites => 'Favorieten'; + + @override + String get shuffleAll => 'Alles shufflen'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Downloads'; + + @override + String get settings => 'Instellingen'; + + @override + String get offlineMode => 'Offline Modus'; + + @override + String get sortOrder => 'Sorteervolgorde'; + + @override + String get sortBy => 'Sorteer met'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Album Artiest'; + + @override + String get artist => 'Artiest'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Gemeenschapsbeoordeling'; + + @override + String get criticRating => 'Criticusbeoordeling'; + + @override + String get dateAdded => 'Datum toegevoegd'; + + @override + String get datePlayed => 'Datum afgespeeld'; + + @override + String get playCount => 'Aantal keren afgespeeld'; + + @override + String get premiereDate => 'Premieredatum'; + + @override + String get productionYear => 'Productiejaar'; + + @override + String get name => 'Naam'; + + @override + String get random => 'Willekeurig'; + + @override + String get revenue => 'Inkomsten'; + + @override + String get runtime => 'Duur'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Download ontbrekende plaatjes'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count ontbrekende plaatjes gedownloaded', + one: '$count ontbrekend plaatje gedownloaded', + zero: 'Geen ontbrekende plaatjes gevonden', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Download fouten'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count downloads', + one: '$count download', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count items', + one: '$count item', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count plaatjes', + one: '$count plaatje', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count volledig'; + } + + @override + String dlFailed(int count) { + return '$count mislukt'; + } + + @override + String dlEnqueued(int count) { + return '$count gepland'; + } + + @override + String dlRunning(int count) { + return '$count bezig'; + } + + @override + String get downloadErrorsTitle => 'Download Fouten'; + + @override + String get noErrors => 'Geen fouten!'; + + @override + String get errorScreenError => + 'Er is een fout opgetreden bij het opvragen van de lijst. Probeer een issue te maken op GitHub en verwijder app data'; + + @override + String get failedToGetSongFromDownloadId => + 'Het nummer kon niet gevonden worden met deze download ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Fout'; + + @override + String discNumber(int number) { + return 'Disk $number'; + } + + @override + String get playButtonLabel => 'AFSPELEN'; + + @override + String get shuffleButtonLabel => 'SHUFFLE'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Nummers', + one: '$count Nummer', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Pas de naam van de playlist aan'; + + @override + String get editPlaylistNameTitle => 'Pas de naam van de Playlist aan'; + + @override + String get required => 'Verplicht'; + + @override + String get updateButtonLabel => 'UPDATE'; + + @override + String get playlistNameUpdated => 'De naam van de playlist is aangepast.'; + + @override + String get favourite => 'Favoriet'; + + @override + String get downloadsDeleted => 'Downloads verwijderd.'; + + @override + String get addDownloads => 'Voeg downloads toe'; + + @override + String get location => 'Plaats'; + + @override + String get downloadsAdded => 'Downloads toegevoegd.'; + + @override + String get addButtonLabel => 'Toevoegen'; + + @override + String get shareLogs => 'Deel de log'; + + @override + String get logsCopied => 'De log is gekopieerd.'; + + @override + String get message => 'Bericht'; + + @override + String get stackTrace => 'Strack-trace'; + + @override + String get applicationLegalese => + 'Uitgegeven onder de Mozilla Public License 2.0. Broncode beschikbaar op:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Converteren'; + + @override + String get downloadLocations => 'Downloadlocaties'; + + @override + String get audioService => 'Audiodienst'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Layout & Thema'; + + @override + String get notAvailableInOfflineMode => 'Niet beschikbaar in offline-modus'; + + @override + String get logOut => 'Uitloggen'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Gedownloade nummers worden niet verwijderd'; + + @override + String get areYouSure => 'Bent u zeker?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin gebruikt AAC voor conversie'; + + @override + String get enableTranscoding => 'Conversie inschakelen'; + + @override + String get enableTranscodingSubtitle => + 'Converteert muziekstreams op de server.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Het gebruik van een hogere bitrate geeft betere audiokwaliteit, maar gebruikt meer netwerkbandbreedte.'; + + @override + String get customLocation => 'Persoonlijke locatie'; + + @override + String get appDirectory => 'Applicatie folder'; + + @override + String get addDownloadLocation => 'Voeg een downloadlocatie toe'; + + @override + String get selectDirectory => 'Selecteer map'; + + @override + String get unknownError => 'Onbekende Fout'; + + @override + String get pathReturnSlashErrorMessage => + 'Paden met \"/\" kunnen niet worden gebruikt'; + + @override + String get directoryMustBeEmpty => 'Folder moet leeg zijn'; + + @override + String get customLocationsBuggy => + 'Persoonlijke locaties hebben veel bug door permissies. We denken over oplossingen hiervoor. Voor nu raden we aan deze niet te gebruiken.'; + + @override + String get enterLowPriorityStateOnPause => + 'Ga naar een lage prioriteit wanneer gepauseerd'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'De notificatie kan weggeswiped worden wanneer gepauseerd. Hierdoor kan Android de service stoppen.'; + + @override + String get shuffleAllSongCount => 'Aantal liedjes in de shuffle'; + + @override + String get shuffleAllSongCountSubtitle => + 'Hoeveelheid liedjes geladen moeten worden bij gebruik van de shuffle knop.'; + + @override + String get viewType => 'Type bekijken'; + + @override + String get viewTypeSubtitle => 'Type voor het muziekscherm bekijken'; + + @override + String get list => 'Lijst'; + + @override + String get grid => 'Raster'; + + @override + String get portrait => 'Portret'; + + @override + String get landscape => 'Landschap'; + + @override + String gridCrossAxisCount(String value) { + return '$value Aantal assen'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Hoeveelheid rijen te gebruiken in $value-modus.'; + } + + @override + String get showTextOnGridView => 'Tekst in rooster tonen'; + + @override + String get showTextOnGridViewSubtitle => + 'Tekst (titel, artiest, etc.) laten zien op het muziekscherm.'; + + @override + String get showCoverAsPlayerBackground => + 'Geblurde cover op spelerachtergrond tonen'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Geblurde coverafbeelding gebruiken als achtergrond van het afspeelscherm.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Liedartiest verbergen wanneer deze hetzelfde is als de albumartiest'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Liedjesartiest tonen wanneer deze hetzelfde is als de albumartiest.'; + + @override + String get disableGesture => 'Gebaren uitschakelen'; + + @override + String get disableGestureSubtitle => 'Gebaren in- of uitschakelen.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Thema'; + + @override + String get system => 'Systeem'; + + @override + String get light => 'Licht'; + + @override + String get dark => 'Donker'; + + @override + String get tabs => 'Tabs'; + + @override + String get cancelSleepTimer => 'Annuleer sleep timer?'; + + @override + String get yesButtonLabel => 'JA'; + + @override + String get noButtonLabel => 'NEE'; + + @override + String get setSleepTimer => 'Slaaptimer instellen'; + + @override + String get minutes => 'Minuten'; + + @override + String get invalidNumber => 'Ongeldig getal'; + + @override + String get sleepTimerTooltip => 'Slaaptimer'; + + @override + String get addToPlaylistTooltip => 'Toevoegen aan afspeellijst'; + + @override + String get addToPlaylistTitle => 'Toevoegen aan afspeellijst'; + + @override + String get removeFromPlaylistTooltip => 'Verwijder van afspeellijst'; + + @override + String get removeFromPlaylistTitle => 'Verwijder van afspeellijst'; + + @override + String get newPlaylist => 'Nieuwe afspeellijst'; + + @override + String get createButtonLabel => 'CREËER'; + + @override + String get playlistCreated => 'Afspeellijst gecreëerd.'; + + @override + String get noAlbum => 'Geen album'; + + @override + String get noItem => 'Geen element'; + + @override + String get noArtist => 'Geen artiest'; + + @override + String get unknownArtist => 'Onbekende artiest'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'GEDOWNLOAD'; + + @override + String get transcode => 'CONVERTEREN'; + + @override + String get direct => 'DIRECT'; + + @override + String get statusError => 'STATUS FOUT'; + + @override + String get queue => 'Afspeelrij'; + + @override + String get addToQueue => 'Voeg toe aan rij'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Afspeelrij vervangen'; + + @override + String get instantMix => 'Instant mix'; + + @override + String get goToAlbum => 'Ga naar album'; + + @override + String get removeFavourite => 'Verwijder favoriet'; + + @override + String get addFavourite => 'Toevoegen aan favorieten'; + + @override + String get addedToQueue => 'Toegevoegd aan rij.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Rij vervangen.'; + + @override + String get removedFromPlaylist => 'Verwijderd van afspeellijst.'; + + @override + String get startingInstantMix => 'Instantmix starten.'; + + @override + String get anErrorHasOccured => 'Er is een fout opgetreden.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status code $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Status code $statusCode. Dit betekenr waarschijnlijk dat u de verkeerde gebruikersnaam/wachtwoord hebt gebruikt, of uw apparaat niet langer geauthenticeerd is.'; + } + + @override + String get removeFromMix => 'Uit mix verwijderen'; + + @override + String get addToMix => 'Aan mix toevoegen'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: ' $count elementen opnieuw gedownload', + one: '$count element opnieuw gedownload', + zero: 'Geen downloads nodig.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Bufferlengte'; + + @override + String get bufferDurationSubtitle => + 'De lengte van de buffer, in seconden. Dit vereist een herstart.'; + + @override + String get language => 'Taal'; + + @override + String get confirm => 'Bevestigen'; + + @override + String get showUncensoredLogMessage => + 'Dit logboek bevat uw inloggegevens. Tonen?'; + + @override + String get resetTabs => 'Tabbladen resetten'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_pl.dart b/lib/l10n/app_localizations_pl.dart new file mode 100644 index 0000000..b60e038 --- /dev/null +++ b/lib/l10n/app_localizations_pl.dart @@ -0,0 +1,735 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Polish (`pl`). +class AppLocalizationsPl extends AppLocalizations { + AppLocalizationsPl([String locale = 'pl']) : super(locale); + + @override + String startupError(String error) { + return 'Coś poszło nie tak podczas startu aplikacji. Wystąpił błąd :$error\n\nProszę utworzyć zgłoszenie (https://github.com/jmshrv/finamp) wraz ze zrzutem ekranu. Jeśli problem będzie się powtarzać, usuń dane aplikacji.'; + } + + @override + String get serverUrl => 'Adres URL serwera'; + + @override + String get internalExternalIpExplanation => + 'Jeśli chcesz uzyskać dostęp do zdalnej instancji Jellyfin, musisz posiadać zewnętrzne IP.\n\nJeśli serwer jest dostępny na portach HTTP(S) (80/443), nie musisz określać portu.'; + + @override + String get emptyServerUrl => 'Adres URL serwera nie może być pusty'; + + @override + String get urlStartWithHttps => + 'URL musi zaczynać się od http:// lub https://'; + + @override + String get urlTrailingSlash => 'URL nie może kończyć się znakiem \"/\"'; + + @override + String get username => 'Nazwa użytkownika'; + + @override + String get password => 'Hasło'; + + @override + String get logs => 'Logi'; + + @override + String get next => 'Dalej'; + + @override + String get selectMusicLibraries => 'Wybierz biblioteki z muzyką'; + + @override + String get couldNotFindLibraries => 'Nie znaleziono żadnych bibliotek.'; + + @override + String get unknownName => 'Bez nazwy'; + + @override + String get songs => 'Utwory'; + + @override + String get albums => 'Albumy'; + + @override + String get artists => 'Wykonawcy'; + + @override + String get genres => 'Gatunki'; + + @override + String get playlists => 'Listy odtwarzania'; + + @override + String get startMix => 'Rozpocznij mix'; + + @override + String get startMixNoSongsArtist => + 'Kliknij i przytrzymaj nazwę wykonawcy, aby dodać go do mix-u przed jego rozpoczęciem'; + + @override + String get startMixNoSongsAlbum => + 'Kliknij i przytrzymaj nazwę albumu, aby dodać go do mix-u przed jego rozpoczęciem'; + + @override + String get music => 'Muzyka'; + + @override + String get clear => 'Wyczyść'; + + @override + String get favourites => 'Ulubione'; + + @override + String get shuffleAll => 'Losuj wszystko'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Pobrane'; + + @override + String get settings => 'Ustawienia'; + + @override + String get offlineMode => 'Tryb offline'; + + @override + String get sortOrder => 'Porządek sortowania'; + + @override + String get sortBy => 'Sortuj według'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Wykonawca albumu'; + + @override + String get artist => 'Wykonawca'; + + @override + String get budget => 'Budżet'; + + @override + String get communityRating => 'Ocena społeczności'; + + @override + String get criticRating => 'Ocena krytyków'; + + @override + String get dateAdded => 'Data dodania'; + + @override + String get datePlayed => 'Data odtwarzania'; + + @override + String get playCount => 'Liczba odtworzeń'; + + @override + String get premiereDate => 'Data premiery'; + + @override + String get productionYear => 'Rok produkcji'; + + @override + String get name => 'Nazwa'; + + @override + String get random => 'Losowo'; + + @override + String get revenue => 'Dochód'; + + @override + String get runtime => 'Czas trwania'; + + @override + String get syncDownloadedPlaylists => 'Synchronizuj pobrane playlisty'; + + @override + String get downloadMissingImages => 'Pobierz brakujące obrazy'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Pobrano $count brakujących obrazów', + one: 'Pobrano $count brakujący obraz', + zero: 'Nie brakuje żadnych obrazów', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Błędy pobierania'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count pobrań', + one: '$count pobranie', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count utworów', + one: '$count utwór', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count obrazów', + one: '$count obraz', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count ukończono pomyślnie'; + } + + @override + String dlFailed(int count) { + return '$count ukończono z błędami'; + } + + @override + String dlEnqueued(int count) { + return '$count oczekuje'; + } + + @override + String dlRunning(int count) { + return '$count w trakcie'; + } + + @override + String get downloadErrorsTitle => 'Błędy pobierania'; + + @override + String get noErrors => 'Brak błędów!'; + + @override + String get errorScreenError => + 'Wystąpił błąd podczas pobierania listy błędów. Utwórz zgłoszenie na portalu GitHub i usuń dane aplikacji'; + + @override + String get failedToGetSongFromDownloadId => + 'Nie udało się pobrać utworu z ID pobierania'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Czy napewno chcesz usunąć $_temp0 \'$itemName\' z tego urządzenia?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Usuń'; + + @override + String get deleteDownloadsAbortButtonText => 'Cofnij'; + + @override + String get error => 'Błąd'; + + @override + String discNumber(int number) { + return 'Dysk $number'; + } + + @override + String get playButtonLabel => 'ODTWARZAJ'; + + @override + String get shuffleButtonLabel => 'LOSOWO'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count utworów', + one: '$count utwór', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Edytuj nazwę listy odtwarzania'; + + @override + String get editPlaylistNameTitle => 'Edytuj nazwę listy odtwarzania'; + + @override + String get required => 'Wymagane'; + + @override + String get updateButtonLabel => 'AKTUALIZUJ'; + + @override + String get playlistNameUpdated => 'Zaktualizowano nazwę listy odtwarzania.'; + + @override + String get favourite => 'Ulubiony'; + + @override + String get downloadsDeleted => 'Usunięto pobrane.'; + + @override + String get addDownloads => 'Wszystkie pobrania'; + + @override + String get location => 'Lokalizacja'; + + @override + String get downloadsAdded => 'Dodano do pobierania.'; + + @override + String get addButtonLabel => 'DODAJ'; + + @override + String get shareLogs => 'Udostępnij logi'; + + @override + String get logsCopied => 'Logi skopiowane.'; + + @override + String get message => 'Wiadomość'; + + @override + String get stackTrace => 'Stos błędu'; + + @override + String get applicationLegalese => + 'Licencja Mozilla Public License 2.0. Kod źródłowy dostępny na:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transkodowanie'; + + @override + String get downloadLocations => 'Lokalizacje pobierania'; + + @override + String get audioService => 'Usługa audio'; + + @override + String get interactions => 'Interakcje'; + + @override + String get layoutAndTheme => 'Układ i motyw'; + + @override + String get notAvailableInOfflineMode => 'Niedostępne w trybie offline'; + + @override + String get logOut => 'Wyloguj'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Pobrane utwory nie zostaną usunięte'; + + @override + String get areYouSure => 'Czy na pewno?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin używa AAC do transkodowania'; + + @override + String get enableTranscoding => 'Włącz transkodowanie'; + + @override + String get enableTranscodingSubtitle => + 'Transkoduje strumienie muzyczne po stronie serwera.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Wyższy bitrate dostarcza lepszą jakość, ale kosztem większego zużycia transferu danych.'; + + @override + String get customLocation => 'Własna lokalizacja'; + + @override + String get appDirectory => 'Folder aplikacji'; + + @override + String get addDownloadLocation => 'Dodaj lokalizację pobierania'; + + @override + String get selectDirectory => 'Wybierz folder'; + + @override + String get unknownError => 'Nieznany błąd'; + + @override + String get pathReturnSlashErrorMessage => 'Ścieżki nie mogą wskazywać \"/\"'; + + @override + String get directoryMustBeEmpty => 'Folder musi być pusty'; + + @override + String get customLocationsBuggy => + 'Niestandardowe lokalizacje są bardzo kłopotliwe ze względu na problemy z uprawnieniami. W chwili obecnej ich używanie nie jest zalecane.'; + + @override + String get enterLowPriorityStateOnPause => + 'Przechodź w stan niskiego priorytetu w trakcie trwania pauzy'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Pozwala usunąć powiadomienie podczas pauzy. Pozwala również systemowi Android na zabicie usługi podczas pauzy.'; + + @override + String get shuffleAllSongCount => 'Maksymalna ilość losowych utworów'; + + @override + String get shuffleAllSongCountSubtitle => + 'Ilość utworów do załadowania kiedy użyto przycisku \"Losowo\" na wszystkich utworach.'; + + @override + String get viewType => 'Widok'; + + @override + String get viewTypeSubtitle => 'Układ elementów'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Siatka'; + + @override + String get portrait => 'Widok pionowy'; + + @override + String get landscape => 'Widok poziomy'; + + @override + String gridCrossAxisCount(String value) { + return 'Elementy siatki ($value)'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Ilość elementów w wierszu - $value.'; + } + + @override + String get showTextOnGridView => 'Pokaż tekst w widoku siatki'; + + @override + String get showTextOnGridViewSubtitle => + 'Określa czy wyświetlać tekst (tytuł, wykonawca itp.) na siatce elementów.'; + + @override + String get showCoverAsPlayerBackground => + 'Pokazuj rozmyty obraz jako tło odtwarzacza'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Określa czy używać rozmytego obrazu na ekranie odtwarzacza.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Ukryj wykonawców utworu jeśli odpowiadają wykonawcom albumu'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Określa czy wyświetlać wykonawców utworów na ekranie albumu, jeśli nie różnią się one od wykonawców albumów.'; + + @override + String get disableGesture => 'Wyłącz gesty'; + + @override + String get disableGestureSubtitle => 'Czy wyłączyć gesty.'; + + @override + String get showFastScroller => 'Pokaż szybkie przewijanie'; + + @override + String get theme => 'Motyw'; + + @override + String get system => 'Systemowy'; + + @override + String get light => 'Jasny'; + + @override + String get dark => 'Ciemny'; + + @override + String get tabs => 'Zakładki'; + + @override + String get cancelSleepTimer => 'Zatrzymać odliczanie?'; + + @override + String get yesButtonLabel => 'TAK'; + + @override + String get noButtonLabel => 'NIE'; + + @override + String get setSleepTimer => 'Ustaw wyłącznik czasowy'; + + @override + String get minutes => 'Minuty'; + + @override + String get invalidNumber => 'Nieprawidłowa liczba'; + + @override + String get sleepTimerTooltip => 'Wyłącznik czasowy'; + + @override + String get addToPlaylistTooltip => 'Dodaj do playlisty'; + + @override + String get addToPlaylistTitle => 'Dodaj do Playlisty'; + + @override + String get removeFromPlaylistTooltip => 'Usuń z listy odtwarzania'; + + @override + String get removeFromPlaylistTitle => 'Usuń z Listy odtwarzania'; + + @override + String get newPlaylist => 'Nowa lista odtwarzania'; + + @override + String get createButtonLabel => 'UTWÓRZ'; + + @override + String get playlistCreated => 'Utworzono listę odtwarzania.'; + + @override + String get noAlbum => 'Brak albumu'; + + @override + String get noItem => 'Brak elementu'; + + @override + String get noArtist => 'Brak artysty'; + + @override + String get unknownArtist => 'Nieznany artysta'; + + @override + String get streaming => 'STRUMIENIOWANIE'; + + @override + String get downloaded => 'Z POBRANYCH'; + + @override + String get transcode => 'TRANSKODOWANE'; + + @override + String get direct => 'BEZPOŚREDNIE'; + + @override + String get statusError => 'STATUS BŁĘDU'; + + @override + String get queue => 'Kolejka'; + + @override + String get addToQueue => 'Dodaj do kolejki'; + + @override + String get playNext => 'Następne'; + + @override + String get replaceQueue => 'Zastąp kolejkę'; + + @override + String get instantMix => 'Szybki miks'; + + @override + String get goToAlbum => 'Idź do albumu'; + + @override + String get removeFavourite => 'Usuń z ulubionych'; + + @override + String get addFavourite => 'Dodaj do ulubionych'; + + @override + String get addedToQueue => 'Dodano do kolejki.'; + + @override + String get insertedIntoQueue => 'Dodano do kolejki.'; + + @override + String get queueReplaced => 'Kolejka zastąpiona.'; + + @override + String get removedFromPlaylist => 'Usunięto z listy odtwarzania.'; + + @override + String get startingInstantMix => 'Rozpocznij szybki miks.'; + + @override + String get anErrorHasOccured => 'Wystąpił błąd.'; + + @override + String responseError(String error, int statusCode) { + return '$error Kod statusu $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Kod $statusCode. To najprawdopodobniej oznacza, że użyłeś/aś nieprawidłowej nazwy użytkownika lub hasła.'; + } + + @override + String get removeFromMix => 'Usuń z miksu'; + + @override + String get addToMix => 'Dodaj do miksu'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Ponownie pobrano $count elementów', + one: 'Ponownie pobrano $count element', + zero: 'Nie potrzeba ponownego pobierania.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Długość bufora'; + + @override + String get bufferDurationSubtitle => + 'Ile odtwarzacz powinien buforować, w sekundach. Wymaga ponownego uruchomienia.'; + + @override + String get language => 'Język'; + + @override + String get confirm => 'Potwierdź'; + + @override + String get showUncensoredLogMessage => + 'Ten log zawiera twoje dane logowania. Pokazać?'; + + @override + String get resetTabs => 'Resetowanie zakładek'; + + @override + String get noMusicLibrariesTitle => 'Brak bibliotek muzycznych'; + + @override + String get noMusicLibrariesBody => + 'Finamp nie mógł znaleźć żadnych bibliotek muzycznych. Upewnij się, że serwer Jellyfin zawiera co najmniej jedną bibliotekę z typem zawartości ustawionym na \"Muzyka\".'; + + @override + String get refresh => 'ODŚWIEŻ'; + + @override + String get swipeInsertQueueNext => 'Odtwórz Przewiniętą Piosenkę Następnie'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Włącz wstawianie utworu jako następnego elementu w kolejce po przesunięciu palcem na liście utworów zamiast dołączania go na końcu.'; + + @override + String get redesignBeta => 'Przeprojektowanie Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart new file mode 100644 index 0000000..484f13e --- /dev/null +++ b/lib/l10n/app_localizations_pt.dart @@ -0,0 +1,1472 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Portuguese (`pt`). +class AppLocalizationsPt extends AppLocalizations { + AppLocalizationsPt([String locale = 'pt']) : super(locale); + + @override + String startupError(String error) { + return 'Ocorreu um erro durante o arranque da aplicação. O erro foi:$error\n\nPor favor, abra um \"Issue\" em github.com/UnicornsOnLSD/finamp que contenha uma captura deste ecrã. Caso o problema persista, tente limpar os dados da aplicação para a repor para o estado original.'; + } + + @override + String get serverUrl => 'URL do servidor'; + + @override + String get internalExternalIpExplanation => + 'Se pretende aceder ao seu servidor Jellyfin remotamente, será necessário utilizar o seu IP público.\n\nNo caso do seu servidor utilizar uma das portas padrão do HTTP (80/443), não vai precisar de indicar uma porta. Este será o caso mais provável caso utilize um proxy inverso.'; + + @override + String get emptyServerUrl => 'O URL do servidor não pode estar em branco'; + + @override + String get urlStartWithHttps => + 'O URL deverá começar com http:// ou https://'; + + @override + String get urlTrailingSlash => 'O URL não pode ter uma barra no fim'; + + @override + String get username => 'Utilizador'; + + @override + String get password => 'Palavra-passe'; + + @override + String get logs => 'Registos'; + + @override + String get next => 'Próximo'; + + @override + String get selectMusicLibraries => 'Seleccione as suas bibliotecas de música'; + + @override + String get couldNotFindLibraries => + 'Não foi possível encontrar nenhuma biblioteca.'; + + @override + String get unknownName => 'Nome desconhecido'; + + @override + String get songs => 'Músicas'; + + @override + String get albums => 'Álbuns'; + + @override + String get artists => 'Artistas'; + + @override + String get genres => 'Géneros'; + + @override + String get playlists => 'Listas de Reprodução'; + + @override + String get startMix => 'Iniciar Mistura'; + + @override + String get startMixNoSongsArtist => + 'Antes de iniciar uma mistura, faça um toque longo num artista para adicionar ou remover o mesmo do editor de misturas'; + + @override + String get startMixNoSongsAlbum => + 'Antes de iniciar uma mistura, faça um toque longo num álbum para adicioná-lo ao editor de misturas'; + + @override + String get music => 'Música'; + + @override + String get clear => 'Limpar'; + + @override + String get favourites => 'Favoritos'; + + @override + String get shuffleAll => 'Misturar todas'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Transferências'; + + @override + String get settings => 'Definições'; + + @override + String get offlineMode => 'Modo Offline'; + + @override + String get sortOrder => 'Ordenação'; + + @override + String get sortBy => 'Ordenar por'; + + @override + String get album => 'Álbum'; + + @override + String get albumArtist => 'Artista do Álbum'; + + @override + String get artist => 'Artista'; + + @override + String get budget => 'Orçamento'; + + @override + String get communityRating => 'Avaliação da Comunidade'; + + @override + String get criticRating => 'Avaliação dos Críticos'; + + @override + String get dateAdded => 'Adicionado em'; + + @override + String get datePlayed => 'Reproduzido em'; + + @override + String get playCount => 'Contagem de reproduções'; + + @override + String get premiereDate => 'Data de Lançamento'; + + @override + String get productionYear => 'Ano de Produção'; + + @override + String get name => 'Nome'; + + @override + String get random => 'Aleatório'; + + @override + String get revenue => 'Receita'; + + @override + String get runtime => 'Duração'; + + @override + String get syncDownloadedPlaylists => + 'Sincronizar listas de reprodução descarregadas'; + + @override + String get downloadMissingImages => 'Transferir imagens inexistentes'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count imagens em falta descarregadas', + one: '$count imagem em falta transferida', + zero: 'Não foram encontradas imagens em falta', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Erros de transferência'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count descarregados', + one: '$count descarregado', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count itens', + one: '$count item', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count imagens', + one: '$count imagem', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count concluídas'; + } + + @override + String dlFailed(int count) { + return '$count falharam'; + } + + @override + String dlEnqueued(int count) { + return '$count em espera'; + } + + @override + String dlRunning(int count) { + return '$count em execução'; + } + + @override + String get downloadErrorsTitle => 'Erros de Transferência'; + + @override + String get noErrors => 'Sem erros!'; + + @override + String get errorScreenError => + 'Ocorreu um erro ao aceder à lista de erros! Neste caso, recomendados que abra um issue no nosso GitHub e que limpe os dados da aplicação'; + + @override + String get failedToGetSongFromDownloadId => + 'Falha ao adquirir música do ID da descarga'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Apagar'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancelar'; + + @override + String get error => 'Erro'; + + @override + String discNumber(int number) { + return 'Disco $number'; + } + + @override + String get playButtonLabel => 'REPRODUZIR'; + + @override + String get shuffleButtonLabel => 'MISTURAR'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Músicas', + one: '$count Música', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Editar nome da lista de reprodução'; + + @override + String get editPlaylistNameTitle => 'Editar Nome da Lista de Reprodução'; + + @override + String get required => 'Obrigatório'; + + @override + String get updateButtonLabel => 'ACTUALIZAR'; + + @override + String get playlistNameUpdated => 'Nome da lista de reprodução atualizado.'; + + @override + String get favourite => 'Favorito'; + + @override + String get downloadsDeleted => 'Descargas apagadas.'; + + @override + String get addDownloads => 'Adicionar Descargas'; + + @override + String get location => 'Localização'; + + @override + String get downloadsAdded => 'Descargas adicionadas.'; + + @override + String get addButtonLabel => 'ADICIONAR'; + + @override + String get shareLogs => 'Compartilhar relatórios'; + + @override + String get logsCopied => 'Relatórios copiados.'; + + @override + String get message => 'Mensagem'; + + @override + String get stackTrace => 'Traçado da Pilha'; + + @override + String get applicationLegalese => + 'Licenciado com a Licença Pública Mozilla 2.0. Código-fonte disponível em:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcodificando'; + + @override + String get downloadLocations => 'Locais de Descargas'; + + @override + String get audioService => 'Serviço de Áudio'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Composição & Tema'; + + @override + String get notAvailableInOfflineMode => 'Não disponível no modo desconectado'; + + @override + String get logOut => 'Sair'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Músicas descarregadas não serão apagadas'; + + @override + String get areYouSure => 'Tem certeza?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin usa AAC para transcodificação'; + + @override + String get enableTranscoding => 'Ativar Transcodificação'; + + @override + String get enableTranscodingSubtitle => + 'Transcodifica fluxos de música no lado do servidor.'; + + @override + String get bitrate => 'Taxa de bits'; + + @override + String get bitrateSubtitle => + 'Uma taxa de bits mais alta resulta em áudio de maior qualidade, ao custo de maior largura de banda.'; + + @override + String get customLocation => 'Localização Customizada'; + + @override + String get appDirectory => 'Diretório de apps'; + + @override + String get addDownloadLocation => 'Adicionar Localização de Descargas'; + + @override + String get selectDirectory => 'Selecione Diretório'; + + @override + String get unknownError => 'Erro Desconhecido'; + + @override + String get pathReturnSlashErrorMessage => + 'Caminhos que retornam \"/\" não podem ser usados'; + + @override + String get directoryMustBeEmpty => 'Diretório deve estar vazio'; + + @override + String get customLocationsBuggy => + 'Localizações customizadas são extremamente defeituosas devidas à problems com permissões. Estou pensando em maneiras de consertar isso, mas por enquanto não recomendaria usá-las.'; + + @override + String get enterLowPriorityStateOnPause => + 'Entrar Estado de Baixa-Prioridade durante Pausa'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Permite que a notificação seja apagada quando pausada. Também permite que o Android elimine o serviço quando pausado.'; + + @override + String get shuffleAllSongCount => 'Contagem de Misturar Todas as Músicas'; + + @override + String get shuffleAllSongCountSubtitle => + 'Quantidade de músicas para carregar quando usando o botão misturar todas as músicas.'; + + @override + String get viewType => 'Tipo de Visualização'; + + @override + String get viewTypeSubtitle => 'Tipo de visualização para o ecrã de músicas'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Grade'; + + @override + String get portrait => 'Retrato'; + + @override + String get landscape => 'Paisagem'; + + @override + String gridCrossAxisCount(String value) { + return '$value Contagem Eixo Cruzado da Grade'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Quantidade de ícones da grade para usar em cada fila quando $value.'; + } + + @override + String get showTextOnGridView => 'Mostrar texto na visualização em grade'; + + @override + String get showTextOnGridViewSubtitle => + 'Mostrar ou não o texto (título, artista, etc) no ecrã de música grade.'; + + @override + String get showCoverAsPlayerBackground => + 'Mostrar capa desfocada como plano de fundo do player'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Usar ou não usar arte de capas desfocadas como fundo do ecrã to reprodutor.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Ocultar artistas da música se forem iguais aos artistas do álbum'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Se deve mostrar os artistas das músicas na tela do álbum, se não for diferente dos artistas do álbum.'; + + @override + String get disableGesture => 'Desativar gestos'; + + @override + String get disableGestureSubtitle => 'Se deseja desativar gestos.'; + + @override + String get showFastScroller => 'Mostrar rolagem rápida'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'Sistema'; + + @override + String get light => 'Claro'; + + @override + String get dark => 'Escuro'; + + @override + String get tabs => 'Abas'; + + @override + String get cancelSleepTimer => 'Cancelar o Cronômetro de Sono?'; + + @override + String get yesButtonLabel => 'SIM'; + + @override + String get noButtonLabel => 'NÃO'; + + @override + String get setSleepTimer => 'Configurar o Cronômetro de Sono'; + + @override + String get minutes => 'Minutos'; + + @override + String get invalidNumber => 'Número Inválido'; + + @override + String get sleepTimerTooltip => 'Cronômetro de Sono'; + + @override + String get addToPlaylistTooltip => 'Adicionar à lista de reprodução'; + + @override + String get addToPlaylistTitle => 'Adicionar à Lista de Reprodução'; + + @override + String get removeFromPlaylistTooltip => 'Remover da lista de reprodução'; + + @override + String get removeFromPlaylistTitle => 'Remover da Lista de Reprodução'; + + @override + String get newPlaylist => 'Nova Lista de Reprodução'; + + @override + String get createButtonLabel => 'CRIAR'; + + @override + String get playlistCreated => 'Lista de reprodução criada.'; + + @override + String get noAlbum => 'Nenhum Álbum'; + + @override + String get noItem => 'Nenhum Ítem'; + + @override + String get noArtist => 'Nenhum Artista'; + + @override + String get unknownArtist => 'Artista Desconhecido'; + + @override + String get streaming => 'TRANSMITINDO'; + + @override + String get downloaded => 'DESCARREGADO'; + + @override + String get transcode => 'TRANSCODIFICAR'; + + @override + String get direct => 'DIRETO'; + + @override + String get statusError => 'ERRO DE CONDIÇÃO'; + + @override + String get queue => 'Fila'; + + @override + String get addToQueue => 'Adicionar à Fila'; + + @override + String get playNext => 'Jogue a seguir'; + + @override + String get replaceQueue => 'Trocar a Fila'; + + @override + String get instantMix => 'Mistura Instantânea'; + + @override + String get goToAlbum => 'Ir para Álbum'; + + @override + String get removeFavourite => 'Remover Favorito'; + + @override + String get addFavourite => 'Adicionar Favorito'; + + @override + String get addedToQueue => 'Adicionado à fila.'; + + @override + String get insertedIntoQueue => 'Inserido na fila.'; + + @override + String get queueReplaced => 'Fila trocada.'; + + @override + String get removedFromPlaylist => 'Removido da lista de reprodução.'; + + @override + String get startingInstantMix => 'Iniciando mistura instantânea.'; + + @override + String get anErrorHasOccured => 'Ocorreu um erro.'; + + @override + String responseError(String error, int statusCode) { + return '$error Código de condição $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Código de condição $statusCode. Isto provavelmente significa que usou um nome de utilizador/palavra-passe errados, ou o seu cliente não está mais autenticado.'; + } + + @override + String get removeFromMix => 'Remover da Mistura'; + + @override + String get addToMix => 'Adicionar à Mistura'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count itens baixados novamente', + one: '$count item baixado novamente', + zero: 'Não são necessários novos downloads.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Duração do buffer'; + + @override + String get bufferDurationSubtitle => + 'Quanto o player deve armazenar em buffer, em segundos. Requer uma reinicialização.'; + + @override + String get language => 'Linguagem'; + + @override + String get confirm => 'Confirme'; + + @override + String get showUncensoredLogMessage => + 'Este log contém suas informações de login. Mostrar?'; + + @override + String get resetTabs => 'Redefinir guias'; + + @override + String get noMusicLibrariesTitle => 'Sem bibliotecas de música'; + + @override + String get noMusicLibrariesBody => + 'A Finamp não encontrou nenhuma biblioteca musical. Certifique-se de que seu servidor Jellyfin contenha pelo menos uma biblioteca com o tipo de conteúdo definido como “Música”.'; + + @override + String get refresh => 'ACTUALIZAR'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} + +/// The translations for Portuguese, as used in Brazil (`pt_BR`). +class AppLocalizationsPtBr extends AppLocalizationsPt { + AppLocalizationsPtBr() : super('pt_BR'); + + @override + String startupError(String error) { + return 'Algo deu errado na inicialização. O erro foi: $error\n\nPor favor, crie um problema/issue em github.com/UnicornsOnLSD/finamp anexando uma captura de tela dessa página. Se esse erro persistir, limpe os dados para restaurar o aplicativo.'; + } + + @override + String get serverUrl => 'URL do servidor'; + + @override + String get internalExternalIpExplanation => + 'Se você quer acessar seu servidor Jellyfin remotamente, você precisa usar seu IP externo.\n\nSe seu servidor está em uma porta HTTP (80/443), você não precisa especificar a porta. Esse será o caso se o servidor estiver atrás de um proxy reverso.'; + + @override + String get emptyServerUrl => 'URL de servidor não pode ser vazia'; + + @override + String get urlStartWithHttps => 'URL deve começar com http:// ou https://'; + + @override + String get urlTrailingSlash => 'URL não pode incluir a barra final'; + + @override + String get username => 'Usuário'; + + @override + String get password => 'Senha'; + + @override + String get logs => 'Registros'; + + @override + String get next => 'Próximo'; + + @override + String get selectMusicLibraries => 'Selecione a biblioteca de Músicas'; + + @override + String get couldNotFindLibraries => + 'Não foi possível encontrar nenhuma biblioteca.'; + + @override + String get unknownName => 'Nome desconhecido'; + + @override + String get songs => 'Músicas'; + + @override + String get albums => 'Álbuns'; + + @override + String get artists => 'Artistas'; + + @override + String get genres => 'Gêneros'; + + @override + String get playlists => 'Listas de Reprodução'; + + @override + String get startMix => 'Começar Miscelânea'; + + @override + String get startMixNoSongsArtist => + 'Aperte e segure num artista para adicionar ou remover da mistura antes de iniciá-la'; + + @override + String get startMixNoSongsAlbum => + 'Aperte e segure num álbum para adicionar ou remover da mistura antes de iniciá-la'; + + @override + String get music => 'Música'; + + @override + String get clear => 'Limpar'; + + @override + String get favourites => 'Favoritos'; + + @override + String get shuffleAll => 'Embaralhar todas'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Downloads'; + + @override + String get settings => 'Configurações'; + + @override + String get offlineMode => 'Modo Offline'; + + @override + String get sortOrder => 'Ordenação'; + + @override + String get sortBy => 'Ordenar por'; + + @override + String get album => 'Álbum'; + + @override + String get albumArtist => 'Artista do Álbum'; + + @override + String get artist => 'Artista'; + + @override + String get budget => 'Orçamento'; + + @override + String get communityRating => 'Avaliação da Comunidade'; + + @override + String get criticRating => 'Avaliação dos Críticos'; + + @override + String get dateAdded => 'Adicionado em'; + + @override + String get datePlayed => 'Reproduzido em'; + + @override + String get playCount => 'Contagem de reproduções'; + + @override + String get premiereDate => 'Data de Lançamento'; + + @override + String get productionYear => 'Ano de Produção'; + + @override + String get name => 'Nome'; + + @override + String get random => 'Aleatório'; + + @override + String get revenue => 'Receita'; + + @override + String get runtime => 'Duração'; + + @override + String get syncDownloadedPlaylists => + 'Sincronizar listas de reprodução baixadas'; + + @override + String get downloadMissingImages => 'Baixar imagens ausentes'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Baixadas$count imagens ausentes', + one: 'Baixada $count imagem ausente', + zero: 'Nenhuma imagem ausente baixada', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Erros de transferência'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count baixadas', + one: '$count baixada', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count itens', + one: '$count item', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count imagens', + one: '$count imagem', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count concluídas'; + } + + @override + String dlFailed(int count) { + return '$count falharam'; + } + + @override + String dlEnqueued(int count) { + return '$count enfileiradas'; + } + + @override + String dlRunning(int count) { + return '$count em execução'; + } + + @override + String get downloadErrorsTitle => 'Erros de Transferência'; + + @override + String get noErrors => 'Sem erros!'; + + @override + String get errorScreenError => + 'Um erro ocorreu acessando a lista de erros! A este ponto, você provavelmente deve criar um defeito (issue) no GitHub e apagar os dados do aplicativo'; + + @override + String get failedToGetSongFromDownloadId => + 'Falha em adquirir música do ID da transferência'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'o álbum', + 'playlist': 'a lista de reprodução', + 'artist': 'o artista', + 'genre': 'o gênero', + 'track': 'a música', + 'other': '', + }, + ); + return 'Você tem certeza que quer deletar $_temp0 \'$itemName\' desse dispositivo?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Deletar'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancelar'; + + @override + String get error => 'Erro'; + + @override + String discNumber(int number) { + return 'Disco $number'; + } + + @override + String get playButtonLabel => 'REPRODUZIR'; + + @override + String get shuffleButtonLabel => 'MISTURAR'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Músicas', + one: '$count Música', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Editar nome da lista de reprodução'; + + @override + String get editPlaylistNameTitle => 'Editar Nome da Lista de Reprodução'; + + @override + String get required => 'Obrigatório'; + + @override + String get updateButtonLabel => 'ATUALIZAÇÃO'; + + @override + String get playlistNameUpdated => 'Nome da lista de reprodução atualizado.'; + + @override + String get favourite => 'Favorito'; + + @override + String get downloadsDeleted => 'Transferências apagadas.'; + + @override + String get addDownloads => 'Adicionar Transferências'; + + @override + String get location => 'Localização'; + + @override + String get downloadsAdded => 'Transferências adicionadas.'; + + @override + String get addButtonLabel => 'ADICIONAR'; + + @override + String get shareLogs => 'Compartilhar relatórios'; + + @override + String get logsCopied => 'Relatórios copiados.'; + + @override + String get message => 'Mensagem'; + + @override + String get stackTrace => 'Traçado da Pilha'; + + @override + String get applicationLegalese => + 'Licenciado com a Licença Pública Mozilla 2.0. Código-fonte disponível em:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcodificando'; + + @override + String get downloadLocations => 'Locais de Transferências'; + + @override + String get audioService => 'Serviço de Áudio'; + + @override + String get interactions => 'Interações'; + + @override + String get layoutAndTheme => 'Composição & Tema'; + + @override + String get notAvailableInOfflineMode => 'Não disponível no modo desconectado'; + + @override + String get logOut => 'Sair'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Músicas transferidas não serão apagadas'; + + @override + String get areYouSure => 'Tem certeza?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin usa AAC para transcodificação'; + + @override + String get enableTranscoding => 'Ativar Transcodificação'; + + @override + String get enableTranscodingSubtitle => + 'A transmissão de músicas será transcodificada pelo servidor.'; + + @override + String get bitrate => 'Taxa de bits'; + + @override + String get bitrateSubtitle => + 'Uma taxa de bits mais alta resulta em áudio de maior qualidade, ao custo de maior largura de banda.'; + + @override + String get customLocation => 'Localização Customizada'; + + @override + String get appDirectory => 'Diretório de Aplicativos'; + + @override + String get addDownloadLocation => 'Adicionar Localização de Transferências'; + + @override + String get selectDirectory => 'Selecione Diretório'; + + @override + String get unknownError => 'Erro Desconhecido'; + + @override + String get pathReturnSlashErrorMessage => + 'Caminhos que retornam \"/\" não podem ser usados'; + + @override + String get directoryMustBeEmpty => 'Diretório deve estar vazio'; + + @override + String get customLocationsBuggy => + 'Localizações customizadas são extremamente defeituosas devidas à problems com permissões. Estou pensando em maneiras de consertar isso, mas por enquanto não recomendaria usá-las.'; + + @override + String get enterLowPriorityStateOnPause => + 'Entrar Estado de Baixa-Prioridade durante Pausa'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Permite que a notificação seja dispensada quando pausado. Também permite ao Android terminar o serviço quando pausado.'; + + @override + String get shuffleAllSongCount => 'Contagem de Misturar Todas as Músicas'; + + @override + String get shuffleAllSongCountSubtitle => + 'Quantidade de músicas para carregar quando usando o botão misturar todas as músicas.'; + + @override + String get viewType => 'Tipo de Visualização'; + + @override + String get viewTypeSubtitle => 'Tipo de visualização para a tela de músicas'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Grade'; + + @override + String get portrait => 'Retrato'; + + @override + String get landscape => 'Paisagem'; + + @override + String gridCrossAxisCount(String value) { + return '$value Contagem Eixo Cruzado da Grade'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Quantidade de ícones da grade para usar em cada fila quando $value.'; + } + + @override + String get showTextOnGridView => 'Mostrar texto na visualização de grade'; + + @override + String get showTextOnGridViewSubtitle => + 'Mostrar ou não o texto (título, artista, etc) na tela de música grade.'; + + @override + String get showCoverAsPlayerBackground => + 'Mostrar capas desfocadas como fundo do tocador'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Usar ou não usar arte de capas desfocadas como fundo da tela to tocador.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Esconder o nome dos artistas da música se for o mesmo que os artistas do álbum'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Indica se deve mostrar os artistas da música na tela do álbum se eles não forem diferentes dos artistas do álbum.'; + + @override + String get disableGesture => 'Desativar gestos'; + + @override + String get disableGestureSubtitle => 'Indica se deve desativar gestos.'; + + @override + String get showFastScroller => 'Mostrar rolagem rápida'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'Sistema'; + + @override + String get light => 'Claro'; + + @override + String get dark => 'Escuro'; + + @override + String get tabs => 'Abas'; + + @override + String get cancelSleepTimer => 'Cancelar o Cronômetro de Sono?'; + + @override + String get yesButtonLabel => 'SIM'; + + @override + String get noButtonLabel => 'NÃO'; + + @override + String get setSleepTimer => 'Configurar o Cronômetro de Sono'; + + @override + String get minutes => 'Minutos'; + + @override + String get invalidNumber => 'Número Inválido'; + + @override + String get sleepTimerTooltip => 'Cronômetro de Sono'; + + @override + String get addToPlaylistTooltip => 'Adicionar à lista de reprodução'; + + @override + String get addToPlaylistTitle => 'Adicionar à Lista de Reprodução'; + + @override + String get removeFromPlaylistTooltip => 'Remover da playlist'; + + @override + String get removeFromPlaylistTitle => 'Remover da Playlist'; + + @override + String get newPlaylist => 'Nova Lista de Reprodução'; + + @override + String get createButtonLabel => 'CRIAR'; + + @override + String get playlistCreated => 'Lista de reprodução criada.'; + + @override + String get noAlbum => 'Nenhum Álbum'; + + @override + String get noItem => 'Nenhum Ítem'; + + @override + String get noArtist => 'Nenhum Artista'; + + @override + String get unknownArtist => 'Artista Desconhecido'; + + @override + String get streaming => 'TRANSMITINDO'; + + @override + String get downloaded => 'TRANSFERIDO'; + + @override + String get transcode => 'TRANSCODIFICAR'; + + @override + String get direct => 'DIRETO'; + + @override + String get statusError => 'ERRO DE CONDIÇÃO'; + + @override + String get queue => 'Fila'; + + @override + String get addToQueue => 'Adicionar à Fila'; + + @override + String get playNext => 'Tocar Próximo'; + + @override + String get replaceQueue => 'Trocar a Fila'; + + @override + String get instantMix => 'Mistura Instantânea'; + + @override + String get goToAlbum => 'Ir para Álbum'; + + @override + String get removeFavourite => 'Remover Favorito'; + + @override + String get addFavourite => 'Adicionar Favorito'; + + @override + String get addedToQueue => 'Adicionado à fila.'; + + @override + String get insertedIntoQueue => 'Inserido na fila.'; + + @override + String get queueReplaced => 'Fila trocada.'; + + @override + String get removedFromPlaylist => 'Removido da playlist.'; + + @override + String get startingInstantMix => 'Iniciando mistura instantânea.'; + + @override + String get anErrorHasOccured => 'Ocorreu um erro.'; + + @override + String responseError(String error, int statusCode) { + return '$error Código de condição $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Código de condição $statusCode. Isto provavelmente significa que você usou um nome de usuário/senha errados, ou seu cliente não está mais autenticado.'; + } + + @override + String get removeFromMix => 'Remover da Mistura'; + + @override + String get addToMix => 'Adicionar à Mistura'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count itens foram baixados novamente', + one: '$count item foi baixado novamente', + zero: 'Sem necessidade de baixar novamente.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Duração do buffer'; + + @override + String get bufferDurationSubtitle => + 'Quanto o reprodutor deve armazenar de buffer, em segundos. Requer uma reinicialização.'; + + @override + String get language => 'Idioma'; + + @override + String get confirm => 'Confirmar'; + + @override + String get showUncensoredLogMessage => + 'Este registro contém suas credenciais de acesso. Revelar?'; + + @override + String get resetTabs => 'Redefinir abas'; + + @override + String get noMusicLibrariesTitle => 'Sem Bibliotecas de Música'; + + @override + String get noMusicLibrariesBody => + 'O Finamp não conseguiu encontrar nenhuma biblioteca de música. Certifique-se de que o seu servidor Jellyfin tenha pelo menos uma biblioteca com o tipo de conteúdo definido como \"Música\".'; + + @override + String get refresh => 'ATUALIZAR'; + + @override + String get swipeInsertQueueNext => 'Tocar Música Deslizada em Seguida'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Adicionar uma música como próximo item na lista quando for deslizada, ao invés de adicionar no final.'; + + @override + String get redesignBeta => 'Teste o beta'; + + @override + String get playbackOrderShuffledTooltip => + 'Embaralhando. Aperte para ativar.'; + + @override + String get playbackOrderLinearTooltip => + 'Tocando em ordem. Aperte para ativar.'; + + @override + String get loopModeAllTooltip => 'Repetir tudo. Aperte para ativar.'; + + @override + String get loopModeOneTooltip => 'Repetir uma. Aperte para ativar.'; + + @override + String get loopModeNoneTooltip => 'Sem repetição. Aperte para ativar.'; + + @override + String get skipToPrevious => 'Pular para música anterior'; + + @override + String get skipToNext => 'Pular para próxima música'; + + @override + String get togglePlayback => 'Ativar reprodução'; + + @override + String playArtist(String artist) { + return 'Tocar todos os álbuns de $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Tocar todos os álbuns de $artist em modo aleatório'; + } + + @override + String downloadArtist(String artist) { + return 'Baixar todos os álbuns de $artist'; + } + + @override + String get deleteFromDevice => 'Remover do dispositivo'; + + @override + String get download => 'Baixar'; + + @override + String get sync => 'Sincronizar com servidor'; + + @override + String get about => 'Sobre Finamp'; +} diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart new file mode 100644 index 0000000..c16eb2b --- /dev/null +++ b/lib/l10n/app_localizations_ru.dart @@ -0,0 +1,743 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Russian (`ru`). +class AppLocalizationsRu extends AppLocalizations { + AppLocalizationsRu([String locale = 'ru']) : super(locale); + + @override + String startupError(String error) { + return 'Что-то пошло не так во время запуска приложения. Возникла ошибка: $error\n\nПожалуйста, создайте \"issue\" на github.com/UnicornsOnLSD/finamp и приложите скриншот этой страницы. Если проблема будет повторяться, вы можете очистить данные приложения, чтобы сбросить его настройки.'; + } + + @override + String get serverUrl => 'URL сервера'; + + @override + String get internalExternalIpExplanation => + 'Чтобы получить удалённый доступ к серверу Jellyfin, используйте внешний IP-адрес.\n\nЕсли ваш сервер работает на портах HTTP(S) 80/443, указывать порт не нужно. Это обычно так, если сервер находится за обратным прокси-сервером.'; + + @override + String get emptyServerUrl => 'URL сервера не может быть пустым'; + + @override + String get urlStartWithHttps => + 'URL сервера должно начинаться с http:// или https://'; + + @override + String get urlTrailingSlash => 'URL сервера не должен иметь / в конце'; + + @override + String get username => 'Логин'; + + @override + String get password => 'Пароль'; + + @override + String get logs => 'Логи'; + + @override + String get next => 'Далее'; + + @override + String get selectMusicLibraries => 'Выбрать музыкальные библиотеки'; + + @override + String get couldNotFindLibraries => 'Библиотеки не найдены.'; + + @override + String get unknownName => 'Неизвестное Имя'; + + @override + String get songs => 'Песни'; + + @override + String get albums => 'Альбомы'; + + @override + String get artists => 'Исполнители'; + + @override + String get genres => 'Жанры'; + + @override + String get playlists => 'Плейлисты'; + + @override + String get startMix => 'Начать Микс'; + + @override + String get startMixNoSongsArtist => + 'Чтобы добавить или удалить исполнителя из микса, нажмите и удерживайте его имя'; + + @override + String get startMixNoSongsAlbum => + 'Чтобы добавить или удалить альбом из микса, нажмите и удерживайте его'; + + @override + String get music => 'Музыка'; + + @override + String get clear => 'Очистить'; + + @override + String get favourites => 'Избранное'; + + @override + String get shuffleAll => 'Перемешать всё'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Загрузки'; + + @override + String get settings => 'Настройки'; + + @override + String get offlineMode => 'Автономный режим'; + + @override + String get sortOrder => 'Порядок сортировки'; + + @override + String get sortBy => 'Сортировать по'; + + @override + String get album => 'Альбом'; + + @override + String get albumArtist => 'Исполнитель Альбома'; + + @override + String get artist => 'Исполнитель'; + + @override + String get budget => 'Бюджет'; + + @override + String get communityRating => 'Рейтинг Сообщества'; + + @override + String get criticRating => 'Рейтинг Критиков'; + + @override + String get dateAdded => 'Дата Добавления'; + + @override + String get datePlayed => 'Дата Последнего Проигрывания'; + + @override + String get playCount => 'Всего Проигрываний'; + + @override + String get premiereDate => 'Дата Премьеры'; + + @override + String get productionYear => 'Год Создания'; + + @override + String get name => 'Имя'; + + @override + String get random => 'Случайно'; + + @override + String get revenue => 'Доход'; + + @override + String get runtime => 'Время выполнения'; + + @override + String get syncDownloadedPlaylists => + 'Синхронизировать загруженные плейлисты'; + + @override + String get downloadMissingImages => 'Скачать отсутствующие изображения'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Скачано $count отсутствующих изображений', + few: 'Скачано $count отсутствующих изображения', + one: 'Скачано $count отсутствующее изображение', + zero: 'Не найдено отсутствующих изображений', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Ошибки Скачивания'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count загрузок', + few: '$count загрузки', + one: '$count загрузка', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count файлы', + few: '$count файла', + one: '$count файл', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count изображений', + few: '$count изображения', + one: '$count изображение', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count завершено'; + } + + @override + String dlFailed(int count) { + return '$count не удалось'; + } + + @override + String dlEnqueued(int count) { + return '$count в очереди'; + } + + @override + String dlRunning(int count) { + return '$count скачиваются'; + } + + @override + String get downloadErrorsTitle => 'Ошибки Загрузки'; + + @override + String get noErrors => 'Ошибок нет!'; + + @override + String get errorScreenError => + 'Ошибка при получении списка ошибок! Скорее всего, вам нужно очистить данные приложения и сообщить о данной ошибке на Github'; + + @override + String get failedToGetSongFromDownloadId => + 'Не удалось запросить песню с ID загрузки'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Вы уверены, что хотите удалить $_temp0 \'$itemName\' с этого устройства?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Удалить'; + + @override + String get deleteDownloadsAbortButtonText => 'Отмена'; + + @override + String get error => 'Ошибка'; + + @override + String discNumber(int number) { + return 'Диск $number'; + } + + @override + String get playButtonLabel => 'ИГРАТЬ'; + + @override + String get shuffleButtonLabel => 'СЛУЧАЙНО'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count треков', + few: '$count трека', + one: '$count трек', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Редактировать название плейлиста'; + + @override + String get editPlaylistNameTitle => 'Изменить название плейлиста'; + + @override + String get required => 'Необходимо'; + + @override + String get updateButtonLabel => 'ОБНОВИТЬ'; + + @override + String get playlistNameUpdated => 'Название плейлиста обновлено.'; + + @override + String get favourite => 'В избранное'; + + @override + String get downloadsDeleted => 'Загрузки удалены.'; + + @override + String get addDownloads => 'Добавить в загрузки'; + + @override + String get location => 'Расположение'; + + @override + String get downloadsAdded => 'Добавлено в загрузки.'; + + @override + String get addButtonLabel => 'ДОБАВИТЬ'; + + @override + String get shareLogs => 'Поделиться логами'; + + @override + String get logsCopied => 'Логи скопированы.'; + + @override + String get message => 'Сообщение'; + + @override + String get stackTrace => 'Отслеживание стека'; + + @override + String get applicationLegalese => + 'Лицензия Mozilla Public License 2.0. Открытый код приложения доступен по ссылке:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Транскодирование'; + + @override + String get downloadLocations => 'Расположение Загрузок'; + + @override + String get audioService => 'Аудиосервис'; + + @override + String get interactions => 'Взаимодействия'; + + @override + String get layoutAndTheme => 'Макет и тема'; + + @override + String get notAvailableInOfflineMode => 'Недоступно без интернета'; + + @override + String get logOut => 'Выйти'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Скачанные песни не будут удалены'; + + @override + String get areYouSure => 'Вы уверены?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin использует AAC для транскодирования'; + + @override + String get enableTranscoding => 'Включить транскодирование'; + + @override + String get enableTranscodingSubtitle => + 'Треки будут транскодированы сервером.'; + + @override + String get bitrate => 'Битрейт'; + + @override + String get bitrateSubtitle => + 'Высокий битрейт обеспечивает лучшее качество звука за счет большего потребления трафика.'; + + @override + String get customLocation => 'Пользовательские Папки'; + + @override + String get appDirectory => 'Папка Приложения'; + + @override + String get addDownloadLocation => 'Добавить папку для загрузок'; + + @override + String get selectDirectory => 'Выбрать папку'; + + @override + String get unknownError => 'Неизвестная Ошибка'; + + @override + String get pathReturnSlashErrorMessage => + 'Невозможно указывать пути, использующие \"/\"'; + + @override + String get directoryMustBeEmpty => 'Папка должна быть пустой'; + + @override + String get customLocationsBuggy => + 'Пользовательские папки крайне нестабильны в связи с ошибками доступа. Я размышляю над тем, как это исправить, но пока я не рекомендую Вам их использовать.'; + + @override + String get enterLowPriorityStateOnPause => + 'Использовать режим низкого приоритета на Паузе'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Позволяет смахнуть уведомление на паузе. Также позволяет андроиду остановить сервис на паузе.'; + + @override + String get shuffleAllSongCount => 'Перемешать порядок всех песен'; + + @override + String get shuffleAllSongCountSubtitle => + 'Количество песен для загрузки в режиме случайного проигрывания.'; + + @override + String get viewType => 'Тип вида'; + + @override + String get viewTypeSubtitle => 'Тип вида плеера'; + + @override + String get list => 'Список'; + + @override + String get grid => 'Решётка'; + + @override + String get portrait => 'Портретный'; + + @override + String get landscape => 'Альбомный'; + + @override + String gridCrossAxisCount(String value) { + return '$value Количество элементов решётки'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Количество отображаемых элементов решётки построчно, когда $value.'; + } + + @override + String get showTextOnGridView => 'Отображать текст в режиме решётки'; + + @override + String get showTextOnGridViewSubtitle => + 'Отображать или нет текст (название песни, исполнителя и т.д.) в режиме решётки.'; + + @override + String get showCoverAsPlayerBackground => + 'Показывать размытую обложку на фоне'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Отображать или нет размытую обложку альбома как фон в плеере.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Не отображать одинаковых исполнителей для трека и альбома'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Отображать исполнителя трека на странице альбома, если он совпадает с исполнителем альбома.'; + + @override + String get disableGesture => 'Отключить жесты'; + + @override + String get disableGestureSubtitle => 'Стоит ли отключать жесты.'; + + @override + String get showFastScroller => 'Показать быструю прокрутку'; + + @override + String get theme => 'Тема оформления'; + + @override + String get system => 'Системная'; + + @override + String get light => 'Светлая'; + + @override + String get dark => 'Тёмная'; + + @override + String get tabs => 'Вкладки'; + + @override + String get cancelSleepTimer => 'Выключить Таймер?'; + + @override + String get yesButtonLabel => 'ДА'; + + @override + String get noButtonLabel => 'НЕТ'; + + @override + String get setSleepTimer => 'Поставить Таймер'; + + @override + String get minutes => 'Минуты'; + + @override + String get invalidNumber => 'Неправильное Число'; + + @override + String get sleepTimerTooltip => 'Таймер'; + + @override + String get addToPlaylistTooltip => 'Добавить в плейлист'; + + @override + String get addToPlaylistTitle => 'Добавить в Плейлист'; + + @override + String get removeFromPlaylistTooltip => 'Удалить из плейлиста'; + + @override + String get removeFromPlaylistTitle => 'Удалить из Плейлиста'; + + @override + String get newPlaylist => 'Новый Плейлист'; + + @override + String get createButtonLabel => 'СОЗДАТЬ'; + + @override + String get playlistCreated => 'Плейлист создан.'; + + @override + String get noAlbum => 'Нет Альбома'; + + @override + String get noItem => 'Нет Элементов'; + + @override + String get noArtist => 'Нет Исполнителя'; + + @override + String get unknownArtist => 'Неизвестный Исполнитель'; + + @override + String get streaming => 'СТРИМИНГ'; + + @override + String get downloaded => 'ЗАГРУЖЕНО'; + + @override + String get transcode => 'ТРАНСКОДИРОВАНО'; + + @override + String get direct => 'ПРЯМОЙ'; + + @override + String get statusError => 'ОШИБКА СТАТУСА'; + + @override + String get queue => 'Очередь'; + + @override + String get addToQueue => 'Добавить в Очередь'; + + @override + String get playNext => 'Воспроизвести Следующей'; + + @override + String get replaceQueue => 'Заменить Очередь'; + + @override + String get instantMix => 'Мгновенный Микс'; + + @override + String get goToAlbum => 'Перейти к Альбому'; + + @override + String get removeFavourite => 'Удалить из Избранного'; + + @override + String get addFavourite => 'Добавить в Избранное'; + + @override + String get addedToQueue => 'Добавлено в очередь.'; + + @override + String get insertedIntoQueue => 'Вставлено в очередь.'; + + @override + String get queueReplaced => 'Очередь заменена.'; + + @override + String get removedFromPlaylist => 'Удалено из плейлиста.'; + + @override + String get startingInstantMix => 'Запуск мгновенного микса.'; + + @override + String get anErrorHasOccured => 'Произошла ошибка.'; + + @override + String responseError(String error, int statusCode) { + return '$error Код состояния $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Код состояния $statusCode. Возможно, вы использовали неверное имя пользователя/пароль или ваш клиент больше не авторизован.'; + } + + @override + String get removeFromMix => 'Удалить из Микса'; + + @override + String get addToMix => 'Добавить в Микс'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Повторно загружено $count элементов', + few: 'Повторно загружены $count элемента', + one: 'Повторно загружен $count элемент', + zero: 'Не требуется повторная загрузка.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Длительность буферизации'; + + @override + String get bufferDurationSubtitle => + 'Размер буфера плеера (в секундах). Требуется перезапуск.'; + + @override + String get language => 'Язык'; + + @override + String get confirm => 'Подтвердить'; + + @override + String get showUncensoredLogMessage => + 'Этот лог содержит ваши данные для входа. Показать?'; + + @override + String get resetTabs => 'Сбросить вкладки'; + + @override + String get noMusicLibrariesTitle => 'Нет музыкальных библиотек'; + + @override + String get noMusicLibrariesBody => + 'Finamp не обнаружил музыкальных библиотек. Убедитесь, что на вашем сервере Jellyfin есть хотя бы одна библиотека с типом контента \"Музыка\".'; + + @override + String get refresh => 'ОБНОВИТЬ'; + + @override + String get swipeInsertQueueNext => 'Воспроизвести смахнутую песню следующей'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Разрешить вставлять песню следующей в очереди при свайпе в списке песен, а не добавлять ее в конец.'; + + @override + String get redesignBeta => 'Новый дизайн (бета)'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_sv.dart b/lib/l10n/app_localizations_sv.dart new file mode 100644 index 0000000..e085e69 --- /dev/null +++ b/lib/l10n/app_localizations_sv.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Swedish (`sv`). +class AppLocalizationsSv extends AppLocalizations { + AppLocalizationsSv([String locale = 'sv']) : super(locale); + + @override + String startupError(String error) { + return 'Någonting gick fel under uppstart. Felet var: $error\n\nSkapa gärna ett ärende på github.com/UnicornsOnLSD/finamp med en skärmdump av denna sida. Om problemet fortsätter kan du rensa appdatan för att återställa appen.'; + } + + @override + String get serverUrl => 'Länk Till Servern'; + + @override + String get internalExternalIpExplanation => + 'Om du vill ha åtkomst till din Jellyfin-server utanför hemmet, behöver du använda din externa IP-adress.\n\nOm din server är bakom en HTTP-port (80/443) så behöver du inte manuellt specificera en port. Detta är troligtvis fallet om din server finns bakom en omvänd proxy.'; + + @override + String get emptyServerUrl => 'Länken till servern får inte vara blank'; + + @override + String get urlStartWithHttps => + 'URL:en måste börja med antingen http:// eller https://'; + + @override + String get urlTrailingSlash => + 'URL:en får inte innehålla ett avslutande snedstreck'; + + @override + String get username => 'Användarnamn'; + + @override + String get password => 'Lösenord'; + + @override + String get logs => 'Loggar'; + + @override + String get next => 'Nästa'; + + @override + String get selectMusicLibraries => 'Välj Musikbibliotek'; + + @override + String get couldNotFindLibraries => 'Kunde inte hitta några bibliotek.'; + + @override + String get unknownName => 'Okänt Namn'; + + @override + String get songs => 'Låtar'; + + @override + String get albums => 'Album'; + + @override + String get artists => 'Artister'; + + @override + String get genres => 'Genrer'; + + @override + String get playlists => 'Spellistor'; + + @override + String get startMix => 'Starta Mix'; + + @override + String get startMixNoSongsArtist => + 'Tryck länge på en artist för att lägga till eller ta bort den från mix-byggaren innan du startar en mix'; + + @override + String get startMixNoSongsAlbum => + 'Tryck länge på ett album för att lägga till eller ta bort det från mix-byggaren innan du startar en mix'; + + @override + String get music => 'Musik'; + + @override + String get clear => 'Rensa'; + + @override + String get favourites => 'Favoriter'; + + @override + String get shuffleAll => 'Shuffle (alla)'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Nedladdningar'; + + @override + String get settings => 'Inställningar'; + + @override + String get offlineMode => 'Offlineläge'; + + @override + String get sortOrder => 'Sorteringsordning'; + + @override + String get sortBy => 'Sortera efter'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Albumartist'; + + @override + String get artist => 'Artist'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Allmänhetens Betyg'; + + @override + String get criticRating => 'Kritikerbetyg'; + + @override + String get dateAdded => 'Datum Tillagd'; + + @override + String get datePlayed => 'Datum Uppspelad'; + + @override + String get playCount => 'Antal Uppspelningar'; + + @override + String get premiereDate => 'Premiärdatum'; + + @override + String get productionYear => 'Produktionsår'; + + @override + String get name => 'Namn'; + + @override + String get random => 'Slumpmässig'; + + @override + String get revenue => 'Intäkter'; + + @override + String get runtime => 'Längd'; + + @override + String get syncDownloadedPlaylists => 'Synkronisera nedladdade spellistor'; + + @override + String get downloadMissingImages => 'Hämta saknade bilder'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Laddade ner $count saknade bilder', + one: 'Laddade ner $count saknad bild', + zero: 'Inga saknade bilder hittades', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Nedladdningsfel'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count nedladdningar', + one: '$count nedladdning', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count objekt', + one: '$count objekt', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count bilder', + one: '$count bild', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count färdiga'; + } + + @override + String dlFailed(int count) { + return '$count misslyckade'; + } + + @override + String dlEnqueued(int count) { + return '$count i kö'; + } + + @override + String dlRunning(int count) { + return '$count pågående'; + } + + @override + String get downloadErrorsTitle => 'Nedladdningsfel'; + + @override + String get noErrors => 'Inga fel!'; + + @override + String get errorScreenError => + 'Ett fel uppstod när listan över fel skulle hämtas! Vid det här laget bör du förmodligen bara skapa ett problem på GitHub och ta bort appdata'; + + @override + String get failedToGetSongFromDownloadId => + 'Kunde inte hämta låt med hjälp av nedladdnings-ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Är du säker på att du vill ta bort $_temp0 \'$itemName\' från den här enheten?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Ta bort'; + + @override + String get deleteDownloadsAbortButtonText => 'Avbryt'; + + @override + String get error => 'Fel'; + + @override + String discNumber(int number) { + return 'Skiva $number'; + } + + @override + String get playButtonLabel => 'SPELA UPP'; + + @override + String get shuffleButtonLabel => 'SHUFFLE'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Låtar', + one: '$count Låt', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Ändra namn på spellista'; + + @override + String get editPlaylistNameTitle => 'Ändra Namn På Spellista'; + + @override + String get required => 'Obligatoriskt'; + + @override + String get updateButtonLabel => 'UPPDATERA'; + + @override + String get playlistNameUpdated => 'Spellistans namn är ändrat.'; + + @override + String get favourite => 'Lägg till som favorit'; + + @override + String get downloadsDeleted => 'Nedladdningar raderade.'; + + @override + String get addDownloads => 'Lägg Till Nedladdningar'; + + @override + String get location => 'Plats'; + + @override + String get downloadsAdded => 'Nedladdningar tillagda.'; + + @override + String get addButtonLabel => 'LÄGG TILL'; + + @override + String get shareLogs => 'Dela loggar'; + + @override + String get logsCopied => 'Loggar kopierade.'; + + @override + String get message => 'Meddelande'; + + @override + String get stackTrace => 'Stackspår'; + + @override + String get applicationLegalese => + 'Licensierad med Mozilla Public License 2.0. Källkoden finns att se på:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Omkodning'; + + @override + String get downloadLocations => 'Platser För Nedladdningar'; + + @override + String get audioService => 'Ljudtjänst'; + + @override + String get interactions => 'Interaktioner'; + + @override + String get layoutAndTheme => 'Layout & Tema'; + + @override + String get notAvailableInOfflineMode => 'Inte tillgänglig i offlineläge'; + + @override + String get logOut => 'Logga Ut'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Nedladdade låtar kommer inte att raderas'; + + @override + String get areYouSure => 'Är du säker?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin använder AAC för omkodning'; + + @override + String get enableTranscoding => 'Aktivera Omkodning'; + + @override + String get enableTranscodingSubtitle => 'Koda om musikströmmar på servern.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Högre bitrate (överföringshastighet) resulterar i högre kvalitet men förbrukar också mer data.'; + + @override + String get customLocation => 'Anpassad Plats'; + + @override + String get appDirectory => 'Filmapp för Appen'; + + @override + String get addDownloadLocation => 'Lägg Till Nedladdningsplats'; + + @override + String get selectDirectory => 'Välj Filmapp'; + + @override + String get unknownError => 'Okänt Fel'; + + @override + String get pathReturnSlashErrorMessage => + 'Sökvägar som returnerar ett \"/\" kan inte användas'; + + @override + String get directoryMustBeEmpty => 'Filmappen måste vara tom'; + + @override + String get customLocationsBuggy => + 'Det finns en hel del buggar relaterade till anpassade platser just nu på grund av krångel med användarbehörigheter. Jag försöker lista ut hur det bäst ska lösas, men i nuläget rekommenderar jag att inte använda dem.'; + + @override + String get enterLowPriorityStateOnPause => + 'Gå in i lågprioritetstillstånd vid paus'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Låter aviseringen svepas bort när den är pausad. Tillåter även Android att döda tjänsten när den är pausad.'; + + @override + String get shuffleAllSongCount => 'Blanda alla låtar'; + + @override + String get shuffleAllSongCountSubtitle => + 'Antal låtar att ladda vid användning av shuffle-knappen.'; + + @override + String get viewType => 'Visningstyp'; + + @override + String get viewTypeSubtitle => 'Visningstyp för musikskärmen'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Rutnät'; + + @override + String get portrait => 'Stående läge'; + + @override + String get landscape => 'Liggande läge'; + + @override + String gridCrossAxisCount(String value) { + return '$value Antal rutnätskorsaxel'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Antal rutnäts-rutor per rad i $value.'; + } + + @override + String get showTextOnGridView => 'Visa text i rutnätsvy'; + + @override + String get showTextOnGridViewSubtitle => + 'Huruvida text (titel, artist etc.) ska visas på rutnäts-musikskärmen.'; + + @override + String get showCoverAsPlayerBackground => + 'Visa suddigt omslag som spelarbakgrund'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Om du vill använda suddig omslagsbild som bakgrund på spelarskärmen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Dölj låtartister om samma som albumartister'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Om låtartister ska visas på albumskärmen om de inte skiljer sig från albumartister.'; + + @override + String get disableGesture => 'Inaktivera gester'; + + @override + String get disableGestureSubtitle => 'Huruvida man ska inaktivera gester.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'System'; + + @override + String get light => 'Ljust'; + + @override + String get dark => 'Mörkt'; + + @override + String get tabs => 'Flikar'; + + @override + String get cancelSleepTimer => 'Avbryt Sovtimer?'; + + @override + String get yesButtonLabel => 'JA'; + + @override + String get noButtonLabel => 'NEJ'; + + @override + String get setSleepTimer => 'Ställ In Sovtimer'; + + @override + String get minutes => 'Minuter'; + + @override + String get invalidNumber => 'Ogiltigt Nummer'; + + @override + String get sleepTimerTooltip => 'Sovtimer'; + + @override + String get addToPlaylistTooltip => 'Lägg till i spellista'; + + @override + String get addToPlaylistTitle => 'Lägg till i Spellista'; + + @override + String get removeFromPlaylistTooltip => 'Ta bort från spellista'; + + @override + String get removeFromPlaylistTitle => 'Ta bort från spellista'; + + @override + String get newPlaylist => 'Ny Spellista'; + + @override + String get createButtonLabel => 'SKAPA'; + + @override + String get playlistCreated => 'Spellista skapad.'; + + @override + String get noAlbum => 'Inget Album'; + + @override + String get noItem => 'Inget objekt'; + + @override + String get noArtist => 'Ingen Artist'; + + @override + String get unknownArtist => 'Okänd Artist'; + + @override + String get streaming => 'STRÖMNING'; + + @override + String get downloaded => 'NEDLADDAD'; + + @override + String get transcode => 'OMKODA'; + + @override + String get direct => 'DIREKT'; + + @override + String get statusError => 'STATUSFEL'; + + @override + String get queue => 'Kö'; + + @override + String get addToQueue => 'Lägg till i Uppspelningskö'; + + @override + String get playNext => 'Spela Nästa'; + + @override + String get replaceQueue => 'Ersätt Uppspelningskö'; + + @override + String get instantMix => 'Snabbmix'; + + @override + String get goToAlbum => 'Gå till Album'; + + @override + String get removeFavourite => 'Ta Bort Favorit'; + + @override + String get addFavourite => 'Lägg Till Favorit'; + + @override + String get addedToQueue => 'Tillagd i uppspelningskön.'; + + @override + String get insertedIntoQueue => 'Insatt i kön.'; + + @override + String get queueReplaced => 'Uppspelningskö ändrad.'; + + @override + String get removedFromPlaylist => 'Borttagen från spellista.'; + + @override + String get startingInstantMix => 'Startar snabbmix.'; + + @override + String get anErrorHasOccured => 'Ett fel har inträffat.'; + + @override + String responseError(String error, int statusCode) { + return '$error Statuskod $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Statuskod $statusCode. Detta betyder troligtvis att du använt fel användarnamn/lösenord, eller att din klientapplikation inte längre är autentiserad.'; + } + + @override + String get removeFromMix => 'Ta bort från blandning'; + + @override + String get addToMix => 'Lägg till i mixen'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Nedladdat igen$count items', + one: 'Nedladdat igen $count item', + zero: 'Inga omnedladdningar behövs..', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffertlängd'; + + @override + String get bufferDurationSubtitle => + 'Hur mycket spelaren ska buffra, i sekunder. Kräver omstart.'; + + @override + String get language => 'Språk'; + + @override + String get confirm => 'Bekräfta'; + + @override + String get showUncensoredLogMessage => + 'Denna logg innehåller din inloggningsinformation. Visa?'; + + @override + String get resetTabs => 'Återställ flikar'; + + @override + String get noMusicLibrariesTitle => 'Inga musikbibliotek'; + + @override + String get noMusicLibrariesBody => + 'Finamp kunde inte hitta några musikbibliotek. Se till att din Jellyfin-server innehåller minst ett bibliotek med innehållstypen inställd på \"Musik\".'; + + @override + String get refresh => 'UPPDATERA'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_sw.dart b/lib/l10n/app_localizations_sw.dart new file mode 100644 index 0000000..78de24d --- /dev/null +++ b/lib/l10n/app_localizations_sw.dart @@ -0,0 +1,735 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Swahili (`sw`). +class AppLocalizationsSw extends AppLocalizations { + AppLocalizationsSw([String locale = 'sw']) : super(locale); + + @override + String startupError(String error) { + return 'Something went wrong during app startup. The error was: $error\n\nPlease create an issue on github.com/UnicornsOnLSD/finamp with a screenshot of this page. If this problem persists you can clear your app data to reset the app.'; + } + + @override + String get serverUrl => 'Server URL'; + + @override + String get internalExternalIpExplanation => + 'If you want to be able to access your Jellyfin server remotely, you need to use your external IP.\n\nIf your server is on a HTTP port (80/443), you don\'t have to specify a port. This will likely be the case if your server is behind a reverse proxy.'; + + @override + String get emptyServerUrl => 'Server URL cannot be empty'; + + @override + String get urlStartWithHttps => 'URL must start with http:// or https://'; + + @override + String get urlTrailingSlash => 'URL must not include a trailing slash'; + + @override + String get username => 'Username'; + + @override + String get password => 'Password'; + + @override + String get logs => 'Logs'; + + @override + String get next => 'Next'; + + @override + String get selectMusicLibraries => 'Select Music Libraries'; + + @override + String get couldNotFindLibraries => 'Could not find any libraries.'; + + @override + String get unknownName => 'Unknown Name'; + + @override + String get songs => 'Songs'; + + @override + String get albums => 'Albums'; + + @override + String get artists => 'Artists'; + + @override + String get genres => 'Genres'; + + @override + String get playlists => 'Playlists'; + + @override + String get startMix => 'Start Mix'; + + @override + String get startMixNoSongsArtist => + 'Long-press an artist to add or remove it from the mix builder before starting a mix'; + + @override + String get startMixNoSongsAlbum => + 'Long-press an album to add or remove it from the mix builder before starting a mix'; + + @override + String get music => 'Music'; + + @override + String get clear => 'Clear'; + + @override + String get favourites => 'Favourites'; + + @override + String get shuffleAll => 'Shuffle all'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Downloads'; + + @override + String get settings => 'Settings'; + + @override + String get offlineMode => 'Offline Mode'; + + @override + String get sortOrder => 'Sort order'; + + @override + String get sortBy => 'Sort by'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Album Artist'; + + @override + String get artist => 'Artist'; + + @override + String get budget => 'Budget'; + + @override + String get communityRating => 'Community Rating'; + + @override + String get criticRating => 'Critic Rating'; + + @override + String get dateAdded => 'Date Added'; + + @override + String get datePlayed => 'Date Played'; + + @override + String get playCount => 'Play Count'; + + @override + String get premiereDate => 'Premiere Date'; + + @override + String get productionYear => 'Production Year'; + + @override + String get name => 'Name'; + + @override + String get random => 'Random'; + + @override + String get revenue => 'Revenue'; + + @override + String get runtime => 'Runtime'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Download missing images'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Downloaded $count missing images', + one: 'Downloaded $count missing image', + zero: 'No missing images found', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Download errors'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count downloads', + one: '$count download', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count items', + one: '$count item', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count images', + one: '$count image', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count complete'; + } + + @override + String dlFailed(int count) { + return '$count failed'; + } + + @override + String dlEnqueued(int count) { + return '$count enqueued'; + } + + @override + String dlRunning(int count) { + return '$count running'; + } + + @override + String get downloadErrorsTitle => 'Download Errors'; + + @override + String get noErrors => 'No errors!'; + + @override + String get errorScreenError => + 'An error occurred while getting the list of errors! At this point, you should probably just create an issue on GitHub and delete app data'; + + @override + String get failedToGetSongFromDownloadId => + 'Failed to get song from download ID'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Error'; + + @override + String discNumber(int number) { + return 'Disc $number'; + } + + @override + String get playButtonLabel => 'PLAY'; + + @override + String get shuffleButtonLabel => 'SHUFFLE'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Songs', + one: '$count Song', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Edit playlist name'; + + @override + String get editPlaylistNameTitle => 'Edit Playlist Name'; + + @override + String get required => 'Required'; + + @override + String get updateButtonLabel => 'UPDATE'; + + @override + String get playlistNameUpdated => 'Playlist name updated.'; + + @override + String get favourite => 'Favourite'; + + @override + String get downloadsDeleted => 'Downloads deleted.'; + + @override + String get addDownloads => 'Add Downloads'; + + @override + String get location => 'Location'; + + @override + String get downloadsAdded => 'Downloads added.'; + + @override + String get addButtonLabel => 'ADD'; + + @override + String get shareLogs => 'Share logs'; + + @override + String get logsCopied => 'Logs copied.'; + + @override + String get message => 'Message'; + + @override + String get stackTrace => 'Stack Trace'; + + @override + String get applicationLegalese => + 'Licensed with the Mozilla Public License 2.0. Source code available at:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transcoding'; + + @override + String get downloadLocations => 'Download Locations'; + + @override + String get audioService => 'Audio Service'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Layout & Theme'; + + @override + String get notAvailableInOfflineMode => 'Not available in offline mode'; + + @override + String get logOut => 'Log Out'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Downloaded songs will not be deleted'; + + @override + String get areYouSure => 'Are you sure?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin uses AAC for transcoding'; + + @override + String get enableTranscoding => 'Enable Transcoding'; + + @override + String get enableTranscodingSubtitle => + 'Transcodes music streams on the server side.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'A higher bitrate gives higher quality audio at the cost of higher bandwidth.'; + + @override + String get customLocation => 'Custom Location'; + + @override + String get appDirectory => 'App Directory'; + + @override + String get addDownloadLocation => 'Add Download Location'; + + @override + String get selectDirectory => 'Select Directory'; + + @override + String get unknownError => 'Unknown Error'; + + @override + String get pathReturnSlashErrorMessage => + 'Paths that return \"/\" can\'t be used'; + + @override + String get directoryMustBeEmpty => 'Directory must be empty'; + + @override + String get customLocationsBuggy => + 'Custom locations are extremely buggy due to issues with permissions. I\'m thinking of ways to fix this, but for now I wouldn\'t recommend using them.'; + + @override + String get enterLowPriorityStateOnPause => + 'Enter Low-Priority State on Pause'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Lets the notification be swiped away when paused. Also allows Android to kill the service when paused.'; + + @override + String get shuffleAllSongCount => 'Shuffle All Song Count'; + + @override + String get shuffleAllSongCountSubtitle => + 'Amount of songs to load when using the shuffle all songs button.'; + + @override + String get viewType => 'View Type'; + + @override + String get viewTypeSubtitle => 'View type for the music screen'; + + @override + String get list => 'List'; + + @override + String get grid => 'Grid'; + + @override + String get portrait => 'Portrait'; + + @override + String get landscape => 'Landscape'; + + @override + String gridCrossAxisCount(String value) { + return '$value Grid Cross-Axis Count'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Amount of grid tiles to use per-row when $value.'; + } + + @override + String get showTextOnGridView => 'Show text in grid view'; + + @override + String get showTextOnGridViewSubtitle => + 'Whether or not to show the text (title, artist etc) on the grid music screen.'; + + @override + String get showCoverAsPlayerBackground => + 'Show blurred cover as player background'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Whether or not to use blurred cover art as background on player screen.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Hide song artists if same as album artists'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Whether to show song artists on the album screen if not differing from album artists.'; + + @override + String get disableGesture => 'Disable gestures'; + + @override + String get disableGestureSubtitle => 'Whether to disables gestures.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Theme'; + + @override + String get system => 'System'; + + @override + String get light => 'Light'; + + @override + String get dark => 'Dark'; + + @override + String get tabs => 'Tabs'; + + @override + String get cancelSleepTimer => 'Cancel Sleep Timer?'; + + @override + String get yesButtonLabel => 'YES'; + + @override + String get noButtonLabel => 'NO'; + + @override + String get setSleepTimer => 'Set Sleep Timer'; + + @override + String get minutes => 'Minutes'; + + @override + String get invalidNumber => 'Invalid Number'; + + @override + String get sleepTimerTooltip => 'Sleep timer'; + + @override + String get addToPlaylistTooltip => 'Add to playlist'; + + @override + String get addToPlaylistTitle => 'Add to Playlist'; + + @override + String get removeFromPlaylistTooltip => 'Remove from playlist'; + + @override + String get removeFromPlaylistTitle => 'Remove from Playlist'; + + @override + String get newPlaylist => 'New Playlist'; + + @override + String get createButtonLabel => 'CREATE'; + + @override + String get playlistCreated => 'Playlist created.'; + + @override + String get noAlbum => 'No Album'; + + @override + String get noItem => 'No Item'; + + @override + String get noArtist => 'No Artist'; + + @override + String get unknownArtist => 'Unknown Artist'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'DOWNLOADED'; + + @override + String get transcode => 'TRANSCODE'; + + @override + String get direct => 'DIRECT'; + + @override + String get statusError => 'STATUS ERROR'; + + @override + String get queue => 'Queue'; + + @override + String get addToQueue => 'Add to Queue'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Replace Queue'; + + @override + String get instantMix => 'Instant Mix'; + + @override + String get goToAlbum => 'Go to Album'; + + @override + String get removeFavourite => 'Remove Favourite'; + + @override + String get addFavourite => 'Add Favourite'; + + @override + String get addedToQueue => 'Added to queue.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Queue replaced.'; + + @override + String get removedFromPlaylist => 'Removed from playlist.'; + + @override + String get startingInstantMix => 'Starting instant mix.'; + + @override + String get anErrorHasOccured => 'An error has occured.'; + + @override + String responseError(String error, int statusCode) { + return '$error Status code $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Status code $statusCode. This probably means you used the wrong username/password, or your client is no longer logged in.'; + } + + @override + String get removeFromMix => 'Remove From Mix'; + + @override + String get addToMix => 'Add To Mix'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redownloaded $count items', + one: 'Redownloaded $count item', + zero: 'No redownloads needed.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer Duration'; + + @override + String get bufferDurationSubtitle => + 'How much the player should buffer, in seconds. Requires a restart.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_szl.dart b/lib/l10n/app_localizations_szl.dart new file mode 100644 index 0000000..347d8cd --- /dev/null +++ b/lib/l10n/app_localizations_szl.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Silesian (`szl`). +class AppLocalizationsSzl extends AppLocalizations { + AppLocalizationsSzl([String locale = 'szl']) : super(locale); + + @override + String startupError(String error) { + return 'Coś poszło źle przi ôtwiyraniu aplikacyje. Feler to: $error\n\nZgłoś to na github.com/UnicornsOnLSD/finamp ze zopisym ekranu tyj strōny. Jeźli ta strōna niy przestowo sie pokazować, to wymaż dane aplikacyje, żeby ja zresetować.'; + } + + @override + String get serverUrl => 'Adresa URL ôd serwera'; + + @override + String get internalExternalIpExplanation => + 'Jeźli chcesz mieć zdalny przistymp do swojigo serwera Jellyfin, to potrzebujesz zewnyntrznego IP..\n\nJeźli twōj serwer je na porcie HTTP (80/443), to niy musisz podować portu. Tak nojczyńścij je, jak serwer je za reverse proxy.'; + + @override + String get emptyServerUrl => 'Adresa URL ôd serwera niy może być prōzno'; + + @override + String get urlStartWithHttps => + 'URL musi sie zaczynać ôd http:// abo https://'; + + @override + String get urlTrailingSlash => 'URL niy może sie kōńczyć znakym „/”'; + + @override + String get username => 'Miano ôd używocza'; + + @override + String get password => 'Hasło'; + + @override + String get logs => 'Logi'; + + @override + String get next => 'Dalij'; + + @override + String get selectMusicLibraries => 'Wybier bibliotyki ze muzykōm'; + + @override + String get couldNotFindLibraries => 'Niy szło znojś żodnych bibliotyk.'; + + @override + String get unknownName => 'Niyznōme miano'; + + @override + String get songs => 'Śpiywki'; + + @override + String get albums => 'Albumy'; + + @override + String get artists => 'Artyścio'; + + @override + String get genres => 'Gatōnki'; + + @override + String get playlists => 'Playlisty'; + + @override + String get startMix => 'Zacznij mix'; + + @override + String get startMixNoSongsArtist => + 'Prziciś dugo na artysty, żeby go dodać abo wymazać ze budowanio miksu, podwiela go puścisz'; + + @override + String get startMixNoSongsAlbum => + 'Prziciś dugo na album, żeby go dodać abo wymazać ze budowanio miksu, podwiela go puścisz'; + + @override + String get music => 'Muzyka'; + + @override + String get clear => 'Wysnoż'; + + @override + String get favourites => 'Ôblubiōne'; + + @override + String get shuffleAll => 'Miyszej wszysko'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Pobrane'; + + @override + String get settings => 'Sztalōnki'; + + @override + String get offlineMode => 'Tryb offline'; + + @override + String get sortOrder => 'Porzōndek zortowanio'; + + @override + String get sortBy => 'Zortuj podug'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Artysta albumu'; + + @override + String get artist => 'Artysta'; + + @override + String get budget => 'Budżet'; + + @override + String get communityRating => 'Ôcyna ôd społeczności'; + + @override + String get criticRating => 'Ôcyna ôd krytykōw'; + + @override + String get dateAdded => 'Data dodanio'; + + @override + String get datePlayed => 'Datōm granio'; + + @override + String get playCount => 'Liczba grań'; + + @override + String get premiereDate => 'Datōm prymiery'; + + @override + String get productionYear => 'Rok produkcyje'; + + @override + String get name => 'Nazwa'; + + @override + String get random => 'Lōsowo'; + + @override + String get revenue => 'Dochōd'; + + @override + String get runtime => 'Czas twanio'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Pobier ôbrazy, co brakujōm'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Liczba pobranych ôbrazōw, co brakujōm: $count', + one: 'Pobrany $count ôbroz, co brakuje', + zero: 'Niy brakuje żodnych ôbrazōw', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Felery pobiyranio'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count pobrań', + one: '$count pobranie', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count elymyntōw', + one: '$count elymynt', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count ôbrazōw', + one: '$count ôbroz', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count podarzōne'; + } + + @override + String dlFailed(int count) { + return '$count niypodarzōne'; + } + + @override + String dlEnqueued(int count) { + return '$count we raji'; + } + + @override + String dlRunning(int count) { + return '$count two'; + } + + @override + String get downloadErrorsTitle => 'Felery pobiyranio'; + + @override + String get noErrors => 'Bez felerōw!'; + + @override + String get errorScreenError => + 'Doszło do feleru przi pobiyraniu wykazu felerōw! We takim przipodku chyba nojlepij to zgłosić na GitHubie i skasować dane ôd aplikacyje'; + + @override + String get failedToGetSongFromDownloadId => + 'Niy szło znojś śpiywki ze ID pobiyranio'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Feler'; + + @override + String discNumber(int number) { + return 'Dysk $number'; + } + + @override + String get playButtonLabel => 'GREJ'; + + @override + String get shuffleButtonLabel => 'LŌSOWO'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count śpiywek', + one: '$count śpiywka', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Edytowanie miana ôd playlisty'; + + @override + String get editPlaylistNameTitle => 'Edycyjo miana ôd playlisty'; + + @override + String get required => 'Wymogane'; + + @override + String get updateButtonLabel => 'SPAMIYNTEJ'; + + @override + String get playlistNameUpdated => 'Miano ôd playlisty spamiyntane.'; + + @override + String get favourite => 'Ôblubiōny'; + + @override + String get downloadsDeleted => 'Pobrane skasowane.'; + + @override + String get addDownloads => 'Dodej pobrane'; + + @override + String get location => 'Lokalizacyjo'; + + @override + String get downloadsAdded => 'Pobrane dodane.'; + + @override + String get addButtonLabel => 'DODEJ'; + + @override + String get shareLogs => 'Podziel sie logami'; + + @override + String get logsCopied => 'Logi skopiowane.'; + + @override + String get message => 'Wiadōmość'; + + @override + String get stackTrace => 'Ślod stōsa'; + + @override + String get applicationLegalese => + 'Na licyncyji Mozilla Public License 2.0. Zdrzōdłowy kod je przistympny na:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Transkodowanie'; + + @override + String get downloadLocations => 'Lokacyje pobiyranio'; + + @override + String get audioService => 'Usuga audio'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Ukłod i tymat'; + + @override + String get notAvailableInOfflineMode => 'Niyprzistympne we trybie offline'; + + @override + String get logOut => 'Ôdloguj'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Pobrane śpiywki niy bydōm wymazane'; + + @override + String get areYouSure => 'Na zicher?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin używo AAC do transkodowanio'; + + @override + String get enableTranscoding => 'Włōncz transkodowanie'; + + @override + String get enableTranscodingSubtitle => + 'Jeźli zaznaczōne, to strumiynie muzyki bydōm transkodowane na serwerze.'; + + @override + String get bitrate => 'Bitrate'; + + @override + String get bitrateSubtitle => + 'Wyższy bitrate dowo wyższo jakość audio kosztym srogszego transferu danych.'; + + @override + String get customLocation => 'Włosno lokacyjo'; + + @override + String get appDirectory => 'Katalog ôd aplikacyje'; + + @override + String get addDownloadLocation => 'Dodej lokacyjo pobiyranio'; + + @override + String get selectDirectory => 'Wybier katalog'; + + @override + String get unknownError => 'Niyznōmy feler'; + + @override + String get pathReturnSlashErrorMessage => + 'Ściyżek, co skazujōm „/”, niy idzie używać'; + + @override + String get directoryMustBeEmpty => 'Katalog musi być prōzny'; + + @override + String get customLocationsBuggy => + 'Ze włosnymi lokacyjami je moc problymōw skuli turbacyji ze uprawniyniami. Sōm rozwożane spōsoby sprawiynio tego, ale teroz jejich używanie niy ma rekōmyndowane.'; + + @override + String get enterLowPriorityStateOnPause => + 'Przi pauzie przejdź we stōn niskigo priorytetu'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Kej to je włōnczōne, to powiadōmiynie może być ôdpōnkniynte przi pauzie. Włōnczynie tego przizwolo tyż Androidowi zabic usuga przi pauzie.'; + + @override + String get shuffleAllSongCount => 'Liczba śpiywek przi miyszaniu wszyskich'; + + @override + String get shuffleAllSongCountSubtitle => + 'Liczba śpiywek do zaladowanio po użyciu knefla miyszanio wszyskich śpiywek.'; + + @override + String get viewType => 'Widok'; + + @override + String get viewTypeSubtitle => 'Widok panelu muzyki'; + + @override + String get list => 'Lista'; + + @override + String get grid => 'Krotka'; + + @override + String get portrait => 'Do blaju'; + + @override + String get landscape => 'Poziōmo'; + + @override + String gridCrossAxisCount(String value) { + return '$value – liczba elymyntōw we rzyńdzie krotki'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Liczba użytych kachelek we rzyńdzie krotki: $value.'; + } + + @override + String get showTextOnGridView => 'Pokazuj tekst we widoku krotki'; + + @override + String get showTextOnGridViewSubtitle => + 'Sztaluje, jeźli pokazować tekst (tytuł, artysta itd.) we panelu krotki elymyntōw.'; + + @override + String get showCoverAsPlayerBackground => + 'Pokazuj rozmazano ôkładzina za tło ôd przegrowacza'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Sztaluje, jeźli pokazować rozmazano ôkładzina za tło ôd przegrowacza.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Skryj artysty śpiywki, jeźli je taki sōm jak artysta albumu'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Sztaluje, jeźli kryć artysty śpiywki, jeźli je taki sōm jak artysta albumu.'; + + @override + String get disableGesture => 'Disable gestures'; + + @override + String get disableGestureSubtitle => 'Whether to disables gestures.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Tymat'; + + @override + String get system => 'Systymowy'; + + @override + String get light => 'Jasny'; + + @override + String get dark => 'Ciymny'; + + @override + String get tabs => 'Zokłodki'; + + @override + String get cancelSleepTimer => 'Ôdwołać ôdliczanie do zastawiynio?'; + + @override + String get yesButtonLabel => 'JA'; + + @override + String get noButtonLabel => 'NIY'; + + @override + String get setSleepTimer => 'Nasztaluj ôdliczanie do zastawiynio'; + + @override + String get minutes => 'Minutes'; + + @override + String get invalidNumber => 'Niynoleżno liczba'; + + @override + String get sleepTimerTooltip => 'Ôdliczanie do zastawiynio'; + + @override + String get addToPlaylistTooltip => 'Dodej do playlisty'; + + @override + String get addToPlaylistTitle => 'Dodej do playlisty'; + + @override + String get removeFromPlaylistTooltip => 'Remove from playlist'; + + @override + String get removeFromPlaylistTitle => 'Remove from Playlist'; + + @override + String get newPlaylist => 'Nowo playlista'; + + @override + String get createButtonLabel => 'STWŌRZ'; + + @override + String get playlistCreated => 'Playlista stworzōno.'; + + @override + String get noAlbum => 'Brak albumu'; + + @override + String get noItem => 'Brak elymyntu'; + + @override + String get noArtist => 'Brak artysty'; + + @override + String get unknownArtist => 'Niyznōmy artysta'; + + @override + String get streaming => 'STRUMIYNIOWANIE'; + + @override + String get downloaded => 'POBRANE'; + + @override + String get transcode => 'TRANSKODOWANIE'; + + @override + String get direct => 'BEZPOSTRZEDNIE'; + + @override + String get statusError => 'FELER STATUSU'; + + @override + String get queue => 'Raja'; + + @override + String get addToQueue => 'Dodej do raje'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Zastōmp raja'; + + @override + String get instantMix => 'Wartki mix'; + + @override + String get goToAlbum => 'Idź do albumu'; + + @override + String get removeFavourite => 'Wymaż ze ôblubiōnych'; + + @override + String get addFavourite => 'Dodej do ôblubiōnych'; + + @override + String get addedToQueue => 'Dodane do raje.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Raja zastōmpiōno.'; + + @override + String get removedFromPlaylist => 'Removed from playlist.'; + + @override + String get startingInstantMix => 'Zaczynanie wartkigo miksu.'; + + @override + String get anErrorHasOccured => 'Doszło do feleru.'; + + @override + String responseError(String error, int statusCode) { + return '$error Kod statusu $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Kod statusu $statusCode. To bezma ôznaczo, że było użyto niynoleżne miano ôd używocza abo hasło, abo tyż twōj kliynt już niy ma autoryzowany.'; + } + + @override + String get removeFromMix => 'Wymaż ze miksu'; + + @override + String get addToMix => 'Dodej do miksu'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Redownloaded $count items', + one: 'Redownloaded $count item', + zero: 'No redownloads needed.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Buffer Duration'; + + @override + String get bufferDurationSubtitle => + 'How much the player should buffer, in seconds. Requires a restart.'; + + @override + String get language => 'Language'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_th.dart b/lib/l10n/app_localizations_th.dart new file mode 100644 index 0000000..93aa74e --- /dev/null +++ b/lib/l10n/app_localizations_th.dart @@ -0,0 +1,735 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Thai (`th`). +class AppLocalizationsTh extends AppLocalizations { + AppLocalizationsTh([String locale = 'th']) : super(locale); + + @override + String startupError(String error) { + return 'พบข้อผิดพลาดขณะเริ่มต้นแอป ข้อผิดพลาด: $error\n\nโปรดสร้าง Issue บน github.com/UnicornsOnLSD/finamp พร้อมแนบภาพหน้าจอของหน้านี้ หากปัญหานี้ยังคงเป็นอยู่ให้ลองเคลียร์ข้อมูลของแอปเพื่อรีเซ็ต'; + } + + @override + String get serverUrl => 'URL ของเซิร์ฟเวอร์'; + + @override + String get internalExternalIpExplanation => + 'หากคุณต้องการเข้าถึงเซิร์ฟเวอร์ Jellyfin จากภายนอก คุณจำเป็นต้องมี IP ภายนอก\n\nหากเซิร์ฟเวอร์ของคุณรันบนพอร์ต HTTP (80/443) คุณไม่จำเป็นต้องระบุพอร์ต ในเคสนี้เซิร์ฟเวอร์ของคุณอาจจะอยู่หลัง Reverse Proxy'; + + @override + String get emptyServerUrl => 'จำเป็นต้องระบุ URL ของเซิร์ฟเวอร์'; + + @override + String get urlStartWithHttps => 'URL ต้องขึ้นต้นด้วย http:// หรือ https://'; + + @override + String get urlTrailingSlash => 'URL ต้องไม่มีเครื่องหมาย / ต่อหลัง'; + + @override + String get username => 'ชื่อผู้ใช้'; + + @override + String get password => 'รหัสผ่าน'; + + @override + String get logs => 'ล็อก'; + + @override + String get next => 'ถัดไป'; + + @override + String get selectMusicLibraries => 'เลือกคลังเพลง'; + + @override + String get couldNotFindLibraries => 'ไม่พบคลังใดๆ'; + + @override + String get unknownName => 'ไม่รู้จักชื่อ'; + + @override + String get songs => 'เพลง'; + + @override + String get albums => 'อัลบั้ม'; + + @override + String get artists => 'ศิลปิน'; + + @override + String get genres => 'แนวเพลง'; + + @override + String get playlists => 'เพลย์ลิสต์'; + + @override + String get startMix => 'เริ่มมิกซ์'; + + @override + String get startMixNoSongsArtist => + 'แตะค้างที่ศิลปินเพื่อเพิ่มหรือนำออกจากตัวสร้างมิกซ์ก่อนที่จะเริ่มมิกซ์'; + + @override + String get startMixNoSongsAlbum => + 'แตะค้างที่อัลบั้มเพื่อเพิ่มหรือนำออกจากตัวสร้างมิกซ์ก่อนที่จะเริ่มมิกซ์'; + + @override + String get music => 'เพลง'; + + @override + String get clear => 'เคลียร์'; + + @override + String get favourites => 'รายการโปรด'; + + @override + String get shuffleAll => 'สุ่มทั้งหมด'; + + @override + String get finamp => 'ฟินแอมป์'; + + @override + String get downloads => 'ดาวน์โหลด'; + + @override + String get settings => 'ตั้งค่า'; + + @override + String get offlineMode => 'โหมดออฟไลน์'; + + @override + String get sortOrder => 'เรียงลำดับ'; + + @override + String get sortBy => 'เรียงด้วย'; + + @override + String get album => 'อัลบั้ม'; + + @override + String get albumArtist => 'ศิลปินของอัลบั้ม'; + + @override + String get artist => 'ศิลปิน'; + + @override + String get budget => 'งบ'; + + @override + String get communityRating => 'เรตติ้งจากชุมชน'; + + @override + String get criticRating => 'เรตติ้งจาก Critic'; + + @override + String get dateAdded => 'วันที่เพิ่ม'; + + @override + String get datePlayed => 'วันที่เล่น'; + + @override + String get playCount => 'จำนวนครั้งที่เล่น'; + + @override + String get premiereDate => 'วันที่เปิดตัว'; + + @override + String get productionYear => 'ปีที่สร้าง'; + + @override + String get name => 'ชื่อ'; + + @override + String get random => 'สุ่ม'; + + @override + String get revenue => 'รายได้'; + + @override + String get runtime => 'เวลา'; + + @override + String get syncDownloadedPlaylists => 'ซิงก์เพลลิสต์ที่ดาวน์โหลดแล้ว'; + + @override + String get downloadMissingImages => 'ดาวน์โหลดไฟล์ภาพที่ขาด'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'ดาวน์โหลดภาพที่ขาดแล้ว $count รูป', + one: 'ดาวน์โหลดภาพที่ขาดแล้ว $count รูป', + zero: 'ไม่มีภาพที่ขาด', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'ข้อผิดพลาดการดาวน์โหลด'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'ดาวน์โหลดแล้ว $count', + one: 'ดาวน์โหลดแล้ว $count', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count รายการ', + one: '$count รายการ', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count รูป', + one: '$count รูป', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return 'เสร็จแล้ว $count'; + } + + @override + String dlFailed(int count) { + return 'ล้มเหลว $count'; + } + + @override + String dlEnqueued(int count) { + return 'เข้าคิว $count'; + } + + @override + String dlRunning(int count) { + return 'กำลังทำงาน $count'; + } + + @override + String get downloadErrorsTitle => 'ข้อผิดพลาดในการดาวน์โหลด'; + + @override + String get noErrors => 'ไม่มีข้อผิดพลาด!'; + + @override + String get errorScreenError => + 'พบข้อผิดพลาดในการดึงรายการข้อผิดพลาด! ถ้าถึงขั้นนี้แล้ว คุณน่าจะต้องไปสร้าง Issue บน Github แล้วลบข้อมูลแอปทิ้งซะ'; + + @override + String get failedToGetSongFromDownloadId => + 'ล้มเหลวในการเรียกข้อมูลเพลงจากไอดีสำหรับดาวน์โหลด'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'แน่ใจหรือไม่ว่าต้องการลบ $_temp0 \'$itemName\' จากเครื่องนี้?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'ลบ'; + + @override + String get deleteDownloadsAbortButtonText => 'ยกเลิก'; + + @override + String get error => 'ผิดพลาด'; + + @override + String discNumber(int number) { + return 'แผ่นที่ $number'; + } + + @override + String get playButtonLabel => 'เล่น'; + + @override + String get shuffleButtonLabel => 'สุ่ม'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count เพลง', + one: '$count เพลง', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'แก้ไขชื่อเพลย์ลิสต์'; + + @override + String get editPlaylistNameTitle => 'แก้ไขชื่อเพลย์ลิสต์'; + + @override + String get required => 'จำเป็น'; + + @override + String get updateButtonLabel => 'อัปเดต'; + + @override + String get playlistNameUpdated => 'อัปเดตชื่อเพลย์ลิสต์แล้ว'; + + @override + String get favourite => 'รายการโปรด'; + + @override + String get downloadsDeleted => 'ลบการดาวน์โหลดแล้ว'; + + @override + String get addDownloads => 'เพิ่มการดาวน์โหลด'; + + @override + String get location => 'สถานที่'; + + @override + String get downloadsAdded => 'เพิ่มการดาวน์โหลดแล้ว'; + + @override + String get addButtonLabel => 'เพิ่ม'; + + @override + String get shareLogs => 'แชร์ล็อก'; + + @override + String get logsCopied => 'คัดลอกล็อกแล้ว'; + + @override + String get message => 'ข้อความ'; + + @override + String get stackTrace => 'ตามรอย'; + + @override + String get applicationLegalese => + 'สงวนลิขสิทธิ์โดย Mozilla Public License 2.0 สามารถดาวน์โหลด Source Code ได้ที่:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'การแปลงไฟล์'; + + @override + String get downloadLocations => 'ตำแหน่งที่ดาวน์โหลด'; + + @override + String get audioService => 'บริการเสียง'; + + @override + String get interactions => 'การกระทำ'; + + @override + String get layoutAndTheme => 'หน้าตา และ ธีม'; + + @override + String get notAvailableInOfflineMode => 'ไม่พร้อมใช้งานในโหมดออฟไลน์'; + + @override + String get logOut => 'ออกจากระบบ'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'เพลงที่ดาวน์โหลดแล้วจะไม่ถูกลบ'; + + @override + String get areYouSure => 'แน่ใจหรือไม่?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin ใช้รหัส AAC สำหรับการแปลงไฟล์'; + + @override + String get enableTranscoding => 'เปิดใช้งานการแปลงไฟล์'; + + @override + String get enableTranscodingSubtitle => + 'การแปลงไฟล์เพลงจะถูกดำเนินการจากฝั่งเซิร์ฟเวอร์'; + + @override + String get bitrate => 'บิทเรต'; + + @override + String get bitrateSubtitle => + 'บิตเรตที่สูงขึ้นจะช่วยให้เสียงดีขึ้นแต่ก็แลกมาด้วยการใช้งานเน็ตเวิร์กที่มากขึ้น'; + + @override + String get customLocation => 'ตำแหน่งแบบเลือกเอง'; + + @override + String get appDirectory => 'โฟลเดอร์ของแอป'; + + @override + String get addDownloadLocation => 'เพิ่มตำแหน่งสำหรับดาวน์โหลด'; + + @override + String get selectDirectory => 'เลือกโฟลเดอร์'; + + @override + String get unknownError => 'ข้อผิดพลาดที่ไม่รู้จัก'; + + @override + String get pathReturnSlashErrorMessage => + 'ตำแหน่งที่ได้ \"/\" ไม่สามารถใช้ได้'; + + @override + String get directoryMustBeEmpty => 'โฟลเดอร์นั้นต้องว่าง'; + + @override + String get customLocationsBuggy => + 'ตำแหน่งแบบเลือกเองนั้นค่อนข้างไม่สเถียรเนื่องจากปัญหาด้านสิทธิ์ ตอนนี้ยังหาวิธีแก้เรื่องนี้อยู่ ทางที่ดีตอนนี้ไม่ค่อยแนะนำให้ใช้ฟีเจอร์นี้'; + + @override + String get enterLowPriorityStateOnPause => + 'เมื่อหยุดพักจะเข้าสู่โหมดความสำคัญต่ำ'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'ให้แถบแจ้งเตือนสามารถปัดทิ้งไปได้เมื่อหยุดชั่วคราว รวมถึงให้แอนดรอยสามารถปิดเซอร์วิสนี้ได้เมื่อหยุดชั่วคราว'; + + @override + String get shuffleAllSongCount => 'จำนวนครั้งที่สุ่มเพลงทั้งหมด'; + + @override + String get shuffleAllSongCountSubtitle => + 'จำนวนเพลงที่โหลดขึ้นมาเมื่อใช้ปุ่ม สุ่มทั้งหมด'; + + @override + String get viewType => 'ประเภทการแสดงผล'; + + @override + String get viewTypeSubtitle => 'ประเภทการแสดงผลของหน้าจอเพลง'; + + @override + String get list => 'รายการ'; + + @override + String get grid => 'ตาราง'; + + @override + String get portrait => 'แนวตั้ง'; + + @override + String get landscape => 'แนวนอน'; + + @override + String gridCrossAxisCount(String value) { + return 'จำนวนรายการใน $value'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'จำนวนของไอเท็มในตารางต่อแถวของ $value'; + } + + @override + String get showTextOnGridView => 'แสดงตัวอักษรในโหมดตาราง'; + + @override + String get showTextOnGridViewSubtitle => + 'แสดงหรือไม่แสดงข้อความ (ชื่อเพลง, ศิลปิน, อื่น ๆ) บนตารางแสดงเพลง'; + + @override + String get showCoverAsPlayerBackground => + 'แสดงภาพเบลอของปกเพลงเป็นภาพพื้นหลังของตัวเล่นเพลง'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'แสดงหรือไม่แสดงภาพเบลอของปกเพลงเป็นพื้นหลังของตัวเล่นเพลง'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'ซ่อนศิลปินของเพลงหากเป็นชื่อเดียวกับศิลปินของอัลบั้ม'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'แสดงหรือไม่แสดงชื่อศิลปินเพลงบนหน้าจออัลบั้มหากทั้งสองชื่อไม่ต่างกัน'; + + @override + String get disableGesture => 'ปิดการใช้งาน gestures'; + + @override + String get disableGestureSubtitle => 'ใช้หรือไม่ใช้งาน gestures'; + + @override + String get showFastScroller => 'แสดงตัวเลื่อนแบบเร็ว'; + + @override + String get theme => 'ธีม'; + + @override + String get system => 'ตามระบบ'; + + @override + String get light => 'สว่าง'; + + @override + String get dark => 'มืด'; + + @override + String get tabs => 'แท็บ'; + + @override + String get cancelSleepTimer => 'ยกเลิกการตั้งเวลาปิด?'; + + @override + String get yesButtonLabel => 'ใช่'; + + @override + String get noButtonLabel => 'ไม่ใช่'; + + @override + String get setSleepTimer => 'ตั้งเวลาปิด'; + + @override + String get minutes => 'นาที'; + + @override + String get invalidNumber => 'ตัวเลขไม่ถูกต้อง'; + + @override + String get sleepTimerTooltip => 'ตั้งเวลาปิด'; + + @override + String get addToPlaylistTooltip => 'เพิ่มไปยังเพลย์ลิสต์'; + + @override + String get addToPlaylistTitle => 'เพิ่มไปยังเพลย์ลิสต์'; + + @override + String get removeFromPlaylistTooltip => 'นำออกจากเพลย์ลิสต์'; + + @override + String get removeFromPlaylistTitle => 'นำออกจากเพลย์ลิสต์'; + + @override + String get newPlaylist => 'สร้างเพลย์ลิสต์ใหม่'; + + @override + String get createButtonLabel => 'สร้าง'; + + @override + String get playlistCreated => 'สร้างเพลย์ลิสต์แล้ว'; + + @override + String get noAlbum => 'ไม่มีอัลบั้ม'; + + @override + String get noItem => 'ไม่มีรายการ'; + + @override + String get noArtist => 'ไม่มีศิลปิน'; + + @override + String get unknownArtist => 'ศิลปินที่ไม่รู้จัก'; + + @override + String get streaming => 'กำลังสตรีม'; + + @override + String get downloaded => 'ดาวน์โหลดแล้ว'; + + @override + String get transcode => 'แปลงไฟล์'; + + @override + String get direct => 'โดยตรง'; + + @override + String get statusError => 'สถานะผิดพลาด'; + + @override + String get queue => 'คิว'; + + @override + String get addToQueue => 'เพิ่มไปยังคิว'; + + @override + String get playNext => 'เล่นถัดไป'; + + @override + String get replaceQueue => 'แทนที่คิว'; + + @override + String get instantMix => 'มิกซ์ทันที'; + + @override + String get goToAlbum => 'ไปยังอัลบั้ม'; + + @override + String get removeFavourite => 'นำออกจากรายการโปรด'; + + @override + String get addFavourite => 'เพิ่มไปยังรายการโปรด'; + + @override + String get addedToQueue => 'เพิ่มลงคิวแล้ว'; + + @override + String get insertedIntoQueue => 'แทรกไปยังคิว'; + + @override + String get queueReplaced => 'คิวถูกแทนที่แล้ว'; + + @override + String get removedFromPlaylist => 'นำออกจากเพลย์ลิสต์แล้ว'; + + @override + String get startingInstantMix => 'กำลังเริ่มมิกซ์ทันที'; + + @override + String get anErrorHasOccured => 'พบข้อผิดพลาด'; + + @override + String responseError(String error, int statusCode) { + return '$error รหัสข้อผิดพลาด $statusCode'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error รหัสข้อผิดพลาด $statusCode เป็นไปได้ว่าคุณอาจจะใช้ ชื่อผู้ใช้หรือรหัสผ่านที่ไม่ถูกต้อง หรือตัวโปรแกรมไม่ได้อยู่ในสถานะล็อกอินแล้ว'; + } + + @override + String get removeFromMix => 'นำออกจากมิกซ์'; + + @override + String get addToMix => 'เพิ่มไปยังมิกซ์'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'ดาวน์โหลดอีกครั้ง$count รายการ', + one: 'ดาวน์โหลดอีกครั้ง $count รายการ', + zero: 'ไม่จำเป็นต้องดาวน์โหลดใหม่', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'ระยะเวลาที่บัฟเฟอร์'; + + @override + String get bufferDurationSubtitle => + 'ตัวเล่นเพลงควรจะอ่านไฟล์ล่วงหน้าเท่าไร ระบุเป็นวินาที หากเปลี่ยนต้องรีสตาร์ท'; + + @override + String get language => 'ภาษา'; + + @override + String get confirm => 'ยืนยัน'; + + @override + String get showUncensoredLogMessage => + 'ล็อกนี้มีข้อมูลการล็อกอินของคุณอยู่ ต้องการให้แสดงใช่ไหม?'; + + @override + String get resetTabs => 'รีเซ็ตการตั้งค่าแท็ป'; + + @override + String get noMusicLibrariesTitle => 'ไม่มีคลังเพลง'; + + @override + String get noMusicLibrariesBody => + 'ฟินแอมป์ไม่พบคลังเพลงใดเลย โปรดตรวจสอบว่าเซิร์ฟเวอร์ของ Jellyfin นั้นมีอย่างน้อยหนึ่งคลังที่ตั้งประเภทของคอนเทนต์ไว้เป็น \"Music\"'; + + @override + String get refresh => 'รีเฟชร'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart new file mode 100644 index 0000000..caf20a9 --- /dev/null +++ b/lib/l10n/app_localizations_tr.dart @@ -0,0 +1,736 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Turkish (`tr`). +class AppLocalizationsTr extends AppLocalizations { + AppLocalizationsTr([String locale = 'tr']) : super(locale); + + @override + String startupError(String error) { + return 'Uygulama başlarken bir hata meydana geldi. Hata: $error\n\nLütfen bu sayfanın ekran görüntüsüyle github.com/UnicornsOnLSD/finamp adresinde bir issue oluşturun. Eğer bu sorun devam ederse uygulamayı sıfırlamak için uygulama verisini sıfırlayabilirsiniz.'; + } + + @override + String get serverUrl => 'Sunucunun URL\'i'; + + @override + String get internalExternalIpExplanation => + 'Jellyfin sunucunuza uzaktan erişmek istiyorsanız dış IP adresinizi kullanmalısınız.\n\nEğer sunucunuz HTTP portlarından (80/443) birindeyse port belirtmenize gerek yok. Sunucunuz bir reverse proxy\'nin arkasındaysa muhtemelen bu durum geçerlidir.'; + + @override + String get emptyServerUrl => 'Sunucu URL\'i boş bırakılamaz'; + + @override + String get urlStartWithHttps => 'URL http:// veya https:// ile başlamalı'; + + @override + String get urlTrailingSlash => 'URL\'in sonunda eğik çizgi olmamalı'; + + @override + String get username => 'Kullanıcı adı'; + + @override + String get password => 'Parola'; + + @override + String get logs => 'Uygulama dökümleri'; + + @override + String get next => 'Sıradaki'; + + @override + String get selectMusicLibraries => 'Müzik Kütüphanelerini Seç'; + + @override + String get couldNotFindLibraries => 'Hiçbir kütüphane bulunamadı.'; + + @override + String get unknownName => 'Bilinmeyen İsim'; + + @override + String get songs => 'Şarkılar'; + + @override + String get albums => 'Albümler'; + + @override + String get artists => 'Sanatçılar'; + + @override + String get genres => 'Tarzlar'; + + @override + String get playlists => 'Çalma listeleri'; + + @override + String get startMix => 'Mix\'i başlat'; + + @override + String get startMixNoSongsArtist => + 'Mix\'i başlatmadan önce bir sanatçıya uzun basarak mix\'e ekleyip çıkar'; + + @override + String get startMixNoSongsAlbum => + 'Mix\'i başlatmadan önce bir albüme uzun basarak mix\'e ekleyip çıkar'; + + @override + String get music => 'Müzik'; + + @override + String get clear => 'Temizle'; + + @override + String get favourites => 'Favoriler'; + + @override + String get shuffleAll => 'Tümünü karıştır'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'İndirilenler'; + + @override + String get settings => 'Ayarlar'; + + @override + String get offlineMode => 'Çevrim dışı Mod'; + + @override + String get sortOrder => 'Sıralama düzeni'; + + @override + String get sortBy => 'Sıralama ölçütü'; + + @override + String get album => 'Albüm'; + + @override + String get albumArtist => 'Albüm Sanatçısı'; + + @override + String get artist => 'Sanatçı'; + + @override + String get budget => 'Bütçe'; + + @override + String get communityRating => 'Topluluk Puanı'; + + @override + String get criticRating => 'Eleştirmen Puanı'; + + @override + String get dateAdded => 'Eklenme Tarihi'; + + @override + String get datePlayed => 'Oynatma Tarihi'; + + @override + String get playCount => 'Oynatma Sayısı'; + + @override + String get premiereDate => 'Gösterim Tarihi'; + + @override + String get productionYear => 'Prodüksiyon Yılı'; + + @override + String get name => 'İsim'; + + @override + String get random => 'Rastgele'; + + @override + String get revenue => 'Gelir'; + + @override + String get runtime => 'Çalma süresi'; + + @override + String get syncDownloadedPlaylists => 'İndirilen çalma listelerini eşzamanla'; + + @override + String get downloadMissingImages => 'Eksik görselleri indir'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tane eksik görsel indirildi', + one: '$count tane eksik görsel indirildi', + zero: 'Eksik görsel yok', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'İndirme hataları'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tane indirme$count', + one: '$count tane indirme', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count dosya', + one: '$count dosya', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tane görsel', + one: '$count tane görsel', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count tane tamamlandı'; + } + + @override + String dlFailed(int count) { + return '$count tane başarısız'; + } + + @override + String dlEnqueued(int count) { + return '$count tane kuyruğa alındı'; + } + + @override + String dlRunning(int count) { + return '$count tane devam ediyor'; + } + + @override + String get downloadErrorsTitle => 'İndirme Hataları'; + + @override + String get noErrors => 'Hata yok!'; + + @override + String get errorScreenError => + 'Hata listesi oluşturulurken hata meydana geldi. Bu noktada, GitHub\'da bir sorun oluşturmalı ve uygulama verilerini silmelisiniz'; + + @override + String get failedToGetSongFromDownloadId => + 'İndirme ID\'sinden şarkıya ulaşılamadı'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Bu aygıttan $_temp0 \'$itemName\' silmek istediğinizden emin misiniz?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Sil'; + + @override + String get deleteDownloadsAbortButtonText => 'İptal'; + + @override + String get error => 'Hata'; + + @override + String discNumber(int number) { + return 'Disk $number'; + } + + @override + String get playButtonLabel => 'OYNAT'; + + @override + String get shuffleButtonLabel => 'KARIŞTIR'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Şarkı', + one: '$count Şarkı', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Çalma listesinin adını düzenle'; + + @override + String get editPlaylistNameTitle => 'Çalma Listesinin Adını Düzenle'; + + @override + String get required => 'Gerekli'; + + @override + String get updateButtonLabel => 'GÜNCELLE'; + + @override + String get playlistNameUpdated => 'Çalma listesinin adı güncellendi.'; + + @override + String get favourite => 'Favori'; + + @override + String get downloadsDeleted => 'İndirmeler silindi.'; + + @override + String get addDownloads => 'İndirme Ekle'; + + @override + String get location => 'Lokasyon'; + + @override + String get downloadsAdded => 'İndirilenler eklendi.'; + + @override + String get addButtonLabel => 'EKLE'; + + @override + String get shareLogs => 'Uygulama dökümlerini paylaş'; + + @override + String get logsCopied => 'Uygulama dökümleri kopyalandı.'; + + @override + String get message => 'Mesaj'; + + @override + String get stackTrace => 'Fonksiyon Çağrı Yığını'; + + @override + String get applicationLegalese => + 'Mozilla Public License 2.0 ile lisanslandı. Kaynak koda buradan ulaşılabilir:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Yeniden kodlama (transcoding)'; + + @override + String get downloadLocations => 'İndirilenler Lokasyonları'; + + @override + String get audioService => 'Ses Servisi'; + + @override + String get interactions => 'Etkileşimler'; + + @override + String get layoutAndTheme => 'Düzen & Tema'; + + @override + String get notAvailableInOfflineMode => 'Çevrim dışı modda mevcut değil'; + + @override + String get logOut => 'Çıkış Yap'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'İndirilmiş şarkılar silinmeyecek'; + + @override + String get areYouSure => 'Emin misiniz?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin transcoding için AAC kullanıyor'; + + @override + String get enableTranscoding => 'Transcoding\'i aktifleştir'; + + @override + String get enableTranscodingSubtitle => + 'Sunucu tarafında müzik akışlarını yeniden kodlar.'; + + @override + String get bitrate => 'Bit oranı'; + + @override + String get bitrateSubtitle => + 'Daha yüksek bir bit oranı, daha fazla bant genişliği kullanır ancak daha kaliteli ses verir.'; + + @override + String get customLocation => 'Farklı Lokasyon'; + + @override + String get appDirectory => 'Uygulama Klasörü'; + + @override + String get addDownloadLocation => 'İndirme Lokasyonu Ekle'; + + @override + String get selectDirectory => 'Klasör Seç'; + + @override + String get unknownError => 'Bilinmeyen Hata'; + + @override + String get pathReturnSlashErrorMessage => + '\"/\" döndüren yollar kullanılamaz'; + + @override + String get directoryMustBeEmpty => 'Klasör boş olmalı'; + + @override + String get customLocationsBuggy => + 'İzinlerden kaynaklanan sorunlar dolayısıyla özel konum seçmek fazlasıyla bug\'a yol açmakta. Şimdilik kullanmanızı önermiyorum, çözmenin bir yolunu düşünüyorum.'; + + @override + String get enterLowPriorityStateOnPause => + 'Bekletmede Düşük Öncelik Durumuna Geç'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Şarkı duraklatıldığında bildirimin temizlenebilmesini sağlar. Ayrıca Android\'in hizmeti kapatmasına izin verir.'; + + @override + String get shuffleAllSongCount => 'Karıştırılacak Tüm Şarkıların Sayısı'; + + @override + String get shuffleAllSongCountSubtitle => + 'Tüm şarkıları karıştır butonuna tıklandığında karıştırılacak şarkıların sayısı.'; + + @override + String get viewType => 'Görüntüleme Tipi'; + + @override + String get viewTypeSubtitle => 'Müzik ekranı için görüntüleme tipi'; + + @override + String get list => 'Liste'; + + @override + String get grid => 'Izgara'; + + @override + String get portrait => 'Dikey mod'; + + @override + String get landscape => 'Yatay mod'; + + @override + String gridCrossAxisCount(String value) { + return '$value Izgara Çapraz Eksen Sayısı'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Değer $value olduğunda satır başına kullanılacak ızgara karosu.'; + } + + @override + String get showTextOnGridView => 'Izgara görünümünde metin göster'; + + @override + String get showTextOnGridViewSubtitle => + 'Izgara müzik ekranında metin (başlık, sanatçı, vs.) gösterilip gösterilmeyeceğini belirler.'; + + @override + String get showCoverAsPlayerBackground => + 'Oynatıcı arkaplanı olarak bulanık kapak fotoğrafını göster'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Oynatıcı arkaplanı olarak bulanık kapak fotoğrafını gösterilip gösterilmeyeceğini belirler.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Albüm ile şarkı sanatçısı aynıysa gösterme'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Eğer albüm sanatçısından farklı değilse şarkı sanatçısını albüm ekranında gösterilip gösterilmeyeceğini belirler.'; + + @override + String get disableGesture => 'Jestleri devre dışı bırak'; + + @override + String get disableGestureSubtitle => + 'Jestleri devre dışı bırakır veya aktifleştirir.'; + + @override + String get showFastScroller => 'Hızlı kaydırıcıyı göster'; + + @override + String get theme => 'Tema'; + + @override + String get system => 'Sistem'; + + @override + String get light => 'Aydınlık'; + + @override + String get dark => 'Karanlık'; + + @override + String get tabs => 'Sekmeler'; + + @override + String get cancelSleepTimer => 'Uyuma Zamanlayıcısını İptal Et?'; + + @override + String get yesButtonLabel => 'EVET'; + + @override + String get noButtonLabel => 'HAYIR'; + + @override + String get setSleepTimer => 'Uyuma Zamanlayıcısını Ayarla'; + + @override + String get minutes => 'Dakika'; + + @override + String get invalidNumber => 'Geçersiz Sayı'; + + @override + String get sleepTimerTooltip => 'Uyku zamanlayıcısı'; + + @override + String get addToPlaylistTooltip => 'Çalma listesine ekle'; + + @override + String get addToPlaylistTitle => 'Listeye Ekle'; + + @override + String get removeFromPlaylistTooltip => 'Çalma listesinden çıkart'; + + @override + String get removeFromPlaylistTitle => 'Listeden Çıkart'; + + @override + String get newPlaylist => 'Yeni Çalma Listesi'; + + @override + String get createButtonLabel => 'OLUŞTUR'; + + @override + String get playlistCreated => 'Çalma listesi oluşturuldu.'; + + @override + String get noAlbum => 'Albüm Yok'; + + @override + String get noItem => 'İçerik Yok'; + + @override + String get noArtist => 'Sanatçı Yok'; + + @override + String get unknownArtist => 'Bilinmeyen Sanatçı'; + + @override + String get streaming => 'YAYIN ALINIYOR'; + + @override + String get downloaded => 'İNDİRİLDİ'; + + @override + String get transcode => 'YENİDEN KODLA'; + + @override + String get direct => 'DİREKT'; + + @override + String get statusError => 'DURUM HATASI'; + + @override + String get queue => 'Kuyruk'; + + @override + String get addToQueue => 'Kuyruğa Ekle'; + + @override + String get playNext => 'Ardından Oynat'; + + @override + String get replaceQueue => 'Kuyruğu Değiştir'; + + @override + String get instantMix => 'Anlık Mix'; + + @override + String get goToAlbum => 'Albüme Git'; + + @override + String get removeFavourite => 'Favoriden Çıkart'; + + @override + String get addFavourite => 'Favoriye Ekle'; + + @override + String get addedToQueue => 'Kuyruğa eklendi.'; + + @override + String get insertedIntoQueue => 'Kuyruğun içine eklendi.'; + + @override + String get queueReplaced => 'Kuyruk değiştirildi.'; + + @override + String get removedFromPlaylist => 'Çalma listesinden çıkarıldı.'; + + @override + String get startingInstantMix => 'Anlık mix başlatılıyor.'; + + @override + String get anErrorHasOccured => 'Bir hata meydana geldi.'; + + @override + String responseError(String error, int statusCode) { + return '$error Durum kodu $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Durum kodu $statusCode. Muhtemelen yanlış kullanıcı adı veya şifreyi kullandınız ya da uygulamadan çıkış yaptınız.'; + } + + @override + String get removeFromMix => 'Mix\'ten Çıkart'; + + @override + String get addToMix => 'Mix\'e Ekle'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tane yeniden indirildi.', + one: '$count tane yeniden indirildi.', + zero: 'Yeniden indirmeye gerek yok.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Önden Kaydetme Süresi'; + + @override + String get bufferDurationSubtitle => + 'Oynatıcının kaç saniye önden kaydetmesi gerektiğini ayarlar. Yeniden başlatmayı gerektirir.'; + + @override + String get language => 'Dil'; + + @override + String get confirm => 'Onayla'; + + @override + String get showUncensoredLogMessage => + 'Bu günlük oturum açma bilgilerinizi içerir. Gösterilsin mi?'; + + @override + String get resetTabs => 'Sekmeleri sıfırla'; + + @override + String get noMusicLibrariesTitle => 'Müzik Kütüphanesi Bulunamadı'; + + @override + String get noMusicLibrariesBody => + 'Finamp herhangi bir müzik kütüphanesi bulamadı. Lütfen Jellyfin sunucunun içerik türü \"Müzik\" olarak ayarlanmış en az bir kütüphaneye sahip olduğundan emin ol.'; + + @override + String get refresh => 'YENİLE'; + + @override + String get swipeInsertQueueNext => 'Kaydırılan Şarkıyı Ardından Oynat'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Şarkı listesinde kaydırıldığında bir şarkıyı sona eklemek yerine sıradaki öge olarak eklemeyi etkinleştirin.'; + + @override + String get redesignBeta => 'Yeniden Tasarım Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_uk.dart b/lib/l10n/app_localizations_uk.dart new file mode 100644 index 0000000..0a674d2 --- /dev/null +++ b/lib/l10n/app_localizations_uk.dart @@ -0,0 +1,737 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Ukrainian (`uk`). +class AppLocalizationsUk extends AppLocalizations { + AppLocalizationsUk([String locale = 'uk']) : super(locale); + + @override + String startupError(String error) { + return 'Щось пішло не так під час запуску програми. помилка: $error\n\nБудь ласка, створіть проблему на github.com/UnicornsOnLSD/finamp із знімком екрана цієї сторінки. Якщо проблема не зникне, ви можете очистити дані програми, щоб скинути налаштування програми.'; + } + + @override + String get serverUrl => 'URL серверу'; + + @override + String get internalExternalIpExplanation => + 'Якщо ви хочете мати віддалений доступ до свого сервера Jellyfin, вам потрібно використовувати зовнішню IP-адресу.\n\nЯкщо ваш сервер використовує порт HTTP (80/443), вам не потрібно вказувати порт. Ймовірно, це буде необхідно, якщо ваш сервер знаходиться за зворотним проксі.'; + + @override + String get emptyServerUrl => 'URL серверу не може бути порожнім'; + + @override + String get urlStartWithHttps => 'URL має починатися з http:// або http://'; + + @override + String get urlTrailingSlash => + 'URL-адреса не повинна містити косу риску в кінці'; + + @override + String get username => 'Логін'; + + @override + String get password => 'Пароль'; + + @override + String get logs => 'Логи'; + + @override + String get next => 'Далі'; + + @override + String get selectMusicLibraries => 'Виберіть музичну бібліотеку'; + + @override + String get couldNotFindLibraries => + 'Неможливо знайти будь-яку музичну бібліотеку.'; + + @override + String get unknownName => 'Невідома назва'; + + @override + String get songs => 'Пісні'; + + @override + String get albums => 'Альбоми'; + + @override + String get artists => 'Виконавці'; + + @override + String get genres => 'Жанри'; + + @override + String get playlists => 'Списки відтворення'; + + @override + String get startMix => 'Почати перемішування'; + + @override + String get startMixNoSongsArtist => + 'Затисніть виконавця, щоб додати або видалити його з конструктора міксів перед початком міксування'; + + @override + String get startMixNoSongsAlbum => + 'Затисніть альбом, щоб додати або видалити його з конструктора міксів перед початком міксування'; + + @override + String get music => 'Музика'; + + @override + String get clear => 'Очистити'; + + @override + String get favourites => 'Вибране'; + + @override + String get shuffleAll => 'Перемішати все'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Завантаження'; + + @override + String get settings => 'Налаштування'; + + @override + String get offlineMode => 'Оффлайн режим'; + + @override + String get sortOrder => 'Порядок сортування'; + + @override + String get sortBy => 'Сортування за'; + + @override + String get album => 'Альбомами'; + + @override + String get albumArtist => 'Виконавцями альбомів'; + + @override + String get artist => 'Виконавцями'; + + @override + String get budget => 'Бюджет'; + + @override + String get communityRating => 'Оцінкою спільноти'; + + @override + String get criticRating => 'Оцінкою критиків'; + + @override + String get dateAdded => 'Датою додавання'; + + @override + String get datePlayed => 'Датою відтворення'; + + @override + String get playCount => 'Кількістю відтворень'; + + @override + String get premiereDate => 'Датою прем\'єри'; + + @override + String get productionYear => 'Роком виходу'; + + @override + String get name => 'Ім\'ям'; + + @override + String get random => 'Випадково'; + + @override + String get revenue => 'Дохід'; + + @override + String get runtime => 'Тривалістю'; + + @override + String get syncDownloadedPlaylists => 'Синхронізувати завантажені плейлисти'; + + @override + String get downloadMissingImages => 'Завантажити відсутні зображення'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Завантажено $count відсутніх зображень', + one: 'Завантажено $count відсутніх зображень', + zero: 'Відсутніх зображень не знайдено', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Завантажити помилки'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Завантажень', + one: '$count Завантажено', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count елементів', + one: '$count елементів', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count зображень', + one: '$count Зображення', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count виконано'; + } + + @override + String dlFailed(int count) { + return '$count не вдалося'; + } + + @override + String dlEnqueued(int count) { + return '$count поставлено в чергу'; + } + + @override + String dlRunning(int count) { + return '$count запущено'; + } + + @override + String get downloadErrorsTitle => 'Завантажити помилки'; + + @override + String get noErrors => 'Немає помилок!'; + + @override + String get errorScreenError => + 'Під час отримання списку помилок сталася помилка! На цьому етапі вам, ймовірно, слід просто створити проблему на GitHub і видалити дані програми'; + + @override + String get failedToGetSongFromDownloadId => + 'Не вдалося отримати пісню з ідентифікатора завантаження'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Ви дійсно хочете видалити $_temp0 \'$itemName\' з цього пристрою?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Видалити'; + + @override + String get deleteDownloadsAbortButtonText => 'Скасувати'; + + @override + String get error => 'Помилка'; + + @override + String discNumber(int number) { + return 'Платівка $number'; + } + + @override + String get playButtonLabel => 'ГРАТИ'; + + @override + String get shuffleButtonLabel => 'ПЕРЕМІШАТИ'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Пісні', + one: '$count Пісня', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Редагувати назву плейлисту'; + + @override + String get editPlaylistNameTitle => 'Редагувати назву плейлисту'; + + @override + String get required => 'Обов\'язково'; + + @override + String get updateButtonLabel => 'ОНОВИТИ'; + + @override + String get playlistNameUpdated => 'Ім\'я плейлисту змінено.'; + + @override + String get favourite => 'Улюблене'; + + @override + String get downloadsDeleted => 'Завантаження видалено.'; + + @override + String get addDownloads => 'Додати завантаження'; + + @override + String get location => 'Збережено в'; + + @override + String get downloadsAdded => 'Завантаження додано.'; + + @override + String get addButtonLabel => 'ДОДАТИ'; + + @override + String get shareLogs => 'Поділитися логами'; + + @override + String get logsCopied => 'Логи скопійовано.'; + + @override + String get message => 'Повідомлення'; + + @override + String get stackTrace => 'Трасування стека'; + + @override + String get applicationLegalese => + 'Ліцензовано за Mozilla Public License 2.0. Вихідний код доступний за адресою:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Транскодування'; + + @override + String get downloadLocations => 'Місце завантаження'; + + @override + String get audioService => 'Служба аудіовідтворення'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Вигляд і тема'; + + @override + String get notAvailableInOfflineMode => 'Недоступне в оффлайн режимі'; + + @override + String get logOut => 'Вийти'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Завантажені пісні не будуть видалені'; + + @override + String get areYouSure => 'Ви впевнені ?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin використовує ААС для транскодування'; + + @override + String get enableTranscoding => 'Ввімкнути транскодування'; + + @override + String get enableTranscodingSubtitle => + 'Перекодування музичного потоку відбувається зі сторони сервера.'; + + @override + String get bitrate => 'Бітрейт'; + + @override + String get bitrateSubtitle => + 'Вищий бітрейт забезпечує вищу якість звуку за рахунок вищої пропускної здатності.'; + + @override + String get customLocation => 'Власна папка'; + + @override + String get appDirectory => 'Тека застосунку'; + + @override + String get addDownloadLocation => 'Додати теку завантаження'; + + @override + String get selectDirectory => 'Вибрати теку'; + + @override + String get unknownError => 'Невідома помилка'; + + @override + String get pathReturnSlashErrorMessage => + 'Шляхи, які повертають \"/\", не можна використовувати'; + + @override + String get directoryMustBeEmpty => 'Тека повинна бути порожньою'; + + @override + String get customLocationsBuggy => + 'Користувацька текс має багато проблем через проблеми з дозволами. Я думаю, як це виправити, але поки що я б не рекомендував ними користуватися.'; + + @override + String get enterLowPriorityStateOnPause => + 'Перейти у стан низького пріоритету під час паузи'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Дозволяє змахнути сповіщення під час паузи. Також дозволяє Android вимикати службу під час паузи.'; + + @override + String get shuffleAllSongCount => 'Перемішати всі пісні'; + + @override + String get shuffleAllSongCountSubtitle => + 'Кількість пісень для завантаження при використанні кнопки перемішування всіх пісень.'; + + @override + String get viewType => 'Тип перегляду'; + + @override + String get viewTypeSubtitle => 'Тип перегляду для музичного екрану'; + + @override + String get list => 'Список'; + + @override + String get grid => 'Таблиця'; + + @override + String get portrait => 'Портретний'; + + @override + String get landscape => 'Альбомний'; + + @override + String gridCrossAxisCount(String value) { + return '$value Підрахунок поперечних осей сітки'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Кількість плиток сітки для використання в рядку, коли $value.'; + } + + @override + String get showTextOnGridView => 'Показати текст при перегляді сіткою'; + + @override + String get showTextOnGridViewSubtitle => + 'Відображати чи ні текст (назву, виконавця тощо) на музичному екрані сітки.'; + + @override + String get showCoverAsPlayerBackground => + 'Показати розмиту обкладинку як фон гравця'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Використовувати або ні розмиту обкладинку як фон на екрані програвача.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Приховати виконавців пісень, якщо вони збігаються з виконавцями альбомів'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Чи показувати виконавців пісень на екрані альбому, якщо вони не відрізняються від виконавців альбому.'; + + @override + String get disableGesture => 'Вимкнути жести'; + + @override + String get disableGestureSubtitle => 'Чи вимикати жести.'; + + @override + String get showFastScroller => 'Показувати швидку прокрутку'; + + @override + String get theme => 'Тема'; + + @override + String get system => 'Системна'; + + @override + String get light => 'Світла'; + + @override + String get dark => 'Темна'; + + @override + String get tabs => 'Закладки'; + + @override + String get cancelSleepTimer => 'Скасувати таймер сну?'; + + @override + String get yesButtonLabel => 'ТАК'; + + @override + String get noButtonLabel => 'НІ'; + + @override + String get setSleepTimer => 'Встановити таймер сну'; + + @override + String get minutes => 'Хвилини'; + + @override + String get invalidNumber => 'Некоректне число'; + + @override + String get sleepTimerTooltip => 'Таймер сну'; + + @override + String get addToPlaylistTooltip => 'Додати до плейлисту'; + + @override + String get addToPlaylistTitle => 'Додати до плейлисту'; + + @override + String get removeFromPlaylistTooltip => 'Видалити з плейлисту'; + + @override + String get removeFromPlaylistTitle => 'Видалити з плейлисту'; + + @override + String get newPlaylist => 'Новий плейлист'; + + @override + String get createButtonLabel => 'СТВОРИТИ'; + + @override + String get playlistCreated => 'Плейлист створено.'; + + @override + String get noAlbum => 'Альбом невідомий'; + + @override + String get noItem => 'Невідомий елемент'; + + @override + String get noArtist => 'Невідомий виконавець'; + + @override + String get unknownArtist => 'Невідомий виконавець'; + + @override + String get streaming => 'ВІДТВОРЮЄТЬСЯ ЗАРАЗ'; + + @override + String get downloaded => 'ЗАВАНТАЖЕНО'; + + @override + String get transcode => 'ПЕРЕКОДОВУЄТЬСЯ'; + + @override + String get direct => 'ПРЯМЕ ВІДТВОРЕННЯ'; + + @override + String get statusError => 'ПОМИЛКОВИЙ СТАТУС'; + + @override + String get queue => 'Черга'; + + @override + String get addToQueue => 'Додати до черги'; + + @override + String get playNext => 'Відтворити наступним'; + + @override + String get replaceQueue => 'Замінити чергу'; + + @override + String get instantMix => 'Швидкий мікс'; + + @override + String get goToAlbum => 'До альбому'; + + @override + String get removeFavourite => 'Видалити з вибраного'; + + @override + String get addFavourite => 'Додати в вибране'; + + @override + String get addedToQueue => 'Додано в чергу.'; + + @override + String get insertedIntoQueue => 'Вставлено в чергу.'; + + @override + String get queueReplaced => 'Черга змінена.'; + + @override + String get removedFromPlaylist => 'Видалено з плейлисту.'; + + @override + String get startingInstantMix => 'Починається швидкий мікс.'; + + @override + String get anErrorHasOccured => 'Сталася помилка.'; + + @override + String responseError(String error, int statusCode) { + return '$error Код статусу $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Код статусу $statusCode. Можливо, це означає, що ви використали неправильне ім’я користувача/пароль або ваш клієнт не ввійшов в систему.'; + } + + @override + String get removeFromMix => 'Видалити з міксу'; + + @override + String get addToMix => 'Додати до міксу'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Повторно завантажено $count елементів', + one: 'Повторно завантажено $count елемент', + zero: 'Повторне завантаження не потрібне.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Тривалість буферу'; + + @override + String get bufferDurationSubtitle => + 'Скільки плеєр має буферизувати, у секундах. Вимагає перезавантаження.'; + + @override + String get language => 'Мова'; + + @override + String get confirm => 'Підтвердити'; + + @override + String get showUncensoredLogMessage => + 'Цей журнал містить ваші дані для входу. Показати?'; + + @override + String get resetTabs => 'Скинути вкладки'; + + @override + String get noMusicLibrariesTitle => 'Музичні бібліотеки відсутні'; + + @override + String get noMusicLibrariesBody => + 'Finamp не знайшов жодної музичної бібліотеки. Переконайтеся, що ваш сервер Jellyfin містить принаймні одну бібліотеку з типом вмісту \"Музика\".'; + + @override + String get refresh => 'ОНОВИТИ'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_vi.dart b/lib/l10n/app_localizations_vi.dart new file mode 100644 index 0000000..ce60103 --- /dev/null +++ b/lib/l10n/app_localizations_vi.dart @@ -0,0 +1,734 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Vietnamese (`vi`). +class AppLocalizationsVi extends AppLocalizations { + AppLocalizationsVi([String locale = 'vi']) : super(locale); + + @override + String startupError(String error) { + return 'Đã xảy ra lỗi khi khởi động ứng dụng. Lỗi: $error\n\nXin hãy tạo một Issue trên github.com/UnicornsOnLSD/finamp với ảnh chụp màn hình của trang này. Nếu vấn đề tái diễn bạn có thể dọn dữ liệu ứng dụng để thiết lập lại ứng dụng.'; + } + + @override + String get serverUrl => 'URL của Máy chủ'; + + @override + String get internalExternalIpExplanation => + 'Nếu bạn muốn truy cập máy chủ Jellyfin từ xa, bạn cần phải dùng địa chỉ IP bên ngoài.\n\nNếu máy chủ của bạn đang mở cổng HTTP (cổng 80/443), bạn không cần phải chỉ rõ cổng. Đây có thể do máy chủ của bạn được set Proxy ngược.'; + + @override + String get emptyServerUrl => 'URL của máy chủ không thể để trống'; + + @override + String get urlStartWithHttps => 'URL phải bắt đầu bằng http:// hoặc https://'; + + @override + String get urlTrailingSlash => 'URL không được có dấu gạch chéo'; + + @override + String get username => 'Tên người dùng'; + + @override + String get password => 'Mật khẩu'; + + @override + String get logs => 'Nhật kí hoạt động'; + + @override + String get next => 'Tiếp theo'; + + @override + String get selectMusicLibraries => 'Chọn Thư viện Nhạc'; + + @override + String get couldNotFindLibraries => 'Không thể tìm thấy bất kì thư viện nào.'; + + @override + String get unknownName => 'Không có tên'; + + @override + String get songs => 'Bài hát'; + + @override + String get albums => 'Albums'; + + @override + String get artists => 'Nghệ sĩ'; + + @override + String get genres => 'Thể loại'; + + @override + String get playlists => 'Danh sách phát'; + + @override + String get startMix => 'Bắt đầu Mix'; + + @override + String get startMixNoSongsArtist => + 'Bấm giữ một nghệ sĩ để thêm hoặc loại bỏ ra khỏi bộ Mix trước khi bắt đầu một tuyển tập Mix'; + + @override + String get startMixNoSongsAlbum => + 'Bấm giữ một Album để thêm hoặc loại bỏ ra khỏi bộ Mix trước khi bắt đầu một tuyển tập Mix'; + + @override + String get music => 'Nhạc'; + + @override + String get clear => 'Loại bỏ'; + + @override + String get favourites => 'Yêu thích'; + + @override + String get shuffleAll => 'Trộn hết'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => 'Tải xuống'; + + @override + String get settings => 'Cài đặt'; + + @override + String get offlineMode => 'Chế độ ngoại tuyến'; + + @override + String get sortOrder => 'Sắp thứ tự'; + + @override + String get sortBy => 'Sắp theo'; + + @override + String get album => 'Album'; + + @override + String get albumArtist => 'Album Nghệ Sĩ'; + + @override + String get artist => 'Nghệ sĩ'; + + @override + String get budget => 'Chi phí'; + + @override + String get communityRating => 'Đánh giá cộng đồng'; + + @override + String get criticRating => 'Đánh giá nhà phê bình'; + + @override + String get dateAdded => 'Ngày được thêm'; + + @override + String get datePlayed => 'Ngày phát'; + + @override + String get playCount => 'Số lần phát'; + + @override + String get premiereDate => 'Ngày phát hành'; + + @override + String get productionYear => 'Năm sản xuất'; + + @override + String get name => 'Tên'; + + @override + String get random => 'Ngẫu nhiên'; + + @override + String get revenue => 'Lợi nhuận'; + + @override + String get runtime => 'Thời gian phát'; + + @override + String get syncDownloadedPlaylists => 'Sync downloaded playlists'; + + @override + String get downloadMissingImages => 'Tải ảnh thiếu'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Đã tải $count ảnh thiếu', + one: 'Đã tải $count ảnh thiếu', + zero: 'Không ảnh thiếu được tìm', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => 'Lỗi tải'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count đang tải xuống', + one: '$count đang tải xuống', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count vật', + one: '$count vật', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count ảnh', + one: '$count ảnh', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count đã hoàn thành'; + } + + @override + String dlFailed(int count) { + return '$count thất bại'; + } + + @override + String dlEnqueued(int count) { + return '$count đang hàng đợi'; + } + + @override + String dlRunning(int count) { + return '$count đang chạy'; + } + + @override + String get downloadErrorsTitle => 'Lỗi tải xuống'; + + @override + String get noErrors => 'Không có lỗi!'; + + @override + String get errorScreenError => + 'Đã có lỗi xảy ra khi lấy danh sách lỗi! Bạn nên tạo một Issue trên trang Github và xoá dữ liệu ứng dụng'; + + @override + String get failedToGetSongFromDownloadId => 'Lấy bài hát từ ID tải Thất Bại'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return 'Are you sure you want to delete the $_temp0 \'$itemName\' from this device?'; + } + + @override + String get deleteDownloadsConfirmButtonText => 'Delete'; + + @override + String get deleteDownloadsAbortButtonText => 'Cancel'; + + @override + String get error => 'Lỗi'; + + @override + String discNumber(int number) { + return 'Đĩa $number'; + } + + @override + String get playButtonLabel => 'PHÁT'; + + @override + String get shuffleButtonLabel => 'XÁO TRỘN'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count bài hát', + one: '$count bài hát', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => 'Chỉnh sửa tên danh sách phát'; + + @override + String get editPlaylistNameTitle => 'Chỉnh sửa Tên Danh sách phát'; + + @override + String get required => 'Được yêu cầu'; + + @override + String get updateButtonLabel => 'CẬP NHẬT'; + + @override + String get playlistNameUpdated => 'Tên danh sách phát đã được cập nhật.'; + + @override + String get favourite => 'Yêu thích'; + + @override + String get downloadsDeleted => 'Đã xóa tải xuống.'; + + @override + String get addDownloads => 'Thêm tải xuống'; + + @override + String get location => 'Vị trí'; + + @override + String get downloadsAdded => 'Đã thêm tải xuống.'; + + @override + String get addButtonLabel => 'THÊM'; + + @override + String get shareLogs => 'Chia sẻ bản ghi'; + + @override + String get logsCopied => 'Đã sao chép bản ghi.'; + + @override + String get message => 'Tin nhắn'; + + @override + String get stackTrace => 'Dấu vết Ngăn xếp'; + + @override + String get applicationLegalese => + 'Được cấp giấy phép Mozilla Public License 2.0. Mã nguồn tại:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => 'Chuyển Mã'; + + @override + String get downloadLocations => 'Vị trí tải xuống'; + + @override + String get audioService => 'Dịch vụ âm thanh'; + + @override + String get interactions => 'Interactions'; + + @override + String get layoutAndTheme => 'Bố cục & Chủ đề'; + + @override + String get notAvailableInOfflineMode => 'Không khả dụng ở chế độ ngoại tuyến'; + + @override + String get logOut => 'Đăng xuất'; + + @override + String get downloadedSongsWillNotBeDeleted => + 'Các bài hát được tải xuống sẽ không bị xoá'; + + @override + String get areYouSure => 'Bạn chắc chứ?'; + + @override + String get jellyfinUsesAACForTranscoding => + 'Jellyfin dùng codec AAC để chuyển đổi'; + + @override + String get enableTranscoding => 'Bật chuyển đổi'; + + @override + String get enableTranscodingSubtitle => + 'Chuyển đổi các luồng truyền phát nhạc trên phía máy chủ.'; + + @override + String get bitrate => 'Tốc độ bit'; + + @override + String get bitrateSubtitle => + 'Một tốc độ bit cao hơn mang lại âm thanh tốt hơn trong khi dùng băng thông lớn hơn.'; + + @override + String get customLocation => 'Vị trí tuỳ chỉnh'; + + @override + String get appDirectory => 'Đường dẫn ứng dụng'; + + @override + String get addDownloadLocation => 'Thêm đường dẫn tải xuống'; + + @override + String get selectDirectory => 'Chọn đường dẫn'; + + @override + String get unknownError => 'Lỗi không xác định'; + + @override + String get pathReturnSlashErrorMessage => + 'Đường dẫn mà trả về \"/\" không dùng được'; + + @override + String get directoryMustBeEmpty => 'Đường dẫn phải trống'; + + @override + String get customLocationsBuggy => + 'Vị trí tùy chỉnh khá nhiều lỗi do lỗi với việc cấp quyền. Tôi đang tìm biện pháp để sửa, hiện tại tôi không khuyến khích dùng chúng.'; + + @override + String get enterLowPriorityStateOnPause => + 'Vào trạng thái Ưu Tiên Thấp khi Dừng'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + 'Để thông báo được gạt đi khi dừng. Ngoài ra cho phép Android tắt dịch vụ khi dừng.'; + + @override + String get shuffleAllSongCount => 'Trộn tất cả bài hát'; + + @override + String get shuffleAllSongCountSubtitle => + 'Số lượng bài hát được tải khi dùng nút trộn tất cả bài hát.'; + + @override + String get viewType => 'Loại Xem'; + + @override + String get viewTypeSubtitle => 'Loại xem cho màn hình nhạc'; + + @override + String get list => 'Danh sách'; + + @override + String get grid => 'Lưới'; + + @override + String get portrait => 'Dọc'; + + @override + String get landscape => 'Ngang'; + + @override + String gridCrossAxisCount(String value) { + return '$value Số Lưới Trục-Chéo'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return 'Số lượng lưới dùng mỗi hàng khi $value.'; + } + + @override + String get showTextOnGridView => 'Hiện thông tin trong khung lưới'; + + @override + String get showTextOnGridViewSubtitle => + 'Cho dù có hay không hiện thông tin (tiêu đề, nghệ sĩ,...) trên lưới nhạc.'; + + @override + String get showCoverAsPlayerBackground => + 'Dùng ảnh bìa mờ làm nền trình phát'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => + 'Có hay không dùng ảnh bìa mờ làm nền trình phát trên phần phát nhạc.'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => + 'Ẩn tên ca sĩ bài hát nếu giống ca sĩ album'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + 'Có hay không hiện nghệ sĩ bài hát trên phần album nếu không khác ca sĩ album.'; + + @override + String get disableGesture => 'Tắt cử chỉ'; + + @override + String get disableGestureSubtitle => 'Có nên tắt cử chỉ.'; + + @override + String get showFastScroller => 'Show fast scroller'; + + @override + String get theme => 'Chủ đề'; + + @override + String get system => 'Hệ thống'; + + @override + String get light => 'Sáng'; + + @override + String get dark => 'Tối'; + + @override + String get tabs => 'Trang'; + + @override + String get cancelSleepTimer => 'Tắt Đồng hồ Hẹn Giờ Ngủ?'; + + @override + String get yesButtonLabel => 'CÓ'; + + @override + String get noButtonLabel => 'KHÔNG'; + + @override + String get setSleepTimer => 'Đặt đồng hồ hẹn giờ ngủ'; + + @override + String get minutes => 'Phút'; + + @override + String get invalidNumber => 'Số không hợp lệ'; + + @override + String get sleepTimerTooltip => 'Đồng hồ hẹn giờ ngủ'; + + @override + String get addToPlaylistTooltip => 'Thêm vào danh sách phát'; + + @override + String get addToPlaylistTitle => 'Thêm vào Danh sách phát'; + + @override + String get removeFromPlaylistTooltip => 'Loại bỏ khỏi danh sách phát'; + + @override + String get removeFromPlaylistTitle => 'Loại bỏ khỏi Danh sách phát'; + + @override + String get newPlaylist => 'Danh sách phát mới'; + + @override + String get createButtonLabel => 'TẠO'; + + @override + String get playlistCreated => 'Đã tạo danh sách phát.'; + + @override + String get noAlbum => 'Không có Album'; + + @override + String get noItem => 'Không có vật phẩm'; + + @override + String get noArtist => 'Không có Nghệ sĩ'; + + @override + String get unknownArtist => 'Nghệ sĩ không rõ'; + + @override + String get streaming => 'STREAMING'; + + @override + String get downloaded => 'ĐÃ TẢI XUỐNG'; + + @override + String get transcode => 'CHUYỂN MÃ'; + + @override + String get direct => 'TRỰC TIẾP'; + + @override + String get statusError => 'LỖI TRẠNG THÁI'; + + @override + String get queue => 'Hàng chờ'; + + @override + String get addToQueue => 'Thêm vào Hàng chờ'; + + @override + String get playNext => 'Play Next'; + + @override + String get replaceQueue => 'Thay thế Hàng chờ'; + + @override + String get instantMix => 'Instant Mix'; + + @override + String get goToAlbum => 'Đi tới Album'; + + @override + String get removeFavourite => 'Xóa yêu thích'; + + @override + String get addFavourite => 'Thêm vào Yêu thích'; + + @override + String get addedToQueue => 'Đã thêm vào hàng chờ.'; + + @override + String get insertedIntoQueue => 'Inserted into queue.'; + + @override + String get queueReplaced => 'Đã thay thế hàng chờ.'; + + @override + String get removedFromPlaylist => 'Đã loại bỏ khỏi danh sách.'; + + @override + String get startingInstantMix => 'Bắt đầu tuyển tập nhạc tức thời.'; + + @override + String get anErrorHasOccured => 'Đã có lỗi xảy ra.'; + + @override + String responseError(String error, int statusCode) { + return '$error Mã $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error Mã $statusCode. Có thể bạn đã nhập sai tên người dùng/mật khẩu, hoặc client của bạn bị đăng xuất.'; + } + + @override + String get removeFromMix => 'Loại bỏ khỏi Mix'; + + @override + String get addToMix => 'Thêm vào Mix'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Đã tải lại $count bài', + one: 'Đã tải lại $count bài', + zero: 'Không cần tải lại.', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => 'Thời gian bộ đệm'; + + @override + String get bufferDurationSubtitle => + 'Trình phát nên tạo bộ đệm trong bao lâu giây. Cần khởi động lại app.'; + + @override + String get language => 'Ngôn ngữ'; + + @override + String get confirm => 'Confirm'; + + @override + String get showUncensoredLogMessage => + 'This log contains your login information. Show?'; + + @override + String get resetTabs => 'Reset tabs'; + + @override + String get noMusicLibrariesTitle => 'No Music Libraries'; + + @override + String get noMusicLibrariesBody => + 'Finamp could not find any music libraries. Please ensure that your Jellyfin server contains at least one library with the content type set to \"Music\".'; + + @override + String get refresh => 'REFRESH'; + + @override + String get swipeInsertQueueNext => 'Play Swiped Song Next'; + + @override + String get swipeInsertQueueNextSubtitle => + 'Enable to insert a song as next item in queue when swiped in song list instead of appending it to the end.'; + + @override + String get redesignBeta => 'Try the Beta'; + + @override + String get playbackOrderShuffledTooltip => 'Shuffling. Tap to toggle.'; + + @override + String get playbackOrderLinearTooltip => 'Playing in order. Tap to toggle.'; + + @override + String get loopModeAllTooltip => 'Looping all. Tap to toggle.'; + + @override + String get loopModeOneTooltip => 'Looping one. Tap to toggle.'; + + @override + String get loopModeNoneTooltip => 'Not looping. Tap to toggle.'; + + @override + String get skipToPrevious => 'Skip to Previous Song'; + + @override + String get skipToNext => 'Skip to Next Song'; + + @override + String get togglePlayback => 'Toggle Playback'; + + @override + String playArtist(String artist) { + return 'Play all albums by $artist'; + } + + @override + String shuffleArtist(String artist) { + return 'Shuffle all albums by $artist'; + } + + @override + String downloadArtist(String artist) { + return 'Download all albums by $artist'; + } + + @override + String get deleteFromDevice => 'Delete from Device'; + + @override + String get download => 'Download'; + + @override + String get sync => 'Synchronize with Server'; + + @override + String get about => 'About Finamp'; +} diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart new file mode 100644 index 0000000..aec3b40 --- /dev/null +++ b/lib/l10n/app_localizations_zh.dart @@ -0,0 +1,2073 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Chinese (`zh`). +class AppLocalizationsZh extends AppLocalizations { + AppLocalizationsZh([String locale = 'zh']) : super(locale); + + @override + String startupError(String error) { + return '应用程序启动期间出现问题! 错误是:$error\n\n请在 github.com/UnicornsOnLSD/finamp 上创建一个 Github 问题,并附上此页面的屏幕截图。 如果问题一直显示,请清除您的应用数据以重置应用。'; + } + + @override + String get serverUrl => '服务器 URL'; + + @override + String get internalExternalIpExplanation => + '如果您希望能够远程访问您的 Jellyfin 服务器,则需要使用您的外部 IP。\n\n如果您的服务器位于 HTTP 端口 (80/443) 上,则不必指定端口。 如果您的服务器位于反向代理后面,则可能会出现这种情况。'; + + @override + String get emptyServerUrl => '服务器 URL 不能为空'; + + @override + String get urlStartWithHttps => 'URL 必须以 http:// 或 https:// 开头'; + + @override + String get urlTrailingSlash => 'URL 不得包含尾部斜杠'; + + @override + String get username => '用户名'; + + @override + String get password => '密码'; + + @override + String get logs => '日志'; + + @override + String get next => '下一个'; + + @override + String get selectMusicLibraries => '选择音乐库'; + + @override + String get couldNotFindLibraries => '找不到任何库。'; + + @override + String get unknownName => '未知名称'; + + @override + String get songs => '歌曲'; + + @override + String get albums => '专辑'; + + @override + String get artists => '艺术家'; + + @override + String get genres => '流派'; + + @override + String get playlists => '播放列表'; + + @override + String get startMix => '开始混音'; + + @override + String get startMixNoSongsArtist => '在开始混音之前,长按艺术家以在混音生成器中添加或删除它们'; + + @override + String get startMixNoSongsAlbum => '在开始混音之前,长按专辑以在混音生成器中添加或删除它们'; + + @override + String get music => '音乐'; + + @override + String get clear => '清除'; + + @override + String get favourites => '收藏夹'; + + @override + String get shuffleAll => '全部随机播放'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => '下载'; + + @override + String get settings => '设置'; + + @override + String get offlineMode => '离线模式'; + + @override + String get sortOrder => '排序'; + + @override + String get sortBy => '排序方式'; + + @override + String get album => '专辑'; + + @override + String get albumArtist => '专辑艺术家'; + + @override + String get artist => '艺术家'; + + @override + String get budget => '预算'; + + @override + String get communityRating => '社区评级'; + + @override + String get criticRating => '评论家评级'; + + @override + String get dateAdded => '添加日期'; + + @override + String get datePlayed => '播放日期'; + + @override + String get playCount => '播放计数'; + + @override + String get premiereDate => '首映日期'; + + @override + String get productionYear => '制作年份'; + + @override + String get name => '名称'; + + @override + String get random => '随机'; + + @override + String get revenue => '收入'; + + @override + String get runtime => '运行时'; + + @override + String get syncDownloadedPlaylists => '同步下载的播放列表'; + + @override + String get downloadMissingImages => '下载缺少的图像'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '已下载 $count 张缺少的图像', + one: '已下载 $count 张缺少的图形', + zero: '未找到缺少的图像', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => '下载错误'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个下载', + one: '$count 个下载', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个项目', + one: '$count 个项目', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 张图像', + one: '$count 张图像', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count 完成'; + } + + @override + String dlFailed(int count) { + return '$count 失败'; + } + + @override + String dlEnqueued(int count) { + return '$count 已入队'; + } + + @override + String dlRunning(int count) { + return '$count 运行中'; + } + + @override + String get downloadErrorsTitle => '下载错误'; + + @override + String get noErrors => '没有错误!'; + + @override + String get errorScreenError => '获取错误列表时出错! 现在您可能应该在 GitHub 上创建一个问题并清除应用数据'; + + @override + String get failedToGetSongFromDownloadId => '从下载 ID 获取歌曲失败'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return '您确定要从此设备中删除 $_temp0 \'$itemName\'吗?'; + } + + @override + String get deleteDownloadsConfirmButtonText => '删除'; + + @override + String get deleteDownloadsAbortButtonText => '取消'; + + @override + String get error => '错误'; + + @override + String discNumber(int number) { + return '唱片 $number'; + } + + @override + String get playButtonLabel => '播放'; + + @override + String get shuffleButtonLabel => '随机播放'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 首歌曲', + one: '$count 首歌曲', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => '编辑播放列表名称'; + + @override + String get editPlaylistNameTitle => '编辑播放列表名称'; + + @override + String get required => '必需的'; + + @override + String get updateButtonLabel => '更新'; + + @override + String get playlistNameUpdated => '播放列表名称已更新。'; + + @override + String get favourite => '收藏夹'; + + @override + String get downloadsDeleted => '已删除下载。'; + + @override + String get addDownloads => '添加下载'; + + @override + String get location => '位置'; + + @override + String get downloadsAdded => '已添加下载。'; + + @override + String get addButtonLabel => '添加'; + + @override + String get shareLogs => '分享日志'; + + @override + String get logsCopied => '已复制日志。'; + + @override + String get message => '消息'; + + @override + String get stackTrace => '堆栈跟踪'; + + @override + String get applicationLegalese => + '获得 Mozilla 公共许可证 2.0 的许可。 源代码位于:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => '转码'; + + @override + String get downloadLocations => '下载位置'; + + @override + String get audioService => '音频服务'; + + @override + String get interactions => '交互'; + + @override + String get layoutAndTheme => '布局和主题'; + + @override + String get notAvailableInOfflineMode => '在离线模式下不可用'; + + @override + String get logOut => '登出'; + + @override + String get downloadedSongsWillNotBeDeleted => '下载的歌曲不会被删除'; + + @override + String get areYouSure => '你确定吗?'; + + @override + String get jellyfinUsesAACForTranscoding => 'Jellyfin 使用 AAC 进行转码'; + + @override + String get enableTranscoding => '启用转码'; + + @override + String get enableTranscodingSubtitle => '音乐流将由服务器转码。'; + + @override + String get bitrate => '比特率'; + + @override + String get bitrateSubtitle => '更高的比特率以更高的带宽为代价提供更高质量的音频。'; + + @override + String get customLocation => '自定义位置'; + + @override + String get appDirectory => '应用目录'; + + @override + String get addDownloadLocation => '添加下载路径'; + + @override + String get selectDirectory => '选择目录'; + + @override + String get unknownError => '未知错误'; + + @override + String get pathReturnSlashErrorMessage => '不能使用返回“/”的路径'; + + @override + String get directoryMustBeEmpty => '目录必须为空'; + + @override + String get customLocationsBuggy => + '由于权限问题,自定义位置存在很多问题。 我正在考虑解决此问题的方法,但目前我不建议使用它们。'; + + @override + String get enterLowPriorityStateOnPause => '暂停时进入低优先级状态'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + '通知可以在暂停时滑动。 启用此功能还允许 Android 在暂停时终止服务。'; + + @override + String get shuffleAllSongCount => '随机播放所有歌曲计数'; + + @override + String get shuffleAllSongCountSubtitle => '使用随机播放所有歌曲按钮时要加载的歌曲数量。'; + + @override + String get viewType => '视图类型'; + + @override + String get viewTypeSubtitle => '音乐屏幕的视图类型'; + + @override + String get list => '列表'; + + @override + String get grid => '网格'; + + @override + String get portrait => '纵向'; + + @override + String get landscape => '横向'; + + @override + String gridCrossAxisCount(String value) { + return '$value 网格横轴数量'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return '每行使用的网格图块数量 $value.'; + } + + @override + String get showTextOnGridView => '在网格视图中显示文本'; + + @override + String get showTextOnGridViewSubtitle => '是否在网格音乐屏幕上显示文本(标题、艺术家等)。'; + + @override + String get showCoverAsPlayerBackground => '将模糊的封面应用为播放器背景'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => '是否在播放器屏幕上使用模糊的封面作为背景。'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => '如果与专辑艺术家相同,则隐藏歌曲艺术家'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + '是否在专辑屏幕上隐藏歌曲艺术家(如果他们与专辑艺术家没有区别)。'; + + @override + String get disableGesture => '禁用手势'; + + @override + String get disableGestureSubtitle => '是否禁用手势。'; + + @override + String get showFastScroller => '显示快速滚动条'; + + @override + String get theme => '主题'; + + @override + String get system => '系统'; + + @override + String get light => '浅色'; + + @override + String get dark => '深色'; + + @override + String get tabs => '选项卡'; + + @override + String get cancelSleepTimer => '取消睡眠定时器?'; + + @override + String get yesButtonLabel => '是'; + + @override + String get noButtonLabel => '否'; + + @override + String get setSleepTimer => '设置睡眠定时器'; + + @override + String get minutes => '分钟'; + + @override + String get invalidNumber => '无效数字'; + + @override + String get sleepTimerTooltip => '睡眠定时器'; + + @override + String get addToPlaylistTooltip => '添加至播放列表'; + + @override + String get addToPlaylistTitle => '添加至播放列表'; + + @override + String get removeFromPlaylistTooltip => '从播放列表删除'; + + @override + String get removeFromPlaylistTitle => '从播放列表删除'; + + @override + String get newPlaylist => '新建播放列表'; + + @override + String get createButtonLabel => '创建'; + + @override + String get playlistCreated => '播放列表已创建。'; + + @override + String get noAlbum => '没有专辑'; + + @override + String get noItem => '没有项目'; + + @override + String get noArtist => '没有艺术家'; + + @override + String get unknownArtist => '未知艺术家'; + + @override + String get streaming => '串流'; + + @override + String get downloaded => '下载'; + + @override + String get transcode => '转码'; + + @override + String get direct => '直接播放'; + + @override + String get statusError => '状态错误'; + + @override + String get queue => '队列'; + + @override + String get addToQueue => '添加至队列'; + + @override + String get playNext => '播放下一个'; + + @override + String get replaceQueue => '替换队列'; + + @override + String get instantMix => '即时混音'; + + @override + String get goToAlbum => '前往专辑'; + + @override + String get removeFavourite => '删除收藏夹'; + + @override + String get addFavourite => '添加至收藏夹'; + + @override + String get addedToQueue => '添加至队列。'; + + @override + String get insertedIntoQueue => '已插入队列。'; + + @override + String get queueReplaced => '队列已被替换。'; + + @override + String get removedFromPlaylist => '已从播放列表删除。'; + + @override + String get startingInstantMix => '开始即时混音。'; + + @override + String get anErrorHasOccured => '发生了一个错误。'; + + @override + String responseError(String error, int statusCode) { + return '$error 状态码 $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error 状态码 $statusCode。 这可能意味着您使用了错误的用户名/密码,或者您客户端的身份验证已失效。'; + } + + @override + String get removeFromMix => '从混音中删除'; + + @override + String get addToMix => '添加到混音'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 项重新下载的项目', + one: '$count 项重新下载的项目', + zero: '无需重新下载项目', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => '媒体时长'; + + @override + String get bufferDurationSubtitle => '播放器需要提前缓冲多长时间的音乐,以秒为单位。需要重启才能生效。'; + + @override + String get language => '语言'; + + @override + String get confirm => '确认'; + + @override + String get showUncensoredLogMessage => '该日志包含您的登录信息。显示?'; + + @override + String get resetTabs => '重置选项卡'; + + @override + String get noMusicLibrariesTitle => '没有音乐库'; + + @override + String get noMusicLibrariesBody => + 'Finamp 找不到任何音乐库。请确保您的 Jellyfin 服务器至少包含一个内容类型设置为“音乐”的媒体库。'; + + @override + String get refresh => '刷新'; + + @override + String get swipeInsertQueueNext => '播放滑动的下一首歌曲'; + + @override + String get swipeInsertQueueNextSubtitle => + '在歌曲列表中滑动时,可以将歌曲作为队列中的下一个项目插入,而不是将其附加到末尾。'; + + @override + String get redesignBeta => '试用 Beta 版'; + + @override + String get playbackOrderShuffledTooltip => '随机播放。点击即可切换。'; + + @override + String get playbackOrderLinearTooltip => '按顺序播放。点击即可切换。'; + + @override + String get loopModeAllTooltip => '全部循环播放。点击即可切换。'; + + @override + String get loopModeOneTooltip => '循环播放一首。点击即可切换。'; + + @override + String get loopModeNoneTooltip => '不循环。点击即可切换。'; + + @override + String get skipToPrevious => '跳至上一首歌曲'; + + @override + String get skipToNext => '跳至下一首歌曲'; + + @override + String get togglePlayback => '切换播放'; + + @override + String playArtist(String artist) { + return '播放 $artist 的所有专辑'; + } + + @override + String shuffleArtist(String artist) { + return '随机播放 $artist 的所有专辑'; + } + + @override + String downloadArtist(String artist) { + return '下载 $artist 的所有专辑'; + } + + @override + String get deleteFromDevice => '从设备中删除'; + + @override + String get download => '下载'; + + @override + String get sync => '与服务器同步'; + + @override + String get about => '关于 Finamp'; +} + +/// The translations for Chinese, using the Han script (`zh_Hant`). +class AppLocalizationsZhHant extends AppLocalizationsZh { + AppLocalizationsZhHant() : super('zh_Hant'); + + @override + String startupError(String error) { + return '應用程序啓動期間出現問題! 錯誤是:$error\n\n請在 github.com/UnicornsOnLSD/finamp 上提出一個 Github 問題,並附上此頁面的螢幕截圖。 如果此頁面一直顯示,請清除您的應用數據以重置應用。'; + } + + @override + String get serverUrl => '伺服器 URL'; + + @override + String get internalExternalIpExplanation => + '如果您希望能夠遠程訪問您的 Jellyfin 伺服器,則需要使用您的外部 IP。\n\n如果您的伺服器位於 HTTP 端口 (80/443) 上,則不必指定端口。 如果您的伺服器位於反向代理後面,則可能會出現這種情況。'; + + @override + String get emptyServerUrl => '伺服器 URL 不能為空'; + + @override + String get urlStartWithHttps => 'URL 必須以 http:// 或 https:// 開頭'; + + @override + String get urlTrailingSlash => 'URL 不得包含斜線號'; + + @override + String get username => '用戶名'; + + @override + String get password => '密碼'; + + @override + String get logs => '紀錄檔'; + + @override + String get next => '下一個'; + + @override + String get selectMusicLibraries => '選擇音樂庫'; + + @override + String get couldNotFindLibraries => '找不到任何庫。'; + + @override + String get unknownName => '未知名稱'; + + @override + String get songs => '歌曲'; + + @override + String get albums => '專輯'; + + @override + String get artists => '藝術家'; + + @override + String get genres => '曲風'; + + @override + String get playlists => '播放列表'; + + @override + String get startMix => '開始混音'; + + @override + String get startMixNoSongsArtist => '在開始混音之前,長按藝術家以在混音生成器中添加或刪除它們'; + + @override + String get startMixNoSongsAlbum => '在開始混音之前,長按專輯以在混音生成器中添加或刪除它們'; + + @override + String get music => '音樂'; + + @override + String get clear => '清除'; + + @override + String get favourites => '最愛'; + + @override + String get shuffleAll => '全部隨機播放'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => '下載'; + + @override + String get settings => '設置'; + + @override + String get offlineMode => '離線模式'; + + @override + String get sortOrder => '排序'; + + @override + String get sortBy => '排序方式'; + + @override + String get album => '專輯'; + + @override + String get albumArtist => '專輯歌手'; + + @override + String get artist => '歌手'; + + @override + String get budget => '預算'; + + @override + String get communityRating => '聽眾評級'; + + @override + String get criticRating => '評論家評級'; + + @override + String get dateAdded => '添加日期'; + + @override + String get datePlayed => '播放日期'; + + @override + String get playCount => '播放計數'; + + @override + String get premiereDate => '首播日期'; + + @override + String get productionYear => '製作年份'; + + @override + String get name => '名稱'; + + @override + String get random => '隨機'; + + @override + String get revenue => '收入'; + + @override + String get runtime => '運行時'; + + @override + String get syncDownloadedPlaylists => '同步已下載的播放清'; + + @override + String get downloadMissingImages => '下載缺少的圖片'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '已下載 $count 張缺少的圖片', + one: '已下載 $count 張缺少的圖片', + zero: '未找到缺少的圖片', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => '下載錯誤'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 個下載', + one: '$count 個下載', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 個項目', + one: '$count 個項目', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 張圖片', + one: '$count 張圖片', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count 完成'; + } + + @override + String dlFailed(int count) { + return '$count 失敗'; + } + + @override + String dlEnqueued(int count) { + return '$count 已入隊'; + } + + @override + String dlRunning(int count) { + return '$count 運行中'; + } + + @override + String get downloadErrorsTitle => '下載錯誤'; + + @override + String get noErrors => '沒有錯誤!'; + + @override + String get errorScreenError => '獲取錯誤列表時出錯!您可以在 GitHub 上提出問題並清除應用數據'; + + @override + String get failedToGetSongFromDownloadId => '從下載 ID 獲取歌曲失敗'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return '您確定要將 $_temp0 \'$itemName\'從設備中刪除嗎?'; + } + + @override + String get deleteDownloadsConfirmButtonText => '刪除'; + + @override + String get deleteDownloadsAbortButtonText => '取消'; + + @override + String get error => '錯誤'; + + @override + String discNumber(int number) { + return '唱片 $number'; + } + + @override + String get playButtonLabel => '播放'; + + @override + String get shuffleButtonLabel => '隨機播放'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 首歌曲', + one: '$count 首歌曲', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => '編輯播放列表名稱'; + + @override + String get editPlaylistNameTitle => '編輯播放列表名稱'; + + @override + String get required => '必需的'; + + @override + String get updateButtonLabel => '更新'; + + @override + String get playlistNameUpdated => '播放列表名稱已更新。'; + + @override + String get favourite => '最愛'; + + @override + String get downloadsDeleted => '已刪除下載。'; + + @override + String get addDownloads => '添加下載'; + + @override + String get location => '位置'; + + @override + String get downloadsAdded => '已添加下載。'; + + @override + String get addButtonLabel => '添加'; + + @override + String get shareLogs => '分享紀錄檔'; + + @override + String get logsCopied => '已複制紀錄檔。'; + + @override + String get message => '消息'; + + @override + String get stackTrace => '堆棧跟蹤'; + + @override + String get applicationLegalese => + '獲得 Mozilla 公共授權條款 2.0 的許可。 源代碼位於:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => '轉碼'; + + @override + String get downloadLocations => '下載位置'; + + @override + String get audioService => '音頻服務'; + + @override + String get interactions => '互動'; + + @override + String get layoutAndTheme => '佈局和主題'; + + @override + String get notAvailableInOfflineMode => '在離線模式下不可用'; + + @override + String get logOut => '登出'; + + @override + String get downloadedSongsWillNotBeDeleted => '下載的歌曲不會被刪除'; + + @override + String get areYouSure => '你確定嗎?'; + + @override + String get jellyfinUsesAACForTranscoding => 'Jellyfin 使用 AAC 進行轉碼'; + + @override + String get enableTranscoding => '啓用轉碼'; + + @override + String get enableTranscodingSubtitle => '如果啓用,音樂流將由伺服器轉碼。'; + + @override + String get bitrate => '位元速率'; + + @override + String get bitrateSubtitle => '更高的位元速率以更高的帶寬為代價提供更高質量的音頻。'; + + @override + String get customLocation => '自定義位置'; + + @override + String get appDirectory => '應用目錄'; + + @override + String get addDownloadLocation => '添加下載路徑'; + + @override + String get selectDirectory => '選擇目錄'; + + @override + String get unknownError => '未知錯誤'; + + @override + String get pathReturnSlashErrorMessage => '不能使用返回“/”的路徑'; + + @override + String get directoryMustBeEmpty => '目錄必須為空'; + + @override + String get customLocationsBuggy => + '由於權限問題,自定義位置存在很多問題。 我正在考慮解決此問題的方法,但目前我不建議使用它們。'; + + @override + String get enterLowPriorityStateOnPause => '暫停時進入低優先級狀態'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + '啓用後,通知可以在暫停時滑動。 啓用此功能還允許 Android 在暫停時終止服務。'; + + @override + String get shuffleAllSongCount => '隨機播放所有歌曲計數'; + + @override + String get shuffleAllSongCountSubtitle => '使用隨機播放所有歌曲按鈕時要加載的歌曲數量。'; + + @override + String get viewType => '顯示類型'; + + @override + String get viewTypeSubtitle => '音樂螢幕的顯示類型'; + + @override + String get list => '列表'; + + @override + String get grid => '網格'; + + @override + String get portrait => '縱向'; + + @override + String get landscape => '橫向'; + + @override + String gridCrossAxisCount(String value) { + return '$value 網格橫軸數量'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return '每行使用的網格圖塊數量 $value.'; + } + + @override + String get showTextOnGridView => '在網格顯示上顯示文字'; + + @override + String get showTextOnGridViewSubtitle => '是否在網格音樂螢幕上顯示文字(標題、歌手等)。'; + + @override + String get showCoverAsPlayerBackground => '將模糊的封面應用為播放器背景'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => '是否在播放器螢幕上使用模糊的封面作為背景。'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => '如果與專輯藝術家相同,則隱藏歌曲藝術家'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + '是否在專輯螢幕上隱藏歌曲歌手(如果他們與專輯歌手沒有區別)。'; + + @override + String get disableGesture => '禁用手勢'; + + @override + String get disableGestureSubtitle => '是否禁用「手勢」功能。'; + + @override + String get showFastScroller => '顯示快速滾動條'; + + @override + String get theme => '主題'; + + @override + String get system => '系統'; + + @override + String get light => '淺色'; + + @override + String get dark => '深色'; + + @override + String get tabs => '選項卡'; + + @override + String get cancelSleepTimer => '取消睡眠定時器?'; + + @override + String get yesButtonLabel => '是'; + + @override + String get noButtonLabel => '否'; + + @override + String get setSleepTimer => '設置睡眠定時器'; + + @override + String get minutes => '分鍾'; + + @override + String get invalidNumber => '無效數字'; + + @override + String get sleepTimerTooltip => '睡眠定時器'; + + @override + String get addToPlaylistTooltip => '添加至播放列表'; + + @override + String get addToPlaylistTitle => '添加至播放列表'; + + @override + String get removeFromPlaylistTooltip => '從播放列表中移除歌曲'; + + @override + String get removeFromPlaylistTitle => '從播放列表中移除'; + + @override + String get newPlaylist => '新建播放列表'; + + @override + String get createButtonLabel => '創建'; + + @override + String get playlistCreated => '播放列表已創建。'; + + @override + String get noAlbum => '沒有專輯'; + + @override + String get noItem => '沒有項目'; + + @override + String get noArtist => '沒有歌手'; + + @override + String get unknownArtist => '未知歌手'; + + @override + String get streaming => '串流'; + + @override + String get downloaded => '下載'; + + @override + String get transcode => '轉碼'; + + @override + String get direct => '直接播放'; + + @override + String get statusError => '狀態錯誤'; + + @override + String get queue => '隊列'; + + @override + String get addToQueue => '添加至隊列'; + + @override + String get playNext => '插播為下一首'; + + @override + String get replaceQueue => '替換隊列'; + + @override + String get instantMix => '即時混音'; + + @override + String get goToAlbum => '前往專輯'; + + @override + String get removeFavourite => '刪除最愛'; + + @override + String get addFavourite => '添加至最愛'; + + @override + String get addedToQueue => '添加至隊列。'; + + @override + String get insertedIntoQueue => '完成加入至待播清單。'; + + @override + String get queueReplaced => '隊列已被替換。'; + + @override + String get removedFromPlaylist => '已從播放列表中移除。'; + + @override + String get startingInstantMix => '開始即時混音。'; + + @override + String get anErrorHasOccured => '發生了一個錯誤。'; + + @override + String responseError(String error, int statusCode) { + return '$error 狀態碼 $statusCode.'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error 狀態碼 $statusCode。 這可能意味著您使用了錯誤的用戶名/密碼,或者您客戶端的身份驗證已失效。'; + } + + @override + String get removeFromMix => '從混音中刪除'; + + @override + String get addToMix => '添加到混音'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '已重新下載$count個項目', + one: '已重新下載$count個項目', + zero: '沒有需要重新下載的項目。', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => '緩衝時長'; + + @override + String get bufferDurationSubtitle => '播放器可以預先載入多少的音樂(秒)。需重啟以套用設定。'; + + @override + String get language => '語言'; + + @override + String get confirm => '確認'; + + @override + String get showUncensoredLogMessage => '此記錄包含你的登入資訊。是否顯示?'; + + @override + String get resetTabs => '重設分頁'; + + @override + String get noMusicLibrariesTitle => '尚無音樂庫'; + + @override + String get noMusicLibrariesBody => + '找不到音樂庫。請確保 Jellyfin 中至少有一個資料庫的類別需設置成\"音樂\"。'; + + @override + String get refresh => '重新整理'; + + @override + String get swipeInsertQueueNext => '滑動歌曲接著播放'; + + @override + String get swipeInsertQueueNextSubtitle => + '開啟後滑動清單中的歌曲,可以將歌曲接著播放,而不是加到播放清單的最後一首。'; + + @override + String get redesignBeta => '重新設計的Beta測試版'; +} + +/// The translations for Chinese, as used in Hong Kong, using the Han script (`zh_Hant_HK`). +class AppLocalizationsZhHantHk extends AppLocalizationsZh { + AppLocalizationsZhHantHk() : super('zh_Hant_HK'); + + @override + String startupError(String error) { + return '應用程式啟動時出錯($error)\n\n您可以在 github.com/UnicornsOnLSD/finamp 回報有關問題並附上截圖。如果問題持續,您可以嘗試重設應用程式。'; + } + + @override + String get serverUrl => '伺服器 URL'; + + @override + String get internalExternalIpExplanation => + '如果您需要在局部區域網絡(LAN)以外的地方連接 Jellyfin,請使用伺服器的區域網絡(WAN)IP。\n\n如果目標伺服器使用的連接埠(port)是 HTTP 的預設連接埠(80/433),則毋須填寫連接埠。'; + + @override + String get emptyServerUrl => '伺服器 URL 並不能漏空'; + + @override + String get urlStartWithHttps => 'URL 必須以 http:// 或 https:// 開頭'; + + @override + String get urlTrailingSlash => 'URL 不能以「/」作結'; + + @override + String get username => '用戶名稱'; + + @override + String get password => '密碼'; + + @override + String get logs => '紀錄檔'; + + @override + String get next => '下一個'; + + @override + String get selectMusicLibraries => '選擇音樂媒體庫'; + + @override + String get couldNotFindLibraries => '沒有可用的媒體庫。'; + + @override + String get unknownName => '未知的名稱'; + + @override + String get songs => '歌曲'; + + @override + String get albums => '專輯'; + + @override + String get artists => '歌手'; + + @override + String get genres => '曲風'; + + @override + String get playlists => '播放清單'; + + @override + String get startMix => '開始混音'; + + @override + String get startMixNoSongsArtist => '在開始混音之前,長按歌手以添加至混音器或從混音器移除'; + + @override + String get startMixNoSongsAlbum => '在開始混音之前,長按專輯以添加至混音器或從混音器移除'; + + @override + String get music => '音樂'; + + @override + String get clear => '清除'; + + @override + String get favourites => '我的最愛'; + + @override + String get shuffleAll => '隨機播放全部'; + + @override + String get finamp => 'Finamp'; + + @override + String get downloads => '下載'; + + @override + String get settings => '設定'; + + @override + String get offlineMode => '離線模式'; + + @override + String get sortOrder => '順序'; + + @override + String get sortBy => '排序方式'; + + @override + String get album => '專輯'; + + @override + String get albumArtist => '專輯歌手'; + + @override + String get artist => '歌手'; + + @override + String get budget => '預算'; + + @override + String get communityRating => '聽眾評分'; + + @override + String get criticRating => '樂評人評分'; + + @override + String get dateAdded => '添加日期'; + + @override + String get datePlayed => '播放日期'; + + @override + String get playCount => '播放次數'; + + @override + String get premiereDate => '推出日期'; + + @override + String get productionYear => '製作年份'; + + @override + String get name => '名稱'; + + @override + String get random => '隨機'; + + @override + String get revenue => '收入'; + + @override + String get runtime => '執行時'; + + @override + String get syncDownloadedPlaylists => '同步已下載播放清單'; + + @override + String get downloadMissingImages => '下載缺失的圖片'; + + @override + String downloadedMissingImages(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '已下載$count張圖片', + one: '已下載$count張圖片', + zero: '沒有缺少的圖片', + ); + return '$_temp0'; + } + + @override + String get downloadErrors => '下載錯誤'; + + @override + String downloadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count個下載', + one: '$count個下載', + ); + return '$_temp0'; + } + + @override + String downloadedItemsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count個項目', + one: '$count個項目', + ); + return '$_temp0'; + } + + @override + String downloadedImagesCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count張圖片', + one: '$count張圖片', + ); + return '$_temp0'; + } + + @override + String downloadedItemsImagesCount( + String downloadedItems, String downloadedImages) { + return '$downloadedItems, $downloadedImages'; + } + + @override + String dlComplete(int count) { + return '$count 完成'; + } + + @override + String dlFailed(int count) { + return '$count 失敗'; + } + + @override + String dlEnqueued(int count) { + return '$count 等待中'; + } + + @override + String dlRunning(int count) { + return '$count 正在下載'; + } + + @override + String get downloadErrorsTitle => '下載錯誤'; + + @override + String get noErrors => '沒有錯誤!'; + + @override + String get errorScreenError => '讀取錯誤資訊時發生錯誤!建議在 GitHub 上回報此問題及重設應用程式。'; + + @override + String get failedToGetSongFromDownloadId => '無法從下載 ID 中取得歌曲'; + + @override + String deleteDownloadsPrompt(String itemName, String itemType) { + String _temp0 = intl.Intl.selectLogic( + itemType, + { + 'album': 'album', + 'playlist': 'playlist', + 'artist': 'artist', + 'genre': 'genre', + 'track': 'song', + 'other': '', + }, + ); + return '你是否確定從裝置中刪除 $_temp0 \'$itemName\'?'; + } + + @override + String get deleteDownloadsConfirmButtonText => '刪除'; + + @override + String get deleteDownloadsAbortButtonText => '取消'; + + @override + String get error => '錯誤'; + + @override + String discNumber(int number) { + return 'CD $number'; + } + + @override + String get playButtonLabel => '播放'; + + @override + String get shuffleButtonLabel => '隨機播放'; + + @override + String songCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count首歌曲', + one: '$count首歌曲', + ); + return '$_temp0'; + } + + @override + String get editPlaylistNameTooltip => '編輯播放清單名稱'; + + @override + String get editPlaylistNameTitle => '編輯播放清單名稱'; + + @override + String get required => '必填'; + + @override + String get updateButtonLabel => '更新'; + + @override + String get playlistNameUpdated => '已更新播放清單名稱。'; + + @override + String get favourite => '我的最愛'; + + @override + String get downloadsDeleted => '已刪除。'; + + @override + String get addDownloads => '添加至下載'; + + @override + String get location => '位置'; + + @override + String get downloadsAdded => '已添加至下載。'; + + @override + String get addButtonLabel => '加入'; + + @override + String get shareLogs => '分享所有紀錄檔'; + + @override + String get logsCopied => '已複製所有紀錄。'; + + @override + String get message => '訊息'; + + @override + String get stackTrace => '除錯資訊(Stack Trace)'; + + @override + String get applicationLegalese => + '採用 Mozilla Public License 2.0 特許條款。原始碼:\n\ngithub.com/jmshrv/finamp'; + + @override + String get transcoding => '轉碼(Transcoding)'; + + @override + String get downloadLocations => '下載位置'; + + @override + String get audioService => '播放設定'; + + @override + String get interactions => '互動'; + + @override + String get layoutAndTheme => '顯示及主題'; + + @override + String get notAvailableInOfflineMode => '不能在離線模式下使用'; + + @override + String get logOut => '登出'; + + @override + String get downloadedSongsWillNotBeDeleted => '已下載的歌曲並不會被刪除'; + + @override + String get areYouSure => '您確定嗎?'; + + @override + String get jellyfinUsesAACForTranscoding => 'Jellyfin 使用 ACC 進行轉碼'; + + @override + String get enableTranscoding => '啟用轉碼'; + + @override + String get enableTranscodingSubtitle => '啟用後,音訊會先在伺服器轉碼。'; + + @override + String get bitrate => '位元速率(Bitrate)'; + + @override + String get bitrateSubtitle => '越高的位元速率帶來越好的音質,但亦會使用更多的流量。'; + + @override + String get customLocation => '自訂位置'; + + @override + String get appDirectory => '應用程式資料夾'; + + @override + String get addDownloadLocation => '添加下載位置'; + + @override + String get selectDirectory => '選擇資料夾'; + + @override + String get unknownError => '未知的錯誤'; + + @override + String get pathReturnSlashErrorMessage => '不能使用「/」路徑'; + + @override + String get directoryMustBeEmpty => '所選的資料夾必須為空的'; + + @override + String get customLocationsBuggy => '現時,自訂位置功能因權限問題而未能完全正常運作。如非必要,建議不要使用。'; + + @override + String get enterLowPriorityStateOnPause => '暫停播放時會進入「低優先」狀態'; + + @override + String get enterLowPriorityStateOnPauseSubtitle => + '在停止播放時,允許本程式的「通知」能被掃走及關閉應用程式(適用於 Android 裝置)。'; + + @override + String get shuffleAllSongCount => '隨機播放上限'; + + @override + String get shuffleAllSongCountSubtitle => '使用「隨機播放全部」時,播放歌曲的數量上限。'; + + @override + String get viewType => '顯示模式'; + + @override + String get viewTypeSubtitle => '顯示資訊的方式'; + + @override + String get list => '清單'; + + @override + String get grid => '格狀'; + + @override + String get portrait => '直向'; + + @override + String get landscape => '橫向'; + + @override + String gridCrossAxisCount(String value) { + return '$value顯示網格數量'; + } + + @override + String gridCrossAxisCountSubtitle(String value) { + return '屏幕在$value顯示時,每行顯示的資訊數量(例如歌曲、歌手等)。'; + } + + @override + String get showTextOnGridView => '在網絡內顯示文字'; + + @override + String get showTextOnGridViewSubtitle => '使用格狀顯示時,在網格內顯示歌曲資訊(名稱、歌手等)。'; + + @override + String get showCoverAsPlayerBackground => '模糊化封面作為播放器的背景'; + + @override + String get showCoverAsPlayerBackgroundSubtitle => '以模糊化的專輯封面作為應用程式內的播放頁面的背景。'; + + @override + String get hideSongArtistsIfSameAsAlbumArtists => '隱藏與專輯歌手同名的歌手名稱'; + + @override + String get hideSongArtistsIfSameAsAlbumArtistsSubtitle => + '當專輯的歌手與歌曲的歌手相同時,隱藏歌曲的歌手名稱。'; + + @override + String get disableGesture => '禁用「手勢」功能'; + + @override + String get disableGestureSubtitle => '是否禁用「手勢」功能。'; + + @override + String get showFastScroller => '顯示快速卷軸'; + + @override + String get theme => '色彩主題'; + + @override + String get system => '系統'; + + @override + String get light => '淺色'; + + @override + String get dark => '深色'; + + @override + String get tabs => '分頁'; + + @override + String get cancelSleepTimer => '取消睡眠定時器?'; + + @override + String get yesButtonLabel => '是'; + + @override + String get noButtonLabel => '否'; + + @override + String get setSleepTimer => '設定睡眠定時器'; + + @override + String get minutes => '分鐘'; + + @override + String get invalidNumber => '無效的數字'; + + @override + String get sleepTimerTooltip => '睡眠定時器'; + + @override + String get addToPlaylistTooltip => '將歌曲加入至播放清單'; + + @override + String get addToPlaylistTitle => '加入至播放清單'; + + @override + String get removeFromPlaylistTooltip => '從播放清單中移除歌曲'; + + @override + String get removeFromPlaylistTitle => '從播放清單中移除'; + + @override + String get newPlaylist => '建立播放清單'; + + @override + String get createButtonLabel => '建立'; + + @override + String get playlistCreated => '已建立播放清單。'; + + @override + String get noAlbum => '沒有任何專輯'; + + @override + String get noItem => '沒有任何項目'; + + @override + String get noArtist => '沒有任何歌手'; + + @override + String get unknownArtist => '未知的歌手'; + + @override + String get streaming => '串流中'; + + @override + String get downloaded => '已下載'; + + @override + String get transcode => '轉碼'; + + @override + String get direct => '直接播放'; + + @override + String get statusError => '錯誤'; + + @override + String get queue => '播放佇列'; + + @override + String get addToQueue => '加入至播放佇列'; + + @override + String get playNext => '下一首'; + + @override + String get replaceQueue => '取代現時的播放佇列'; + + @override + String get instantMix => '即時混音'; + + @override + String get goToAlbum => '檢視專輯'; + + @override + String get removeFavourite => '從我的最愛中移除'; + + @override + String get addFavourite => '加入至我的最愛'; + + @override + String get addedToQueue => '已加入至播放佇列。'; + + @override + String get insertedIntoQueue => '已加入至播放佇列中。'; + + @override + String get queueReplaced => '已取代現有的播放佇列。'; + + @override + String get removedFromPlaylist => '已從播放清單中移除。'; + + @override + String get startingInstantMix => '開始即時混音中。'; + + @override + String get anErrorHasOccured => '出現錯誤。'; + + @override + String responseError(String error, int statusCode) { + return '$error(代碼:$statusCode)。'; + } + + @override + String responseError401(String error, int statusCode) { + return '$error(代碼:$statusCode)。此錯誤有可能因為用戶名稱/密碼輸入錯誤或您已被登出而導致。'; + } + + @override + String get removeFromMix => '從混音中移除'; + + @override + String get addToMix => '加入至混音'; + + @override + String redownloadedItems(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '已重新下載$count個項目', + one: '已重新下載$count個項目', + zero: '沒有需要重新下載的項目。', + ); + return '$_temp0'; + } + + @override + String get bufferDuration => '緩衝時長'; + + @override + String get bufferDurationSubtitle => '播放器可以預先載入多少的音訊數據(秒)。重啟以套用設定。'; + + @override + String get language => '語言'; + + @override + String get confirm => '確定'; + + @override + String get showUncensoredLogMessage => '紀錄檔內包含你的登入資訊。你是否確認要顯示?'; + + @override + String get resetTabs => '重設分頁'; + + @override + String get noMusicLibrariesTitle => '沒有音樂類媒體庫'; + + @override + String get noMusicLibrariesBody => + 'Finamp 未有發現任何音樂媒體庫。請檢查 Jellyfin 伺服器上最少有一個屬於「音樂」類別的媒體庫。'; + + @override + String get refresh => '重新載入'; + + @override + String get swipeInsertQueueNext => '滑動插播'; + + @override + String get swipeInsertQueueNextSubtitle => '在歌曲列表中輕掃歌曲時,將其插入至播放佇列的最頭而不是最後。'; + + @override + String get redesignBeta => '測試版'; + + @override + String get skipToPrevious => '上一首歌'; + + @override + String get skipToNext => '下一首歌'; + + @override + String playArtist(String artist) { + return '播放$artist所有的專輯'; + } + + @override + String shuffleArtist(String artist) { + return '隨機播放$artist的專輯'; + } + + @override + String downloadArtist(String artist) { + return '下載 $artist所有的專輯'; + } + + @override + String get deleteFromDevice => '從裝置中刪除'; + + @override + String get download => '下載'; + + @override + String get sync => '與伺服器同步'; + + @override + String get about => '關於 Finamp'; +} diff --git a/lib/main.dart b/lib/main.dart index 279c454..a01f8dd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,7 +12,7 @@ import 'package:finamp/services/offline_listen_helper.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:get_it/get_it.dart'; diff --git a/lib/models/finamp_models.dart b/lib/models/finamp_models.dart index 3bbaf83..b9ac0f3 100644 --- a/lib/models/finamp_models.dart +++ b/lib/models/finamp_models.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:path/path.dart' as path_helper; diff --git a/lib/models/jellyfin_models.dart b/lib/models/jellyfin_models.dart index ad74b0a..fea6e97 100644 --- a/lib/models/jellyfin_models.dart +++ b/lib/models/jellyfin_models.dart @@ -9,7 +9,7 @@ import 'package:finamp/models/finamp_models.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:hive/hive.dart'; import 'package:json_annotation/json_annotation.dart'; diff --git a/lib/screens/add_download_location_screen.dart b/lib/screens/add_download_location_screen.dart index 22520b9..c742a87 100644 --- a/lib/screens/add_download_location_screen.dart +++ b/lib/screens/add_download_location_screen.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:provider/provider.dart'; import '../components/AddDownloadLocationScreen/custom_download_location_form.dart'; diff --git a/lib/screens/add_to_playlist_screen.dart b/lib/screens/add_to_playlist_screen.dart index 9234e43..151d629 100644 --- a/lib/screens/add_to_playlist_screen.dart +++ b/lib/screens/add_to_playlist_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/AddToPlaylistScreen/add_to_playlist_list.dart'; import '../components/AddToPlaylistScreen/new_playlist_dialog.dart'; diff --git a/lib/screens/album_screen.dart b/lib/screens/album_screen.dart index 063bb84..4a25901 100644 --- a/lib/screens/album_screen.dart +++ b/lib/screens/album_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:hive/hive.dart'; diff --git a/lib/screens/audio_service_settings_screen.dart b/lib/screens/audio_service_settings_screen.dart index 53d5f98..d1aedf6 100644 --- a/lib/screens/audio_service_settings_screen.dart +++ b/lib/screens/audio_service_settings_screen.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/AudioServiceSettingsScreen/buffer_duration_list_tile.dart'; import '../components/AudioServiceSettingsScreen/stop_foreground_selector.dart'; diff --git a/lib/screens/downloads_error_screen.dart b/lib/screens/downloads_error_screen.dart index 1af9167..65d1b25 100644 --- a/lib/screens/downloads_error_screen.dart +++ b/lib/screens/downloads_error_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../components/DownloadsErrorScreen/download_error_list.dart'; diff --git a/lib/screens/downloads_screen.dart b/lib/screens/downloads_screen.dart index 73de5f0..0996d64 100644 --- a/lib/screens/downloads_screen.dart +++ b/lib/screens/downloads_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/DownloadsScreen/downloads_overview.dart'; import '../components/DownloadsScreen/downloaded_albums_list.dart'; diff --git a/lib/screens/downloads_settings_screen.dart b/lib/screens/downloads_settings_screen.dart index 6093bfd..692040a 100644 --- a/lib/screens/downloads_settings_screen.dart +++ b/lib/screens/downloads_settings_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'add_download_location_screen.dart'; import '../components/DownloadLocationSettingsScreen/download_location_list.dart'; diff --git a/lib/screens/interaction_settings_screen.dart b/lib/screens/interaction_settings_screen.dart index c3ede10..342d8c2 100644 --- a/lib/screens/interaction_settings_screen.dart +++ b/lib/screens/interaction_settings_screen.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/InteractionSettingsScreen/swipe_insert_queue_next_selector.dart'; import '../components/InteractionSettingsScreen/FastScrollSelector.dart'; diff --git a/lib/screens/language_selection_screen.dart b/lib/screens/language_selection_screen.dart index e58324b..2787eb5 100644 --- a/lib/screens/language_selection_screen.dart +++ b/lib/screens/language_selection_screen.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/LanguageSelectionScreen/language_list.dart'; diff --git a/lib/screens/layout_settings_screen.dart b/lib/screens/layout_settings_screen.dart index 2c02526..9fd72fe 100644 --- a/lib/screens/layout_settings_screen.dart +++ b/lib/screens/layout_settings_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/LayoutSettingsScreen/theme_selector.dart'; import 'tabs_settings_screen.dart'; diff --git a/lib/screens/logs_screen.dart b/lib/screens/logs_screen.dart index 1b2a678..e08c098 100644 --- a/lib/screens/logs_screen.dart +++ b/lib/screens/logs_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/LogsScreen/copy_logs_button.dart'; import '../components/LogsScreen/logs_view.dart'; diff --git a/lib/screens/music_screen.dart b/lib/screens/music_screen.dart index d2aa0ef..72db231 100644 --- a/lib/screens/music_screen.dart +++ b/lib/screens/music_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import 'package:hive/hive.dart'; import 'package:logging/logging.dart'; diff --git a/lib/screens/player_screen.dart b/lib/screens/player_screen.dart index bfa0e5c..a2a46e5 100644 --- a/lib/screens/player_screen.dart +++ b/lib/screens/player_screen.dart @@ -21,8 +21,9 @@ import '../components/PlayerScreen/playback_mode.dart'; import '../components/PlayerScreen/add_to_playlist_button.dart'; import '../components/PlayerScreen/sleep_timer_button.dart'; -final _albumImageProvider = - StateProvider.autoDispose((_) => null); +final _albumImageProvider = StateProvider.autoDispose( + (_) => null, +); class PlayerScreen extends StatelessWidget { const PlayerScreen({Key? key}) : super(key: key); @@ -58,10 +59,7 @@ class PlayerScreen extends StatelessWidget { appBar: AppBar( backgroundColor: Colors.transparent, elevation: 0, - actions: const [ - SleepTimerButton(), - AddToPlaylistButton(), - ], + actions: const [SleepTimerButton(), AddToPlaylistButton()], ), // Required for sleep timer input resizeToAvoidBottomInset: false, @@ -70,48 +68,42 @@ class PlayerScreen extends StatelessWidget { children: [ if (FinampSettingsHelper.finampSettings.showCoverAsPlayerBackground) const _BlurredPlayerScreenBackground(), - const SafeArea( - child: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - child: _PlayerScreenAlbumImage(), + SafeArea( + child: LayoutBuilder( + builder: (context, constraints) { + final isWide = constraints.maxWidth >= 720; + final horizontalPadding = isWide ? 40.0 : 20.0; + + return Padding( + padding: EdgeInsets.fromLTRB( + horizontalPadding, + 16, + horizontalPadding, + 24, ), - Expanded( - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 16), - child: Column( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SongName(), - ProgressSlider(), - PlayerButtons(), - Stack( - alignment: Alignment.center, - children: [ - Align( - alignment: Alignment.centerLeft, - child: PlaybackMode(), - ), - Align( - alignment: Alignment.center, - child: _PlayerScreenFavoriteButton(), - ), - Align( - alignment: Alignment.centerRight, - child: QueueButton(), - ) - ], - ) - ], - ), - ), - ) - ], - ), + child: isWide + ? Row( + children: const [ + Expanded(flex: 5, child: _PlayerArtworkSurface()), + SizedBox(width: 32), + Expanded( + flex: 4, + child: _PlayerControlsSurface(), + ), + ], + ) + : const Column( + children: [ + Expanded(flex: 6, child: _PlayerArtworkSurface()), + SizedBox(height: 18), + Expanded( + flex: 5, + child: _PlayerControlsSurface(), + ), + ], + ), + ); + }, ), ), ], @@ -121,6 +113,114 @@ class PlayerScreen extends StatelessWidget { } } +class _PlayerArtworkSurface extends StatelessWidget { + const _PlayerArtworkSurface({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final colorScheme = Theme.of(context).colorScheme; + + return Center( + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 460), + child: DecoratedBox( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(36), + boxShadow: [ + BoxShadow( + color: colorScheme.shadow.withOpacity(0.24), + blurRadius: 36, + offset: const Offset(0, 20), + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(36), + child: ColoredBox( + color: colorScheme.surfaceVariant.withOpacity(0.34), + child: const Padding( + padding: EdgeInsets.all(8), + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(28)), + child: _PlayerScreenAlbumImage(), + ), + ), + ), + ), + ), + ), + ); + } +} + +class _PlayerControlsSurface extends StatelessWidget { + const _PlayerControlsSurface({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final colorScheme = theme.colorScheme; + final surfaceColor = Color.alphaBlend( + colorScheme.primary.withOpacity(0.07), + colorScheme.surface, + ); + + return Center( + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 560), + child: DecoratedBox( + decoration: BoxDecoration( + color: surfaceColor, + borderRadius: BorderRadius.circular(32), + border: Border.all( + color: colorScheme.outlineVariant.withOpacity(0.45), + ), + boxShadow: [ + BoxShadow( + color: colorScheme.shadow.withOpacity(0.12), + blurRadius: 28, + offset: const Offset(0, 14), + ), + ], + ), + child: const Padding( + padding: EdgeInsets.fromLTRB(22, 24, 22, 18), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SongName(), + SizedBox(height: 24), + ProgressSlider(), + SizedBox(height: 18), + PlayerButtons(), + SizedBox(height: 18), + _PlayerSecondaryActions(), + ], + ), + ), + ), + ), + ); + } +} + +class _PlayerSecondaryActions extends StatelessWidget { + const _PlayerSecondaryActions({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return const Row( + children: [ + Expanded(child: PlaybackMode()), + _PlayerScreenFavoriteButton(), + SizedBox(width: 8), + QueueButton(), + ], + ); + } +} + /// This widget is just an AlbumImage in a StreamBuilder to get the song id. class _PlayerScreenAlbumImage extends ConsumerWidget { const _PlayerScreenAlbumImage({Key? key}) : super(key: key); @@ -130,41 +230,45 @@ class _PlayerScreenAlbumImage extends ConsumerWidget { final audioHandler = GetIt.instance(); return StreamBuilder( - stream: audioHandler.mediaItem, - builder: (context, snapshot) { - final item = snapshot.data?.extras?["itemJson"] == null - ? null - : BaseItemDto.fromJson(snapshot.data!.extras!["itemJson"]); + stream: audioHandler.mediaItem, + builder: (context, snapshot) { + final item = snapshot.data?.extras?["itemJson"] == null + ? null + : BaseItemDto.fromJson(snapshot.data!.extras!["itemJson"]); - return item == null - ? AspectRatio( - aspectRatio: 1, - child: ClipRRect( - borderRadius: AlbumImage.borderRadius, - child: Container(color: Theme.of(context).cardColor), - ), - ) - : AlbumImage( - item: item, - imageProviderCallback: (imageProvider) => - // We need a post frame callback because otherwise this - // widget rebuilds on the same frame - WidgetsBinding.instance.addPostFrameCallback((_) => ref - .read(_albumImageProvider.notifier) - .state = imageProvider), - // Here we awkwardly get the next 3 queue items so that we - // can precache them (so that the image is already loaded - // when the next song comes on). - itemsToPrecache: audioHandler.queue.value - .sublist(min( - (audioHandler.playbackState.value.queueIndex ?? 0) + - 1, - audioHandler.queue.value.length)) - .take(3) - .map((e) => BaseItemDto.fromJson(e.extras!["itemJson"])) - .toList(), - ); - }); + return item == null + ? AspectRatio( + aspectRatio: 1, + child: ClipRRect( + borderRadius: AlbumImage.borderRadius, + child: Container(color: Theme.of(context).cardColor), + ), + ) + : AlbumImage( + item: item, + imageProviderCallback: (imageProvider) => + // We need a post frame callback because otherwise this + // widget rebuilds on the same frame + WidgetsBinding.instance.addPostFrameCallback( + (_) => ref.read(_albumImageProvider.notifier).state = + imageProvider, + ), + // Here we awkwardly get the next 3 queue items so that we + // can precache them (so that the image is already loaded + // when the next song comes on). + itemsToPrecache: audioHandler.queue.value + .sublist( + min( + (audioHandler.playbackState.value.queueIndex ?? 0) + 1, + audioHandler.queue.value.length, + ), + ) + .take(3) + .map((e) => BaseItemDto.fromJson(e.extras!["itemJson"])) + .toList(), + ); + }, + ); } } @@ -187,10 +291,11 @@ class _BlurredPlayerScreenBackground extends ConsumerWidget { errorBuilder: (_, __, ___) => const SizedBox.shrink(), imageBuilder: (context, child) => ColorFiltered( colorFilter: ColorFilter.mode( - Theme.of(context).brightness == Brightness.dark - ? Colors.black.withOpacity(0.35) - : Colors.white.withOpacity(0.75), - BlendMode.srcOver), + Theme.of(context).brightness == Brightness.dark + ? Colors.black.withOpacity(0.35) + : Colors.white.withOpacity(0.75), + BlendMode.srcOver, + ), child: ImageFiltered( imageFilter: ImageFilter.blur( sigmaX: 85, @@ -213,14 +318,15 @@ class _PlayerScreenFavoriteButton extends StatelessWidget { final audioHandler = GetIt.instance(); return StreamBuilder( - stream: audioHandler.mediaItem, - builder: (context, snapshot) { - return FavoriteButton( - item: snapshot.data?.extras?["itemJson"] == null - ? null - : BaseItemDto.fromJson(snapshot.data!.extras!["itemJson"]), - inPlayer: true, - ); - }); + stream: audioHandler.mediaItem, + builder: (context, snapshot) { + return FavoriteButton( + item: snapshot.data?.extras?["itemJson"] == null + ? null + : BaseItemDto.fromJson(snapshot.data!.extras!["itemJson"]), + inPlayer: true, + ); + }, + ); } } diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 5c63e69..eaddcc1 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -1,6 +1,6 @@ import 'package:finamp/screens/interaction_settings_screen.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:locale_names/locale_names.dart'; import 'package:package_info_plus/package_info_plus.dart'; diff --git a/lib/screens/tabs_settings_screen.dart b/lib/screens/tabs_settings_screen.dart index 0e47bb4..b6fad3b 100644 --- a/lib/screens/tabs_settings_screen.dart +++ b/lib/screens/tabs_settings_screen.dart @@ -1,6 +1,6 @@ import 'package:finamp/services/finamp_settings_helper.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/TabsSettingsScreen/hide_tab_toggle.dart'; diff --git a/lib/screens/transcoding_settings_screen.dart b/lib/screens/transcoding_settings_screen.dart index d289299..58242aa 100644 --- a/lib/screens/transcoding_settings_screen.dart +++ b/lib/screens/transcoding_settings_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../components/TranscodingSettingsScreen/transcode_switch.dart'; import '../components/TranscodingSettingsScreen/bitrate_selector.dart'; diff --git a/lib/screens/view_selector.dart b/lib/screens/view_selector.dart index 1e55538..68fadd3 100644 --- a/lib/screens/view_selector.dart +++ b/lib/screens/view_selector.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../components/ViewSelector/no_music_libraries_message.dart'; diff --git a/lib/services/generate_subtitle.dart b/lib/services/generate_subtitle.dart index d9ba3cd..6ca3656 100644 --- a/lib/services/generate_subtitle.dart +++ b/lib/services/generate_subtitle.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; import '../models/jellyfin_models.dart'; import 'process_artist.dart'; diff --git a/lib/services/process_artist.dart b/lib/services/process_artist.dart index b1fdebc..4d849b0 100644 --- a/lib/services/process_artist.dart +++ b/lib/services/process_artist.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:finamp/l10n/app_localizations.dart'; String processArtist(String? artist, BuildContext context) { if (artist == null) { diff --git a/pubspec.lock b/pubspec.lock index 449e621..ea7ce84 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,23 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab" + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "76.0.0" - _macros: - dependency: transitive - description: dart - source: sdk - version: "0.3.3" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.11.0" + version: "6.4.1" android_id: dependency: "direct main" description: @@ -106,10 +101,10 @@ packages: dependency: transitive description: name: build - sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.1" build_config: dependency: transitive description: @@ -130,26 +125,26 @@ packages: dependency: transitive description: name: build_resolvers - sha256: "99d3980049739a985cf9b21f30881f46db3ebc62c5b8d5e60e27440876b1ba1e" + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.2" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "74691599a5bc750dc96a6b4bfd48f7d9d66453eab04c7f4063134800d6a5c573" + sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" url: "https://pub.dev" source: hosted - version: "2.4.14" + version: "2.4.13" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" + sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "7.3.2" built_collection: dependency: transitive description: @@ -170,10 +165,10 @@ packages: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" checked_yaml: dependency: transitive description: @@ -274,10 +269,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.7" + version: "2.3.6" device_info_plus: dependency: "direct main" description: @@ -306,10 +301,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: @@ -535,10 +530,10 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.2" io: dependency: transitive description: @@ -567,10 +562,10 @@ packages: dependency: "direct dev" description: name: json_serializable - sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b url: "https://pub.dev" source: hosted - version: "6.9.0" + version: "6.8.0" just_audio: dependency: "direct main" description: @@ -599,26 +594,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" lints: dependency: transitive description: @@ -644,38 +639,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - macros: - dependency: transitive - description: - name: macros - sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656" - url: "https://pub.dev" - source: hosted - version: "0.1.3-main.0" matcher: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.19" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.13.0" meta: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.18.0" mime: dependency: transitive description: @@ -1117,10 +1104,10 @@ packages: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.11" timing: dependency: transitive description: @@ -1221,10 +1208,10 @@ packages: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" vm_service: dependency: transitive description: @@ -1314,5 +1301,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.7.0-0 <4.0.0" + dart: ">=3.10.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 36d2b62..e828b39 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -60,7 +60,7 @@ dependencies: cupertino_icons: ^1.0.5 path: ^1.8.2 android_id: ^0.4.0 - intl: ^0.19.0 + intl: ^0.20.2 auto_size_text: ^3.0.0 flutter_riverpod: ^2.3.4 # locale_names: