diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index b232ff453..000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,13 +0,0 @@ -# These are supported funding model platforms - -github: jmshrv -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore index 4a15691ff..c36444b69 100644 --- a/.gitignore +++ b/.gitignore @@ -110,4 +110,4 @@ app.*.symbols !**/ios/**/default.perspectivev3 !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages !/dev/ci/**/Gemfile.lock -!.vscode/settings.json \ No newline at end of file +!.vscode/settings.json diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index dcf0f19c5..7bb2df6ba 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/fastlane/metadata/android/en-US/changelogs/43.txt b/fastlane/metadata/android/en-US/changelogs/43.txt new file mode 100644 index 000000000..6cab8bda7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/43.txt @@ -0,0 +1 @@ +New features and bug fixes. Full changelog at https://github.com/jmshrv/finamp/releases/tag/0.6.21 \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/44.txt b/fastlane/metadata/android/en-US/changelogs/44.txt new file mode 100644 index 000000000..50f0de586 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/44.txt @@ -0,0 +1 @@ +Fixed a bug where the artist screen would show albums from the whole library instead of the specific artist. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/45.txt b/fastlane/metadata/android/en-US/changelogs/45.txt new file mode 100644 index 000000000..50f0de586 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/45.txt @@ -0,0 +1 @@ +Fixed a bug where the artist screen would show albums from the whole library instead of the specific artist. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/46.txt b/fastlane/metadata/android/en-US/changelogs/46.txt new file mode 100644 index 000000000..8a6a0fdf5 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/46.txt @@ -0,0 +1 @@ +Reverted to Android API 33 since 34 seems to break background playback diff --git a/fastlane/metadata/android/en-US/changelogs/47.txt b/fastlane/metadata/android/en-US/changelogs/47.txt new file mode 100644 index 000000000..16d5294f2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/47.txt @@ -0,0 +1 @@ +Updated translations, rebuilt with a newer version of Flutter. Changes are now only happening on the redesign beta, check it out on GitHub! diff --git a/fastlane/metadata/android/en-US/changelogs/49.txt b/fastlane/metadata/android/en-US/changelogs/49.txt new file mode 100644 index 000000000..312d95a60 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/49.txt @@ -0,0 +1 @@ +Updated dependencies, fixed F-Droid build. Changes are now only happening on the redesign beta, check it out on GitHub! diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f6ced7f86..be6dec38b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -89,7 +89,7 @@ PODS: - SDWebImage/Core (5.18.2) - share_plus (0.0.1): - Flutter - - sqflite (0.0.3): + - sqflite_darwin (0.0.4): - Flutter - FlutterMacOS - SwiftyGif (5.4.4) diff --git a/lib/components/MusicScreen/music_screen_drawer.dart b/lib/components/MusicScreen/music_screen_drawer.dart index e7396988b..cb608c67f 100644 --- a/lib/components/MusicScreen/music_screen_drawer.dart +++ b/lib/components/MusicScreen/music_screen_drawer.dart @@ -5,6 +5,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_tabler_icons/flutter_tabler_icons.dart'; import 'package:get_it/get_it.dart'; +import 'package:url_launcher/url_launcher.dart'; import '../../screens/downloads_screen.dart'; import '../../screens/logs_screen.dart'; diff --git a/lib/l10n/app_cs.arb b/lib/l10n/app_cs.arb index bd841e9e3..dad3767a1 100644 --- a/lib/l10n/app_cs.arb +++ b/lib/l10n/app_cs.arb @@ -527,5 +527,64 @@ "confirm": "Potvrdit", "@confirm": {}, "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“.", - "@noMusicLibrariesBody": {} + "@noMusicLibrariesBody": {}, + "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.", + "@swipeInsertQueueNextSubtitle": {}, + "interactions": "Interakce", + "@interactions": {}, + "swipeInsertQueueNext": "Přehrát posunutou skladbu jako další", + "@swipeInsertQueueNext": {}, + "redesignBeta": "Vyzkoušejte beta verzi", + "@redesignBeta": {}, + "playbackOrderShuffledTooltip": "Náhodně. Klepnutím přepnete.", + "@playbackOrderShuffledTooltip": {}, + "playbackOrderLinearTooltip": "Přehrávání v pořadí. Klepnutím přepnete.", + "@playbackOrderLinearTooltip": {}, + "loopModeAllTooltip": "Opakování všeho. Klepnutím přepnete.", + "@loopModeAllTooltip": {}, + "loopModeOneTooltip": "Opakování jedné. Klepnutím přepnete.", + "@loopModeOneTooltip": {}, + "loopModeNoneTooltip": "Bez opakování. Klepnutím přepnete.", + "@loopModeNoneTooltip": {}, + "skipToPrevious": "Přeskočit na předchozí skladbu", + "@skipToPrevious": {}, + "skipToNext": "Přeskočit na další skladbu", + "@skipToNext": {}, + "togglePlayback": "Přepnout přehrávání", + "@togglePlayback": {}, + "downloadArtist": "Stáhnout všechna alba umělce {artist}", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "Přehrát náhodně všechna alba umělce {artist}", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "playArtist": "Přehrát všechna alba umělce {artist}", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "deleteFromDevice": "Smazat ze zařízení", + "@deleteFromDevice": {}, + "download": "Stáhnout", + "@download": {}, + "sync": "Synchronizovat se serverem", + "@sync": {}, + "about": "O aplikaci Finamp", + "@about": {} } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 389e1b0cc..18875da46 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -15,15 +15,15 @@ "@artist": {}, "bitrate": "Bitrate", "@bitrate": {}, - "emptyServerUrl": "Server Webadresse darf nicht leer sein", + "emptyServerUrl": "Server-URL darf nicht leer sein", "@emptyServerUrl": { "description": "Error message that shows when the user submits a login without a server URL" }, - "urlStartWithHttps": "Webadresse muss mit http:// oder https:// beginnen", + "urlStartWithHttps": "URL muss mit http:// oder https:// beginnen", "@urlStartWithHttps": { "description": "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" }, - "urlTrailingSlash": "Webadresse darf keinen Schrägstrich am Ende enthalten", + "urlTrailingSlash": "URL darf keinen Schrägstrich am Ende enthalten", "@urlTrailingSlash": { "description": "Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/)" }, @@ -39,7 +39,7 @@ }, "clear": "Entfernen", "@clear": {}, - "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 einem Reverse Proxy befindet.", + "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.", "@internalExternalIpExplanation": { "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." }, @@ -135,7 +135,7 @@ "@selectMusicLibraries": { "description": "App bar title for library select screen" }, - "startupError": "Während dem Starten der App ist etwas schief gelaufen. Der Fehler war: {error}\n\nBitte öffne einen 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.", + "startupError": "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.", "@startupError": { "description": "The error message that shows when startup fails.", "placeholders": { @@ -145,7 +145,7 @@ } } }, - "serverUrl": "Server Webadresse", + "serverUrl": "Server-URL", "@serverUrl": {}, "shuffleAll": "Alle mischen", "@shuffleAll": {}, @@ -167,7 +167,7 @@ "@runtime": {}, "downloadMissingImages": "Fehlende Bilder herunterladen", "@downloadMissingImages": {}, - "downloadErrors": "Downloadfehler", + "downloadErrors": "Download-Fehler", "@downloadErrors": {}, "downloadCount": "{count,plural, =1{{count} Download} other{{count} Downloads}}", "@downloadCount": { @@ -209,7 +209,7 @@ } } }, - "downloadErrorsTitle": "Downloadfehler", + "downloadErrorsTitle": "Download-Fehler", "@downloadErrorsTitle": {}, "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", "@downloadedItemsImagesCount": { @@ -490,13 +490,13 @@ "@playCountInline": {}, "couldNotLoad": "{source, select, album{album} playlist{playlist} songMix{song mix} artistMix{artist mix} albumMix{album mix} favorites{favorites} allSongs{all songs} filteredList{songs} genre{genre} artist{artist} nextUpAlbum{album in next up} nextUpPlaylist{playlist in next up} nextUpArtist{artist in next up} other{}} konnte nicht geladen werden", "@couldNotLoad": {}, - "bufferDurationSubtitle": "Wie viele Sekunden der Player vorladen soll. Benötigt einen Neustart.", + "bufferDurationSubtitle": "Wie viel gepuffert werden soll, in Sekunden. Neustart erforderlich.", "@bufferDurationSubtitle": {}, "language": "Sprache", "@language": {}, "confirm": "Bestätigen", "@confirm": {}, - "showUncensoredLogMessage": "Dieses Protokoll enthält Ihre Anmeldeinformationen. Anzeigen?", + "showUncensoredLogMessage": "Dieses Protokoll enthält deine Anmeldedaten. Anzeigen?", "@showUncensoredLogMessage": {}, "resetTabs": "Tabs zurücksetzen", "@resetTabs": {}, @@ -528,8 +528,75 @@ "@syncDownloadedPlaylists": {}, "showFastScroller": "Schnellen Scroller anzeigen", "@showFastScroller": {}, - "swipeInsertQueueNext": "Gewischtes Lied als nächstes abspielen.", + "swipeInsertQueueNext": "Gewischtes Lied als Nächstes abspielen", "@swipeInsertQueueNext": {}, - "swipeInsertQueueNextSubtitle": "Aktivieren um das in der Liste nach links/rechts gewischte Lied als nächstes abzuspielen.", - "@swipeInsertQueueNextSubtitle": {} + "swipeInsertQueueNextSubtitle": "Aktivieren, um das in der Liste nach links/rechts gewischte Lied als Nächstes abzuspielen, statt es am Ende der Warteschlange einzufügen.", + "@swipeInsertQueueNextSubtitle": {}, + "playNext": "Als Nächstes wiedergeben", + "@playNext": { + "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." + }, + "noMusicLibrariesTitle": "Keine Musik-Bibliotheken", + "@noMusicLibrariesTitle": { + "description": "Title for message that shows on the views screen when no music libraries could be found." + }, + "refresh": "AKTUALISIEREN", + "@refresh": {}, + "noMusicLibrariesBody": "Finamp konnte keine Musikbibliotheken finden. Bitte stelle sicher, dass dein Jellyfin-Server mindestens eine Bibliothek mit dem Medientyp \"Musik\" enthält.", + "@noMusicLibrariesBody": {}, + "interactions": "Interaktionen", + "@interactions": {}, + "redesignBeta": "Teste die Beta", + "@redesignBeta": {}, + "playbackOrderShuffledTooltip": "Mischen. Zum Umschalten tippen.", + "@playbackOrderShuffledTooltip": {}, + "togglePlayback": "Wiedergabe umschalten", + "@togglePlayback": {}, + "playbackOrderLinearTooltip": "Abspielen in Reihenfolge. Zum umschalten tippen.", + "@playbackOrderLinearTooltip": {}, + "loopModeAllTooltip": "Wiederhole alle. Zum umschalten tippen.", + "@loopModeAllTooltip": {}, + "loopModeOneTooltip": "Wiederhole einen. Zum umschalten tippen.", + "@loopModeOneTooltip": {}, + "skipToNext": "Springe zum nächsten Lied", + "@skipToNext": {}, + "skipToPrevious": "Springe zum vorherigen Lied", + "@skipToPrevious": {}, + "playArtist": "Spiele alle Alben von {artist}", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "Spiele alle Alben von {artist} in zufälliger Reihenfolge", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "download": "Herunterladen", + "@download": {}, + "about": "Über Finamp", + "@about": {}, + "downloadArtist": "Lade alle Alben von {artist} herunter", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "loopModeNoneTooltip": "Wiederholt nicht. Zum umschalten tippen.", + "@loopModeNoneTooltip": {}, + "deleteFromDevice": "Vom Gerät Löschen", + "@deleteFromDevice": {}, + "sync": "Mit Server synchronisieren", + "@sync": {} } diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index fc8128048..9e74f4c88 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -527,5 +527,64 @@ "showFastScroller": "Mostrar desplazamiento rápido", "@showFastScroller": {}, "syncDownloadedPlaylists": "Sincroniza las listas de reproducción descargadas", - "@syncDownloadedPlaylists": {} + "@syncDownloadedPlaylists": {}, + "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.", + "@swipeInsertQueueNextSubtitle": {}, + "interactions": "Interacciones", + "@interactions": {}, + "swipeInsertQueueNext": "Reproducir la siguiente canción al deslizarla", + "@swipeInsertQueueNext": {}, + "redesignBeta": "Prueba la versión Beta", + "@redesignBeta": {}, + "playbackOrderShuffledTooltip": "Mezclando. Toca para alternar.", + "@playbackOrderShuffledTooltip": {}, + "playbackOrderLinearTooltip": "Reproducción en orden. Toca para alternar.", + "@playbackOrderLinearTooltip": {}, + "loopModeAllTooltip": "Repitiendo todo. Toca para alternar.", + "@loopModeAllTooltip": {}, + "loopModeOneTooltip": "En bucle. Toca para alternar.", + "@loopModeOneTooltip": {}, + "loopModeNoneTooltip": "No se reproduce en bucle. Toca para alternar.", + "@loopModeNoneTooltip": {}, + "skipToPrevious": "Saltar a la canción anterior", + "@skipToPrevious": {}, + "skipToNext": "Saltar a la siguiente canción", + "@skipToNext": {}, + "togglePlayback": "Alternar reproducción", + "@togglePlayback": {}, + "playArtist": "Reproducir todos los álbumes de {artist}", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "Reproducir aleatoriamente todos los álbumes de {artist}", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "downloadArtist": "Descargar todos los álbumes de {artist}", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "deleteFromDevice": "Eliminar del dispositivo", + "@deleteFromDevice": {}, + "download": "Descargar", + "@download": {}, + "sync": "Sincronizar con el servidor", + "@sync": {}, + "about": "Acerca de Finamp", + "@about": {} } diff --git a/lib/l10n/app_fi.arb b/lib/l10n/app_fi.arb new file mode 100644 index 000000000..a8d4e32c2 --- /dev/null +++ b/lib/l10n/app_fi.arb @@ -0,0 +1,543 @@ +{ + "unknownError": "Tuntematon virhe", + "@unknownError": {}, + "removedFromPlaylist": "Poistettu soittolistalta.", + "@removedFromPlaylist": {}, + "addFavourite": "Lisää suosikki", + "@addFavourite": {}, + "goToAlbum": "Mene albumiin", + "@goToAlbum": {}, + "downloads": "Lataukset", + "@downloads": {}, + "settings": "Asetukset", + "@settings": {}, + "shareLogs": "Jaa lokit", + "@shareLogs": {}, + "removeFavourite": "Poista suosikki", + "@removeFavourite": {}, + "playNext": "Toista seuraava", + "@playNext": { + "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." + }, + "confirm": "Vahvista", + "@confirm": {}, + "language": "Kieli", + "@language": {}, + "refresh": "VIRKISTÄ", + "@refresh": {}, + "serverUrl": "Palvelimen URL", + "@serverUrl": {}, + "emptyServerUrl": "Palvelimen URL ei voi olla tyhjä", + "@emptyServerUrl": { + "description": "Error message that shows when the user submits a login without a server URL" + }, + "urlStartWithHttps": "URL pitää alkaa http:// tai https://", + "@urlStartWithHttps": { + "description": "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" + }, + "urlTrailingSlash": "URL ei saa päättyä vinoviivaan", + "@urlTrailingSlash": { + "description": "Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/)" + }, + "username": "Käyttäjätunnus", + "@username": {}, + "password": "Salasana", + "@password": {}, + "logs": "Lokit", + "@logs": {}, + "next": "Seuraava", + "@next": {}, + "selectMusicLibraries": "Valitse musiikkikirjastot", + "@selectMusicLibraries": { + "description": "App bar title for library select screen" + }, + "couldNotFindLibraries": "Yhtään kirjastoa ei löytynyt.", + "@couldNotFindLibraries": { + "description": "Error message when the user does not have any libraries" + }, + "unknownName": "Tuntematon Nimi", + "@unknownName": {}, + "songs": "Kappaleet", + "@songs": {}, + "albums": "Albumit", + "@albums": {}, + "artists": "Artistit", + "@artists": {}, + "genres": "Tyylilajit", + "@genres": {}, + "playlists": "Soittolistat", + "@playlists": {}, + "music": "Musiikki", + "@music": {}, + "clear": "Tyhjennä", + "@clear": {}, + "favourites": "Suosikit", + "@favourites": {}, + "offlineMode": "Offline tila", + "@offlineMode": {}, + "finamp": "Finamp", + "@finamp": {}, + "sortOrder": "Lajittelujärjestys", + "@sortOrder": {}, + "album": "Albumi", + "@album": {}, + "albumArtist": "Albumin artisti", + "@albumArtist": {}, + "artist": "Artisti", + "@artist": {}, + "name": "Nimi", + "@name": {}, + "random": "Satunnainen", + "@random": {}, + "criticRating": "Kriitikoiden arvostelu", + "@criticRating": {}, + "downloadMissingImages": "Lataa puuttuvat kuvat", + "@downloadMissingImages": {}, + "syncDownloadedPlaylists": "Synkronoi ladatut soittolistat", + "@syncDownloadedPlaylists": {}, + "downloadErrors": "Latauksen virheet", + "@downloadErrors": {}, + "dlFailed": "{count} epäonnistui", + "@dlFailed": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dlComplete": "{count} valmistunut", + "@dlComplete": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dlRunning": "{count} käynnissä", + "@dlRunning": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadErrorsTitle": "Latauksen virheet", + "@downloadErrorsTitle": {}, + "noErrors": "Ei virheitä!", + "@noErrors": {}, + "deleteDownloadsConfirmButtonText": "Poista", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "deleteDownloadsAbortButtonText": "Peruuta", + "@deleteDownloadsAbortButtonText": {}, + "error": "Virhe", + "@error": {}, + "playButtonLabel": "TOISTA", + "@playButtonLabel": {}, + "shuffleButtonLabel": "SEKOITA", + "@shuffleButtonLabel": {}, + "discNumber": "Levy {number}", + "@discNumber": { + "placeholders": { + "number": { + "type": "int" + } + } + }, + "editPlaylistNameTitle": "Muokkaa soittolistan nimeä", + "@editPlaylistNameTitle": {}, + "editPlaylistNameTooltip": "Muokkaa soittolistan nimeä", + "@editPlaylistNameTooltip": {}, + "playlistNameUpdated": "Soittolistan nimi päivitetty.", + "@playlistNameUpdated": {}, + "favourite": "Suosikki", + "@favourite": {}, + "addDownloads": "Lisää lataukset", + "@addDownloads": {}, + "updateButtonLabel": "PÄIVITÄ", + "@updateButtonLabel": {}, + "downloadsDeleted": "Lataukset poistettu.", + "@downloadsDeleted": {}, + "location": "Sijainti", + "@location": {}, + "downloadsAdded": "Lataukset lisätty.", + "@downloadsAdded": {}, + "addButtonLabel": "LISÄÄ", + "@addButtonLabel": {}, + "logsCopied": "Lokit kopioitu.", + "@logsCopied": {}, + "message": "Viesti", + "@message": {}, + "downloadLocations": "Latauksen sijainnit", + "@downloadLocations": {}, + "transcoding": "Transkoodaus", + "@transcoding": {}, + "notAvailableInOfflineMode": "Ei saatavilla offline tilassa", + "@notAvailableInOfflineMode": {}, + "areYouSure": "Oletko varma?", + "@areYouSure": {}, + "logOut": "Kirjaudu ulos", + "@logOut": {}, + "downloadedSongsWillNotBeDeleted": "Ladattuja kappaleita ei poisteta", + "@downloadedSongsWillNotBeDeleted": {}, + "jellyfinUsesAACForTranscoding": "Jellyfin käyttää AAC:tä transkoodaukseen", + "@jellyfinUsesAACForTranscoding": {}, + "enableTranscoding": "Ota transkoodaus käyttöön", + "@enableTranscoding": {}, + "enableTranscodingSubtitle": "Transkoodaa musiikin suoratoiston palvelimen päässä.", + "@enableTranscodingSubtitle": {}, + "shuffleAll": "Sekoita kaikki", + "@shuffleAll": {}, + "budget": "Budjetti", + "@budget": {}, + "communityRating": "Yhteisön arvostelu", + "@communityRating": {}, + "dateAdded": "Lisäämisen päivämäärä", + "@dateAdded": {}, + "datePlayed": "Toiston päivämäärä", + "@datePlayed": {}, + "playCount": "Toistolaskuri", + "@playCount": {}, + "productionYear": "Tuotantovuosi", + "@productionYear": {}, + "revenue": "Tulot", + "@revenue": {}, + "runtime": "Kesto", + "@runtime": {}, + "dlEnqueued": "{count} Jonossa", + "@dlEnqueued": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "required": "Pakollinen", + "@required": {}, + "layoutAndTheme": "Asettelu ja Teema", + "@layoutAndTheme": {}, + "viewType": "Näkymän Tyyppi", + "@viewType": {}, + "list": "Lista", + "@list": {}, + "grid": "Ruudukko", + "@grid": {}, + "portrait": "Pysty", + "@portrait": {}, + "landscape": "Vaaka", + "@landscape": {}, + "showTextOnGridView": "Näytä teksti ruudukkonäkymässä", + "@showTextOnGridView": {}, + "theme": "Teema", + "@theme": {}, + "system": "Järjestelmä", + "@system": {}, + "light": "Vaalea", + "@light": {}, + "tabs": "Välilehdet", + "@tabs": {}, + "cancelSleepTimer": "Peruuta uniajastin?", + "@cancelSleepTimer": {}, + "yesButtonLabel": "KYLLÄ", + "@yesButtonLabel": {}, + "setSleepTimer": "Aseta uniajastin", + "@setSleepTimer": {}, + "minutes": "Minuutit", + "@minutes": {}, + "sleepTimerTooltip": "Uniajastin", + "@sleepTimerTooltip": {}, + "addToPlaylistTooltip": "Lisää soittolistalle", + "@addToPlaylistTooltip": {}, + "removeFromPlaylistTooltip": "Poista soittolistalta", + "@removeFromPlaylistTooltip": {}, + "removeFromPlaylistTitle": "Poista soittolistalta", + "@removeFromPlaylistTitle": {}, + "direct": "SUORA", + "@direct": {}, + "queue": "Jono", + "@queue": {}, + "addedToQueue": "Lisätty jonoon.", + "@addedToQueue": { + "description": "Snackbar message that shows when the user successfully adds items to the end of the play queue." + }, + "anErrorHasOccured": "Tapahtui virhe.", + "@anErrorHasOccured": {}, + "bufferDuration": "Puskurin kesto", + "@bufferDuration": {}, + "dark": "Tumma", + "@dark": {}, + "noButtonLabel": "EI", + "@noButtonLabel": {}, + "newPlaylist": "Uusi soittolista", + "@newPlaylist": {}, + "createButtonLabel": "LUO", + "@createButtonLabel": {}, + "noAlbum": "Ei albumia", + "@noAlbum": {}, + "addToPlaylistTitle": "Lisää soittolistalle", + "@addToPlaylistTitle": {}, + "playlistCreated": "Soittolista on luotu.", + "@playlistCreated": {}, + "noArtist": "Ei Artistia", + "@noArtist": {}, + "unknownArtist": "Tuntematon artisti", + "@unknownArtist": {}, + "downloaded": "LADATTU", + "@downloaded": {}, + "addToQueue": "Lisää jonoon", + "@addToQueue": { + "description": "Popup menu item title for adding an item to the end of the play queue." + }, + "resetTabs": "Nollaa välilehdet", + "@resetTabs": {}, + "noMusicLibrariesTitle": "Ei musiikkikirjastoja", + "@noMusicLibrariesTitle": { + "description": "Title for message that shows on the views screen when no music libraries could be found." + }, + "downloadedItemsCount": "{count,plural,=1{{count} kohde} other{{count} kohteet}}", + "@downloadedItemsCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadCount": "{count,plural, =1{{count} lataus} other{{count} lataukset}}", + "@downloadCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", + "@downloadedItemsImagesCount": { + "description": "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", + "placeholders": { + "downloadedItems": { + "type": "String", + "example": "12 downloads" + }, + "downloadedImages": { + "type": "String", + "example": "1 image" + } + } + }, + "downloadedImagesCount": "{count,plural,=1{{count} kuva} other{{count} kuvat}}", + "@downloadedImagesCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "showCoverAsPlayerBackground": "Näytä sumennettu kansikuva soittimen taustakuvana", + "@showCoverAsPlayerBackground": {}, + "hideSongArtistsIfSameAsAlbumArtists": "Piilota kappaleen artistit, jos samat kuin albumin artistit", + "@hideSongArtistsIfSameAsAlbumArtists": {}, + "insertedIntoQueue": "Asetettu jonoon.", + "@insertedIntoQueue": { + "description": "Snackbar message that shows when the user successfully inserts items into the play queue at a location that is not necessarily the end." + }, + "responseError": "{error} Tilakoodi {statusCode}.", + "@responseError": { + "placeholders": { + "error": { + "type": "String", + "example": "Forbidden" + }, + "statusCode": { + "type": "int", + "example": "403" + } + } + }, + "showUncensoredLogMessage": "Tämä loki sisältää kirjautumistietosi. Näytä?", + "@showUncensoredLogMessage": {}, + "directoryMustBeEmpty": "Hakemiston pitää olla tyhjä", + "@directoryMustBeEmpty": {}, + "selectDirectory": "Valitse hakemisto", + "@selectDirectory": {}, + "songCount": "{count,plural,=1{{count} Kappale} other{{count} Kappaleita}}", + "@songCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "sortBy": "Järjestä", + "@sortBy": {}, + "premiereDate": "Ensiesityspäivä", + "@premiereDate": {}, + "interactions": "Vuorovaikutukset", + "@interactions": {}, + "audioService": "Äänipalvelu", + "@audioService": {}, + "bitrate": "Bitrate", + "@bitrate": {}, + "bitrateSubtitle": "Suurempi bitrate antaa laadukkaamman äänen, mutta sen käyttämä kaistanleveys on suurempi.", + "@bitrateSubtitle": {}, + "customLocation": "Mukautettu sijainti", + "@customLocation": {}, + "appDirectory": "Sovelluksen hakemisto", + "@appDirectory": {}, + "addDownloadLocation": "Lisää latauksen hakemisto", + "@addDownloadLocation": {}, + "pathReturnSlashErrorMessage": "Polkuja jotka palauttavat \"/\" ei voi käyttää", + "@pathReturnSlashErrorMessage": {}, + "disableGesture": "Poista eleet käytöstä", + "@disableGesture": {}, + "disableGestureSubtitle": "Poistaa eleet käytöstä.", + "@disableGestureSubtitle": {}, + "invalidNumber": "Virheellinen numero", + "@invalidNumber": {}, + "noItem": "Ei kohdetta", + "@noItem": {}, + "streaming": "SUORATOISTAA", + "@streaming": {}, + "transcode": "TRANSKOODI", + "@transcode": {}, + "noMusicLibrariesBody": "Finamp ei löytänyt musiikkikirjastoja. Varmista, että Jellyfin-palvelimellasi on vähintään yksi kirjasto, jonka sisältötyypiksi on asetettu \"Musiikki\".", + "@noMusicLibrariesBody": {}, + "instantMix": "Välitön Sekoitus", + "@instantMix": {}, + "replaceQueue": "Korvaa Jono", + "@replaceQueue": {}, + "queueReplaced": "Jono korvattu.", + "@queueReplaced": {}, + "startingInstantMix": "Käynnistetään välitön sekoitus.", + "@startingInstantMix": {}, + "addToMix": "Lisää Sekoitukseen", + "@addToMix": {}, + "removeFromMix": "Poista Sekoituksesta", + "@removeFromMix": {}, + "bufferDurationSubtitle": "Kuinka paljon soittimen pitäisi puskuroida, sekunteina. Vaatii uudelleenkäynnistyksen.", + "@bufferDurationSubtitle": {}, + "redesignBeta": "Uusi Design Beta", + "@redesignBeta": {}, + "swipeInsertQueueNext": "Toista Pyyhkäisty Kappale Seuraavaksi", + "@swipeInsertQueueNext": {}, + "startMix": "Aloita sekoitus", + "@startMix": {}, + "failedToGetSongFromDownloadId": "Kappaleen nouto lataus ID:stä epäonnistui", + "@failedToGetSongFromDownloadId": {}, + "stackTrace": "Pinon jäljitys", + "@stackTrace": {}, + "applicationLegalese": "Lisensoitu Mozilla Public License 2.0 -lisenssillä. Lähdekoodi saatavilla osoitteessa:\n\ngithub.com/jmshrv/finamp", + "@applicationLegalese": {}, + "customLocationsBuggy": "Mukautetut sijainnit ovat erittäin bugisia käyttöoikeusongelmien vuoksi. Mietin tapoja korjata tämä, mutta toistaiseksi en suosittele niiden käyttöä.", + "@customLocationsBuggy": {}, + "enterLowPriorityStateOnPauseSubtitle": "Sallii ilmoituksen pyyhkäisemisen pois, kun toisto on pysäytetty. Antaa myös Androidin lopettaa palvelun, kun toisto on keskeytetty.", + "@enterLowPriorityStateOnPauseSubtitle": {}, + "startupError": "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.", + "@startupError": { + "description": "The error message that shows when startup fails.", + "placeholders": { + "error": { + "type": "String", + "example": "Failed to open download DB" + } + } + }, + "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.", + "@internalExternalIpExplanation": { + "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." + }, + "startMixNoSongsAlbum": "Paina albumia pitkään lisätäksesi tai poistaaksesi sen miksaukseen ennen miksauksen aloittamista", + "@startMixNoSongsAlbum": { + "description": "Snackbar message that shows when the user presses the instant mix button with no albums selected" + }, + "downloadedMissingImages": "{count,plural, =0{Puuttuvia kuvia ei löytynyt} =1{Ladattu {count} puuttuvaa kuvaa} other{ladattu {count} puuttuvia kuvia}}", + "@downloadedMissingImages": { + "description": "Message that shows when the user downloads missing images", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "errorScreenError": "Virhe tapahtui virheiden luettelon hakemisessa! Tässä vaiheessa sinun pitäisi luultavasti vain luoda virheilmoitus GitHubiin ja poistaa sovelluksen tiedot", + "@errorScreenError": {}, + "deleteDownloadsPrompt": "Oletko varma, että haluat poistaa {itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} '{itemName}' tästä laitteesta?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "enterLowPriorityStateOnPause": "Siirtyminen matalan prioriteetin tilaan tauon aikana", + "@enterLowPriorityStateOnPause": {}, + "shuffleAllSongCount": "Kaikkien sekoitettujen kappaleiden määrä", + "@shuffleAllSongCount": {}, + "shuffleAllSongCountSubtitle": "Ladattavien kappaleiden määrä, kun käytät sekoita kaikki kappaleet painiketta.", + "@shuffleAllSongCountSubtitle": {}, + "gridCrossAxisCount": "{value} Ruudukon poikittaisakselien lukumäärä", + "@gridCrossAxisCount": { + "description": "List tile title for grid cross axis count. Value will either be the portrait or landscape key.", + "placeholders": { + "value": { + "type": "String", + "example": "Portrait" + } + } + }, + "gridCrossAxisCountSubtitle": "Rivikohtaisesti käytettävien ruudukkotiilien määrä, kun {value}.", + "@gridCrossAxisCountSubtitle": { + "description": "List tile subtitle for grid cross axis count. Value will either be the portrait or landscape key.", + "placeholders": { + "value": { + "type": "String", + "example": "landscape" + } + } + }, + "showTextOnGridViewSubtitle": "Näytetäänkö teksti (nimi, artisti jne.) ruudukon musiikkinäytöllä vai ei.", + "@showTextOnGridViewSubtitle": {}, + "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "Näytetäänkö kappaleiden artistit albumin näytöllä, jos ne eivät poikkea albumin artisteista.", + "@hideSongArtistsIfSameAsAlbumArtistsSubtitle": {}, + "showFastScroller": "Näytä nopea vieritin", + "@showFastScroller": {}, + "statusError": "TILAVIRHE", + "@statusError": {}, + "responseError401": "{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.", + "@responseError401": { + "placeholders": { + "error": { + "type": "String", + "example": "Unauthorized" + }, + "statusCode": { + "type": "int", + "example": "401" + } + } + }, + "redownloadedItems": "{count,plural, =0{Ei tarvitse ladata uudelleen.} =1{Uudelleenladattu {count} kohde} other{Uudelleenladatut {count} kohteet}}", + "@redownloadedItems": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "swipeInsertQueueNextSubtitle": "Mahdollistaa kappaleen lisäämisen jonon seuraavaksi kohteeksi, kun sitä pyyhkäistään kappaleiden luettelossa sen sijaan, että se liitettäisiin loppuun.", + "@swipeInsertQueueNextSubtitle": {}, + "startMixNoSongsArtist": "Paina pitkään artistia lisätäksesi tai poistaaksesi sen miksaukseen ennen miksauksen aloittamista", + "@startMixNoSongsArtist": { + "description": "Snackbar message that shows when the user presses the instant mix button with no artists selected" + }, + "viewTypeSubtitle": "Musiikkinäytön näkymätyyppi", + "@viewTypeSubtitle": {}, + "showCoverAsPlayerBackgroundSubtitle": "Käytetäänkö sumeaa kansikuvitusta taustana soittimen näytöllä vai ei.", + "@showCoverAsPlayerBackgroundSubtitle": {} +} diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index ca962e8ed..bb9df6735 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -1,144 +1,138 @@ { - "communityRating": "Note de la communauté", - "@communityRating": {}, - "criticRating": "Note des critiques", - "@criticRating": {}, - "addButtonLabel": "AJOUTER", - "@addButtonLabel": {}, "downloadsQueued": "Téléchargements ajoutés.", "@downloadsQueued": {}, - "name": "Nom", - "@name": {}, - "noButtonLabel": "NON", - "@noButtonLabel": {}, - "noAlbum": "Aucun album", - "@noAlbum": {}, - "noArtist": "Aucun artiste", - "@noArtist": {}, - "noItem": "Pas d'élément", - "@noItem": {}, - "logs": "Journaux", - "@logs": {}, - "next": "Suivant", - "@next": {}, - "albums": "Albums", - "@albums": {}, - "artists": "Artistes", - "@artists": {}, - "downloads": "Téléchargements", - "@downloads": {}, - "albumArtist": "Artiste d'album", - "@albumArtist": {}, - "budget": "Budget", - "@budget": {}, - "noErrors": "Aucune erreur !", - "@noErrors": {}, - "error": "Erreur", - "@error": {}, - "downloadsDeleted": "Téléchargements supprimés.", - "@downloadsDeleted": {}, - "audioService": "Service audio", - "@audioService": {}, - "location": "Emplacement", - "@location": {}, - "logOut": "Déconnexion", - "@logOut": {}, - "logsCopied": "Journaux copiés.", - "@logsCopied": {}, - "bitrate": "Débit", - "@bitrate": {}, - "addDownloadLocation": "Ajouter un emplacement de téléchargement", - "@addDownloadLocation": {}, - "createButtonLabel": "CRÉER", - "@createButtonLabel": {}, - "newPlaylist": "Nouvelle liste de lecture", - "@newPlaylist": {}, - "responseError": "{error} Code d'erreur {statusCode}.", - "@responseError": { - "placeholders": { - "error": { - "type": "String", - "example": "Forbidden" - }, - "statusCode": { - "type": "int", - "example": "403" - } - } - }, - "couldNotFindLibraries": "Aucune bibliothèque trouvée.", - "@couldNotFindLibraries": { - "description": "Error message when the user does not have any libraries" - }, - "failedToGetSongFromDownloadId": "Impossible de récupérer le titre depuis l'ID de téléchargement", - "@failedToGetSongFromDownloadId": {}, - "genres": "Genres", - "@genres": {}, - "favourite": "Favoris", - "@favourite": {}, - "favourites": "Favoris", - "@favourites": {}, - "album": "Album", - "@album": {}, "grid": "Mosaïque", "@grid": {}, - "sleepTimerTooltip": "Minuterie de veille", - "@sleepTimerTooltip": {}, - "startupError": "Quelque chose s'est mal passé pendant le démarrage de l'application ! L'erreur en cause était : {error}\n\nVeuillez créer une issue sur Github à l'adresse github.com/UnicornsOnLSD/finamp avec une capture d'écran de cette page. Si le problème persiste, supprimez les données de l'application pour la réinitialiser.", + "startupError": "Une erreur est survenue lors du démarrage de l'application. L'erreur est: {error}\n\nVeuillez créer une issue sur Github à l'adresse github.com/UnicornsOnLSD/finamp avec une capture d'écran de cette page. Si le problème persiste, supprimez les données de l'application pour la réinitialiser.", "@startupError": { - "description": "The error message that shows when startup fails.", + "description": "Le message d'erreur affiché lorsque le démarrage de l'application échoue.", "placeholders": { "error": { "type": "String", - "example": "Failed to open download DB" + "example": "Impossible d'accéder aux données de téléchargement" } } }, - "music": "Musique", - "@music": {}, - "serverUrl": "URL du serveur", + "serverUrl": "Adresse du serveur", "@serverUrl": {}, - "urlStartWithHttps": "L'URL doit commencer par http:// ou https://", + "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.", + "@internalExternalIpExplanation": { + "description": "Informations supplémentaires sur l'IP à utiliser pour l'accès à distance, et sur la nécessité ou non de spécifier un port" + }, + "emptyServerUrl": "Vous devez indiquez l'adresse du serveur.", + "@emptyServerUrl": { + "description": "Cette erreur intervient lorsque l'utilisateur tente de se connecter sans indiquer l'adresse du serveur" + }, + "urlStartWithHttps": "L'adresse doit commencer par http:// ou https://", "@urlStartWithHttps": { - "description": "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" + "description": "Cette erreur intervient lorsque l'utilisateur soumet une adresse qui ne commence pas par http:// ou https:// (par exemple, ftp://0.0.0.0)" }, - "urlTrailingSlash": "L'URL ne doit pas se terminer pas une barre oblique", + "urlTrailingSlash": "L'adresse ne doit pas inclure de slash final.", "@urlTrailingSlash": { - "description": "Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/)" + "description": "Cette erreur intervient lorsque l'utilisateur soumet une adresse qui se termine par une barre oblique finale (par exemple, http://0.0.0.0/)" }, "username": "Nom d'utilisateur", "@username": {}, "password": "Mot de passe", "@password": {}, - "selectMusicLibraries": "Sélection des bibliothèques de musiques", + "logs": "Logs", + "@logs": {}, + "next": "Prochain", + "@next": {}, + "selectMusicLibraries": "Selectionner des bibliothèques", "@selectMusicLibraries": { - "description": "App bar title for library select screen" + "description": "Titre de l'écran de sélection de bibliothèque" + }, + "couldNotFindLibraries": "Aucune bibliothèque trouvée", + "@couldNotFindLibraries": { + "description": "Cette erreur intervient lorsque l'utilisateur n'a pas de bibliothèque" }, "unknownName": "Nom inconnu", "@unknownName": {}, "songs": "Titres", "@songs": {}, - "playlists": "Listes de lecture", + "albums": "Albums", + "@albums": {}, + "artists": "Artistes", + "@artists": {}, + "genres": "Genres", + "@genres": {}, + "playlists": "Playlists", "@playlists": {}, + "startMix": "Commencer un Mix", + "@startMix": {}, + "startMixNoSongsArtist": "Appuyer longuement sur un artiste pour l'ajouter ou le retirer du mix avant de commencer", + "@startMixNoSongsArtist": { + "description": "Notification qui intervient quand l'utilisateur lance le mix instantané sans avoir sélectionné des artistes" + }, + "startMixNoSongsAlbum": "Appuyer longuement sur un album pour l'ajouter ou le retirer du mix avant de commencer", + "@startMixNoSongsAlbum": { + "description": "Notification qui intervient quand l'utilisateur lance le mix instantané sans avoir sélectionné des albums" + }, + "music": "Musique", + "@music": {}, "clear": "Effacer", "@clear": {}, - "settings": "Paramètres", + "favourites": "Favoris", + "@favourites": {}, + "shuffleAll": "Tout mélanger", + "@shuffleAll": {}, + "finamp": "Finamp", + "@finamp": {}, + "downloads": "Téléchargements", + "@downloads": {}, + "settings": "Réglages", "@settings": {}, + "offlineMode": "Mode hors-ligne", + "@offlineMode": {}, "sortOrder": "Ordre de tri", "@sortOrder": {}, "sortBy": "Trier par", "@sortBy": {}, + "album": "Album", + "@album": {}, + "albumArtist": "Artiste de l'album", + "@albumArtist": {}, + "artist": "Artiste", + "@artist": {}, + "budget": "Budget", + "@budget": {}, + "communityRating": "Note de la communauté", + "@communityRating": {}, + "criticRating": "Note de la critique", + "@criticRating": {}, "dateAdded": "Date d'ajout", "@dateAdded": {}, - "datePlayed": "Date de dernière lecture", + "datePlayed": "Date de lecture", "@datePlayed": {}, - "playCount": "Nombre de lectures", + "playCount": "nombre de lectures", "@playCount": {}, + "premiereDate": "Date de première", + "@premiereDate": {}, + "productionYear": "Date de production", + "@productionYear": {}, + "name": "Nom", + "@name": {}, "random": "Aléatoire", "@random": {}, + "revenue": "Recettes", + "@revenue": {}, + "runtime": "Durée d'exécution", + "@runtime": {}, + "syncDownloadedPlaylists": "Synchroniser les playlists téléchargées", + "@syncDownloadedPlaylists": {}, "downloadMissingImages": "Télécharger les images manquantes", "@downloadMissingImages": {}, - "downloadErrors": "Erreurs de téléchargement", + "downloadedMissingImages": "{count,plural, =0{Pas d'image manquante} =1{{count} image téléchargée} other{{count} images téléchargées}}", + "@downloadedMissingImages": { + "description": "Message affiché lorsque l'utilisateur télécharge des images manquantes", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadErrors": "Télécharger les erreurs", "@downloadErrors": {}, "downloadCount": "{count,plural, =1{{count} téléchargement} other{{count} téléchargements}}", "@downloadCount": { @@ -164,69 +158,46 @@ } } }, - "offlineMode": "Mode hors ligne", - "@offlineMode": {}, - "internalExternalIpExplanation": "Si vous voulez pouvoir accéder à votre serveur Jellyfin hors de votre réseau local, vous devez utiliser votre IP externe.\n\nSi votre serveur est sur un port HTTP (80/443), vous n'avez pas besoin de spécifier de port. Ce sera surement le cas si votre serveur est derrière un reverse proxy.", - "@internalExternalIpExplanation": { - "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." - }, - "emptyServerUrl": "L'URL du serveur ne peut pas être vide", - "@emptyServerUrl": { - "description": "Error message that shows when the user submits a login without a server URL" - }, - "startMixNoSongsAlbum": "Appuyez longuement sur un album pour l'ajouter ou l'enlever du générateur de mix, avant de le lancer", - "@startMixNoSongsAlbum": { - "description": "Snackbar message that shows when the user presses the instant mix button with no albums selected" - }, - "shuffleAll": "Lecture aléatoire", - "@shuffleAll": {}, - "finamp": "Finamp", - "@finamp": {}, - "artist": "Artiste", - "@artist": {}, - "startMixNoSongsArtist": "Appuyez longuement sur un artiste pour l'ajouter ou l'enlever du générateur de mix, avant de le lancer", - "@startMixNoSongsArtist": { - "description": "Snackbar message that shows when the user presses the instant mix button with no artists selected" - }, - "productionYear": "Année de production", - "@productionYear": {}, - "premiereDate": "Date de sortie", - "@premiereDate": {}, - "downloadedMissingImages": "{count,plural, =0{Aucune image manquante trouvée} =1{{count} image manquante téléchargée} other{{count} images manquantes téléchargées}}", - "@downloadedMissingImages": { - "description": "Message that shows when the user downloads missing images", + "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", + "@downloadedItemsImagesCount": { + "description": "Sert à fusionner downloadedItemsCount et downloadedImagesCount car les outils intl de Flutter ne supportent pas plusieurs pluriels dans une seule chaîne de caractères. https://github.com/flutter/flutter/issues/86906", "placeholders": { - "count": { - "type": "int" + "downloadedItems": { + "type": "String", + "example": "12 téléchargements" + }, + "downloadedImages": { + "type": "String", + "example": "1 image" } } }, - "dlRunning": "{count} en cours", - "@dlRunning": { + "dlComplete": "{count,plural,=1{{count} complété} other{{count} complétés}}", + "@dlComplete": { "placeholders": { "count": { "type": "int" } } }, - "dlComplete": "{count} terminés", - "@dlComplete": { + "dlFailed": "{count,plural,=1{{count} échec} other{{count} échecs}}", + "@dlFailed": { "placeholders": { "count": { "type": "int" } } }, - "dlFailed": "{count} échoués", - "@dlFailed": { + "dlEnqueued": "{count} en attente", + "@dlEnqueued": { "placeholders": { "count": { "type": "int" } } }, - "dlEnqueued": "{count} en attente", - "@dlEnqueued": { + "dlRunning": "{count} en cours", + "@dlRunning": { "placeholders": { "count": { "type": "int" @@ -235,6 +206,33 @@ }, "downloadErrorsTitle": "Erreurs de téléchargement", "@downloadErrorsTitle": {}, + "noErrors": "Pas d'erreur!", + "@noErrors": {}, + "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.", + "@errorScreenError": {}, + "failedToGetSongFromDownloadId": "Échec de récupération de la chanson à partir de l'ID de téléchargement", + "@failedToGetSongFromDownloadId": {}, + "deleteDownloadsPrompt": "Êtes vour sûr de vouloir supprimer {itemType, select, album{l'album} playlist{la playlist} artist{l'artiste} genre{le genre} track{le titre} other{}} '{itemName}' de cet appareil ?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Invite de confirmation affichée avant de supprimer les médias téléchargés du périphérique local, action destructrice, n'affecte pas les médias sur le serveur." + }, + "deleteDownloadsConfirmButtonText": "Supprimer", + "@deleteDownloadsConfirmButtonText": { + "description": "Affiché dans la boîte de dialogue de confirmation pour la suppression des médias téléchargés du périphérique local." + }, + "deleteDownloadsAbortButtonText": "Annuler", + "error": "Erreur", + "@error": {}, "discNumber": "Disque {number}", "@discNumber": { "placeholders": { @@ -243,7 +241,7 @@ } } }, - "playButtonLabel": "LECTURE", + "playButtonLabel": "LIRE", "@playButtonLabel": {}, "shuffleButtonLabel": "ALÉATOIRE", "@shuffleButtonLabel": {}, @@ -255,89 +253,91 @@ } } }, - "editPlaylistNameTitle": "Modifier le nom de la liste de lecture", + "editPlaylistNameTooltip": "Modifier le titre de la playlist", + "@editPlaylistNameTooltip": {}, + "editPlaylistNameTitle": "Edit Playlist Name", "@editPlaylistNameTitle": {}, - "required": "Obligatoire", + "required": "Requis", "@required": {}, - "updateButtonLabel": "RAFRAÎCHIR", + "updateButtonLabel": "METTRE À JOUR", "@updateButtonLabel": {}, - "playlistNameUpdated": "Le nom de la liste de lecture a été mis à jour.", + "playlistNameUpdated": "Titre de la playlist mis à jour.", "@playlistNameUpdated": {}, - "addDownloads": "Ajouter des téléchargements", + "favourite": "Favoris", + "@favourite": {}, + "downloadsDeleted": "Téléchargements supprimés.", + "@downloadsDeleted": {}, + "addDownloads": "Ajouter les téléchargements", "@addDownloads": {}, + "location": "Emplacement", + "@location": {}, + "downloadsAdded": "Téléchargements ajoutés.", + "@downloadsAdded": {}, + "addButtonLabel": "AJOUTER", + "@addButtonLabel": {}, + "shareLogs": "Partager les journaux.", + "@shareLogs": {}, + "logsCopied": "Journaux copiés.", + "@logsCopied": {}, "message": "Message", "@message": {}, - "shareLogs": "Partager les journaux", - "@shareLogs": {}, - "applicationLegalese": "Sous licence \"Mozilla Public License 2.0\". Le code source est disponible à l'adresse suivante :\n\ngithub.com/jmshrv/finamp", + "stackTrace": "Stack Trace", + "@stackTrace": {}, + "applicationLegalese": "Soumis à la licence Mozilla Public License 2.0. Le code source est disponible sur :\n\ngithub.com/jmshrv/finamp", "@applicationLegalese": {}, - "downloadLocations": "Emplacements de téléchargement", + "transcoding": "Transcodage", + "@transcoding": {}, + "downloadLocations": "Emplacements des téléchargements", "@downloadLocations": {}, - "areYouSure": "Êtes-vous sûr·e ?", + "audioService": "Service audio", + "@audioService": {}, + "interactions": "Intéractions", + "@interactions": {}, + "layoutAndTheme": "Disposition & Apparence", + "@layoutAndTheme": {}, + "notAvailableInOfflineMode": "Indisponible en mode hors-ligne", + "@notAvailableInOfflineMode": {}, + "logOut": "Déconnexion", + "@logOut": {}, + "downloadedSongsWillNotBeDeleted": "Les chansons téléchargées ne seront pas supprimées", + "@downloadedSongsWillNotBeDeleted": {}, + "areYouSure": "Êtes-vous sûr ?", "@areYouSure": {}, + "jellyfinUsesAACForTranscoding": "Jellyfin utilise AAC lors du transcodage", + "@jellyfinUsesAACForTranscoding": {}, + "enableTranscoding": "Activer le transcodage", + "@enableTranscoding": {}, + "enableTranscodingSubtitle": "Transcode les flux musicaux côté serveur.", + "@enableTranscodingSubtitle": {}, + "bitrate": "Débit binaire", + "@bitrate": {}, + "bitrateSubtitle": "Un débit binaire plus élevé offre une meilleure qualité audio au prix d'une bande passante plus importante.", + "@bitrateSubtitle": {}, "customLocation": "Emplacement personnalisé", "@customLocation": {}, - "appDirectory": "Dossier de l'application", + "appDirectory": "Répertoire de l'application", "@appDirectory": {}, - "selectDirectory": "Sélectionner un dossier", + "addDownloadLocation": "Ajouter un emplacement de téléchargement", + "@addDownloadLocation": {}, + "selectDirectory": "Sélectionner un répertoire", "@selectDirectory": {}, "unknownError": "Erreur inconnue", "@unknownError": {}, - "shuffleAllSongCount": "Nombre pour lecture aléatoire", - "@shuffleAllSongCount": {}, - "errorScreenError": "Une erreur s'est produite pendant la récupération de la liste des erreurs! Vu la situation, vous devriez juste créer une issue sur Github et supprimer les données de l'application.", - "@errorScreenError": {}, - "jellyfinUsesAACForTranscoding": "Jellyfin utilise AAC pour le transcodage", - "@jellyfinUsesAACForTranscoding": {}, - "editPlaylistNameTooltip": "Modifier le nom de la liste de lecture", - "@editPlaylistNameTooltip": {}, - "layoutAndTheme": "Disposition et apparence", - "@layoutAndTheme": {}, - "downloadedSongsWillNotBeDeleted": "Les titres téléchargés ne seront pas supprimés", - "@downloadedSongsWillNotBeDeleted": {}, "pathReturnSlashErrorMessage": "Les chemins qui retournent \"/\" ne peuvent pas être utilisés", "@pathReturnSlashErrorMessage": {}, - "transcoding": "Transcodage", - "@transcoding": {}, - "notAvailableInOfflineMode": "Non disponible en mode hors ligne", - "@notAvailableInOfflineMode": {}, - "enableTranscoding": "Activer le transcodage", - "@enableTranscoding": {}, - "customLocationsBuggy": "Les emplacements personnalisés sont extrêmement bogués à cause de problèmes avec les autorisations du système. Il n'est pas conseillé de les utiliser avant que ce problème ne soit réglé.", - "@customLocationsBuggy": {}, - "enableTranscodingSubtitle": "Transcode les flux musicaux du côté du serveur.", - "@enableTranscodingSubtitle": {}, - "directoryMustBeEmpty": "Le dossier doit être vide", + "directoryMustBeEmpty": "Le répertoire doit être vide", "@directoryMustBeEmpty": {}, - "startMix": "Lancer un mix", - "@startMix": {}, - "revenue": "Recette box-office", - "@revenue": {}, - "runtime": "Temps d'exécution", - "@runtime": {}, - "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", - "@downloadedItemsImagesCount": { - "description": "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", - "placeholders": { - "downloadedItems": { - "type": "String", - "example": "12 downloads" - }, - "downloadedImages": { - "type": "String", - "example": "1 image" - } - } - }, - "stackTrace": "Suivi de la pile", - "@stackTrace": {}, - "bitrateSubtitle": "Un débit binaire plus élevé donne une meilleure qualité de l'audio, mais consomme plus de données.", - "@bitrateSubtitle": {}, - "shuffleAllSongCountSubtitle": "Nombre de titres à charger lorsque le bouton \"Lecture aléatoire\" est utilisé.", + "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.", + "@customLocationsBuggy": {}, + "enterLowPriorityStateOnPauseSubtitle": "Permet de supprimer la notification lorsque la lecture est en pause. Permet également à Android de fermer le service lorsqu'il est en pause.", + "@enterLowPriorityStateOnPauseSubtitle": {}, + "shuffleAllSongCount": "Nombre de chansons à mélanger", + "@shuffleAllSongCount": {}, + "shuffleAllSongCountSubtitle": "Nombre de chansons à charger lors de l'utilisation du bouton 'Tout mélanger'.", "@shuffleAllSongCountSubtitle": {}, - "viewType": "Type d'affichage", + "viewType": "Disposition de l'affichage", "@viewType": {}, - "viewTypeSubtitle": "Type d'affichage pour l'écran des musiques", + "viewTypeSubtitle": "Règle la manière dont les musiques sont diposées", "@viewTypeSubtitle": {}, "list": "Liste", "@list": {}, @@ -345,11 +345,9 @@ "@portrait": {}, "landscape": "Paysage", "@landscape": {}, - "showTextOnGridView": "Afficher le texte dans la vue en mosaïque", - "@showTextOnGridView": {}, "gridCrossAxisCount": "Nombre de tuiles par ligne en orientation {value}", "@gridCrossAxisCount": { - "description": "List tile title for grid cross axis count. Value will either be the portrait or landscape key.", + "description": "Titre de l'élément de liste pour le nombre d'axes croisés de la grille. La valeur sera soit la clé 'portrait', soit la clé 'paysage'.", "placeholders": { "value": { "type": "String", @@ -357,61 +355,89 @@ } } }, - "showTextOnGridViewSubtitle": "Afficher ou non du texte (titre, artiste...) sur les tuiles en mode mosaïque.", + "showTextOnGridView": "Afficher le texte dans la grille de vue", + "@showTextOnGridView": {}, + "showTextOnGridViewSubtitle": "Afficher ou non le texte (titre, artiste, etc.) sur l'écran de la grille musicale.", "@showTextOnGridViewSubtitle": {}, "useCoverAsBackground": "Afficher la couverture floutée en arrière-plan du lecteur", "@useCoverAsBackground": {}, - "addToPlaylistTooltip": "Ajouter à une liste de lecture", - "@addToPlaylistTooltip": {}, - "addToPlaylistTitle": "Ajouter à une liste de lecture", - "@addToPlaylistTitle": {}, "addToQueue": "Ajouter à la liste d'attente", "@addToQueue": {}, - "anErrorHasOccured": "Une erreur s'est produite.", - "@anErrorHasOccured": {}, "gridCrossAxisCountSubtitle": "Le nombre de tuiles à utiliser par rangée en orientation {value} lorsque l'affichage est en mode mosaïque.", "@gridCrossAxisCountSubtitle": { - "description": "List tile subtitle for grid cross axis count. Value will either be the portrait or landscape key.", + "description": "Sous-titre de l'élément de liste pour le nombre d'axes croisés de la grille. La valeur sera soit la clé 'portrait', soit la clé 'paysage'.", "placeholders": { "value": { "type": "String", - "example": "landscape" + "example": "Paysage" } } }, - "addedToQueue": "Ajouté à la file d'attente", - "@addedToQueue": {}, - "addFavourite": "Ajouter aux favoris", - "@addFavourite": {}, - "enterLowPriorityStateOnPause": "Passage à l'état de basse priorité en cas de pause", - "@enterLowPriorityStateOnPause": {}, - "useCoverAsBackgroundSubtitle": "Utiliser ou non une couverture floutée comme arrière-plan sur l'écran du lecteur.", - "@useCoverAsBackgroundSubtitle": {}, - "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "Indique si les artistes des chansons doivent être affichés sur l'écran de l'album s'ils ne diffèrent pas des artistes de l'album.", + + "showCoverAsPlayerBackground": "Afficher la couverture floutée en arrière-plan du lecteur", + "@showCoverAsPlayerBackground": {}, + "showCoverAsPlayerBackgroundSubtitle": "Choisir d'utiliser ou non l'illustration floutée comme arrière-plan sur l'écran du lecteur.", + "@showCoverAsPlayerBackgroundSubtitle": {}, + "hideSongArtistsIfSameAsAlbumArtists": "Masquer les artistes des chansons si identiques aux artistes de l'album", + "@hideSongArtistsIfSameAsAlbumArtists": {}, "@hideSongArtistsIfSameAsAlbumArtistsSubtitle": {}, + "disableGesture": "Désactiver les gestes", + "@disableGesture": {}, + "disableGestureSubtitle": "Indique si les gestes doivent être désactivés.", + "@disableGestureSubtitle": {}, + "showFastScroller": "Afficher le défileur rapide", + "@showFastScroller": {}, "theme": "Thème", "@theme": {}, "system": "Système", "@system": {}, - "light": "Lumineux", + "light": "Claire", "@light": {}, "dark": "Sombre", "@dark": {}, "tabs": "Onglets", "@tabs": {}, - "cancelSleepTimer": "Annuler la minuterie de veille ?", + "cancelSleepTimer": "Annuler le minuteur de sommeil ?", "@cancelSleepTimer": {}, "yesButtonLabel": "OUI", "@yesButtonLabel": {}, - "setSleepTimer": "Réglage de la minuterie de veille", + "noButtonLabel": "NON", + "@noButtonLabel": {}, + "setSleepTimer": "Configurer le minuteur de sommeil", "@setSleepTimer": {}, + "minutes": "Minutes", + "@minutes": {}, "invalidNumber": "Nombre invalide", "@invalidNumber": {}, + "sleepTimerTooltip": "Minuteur de sommeil", + "@sleepTimerTooltip": {}, + "addToPlaylistTooltip": "Ajouter à une playlist", + "@addToPlaylistTooltip": {}, + "addToPlaylistTitle": "Ajouter à une playlist", + "@addToPlaylistTitle": {}, + "removeFromPlaylistTooltip": "Retirer de la playlist", + "@removeFromPlaylistTooltip": {}, + "removeFromPlaylistTitle": "Retirer de la playlist", + "@removeFromPlaylistTitle": {}, + "newPlaylist": "Nouvelle Playlist", + "@newPlaylist": {}, + "createButtonLabel": "CRÉER", + "@createButtonLabel": {}, + "playlistCreated": "Playlist créée.", + "@playlistCreated": {}, + "noAlbum": "Aucun album", + "@noAlbum": {}, + "noItem": "Aucun élément", + "@noItem": {}, + "noArtist": "Aucun artiste", + "@noArtist": {}, "unknownArtist": "Artiste inconnu", "@unknownArtist": {}, "streaming": "STREAMING", "@streaming": {}, - "transcode": "TRANSCODE", + "downloaded": "TÉLÉCHARGÉ", + "@downloaded": {}, + "transcode": "TRANSCODAGE", "@transcode": {}, "direct": "DIRECT", "@direct": {}, @@ -419,26 +445,58 @@ "@statusError": {}, "queue": "File d'attente", "@queue": {}, + "playNext": "Lire ensuite", + "@playNext": { + "description": "Titre de l'élément du menu contextuel pour insérer un élément dans la file d'attente de lecture après l'élément en cours de lecture." + }, + "replaceQueue": "Remplacer la file d'attente", + "@replaceQueue": {}, "instantMix": "Mix instantané", "@instantMix": {}, + "goToAlbum": "Voir l'album", + "@goToAlbum": {}, + "removeFavourite": "Retirer des favoris", + "@removeFavourite": {}, + "addedToQueue": "Ajouté à la file d'attente", + "@addedToQueue": {}, + "addFavourite": "Ajouter aux favoris", + "@addFavourite": {}, + "enterLowPriorityStateOnPause": "Passage à l'état de basse priorité en cas de pause", + "@enterLowPriorityStateOnPause": {}, + "useCoverAsBackgroundSubtitle": "Utiliser ou non une couverture floutée comme arrière-plan sur l'écran du lecteur.", + "@useCoverAsBackgroundSubtitle": {}, + "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "Afficher ou non les artistes des chansons sur l'écran de l'album si différents des artistes de l'album.", + "insertedIntoQueue": "Ajouté à la file d'attente.", + "@insertedIntoQueue": { + "description": "Notification affichée lorsque l'utilisateur insère avec succès des éléments dans la file d'attente de lecture à un endroit qui n'est pas nécessairement à la fin." + }, "queueReplaced": "File d'attente remplacée.", "@queueReplaced": {}, - "startingInstantMix": "Démarrage du mix instantané.", + "removedFromPlaylist": "Retiré de la playlist.", + "@removedFromPlaylist": {}, + "startingInstantMix": "Mix instantané lancé.", "@startingInstantMix": {}, - "enterLowPriorityStateOnPauseSubtitle": "Permet de faire glisser la notification lorsqu'elle est en pause. Permet également à Android de tuer le service lorsqu'il est en pause.", - "@enterLowPriorityStateOnPauseSubtitle": {}, - "playlistCreated": "Liste de lecture créée.", - "@playlistCreated": {}, - "downloaded": "TÉLÉCHARGÉ", - "@downloaded": {}, - "replaceQueue": "Remplacer la file d'attente", - "@replaceQueue": {}, - "responseError401": "{error} Code d'état {statusCode}. Cela signifie probablement que vous avez utilisé un mauvais nom d'utilisateur/mot de passe, ou que votre client n'est plus authentifié.", + "anErrorHasOccured": "Une erreur s'est produite.", + "@anErrorHasOccured": {}, + "responseError": "{error} Status code {statusCode}.", + "@responseError": { + "placeholders": { + "error": { + "type": "String", + "example": "Interdit" + }, + "statusCode": { + "type": "int", + "example": "403" + } + } + }, + "responseError401": "{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é.", "@responseError401": { "placeholders": { "error": { "type": "String", - "example": "Unauthorized" + "example": "Non autorisé" }, "statusCode": { "type": "int", @@ -446,19 +504,11 @@ } } }, - "goToAlbum": "Aller à l'album", - "@goToAlbum": {}, - "removeFavourite": "Supprimer des favoris", - "@removeFavourite": {}, - "hideSongArtistsIfSameAsAlbumArtists": "Masquer les artistes des chansons s'ils sont les mêmes que ceux des albums", - "@hideSongArtistsIfSameAsAlbumArtists": {}, - "addToMix": "Ajouter au mix", - "@addToMix": {}, - "removeFromMix": "Enlever du mix", + "removeFromMix": "Retirer du Mix", "@removeFromMix": {}, - "minutes": "Minutes", - "@minutes": {}, - "redownloadedItems": "{count,plural, =0{Aucun re-téléchargement nécessaire.} =1{{count} élément re-téléchargé} other{{count} éléments re-téléchargés}}", + "addToMix": "Ajouter au Mix", + "@addToMix": {}, + "redownloadedItems": "{count,plural, =0{Aucun re-téléchargement nécessaire} =1{{count} élément re-téléchargé} other{{count} éléments re-téléchargés}}", "@redownloadedItems": { "placeholders": { "count": { @@ -466,42 +516,75 @@ } } }, - "bufferDuration": "Durée du tampon", + "bufferDuration": "Taille du tampon", "@bufferDuration": {}, - "bufferDurationSubtitle": "Combien de temps le lecteur doit mettre en mémoire tampon, en secondes. Nécessite un redémarrage.", + "bufferDurationSubtitle": "Taille du tampon du lecteur, en secondes. Changer ce paramètre nécessite un redémarrage.", "@bufferDurationSubtitle": {}, - "disableGesture": "Désactiver les gestes", - "@disableGesture": {}, - "removeFromPlaylistTooltip": "Retirer de la playlist", - "@removeFromPlaylistTooltip": {}, - "removeFromPlaylistTitle": "Retirer de la playlist", - "@removeFromPlaylistTitle": {}, - "removedFromPlaylist": "Retirer de la playlist.", - "@removedFromPlaylist": {}, - "disableGestureSubtitle": "Option permettant de désactiver les gestes.", - "@disableGestureSubtitle": {}, - "showUncensoredLogMessage": "Ce journal contient vos informations de connexion. L'afficher ?", - "@showUncensoredLogMessage": {}, - "insertedIntoQueue": "Ajouter à la file d'attente.", - "@insertedIntoQueue": { - "description": "Snackbar message that shows when the user successfully inserts items into the play queue at a location that is not necessarily the end." - }, - "refresh": "ACTUALISER", - "@refresh": {}, - "confirm": "Confirmer", - "@confirm": {}, "language": "Langue", - "@language": {}, - "playNext": "Lire à la suite", - "@playNext": { - "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." - }, + "confirm": "Confirmé", + "showUncensoredLogMessage": "Ce journal contient vos informations de connexion. Afficher tout de même ?", "resetTabs": "Réinitialiser les onglets", - "@resetTabs": {}, - "noMusicLibrariesBody": "Finamp n'a trouvé aucune bibliothèque musicale. Assurez-vous que votre serveur Jellyfin contient au moins une médiathèque de type \"Musique\".", - "@noMusicLibrariesBody": {}, - "noMusicLibrariesTitle": "Pas de bibliothèque musicale", + "noMusicLibrariesTitle": "Aucune bibliothèque musicale", "@noMusicLibrariesTitle": { - "description": "Title for message that shows on the views screen when no music libraries could be found." - } + "description": "Titre du message affiché sur l'écran de vues lorsque aucune bibliothèque musicale n'a été trouvée." + }, + "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\".", + "refresh": "RAFRAÎCHIR", + "swipeInsertQueueNext": "Lire la chanson balayée en prochain", + "@swipeInsertQueueNext": {}, + "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.", + "@swipeInsertQueueNextSubtitle": {}, + "redesignBeta": "Essayer la bêta", + "@redesignBeta": {}, + "playbackOrderShuffledTooltip": "Lecture en aléatoire. Touchez pour activer/désactiver.", + "@playbackOrderShuffledTooltip": {}, + "playbackOrderLinearTooltip": "Lecture dans l'ordre. Touchez pour activer/désactiver.", + "@playbackOrderLinearTooltip": {}, + "loopModeAllTooltip": "Lecture en boucle de l'ensemble. Touchez pour activer/désactiver.", + "@loopModeAllTooltip": {}, + "loopModeOneTooltip": "Lecture en boucle d'un seul. Touchez pour activer/désactiver.", + "@loopModeOneTooltip": {}, + "loopModeNoneTooltip": "Ne pas lire en boucle. Touchez pour activer/désactiver.", + "@loopModeNoneTooltip": {}, + "skipToPrevious": "Passer à la chanson précédente", + "@skipToPrevious": {}, + "skipToNext": "Passer à la chanson suivante", + "@skipToNext": {}, + "togglePlayback": "Activer/désactiver la lecture", + "@togglePlayback": {}, + "playArtist": "Lire tous les albums de {artist}", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "Lire aléatoirement tous les albums de {artist}", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "downloadArtist": "Télécharger tous les albums de {artist}", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "deleteFromDevice": "Supprimer de l'appareil", + "@deleteFromDevice": {}, + "download": "Télécharger", + "@download": {}, + "sync": "Synchroniser avec le serveur", + "@sync": {}, + "about": "À propos de Finamp", + "@about": {} } diff --git a/lib/l10n/app_hr.arb b/lib/l10n/app_hr.arb index 8517a98f8..776a7bea7 100644 --- a/lib/l10n/app_hr.arb +++ b/lib/l10n/app_hr.arb @@ -37,7 +37,7 @@ "@revenue": {}, "runtime": "Vrijeme trajanja", "@runtime": {}, - "downloadMissingImages": "Preuzmi nedostajuće fotografije", + "downloadMissingImages": "Preuzmi nedostajuće slike", "@downloadMissingImages": {}, "noErrors": "Nema grešaka!", "@noErrors": {}, @@ -59,15 +59,15 @@ "@logOut": {}, "unknownError": "Nepoznata greška", "@unknownError": {}, - "pathReturnSlashErrorMessage": "Staze koje vraćaju \"/\" se ne mogu koristiti", + "pathReturnSlashErrorMessage": "Staze sa znakom „/” se ne mogu koristiti", "@pathReturnSlashErrorMessage": {}, - "shuffleAllSongCount": "Izmiješaj sve pjesme", + "shuffleAllSongCount": "Broj pjesama za miješanje", "@shuffleAllSongCount": {}, "list": "Popis", "@list": {}, - "portrait": "Uspravni", + "portrait": "Uspravno", "@portrait": {}, - "landscape": "Ležeći", + "landscape": "Polegnuto", "@landscape": {}, "gridCrossAxisCount": "{value} broj rešetkastih linija", "@gridCrossAxisCount": { @@ -91,7 +91,7 @@ "@streaming": {}, "statusError": "GREŠKA STANJA", "@statusError": {}, - "removedFromPlaylist": "Uklonjeno iz popisa pjesama.", + "removedFromPlaylist": "Uklonjeno iz playliste.", "@removedFromPlaylist": {}, "startingInstantMix": "Pokretanje instant miksa.", "@startingInstantMix": {}, @@ -150,7 +150,7 @@ "@couldNotFindLibraries": { "description": "Error message when the user does not have any libraries" }, - "playlists": "Popisi pjesama", + "playlists": "Playliste", "@playlists": {}, "startMix": "Pokreni miks", "@startMix": {}, @@ -196,7 +196,7 @@ "@premiereDate": {}, "criticRating": "Ocjena kritičara", "@criticRating": {}, - "downloadedMissingImages": "{count,plural, =0{Nema nedostajućih fotografija} =1{Preuzeta je {count} nedostajuća fotografija} few{Preuzete su {count} nedostajuće fotografije} other{Preuzeto je {count} nedostajućih fotografija}}", + "downloadedMissingImages": "{count,plural, =0{Nema nedostajućih slika} =1{Preuzeta je {count} nedostajuća slika} few{Preuzete su {count} nedostajuće slike} other{Preuzeto je {count} nedostajućih slika}}", "@downloadedMissingImages": { "description": "Message that shows when the user downloads missing images", "placeholders": { @@ -205,7 +205,7 @@ } } }, - "editPlaylistNameTitle": "Uredi ime popisa pjesama", + "editPlaylistNameTitle": "Uredi ime playliste", "@editPlaylistNameTitle": {}, "customLocation": "Prilagođena lokacija", "@customLocation": {}, @@ -251,7 +251,7 @@ } } }, - "downloadedImagesCount": "{count,plural,=1{{count} fotografija} few{{count} fotografije} other{{count} fotografija}}", + "downloadedImagesCount": "{count,plural,=1{{count} slika} few{{count} slike} other{{count} slika}}", "@downloadedImagesCount": { "placeholders": { "count": { @@ -277,11 +277,11 @@ }, "downloadErrorsTitle": "Greške preuzimanja", "@downloadErrorsTitle": {}, - "editPlaylistNameTooltip": "Uredi ime popisa pjesama", + "editPlaylistNameTooltip": "Uredi ime playliste", "@editPlaylistNameTooltip": {}, - "playlistNameUpdated": "Ime popisa pjesama je ažurirano.", + "playlistNameUpdated": "Ime playliste je ažurirano.", "@playlistNameUpdated": {}, - "dlEnqueued": "{count} u redu čekanja", + "dlEnqueued": "{count} dodano u red", "@dlEnqueued": { "placeholders": { "count": { @@ -289,7 +289,7 @@ } } }, - "dlRunning": "{count} pokrenuto", + "dlRunning": "{count} u tijeku", "@dlRunning": { "placeholders": { "count": { @@ -333,7 +333,7 @@ "@layoutAndTheme": {}, "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.", "@customLocationsBuggy": {}, - "shuffleAllSongCountSubtitle": "Količina pjesama koja se učitava kada se koristi gumb „Izmiješaj sve pjesme”.", + "shuffleAllSongCountSubtitle": "Broj pjesama koje se učitavaju kada se koristi gumb „Izmiješaj sve pjesme”.", "@shuffleAllSongCountSubtitle": {}, "noArtist": "Nema izvođača", "@noArtist": {}, @@ -379,7 +379,7 @@ "@enableTranscoding": {}, "enableTranscodingSubtitle": "Transkodira stream glazbe na server strani.", "@enableTranscodingSubtitle": {}, - "addToPlaylistTooltip": "Dodaj u popis pjesama", + "addToPlaylistTooltip": "Dodaj u playlistu", "@addToPlaylistTooltip": {}, "goToAlbum": "Idi na album", "@goToAlbum": {}, @@ -407,17 +407,17 @@ "@createButtonLabel": {}, "sleepTimerTooltip": "Odbrojavanje", "@sleepTimerTooltip": {}, - "addToPlaylistTitle": "Dodaj u popis pjesama", + "addToPlaylistTitle": "Dodaj u playlistu", "@addToPlaylistTitle": {}, - "removeFromPlaylistTitle": "Ukloni iz popisa pjesama", + "removeFromPlaylistTitle": "Ukloni iz playliste", "@removeFromPlaylistTitle": {}, - "newPlaylist": "Novi popis pjesama", + "newPlaylist": "Nova playlista", "@newPlaylist": {}, "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "Da li prikazati izvođače pjesama na ekranu albuma ako se ne razlikuju od izvođača albuma.", "@hideSongArtistsIfSameAsAlbumArtistsSubtitle": {}, "disableGestureSubtitle": "Da li deaktivirati geste.", "@disableGestureSubtitle": {}, - "system": "Sistem", + "system": "Sustav", "@system": {}, "light": "Svijetla", "@light": {}, @@ -429,13 +429,13 @@ "@noButtonLabel": {}, "invalidNumber": "Neispravan broj", "@invalidNumber": {}, - "removeFromPlaylistTooltip": "Ukloni iz popisa pjesama", + "removeFromPlaylistTooltip": "Ukloni iz playliste", "@removeFromPlaylistTooltip": {}, "unknownArtist": "Nepoznat izvođač", "@unknownArtist": {}, "transcode": "TRANSKODIRAJ", "@transcode": {}, - "playlistCreated": "Popis pjesama je stvoren.", + "playlistCreated": "Playlista je stvorena.", "@playlistCreated": {}, "noAlbum": "Nema albuma", "@noAlbum": {}, @@ -492,7 +492,7 @@ "@insertedIntoQueue": { "description": "Snackbar message that shows when the user successfully inserts items into the play queue at a location that is not necessarily the end." }, - "playNext": "Reproduciraj sljedeću", + "playNext": "Reproduciraj kao sljedeću", "@playNext": { "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." }, @@ -508,13 +508,13 @@ "@deleteDownloadsConfirmButtonText": { "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." }, - "syncDownloadedPlaylists": "Sinkroniziraj preuzete popise pjesama", + "syncDownloadedPlaylists": "Sinkroniziraj preuzete playliste", "@syncDownloadedPlaylists": {}, "deleteDownloadsAbortButtonText": "Odustani", "@deleteDownloadsAbortButtonText": {}, "showFastScroller": "Prikaži traku za brzo listanje", "@showFastScroller": {}, - "deleteDownloadsPrompt": "Stvarno želiš izbrisati {itemType, select, album{album } playlist{playlistu } artist{izvođača } genre{žanr } track{pjesmu } other{}}'{itemName}' s ovog uređaja?", + "deleteDownloadsPrompt": "Stvarno želiš izbrisati {itemType, select, album{album} playlist{playlistu} artist{izvođača} genre{žanr} track{pjesmu} other{}} '{itemName}' s ovog uređaja?", "@deleteDownloadsPrompt": { "placeholders": { "itemName": { @@ -527,5 +527,64 @@ } }, "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." - } + }, + "swipeInsertQueueNextSubtitle": "Omogući umetanje pjesme kao sljedeću pjesmu u redu reprodukcije povlačenjem pjesme iz popisa pjesama umjesto dodavanja pjesme na kraj popisa.", + "@swipeInsertQueueNextSubtitle": {}, + "interactions": "Interakcije", + "@interactions": {}, + "swipeInsertQueueNext": "Reproduciraj pjesmu kao sljedeću povlačenjem", + "@swipeInsertQueueNext": {}, + "redesignBeta": "Probaj beta verziju", + "@redesignBeta": {}, + "skipToPrevious": "Prijeđi na prethodnu pjesmu", + "@skipToPrevious": {}, + "skipToNext": "Prijeđi na sljedeću pjesmu", + "@skipToNext": {}, + "deleteFromDevice": "Izbriši s uređaja", + "@deleteFromDevice": {}, + "download": "Preuzmi", + "@download": {}, + "sync": "Sinkroniziraj sa serverom", + "@sync": {}, + "playbackOrderShuffledTooltip": "Miješanje. Uključi/isključi dodirom.", + "@playbackOrderShuffledTooltip": {}, + "playbackOrderLinearTooltip": "Reprodukcija redom. Uključi/isključi dodirom.", + "@playbackOrderLinearTooltip": {}, + "togglePlayback": "Uključi/isključi reprodukciju", + "@togglePlayback": {}, + "loopModeAllTooltip": "Ponavljanje svih. Uključi/isključi dodirom.", + "@loopModeAllTooltip": {}, + "loopModeOneTooltip": "Ponavljanje jedne. Uključi/isključi dodirom.", + "@loopModeOneTooltip": {}, + "about": "O aplikaciji Finamp", + "@about": {}, + "shuffleArtist": "Izmiješaj sve albume od {artist}", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "playArtist": "Reproduciraj sve albume od {artist}", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "downloadArtist": "Preuzmi sve albume od {artist}", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "loopModeNoneTooltip": "Bez ponavljanja. Uključi/isključi dodirom.", + "@loopModeNoneTooltip": {} } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 8db688f23..0d1e10e5f 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -315,7 +315,7 @@ "@bitrateSubtitle": {}, "shuffleAllSongCountSubtitle": "Numero di brani da caricare quando si usa il tasto per la riproduzione casuale di tutti i brani.", "@shuffleAllSongCountSubtitle": {}, - "errorScreenError": "Si è verificato un errore mentre tentavo di ottenere la lista degli errori! A questo punto probabilmente puoi solo aprire una issue su GitHub e cancellare i dati dell'app", + "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", "@errorScreenError": {}, "anErrorHasOccured": "Si è verificato un errore.", "@anErrorHasOccured": {}, @@ -507,5 +507,13 @@ "enableVibration": "Abilita vibrazione", "@enableVibration": {}, "enableVibrationSubtitle": "Se vuoi abilitare la vibrazione.", - "@enableVibrationSubtitle": {} + "@enableVibrationSubtitle": {}, + "syncDownloadedPlaylists": "Sincronizza playlists scaricate", + "@syncDownloadedPlaylists": {}, + "deleteDownloadsConfirmButtonText": "Elimina", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "deleteDownloadsAbortButtonText": "Annulla", + "@deleteDownloadsAbortButtonText": {} } diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 236ba24df..698d2ece5 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -5,11 +5,11 @@ "@error": {}, "serverUrl": "サーバー URL", "@serverUrl": {}, - "internalExternalIpExplanation": "Jellyfinサーバーをリモートでアクセスするには、外部 IP を指定して下さい。\n\nサーバーが HTTP ポート(80/443)で動いてる場合はポートを指定する必要はありません。サーバーがリバースプロクシの後段にある場合これが一般的です。", + "internalExternalIpExplanation": "リモートからJellyfinサーバーにアクセスするには外部IPを指定する必要があります。\n\nサーバーがHTTPポート(80/443)で動いている場合にはポートは不要です。サーバーがリバースプロキシの後ろにある場合はこれが一般的です。", "@internalExternalIpExplanation": { "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." }, - "emptyServerUrl": "サーバー URL は空であってはなりません", + "emptyServerUrl": "サーバーURLを入力してください", "@emptyServerUrl": { "description": "Error message that shows when the user submits a login without a server URL" }, @@ -61,11 +61,11 @@ "@startMix": {}, "favourites": "お気に入り", "@favourites": {}, - "startMixNoSongsArtist": "アーティスト名をロングプレスして、ミックス開始前にミックスビルダーに追加や外すことができます", + "startMixNoSongsArtist": "アーティスト名を長押しすることでミックス対象に追加または削除できます", "@startMixNoSongsArtist": { "description": "Snackbar message that shows when the user presses the instant mix button with no artists selected" }, - "startMixNoSongsAlbum": "アーティスト名をロングプレスして、ミックス開始前にミックスビルダーに追加や外すことができます", + "startMixNoSongsAlbum": "アルバムを長押しすることでミックス対象に追加または削除できます", "@startMixNoSongsAlbum": { "description": "Snackbar message that shows when the user presses the instant mix button with no albums selected" }, @@ -381,9 +381,9 @@ }, "goToAlbum": "アルバムに行く", "@goToAlbum": {}, - "errorScreenError": "エラーリスト取得時にエラーが発生しました!この時点では、GitHub でイシューを作成し、アプリデータを削除することをお勧めします", + "errorScreenError": "エラーリスト取得時にエラーが発生しました!この時点では、GitHub で issue を作成し、アプリデータを削除することをお勧めします", "@errorScreenError": {}, - "startupError": "起動時に問題が起こりました。エラー: {error}\n\ngithub.com/UnicornsOnLSD/finamp でイシューを作成し、このページのスクリーンショットを付けてください。問題が継続した場合はアプリデータをクリアしてアプリを初期化して下さい。", + "startupError": "起動時に問題が起こりました。エラー内容: {error}\n\ngithub.com/UnicornsOnLSD/finamp でイシューを作成し、このページのスクリーンショットを付けてください。問題が継続した場合はアプリデータをクリアしてアプリを初期化して下さい。", "@startupError": { "description": "The error message that shows when startup fails.", "placeholders": { @@ -417,7 +417,7 @@ "@bufferDuration": {}, "language": "言語", "@language": {}, - "finamp": "フィナンプ", + "finamp": "Finamp", "@finamp": {}, "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", "@downloadedItemsImagesCount": { @@ -435,7 +435,7 @@ }, "areYouSure": "よろしいですか?", "@areYouSure": {}, - "appDirectory": "アプリディレクトリ", + "appDirectory": "Appのディレクトリ", "@appDirectory": {}, "shuffleAllSongCount": "曲がシャッフル化される回数", "@shuffleAllSongCount": {}, @@ -453,7 +453,7 @@ } } }, - "customLocation": "カスタム場所", + "customLocation": "指定の場所", "@customLocation": {}, "refresh": "リフレッシュ", "@refresh": {}, @@ -464,5 +464,64 @@ "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." }, "resetTabs": "タブリセット", - "@resetTabs": {} + "@resetTabs": {}, + "viewTypeSubtitle": "ミュージック画面の表示形式", + "@viewTypeSubtitle": {}, + "deleteDownloadsPrompt": "このデバイスから{itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} '{itemName}'を削除してもよろしいですか?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "insertedIntoQueue": "キューに挿入されました。", + "@insertedIntoQueue": { + "description": "Snackbar message that shows when the user successfully inserts items into the play queue at a location that is not necessarily the end." + }, + "responseError401": "{error} Status code {statusCode}. ユーザー名/パスワードが間違っているか、クライアントがログインしていません。", + "@responseError401": { + "placeholders": { + "error": { + "type": "String", + "example": "Unauthorized" + }, + "statusCode": { + "type": "int", + "example": "401" + } + } + }, + "noMusicLibrariesBody": "Finamp は音楽ライブラリを見つけることができませんでした。Jellyfin サーバーに、コンテンツ タイプが「音楽」に設定されているライブラリが少なくとも 1 つ含まれていることを確認してください。", + "@noMusicLibrariesBody": {}, + "swipeInsertQueueNextSubtitle": "曲リストでスワイプしたときに、曲を最後に追加するのではなく、キューの次の項目として挿入できるようにします。", + "@swipeInsertQueueNextSubtitle": {}, + "deleteDownloadsAbortButtonText": "キャンセル", + "@deleteDownloadsAbortButtonText": {}, + "showUncensoredLogMessage": "このログはあなたのログイン情報を含みます。表示しますか?", + "@showUncensoredLogMessage": {}, + "syncDownloadedPlaylists": "ダウンロードしたプレイリストの同期", + "@syncDownloadedPlaylists": {}, + "deleteDownloadsConfirmButtonText": "削除", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "applicationLegalese": "Mozilla Public License 2.0 でライセンスされています。ソース コードは以下から入手できます:\n\ngithub.com/jmshrv/finamp", + "@applicationLegalese": {}, + "customLocationsBuggy": "カスタムの場所は、権限の問題により、非常にバグが多くなります。これを修正する方法を考えていますが、今のところは使用しないことをお勧めします。", + "@customLocationsBuggy": {}, + "showFastScroller": "高速スクロールを表示", + "@showFastScroller": {}, + "swipeInsertQueueNext": "スワイプした曲を再生する", + "@swipeInsertQueueNext": {}, + "noMusicLibrariesTitle": "音楽ライブラリなし", + "@noMusicLibrariesTitle": { + "description": "Title for message that shows on the views screen when no music libraries could be found." + } } diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb new file mode 100644 index 000000000..a08151bcc --- /dev/null +++ b/lib/l10n/app_ko.arb @@ -0,0 +1,594 @@ +{ + "internalExternalIpExplanation": "귀하의 Jellyfin 서버에 원격으로 접속하려면, 외부 IP 주소를 사용해야 합니다.\n\n귀하의 서버가 HTTP 포트(80/443)에 있거나 역방향 프록시(Reverse Proxy) 뒤에 있는 경우, 포트를 지정할 필요는 없습니다.", + "@internalExternalIpExplanation": { + "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." + }, + "next": "다음", + "@next": {}, + "selectMusicLibraries": "음악 라이브러리 선택", + "@selectMusicLibraries": { + "description": "App bar title for library select screen" + }, + "genres": "장르", + "@genres": {}, + "startMix": "믹스 시작하기", + "@startMix": {}, + "serverUrl": "서버 URL", + "@serverUrl": {}, + "emptyServerUrl": "서버 URL은 필수값 입니다", + "@emptyServerUrl": { + "description": "Error message that shows when the user submits a login without a server URL" + }, + "urlStartWithHttps": "URL은 \"http://\" 또는 \"https://\"로 시작해야 합니다", + "@urlStartWithHttps": { + "description": "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" + }, + "urlTrailingSlash": "URL 끝부분에 슬래시(/, 후행 슬래시)를 붙이지 마세요", + "@urlTrailingSlash": { + "description": "Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/)" + }, + "username": "사용자 이름(아이디)", + "@username": {}, + "password": "암호", + "@password": {}, + "logs": "로그(사용기록)", + "@logs": {}, + "couldNotFindLibraries": "라이브러리를 찾을 수 없습니다.", + "@couldNotFindLibraries": { + "description": "Error message when the user does not have any libraries" + }, + "unknownName": "알 수 없는 이름", + "@unknownName": {}, + "songs": "노래", + "@songs": {}, + "albums": "앨범", + "@albums": {}, + "artists": "아티스트", + "@artists": {}, + "playlists": "플레이리스트", + "@playlists": {}, + "startMixNoSongsAlbum": "믹스를 시작하기 전에 '앨범'을 길게 탭하여 믹스 빌더에서 추가하거나 제거하세요", + "@startMixNoSongsAlbum": { + "description": "Snackbar message that shows when the user presses the instant mix button with no albums selected" + }, + "music": "음악", + "@music": {}, + "clear": "삭제(비우기)", + "@clear": {}, + "shuffleAll": "임의 재생(모두)", + "@shuffleAll": {}, + "finamp": "핀앰프(Finamp)", + "@finamp": {}, + "sortOrder": "정렬 순서", + "@sortOrder": {}, + "sortBy": "정렬 기준", + "@sortBy": {}, + "budget": "예산", + "@budget": {}, + "communityRating": "커뮤니티 평점", + "@communityRating": {}, + "criticRating": "비평가 평점", + "@criticRating": {}, + "dateAdded": "추가된 날짜", + "@dateAdded": {}, + "datePlayed": "재생한 날짜", + "@datePlayed": {}, + "premiereDate": "초연(프리미어) 날짜", + "@premiereDate": {}, + "productionYear": "제작년도", + "@productionYear": {}, + "name": "이름", + "@name": {}, + "random": "랜덤", + "@random": {}, + "revenue": "수익", + "@revenue": {}, + "runtime": "런타임(상영 시간)", + "@runtime": {}, + "syncDownloadedPlaylists": "다운로드한 플레이리스트 동기화", + "@syncDownloadedPlaylists": {}, + "downloadMissingImages": "누락된 이미지 다운로드", + "@downloadMissingImages": {}, + "downloadErrors": "다운로드 에러", + "@downloadErrors": {}, + "downloadCount": "{count,plural, =1{{count}건 다운로드} other{{count}건 다운로드}}", + "@downloadCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadedItemsCount": "{count,plural,=1{{count} 아이템} other{{count} 아이템}}", + "@downloadedItemsCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dlComplete": "{count}건 완료", + "@dlComplete": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dlFailed": "{count}건 실패", + "@dlFailed": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dlEnqueued": "{count}건 대기열에 추가됨", + "@dlEnqueued": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dlRunning": "{count}건 진행중", + "@dlRunning": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadErrorsTitle": "다운로드 오류", + "@downloadErrorsTitle": {}, + "noErrors": "오류가 없습니다!", + "@noErrors": {}, + "failedToGetSongFromDownloadId": "다운로드 ID에서 노래를 가져오지 못했습니다", + "@failedToGetSongFromDownloadId": {}, + "deleteDownloadsPrompt": "이 기기에서 {itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} '{itemName}'를 삭제하시겠습니까?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "deleteDownloadsConfirmButtonText": "삭제", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "playButtonLabel": "재생", + "@playButtonLabel": {}, + "shuffleButtonLabel": "임의 재생", + "@shuffleButtonLabel": {}, + "songCount": "{count,plural,=1{{count} 곡} other{{count} 곡}}", + "@songCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "editPlaylistNameTooltip": "플레이리스트 이름 수정", + "@editPlaylistNameTooltip": {}, + "required": "필수 항목", + "@required": {}, + "updateButtonLabel": "업데이트", + "@updateButtonLabel": {}, + "favourite": "즐겨찾기", + "@favourite": {}, + "addDownloads": "다운로드 추가", + "@addDownloads": {}, + "location": "위치", + "@location": {}, + "shareLogs": "로그(사용기록) 공유", + "@shareLogs": {}, + "logsCopied": "로그(사용기록) 복사함.", + "@logsCopied": {}, + "message": "메시지", + "@message": {}, + "stackTrace": "스택 추적", + "@stackTrace": {}, + "applicationLegalese": "Mozilla Public License 2.0에 따라 라이선스가 부여됐습니다. 소스 코드는 다음에서 확인할 수 있습니다:\n\ngithub.com/jmshrv/finamp", + "@applicationLegalese": {}, + "transcoding": "트랜스코딩", + "@transcoding": {}, + "downloadLocations": "다운로드 위치", + "@downloadLocations": {}, + "interactions": "상호작용", + "@interactions": {}, + "layoutAndTheme": "레이아웃 & 테마", + "@layoutAndTheme": {}, + "downloadedSongsWillNotBeDeleted": "다운로드한 노래는 삭제되지 않습니다", + "@downloadedSongsWillNotBeDeleted": {}, + "areYouSure": "확실한가요?", + "@areYouSure": {}, + "jellyfinUsesAACForTranscoding": "Jellyfin은 트랜스코딩에 AAC를 사용합니다", + "@jellyfinUsesAACForTranscoding": {}, + "enableTranscoding": "트랜스코딩 활성화", + "@enableTranscoding": {}, + "enableTranscodingSubtitle": "서버 측에서 음악 스트리밍을 트랜스코딩 합니다.", + "@enableTranscodingSubtitle": {}, + "bitrate": "비트레이트", + "@bitrate": {}, + "customLocation": "사용자 지정 위치", + "@customLocation": {}, + "unknownError": "알수 없는 오류", + "@unknownError": {}, + "directoryMustBeEmpty": "디렉토리는 비어 있어야 합니다", + "@directoryMustBeEmpty": {}, + "shuffleAllSongCount": "전곡 임의 재생시 곡 수", + "@shuffleAllSongCount": {}, + "shuffleAllSongCountSubtitle": "'전곡 임의 재생' 버튼을 사용할 때 불러올 곡의 개수입니다.", + "@shuffleAllSongCountSubtitle": {}, + "viewTypeSubtitle": "음악 화면 보기 유형", + "@viewTypeSubtitle": {}, + "list": "목록", + "@list": {}, + "grid": "그리드(격자)", + "@grid": {}, + "portrait": "세로 보기", + "@portrait": {}, + "landscape": "가로 보기", + "@landscape": {}, + "gridCrossAxisCount": "{value} 그리드 열 갯수", + "@gridCrossAxisCount": { + "description": "List tile title for grid cross axis count. Value will either be the portrait or landscape key.", + "placeholders": { + "value": { + "type": "String", + "example": "Portrait" + } + } + }, + "showTextOnGridView": "그리드 보기에서 텍스트를 보여줌", + "@showTextOnGridView": {}, + "showCoverAsPlayerBackground": "흐릿한 커버를 재생 화면 배경으로 보여줌", + "@showCoverAsPlayerBackground": {}, + "hideSongArtistsIfSameAsAlbumArtists": "앨범 아티스트와 동일한 경우, 곡 아티스트를 숨김", + "@hideSongArtistsIfSameAsAlbumArtists": {}, + "showTextOnGridViewSubtitle": "그리드 음악 화면에서 '텍스트(곡목, 아티스트 등)' 표시 여부를 설정합니다.", + "@showTextOnGridViewSubtitle": {}, + "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "앨범 화면에서 앨범 아티스트와 동일한 '곡 아티스트' 표시 여부를 설정합니다.", + "@hideSongArtistsIfSameAsAlbumArtistsSubtitle": {}, + "disableGesture": "제스처 비활성화", + "@disableGesture": {}, + "disableGestureSubtitle": "제스처 비활성화 여부를 설정합니다.", + "@disableGestureSubtitle": {}, + "showFastScroller": "빠른 스크롤 표시", + "@showFastScroller": {}, + "theme": "테마", + "@theme": {}, + "system": "시스템", + "@system": {}, + "light": "밝은 테마", + "@light": {}, + "tabs": "탭", + "@tabs": {}, + "yesButtonLabel": "네", + "@yesButtonLabel": {}, + "noButtonLabel": "아니오", + "@noButtonLabel": {}, + "setSleepTimer": "취침 타이머 설정", + "@setSleepTimer": {}, + "minutes": "분", + "@minutes": {}, + "invalidNumber": "잘못된 숫자", + "@invalidNumber": {}, + "addToPlaylistTooltip": "플레이리스트에 추가", + "@addToPlaylistTooltip": {}, + "addToPlaylistTitle": "플레이리스트에 추가", + "@addToPlaylistTitle": {}, + "removeFromPlaylistTooltip": "플레이리스트에서 삭제", + "@removeFromPlaylistTooltip": {}, + "newPlaylist": "새 플레이리스트", + "@newPlaylist": {}, + "createButtonLabel": "만들기", + "@createButtonLabel": {}, + "noAlbum": "앨범 없음", + "@noAlbum": {}, + "noItem": "곡 없음", + "@noItem": {}, + "noArtist": "아티스트 없음", + "@noArtist": {}, + "unknownArtist": "알 수 없는 아티스트", + "@unknownArtist": {}, + "streaming": "스트리밍", + "@streaming": {}, + "downloaded": "다운로드됨", + "@downloaded": {}, + "transcode": "트랜스코딩", + "@transcode": {}, + "statusError": "상태 오류", + "@statusError": {}, + "queue": "대기열", + "@queue": {}, + "addToQueue": "대기열에 추가", + "@addToQueue": { + "description": "Popup menu item title for adding an item to the end of the play queue." + }, + "instantMix": "인스턴트 믹스", + "@instantMix": {}, + "goToAlbum": "앨범으로 이동", + "@goToAlbum": {}, + "addFavourite": "즐겨찾기 추가", + "@addFavourite": {}, + "insertedIntoQueue": "대기열 중간에 추가.", + "@insertedIntoQueue": { + "description": "Snackbar message that shows when the user successfully inserts items into the play queue at a location that is not necessarily the end." + }, + "queueReplaced": "대기열이 교체됨.", + "@queueReplaced": {}, + "startingInstantMix": "인스턴트 믹스 시작.", + "@startingInstantMix": {}, + "anErrorHasOccured": "오류가 발생했습니다.", + "@anErrorHasOccured": {}, + "responseError": "{error} 상태 코드 {statusCode}.", + "@responseError": { + "placeholders": { + "error": { + "type": "String", + "example": "Forbidden" + }, + "statusCode": { + "type": "int", + "example": "403" + } + } + }, + "responseError401": "{error} 상태 코드 {statusCode}. 이것은 아마도 잘못된 로그인 정보를 사용했거나, 더 이상 로그인되어 있지 않음을 의미합니다.", + "@responseError401": { + "placeholders": { + "error": { + "type": "String", + "example": "Unauthorized" + }, + "statusCode": { + "type": "int", + "example": "401" + } + } + }, + "removeFromMix": "믹스에서 삭제", + "@removeFromMix": {}, + "addToMix": "믹스에 추가", + "@addToMix": {}, + "redownloadedItems": "{count,plural, =0{다시 다운로드할 필요가 없습니다.} =1{{count} 아이템 다시 다운로드함} other{{count} 아이템 다시 다운로드함}}", + "@redownloadedItems": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "bufferDuration": "버퍼 시간", + "@bufferDuration": {}, + "bufferDurationSubtitle": "플레이어가 버퍼링해야 하는 시간(초) 입니다. 다시 시작해야 합니다.", + "@bufferDurationSubtitle": {}, + "language": "언어", + "@language": {}, + "showUncensoredLogMessage": "이 로그(사용기록)는 귀하의 로그인 정보를 포함합니다. 표시할까요?", + "@showUncensoredLogMessage": {}, + "resetTabs": "탭 초기화", + "@resetTabs": {}, + "noMusicLibrariesTitle": "음악 라이브러리 없음", + "@noMusicLibrariesTitle": { + "description": "Title for message that shows on the views screen when no music libraries could be found." + }, + "noMusicLibrariesBody": "Finamp가 음악 라이브러리를 찾을 수 없습니다. 귀하의 Jellyfin 서버에 콘텐츠 유형이 \"음악\"으로 설정된 라이브러리가 하나 이상 있는지 확인하세요.", + "@noMusicLibrariesBody": {}, + "startMixNoSongsArtist": "믹스를 시작하기 전에 '아티스트'를 길게 탭하여 믹스 빌더에서 추가하거나 제거하세요", + "@startMixNoSongsArtist": { + "description": "Snackbar message that shows when the user presses the instant mix button with no artists selected" + }, + "playCount": "재생 횟수", + "@playCount": {}, + "downloadedMissingImages": "{count,plural, =0{누락된 이미지 없음} =1{누락된 이미지 {count}건 다운로드} other{누락된 이미지 {count}건 다운로드}}", + "@downloadedMissingImages": { + "description": "Message that shows when the user downloads missing images", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "favourites": "즐겨찾기", + "@favourites": {}, + "album": "앨범", + "@album": {}, + "downloads": "다운로드", + "@downloads": {}, + "settings": "설정", + "@settings": {}, + "offlineMode": "오프라인 모드", + "@offlineMode": {}, + "albumArtist": "앨범 아티스트", + "@albumArtist": {}, + "artist": "아티스트", + "@artist": {}, + "downloadedImagesCount": "{count,plural,=1{이미지 {count}건} other{이미지 {count}건}}", + "@downloadedImagesCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", + "@downloadedItemsImagesCount": { + "description": "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", + "placeholders": { + "downloadedItems": { + "type": "String", + "example": "12 downloads" + }, + "downloadedImages": { + "type": "String", + "example": "1 image" + } + } + }, + "refresh": "새로고침", + "@refresh": {}, + "redesignBeta": "베타 버전 사용해보기", + "@redesignBeta": {}, + "errorScreenError": "오류 목록을 가져오지 못했습니다! 이 시점에서는 GitHub에 문제를 등록하고 앱 데이터를 삭제해야 합니다", + "@errorScreenError": {}, + "deleteDownloadsAbortButtonText": "취소", + "@deleteDownloadsAbortButtonText": {}, + "error": "오류", + "@error": {}, + "discNumber": "디스크 {number}", + "@discNumber": { + "placeholders": { + "number": { + "type": "int" + } + } + }, + "downloadsDeleted": "다운로드 항목을 삭제했습니다.", + "@downloadsDeleted": {}, + "editPlaylistNameTitle": "플레이리스트 이름 수정", + "@editPlaylistNameTitle": {}, + "playlistNameUpdated": "플레이리스트 이름을 갱신했습니다.", + "@playlistNameUpdated": {}, + "downloadsAdded": "다운로드를 추가했습니다.", + "@downloadsAdded": {}, + "addButtonLabel": "추가", + "@addButtonLabel": {}, + "audioService": "오디오 서비스", + "@audioService": {}, + "notAvailableInOfflineMode": "오프라인 모드에서는 사용할 수 없습니다", + "@notAvailableInOfflineMode": {}, + "logOut": "로그아웃", + "@logOut": {}, + "bitrateSubtitle": "비트레이트가 높으면 고품질의 음악을 들을 수 있습니다. 데이터 사용량도 증가합니다.", + "@bitrateSubtitle": {}, + "appDirectory": "앱 디렉토리", + "@appDirectory": {}, + "addDownloadLocation": "다운로드 위치 추가", + "@addDownloadLocation": {}, + "selectDirectory": "디렉토리 선택", + "@selectDirectory": {}, + "pathReturnSlashErrorMessage": "\"/(슬래시)\"로 끝나는 경로는 사용할 수 없습니다", + "@pathReturnSlashErrorMessage": {}, + "gridCrossAxisCountSubtitle": "{value} 일때 한 행당 그리드 타일의 개수.", + "@gridCrossAxisCountSubtitle": { + "description": "List tile subtitle for grid cross axis count. Value will either be the portrait or landscape key.", + "placeholders": { + "value": { + "type": "String", + "example": "landscape" + } + } + }, + "showCoverAsPlayerBackgroundSubtitle": "재생 화면에서 '흐릿한 앨범 커버 배경' 사용 여부를 설정합니다.", + "@showCoverAsPlayerBackgroundSubtitle": {}, + "customLocationsBuggy": "사용자 지정 위치는 권한 문제 때문에 버그가 매우 많습니다. 이 문제를 해결할 방법을 찾을 때 까지는 사용을 권장하지 않습니다.", + "@customLocationsBuggy": {}, + "enterLowPriorityStateOnPause": "일시 중지시 낮은 우선순위 상태로 전환합니다", + "@enterLowPriorityStateOnPause": {}, + "enterLowPriorityStateOnPauseSubtitle": "일시 중지시 알림창을 밀어서 사라지게 합니다. 안드로이드(OS)에서는 일시 중지시 서비스를 강제 종료할 수 있게 합니다.", + "@enterLowPriorityStateOnPauseSubtitle": {}, + "viewType": "보기 유형", + "@viewType": {}, + "dark": "어두운 테마", + "@dark": {}, + "sleepTimerTooltip": "취침 타이머", + "@sleepTimerTooltip": {}, + "cancelSleepTimer": "취침 타이머를 취소할까요?", + "@cancelSleepTimer": {}, + "removeFromPlaylistTitle": "플레이리스트에서 삭제", + "@removeFromPlaylistTitle": {}, + "playlistCreated": "플레이리스트 생성됨.", + "@playlistCreated": {}, + "direct": "다이렉트", + "@direct": {}, + "replaceQueue": "대기열 교체", + "@replaceQueue": {}, + "addedToQueue": "대기열 끝에 추가.", + "@addedToQueue": { + "description": "Snackbar message that shows when the user successfully adds items to the end of the play queue." + }, + "removedFromPlaylist": "플레이리스트에서 삭제됨.", + "@removedFromPlaylist": {}, + "playNext": "다음 곡 재생", + "@playNext": { + "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." + }, + "removeFavourite": "즐겨찾기 삭제", + "@removeFavourite": {}, + "confirm": "확인", + "@confirm": {}, + "swipeInsertQueueNext": "스와이프한 노래 재생", + "@swipeInsertQueueNext": {}, + "swipeInsertQueueNextSubtitle": "노래 목록에서 스와이프 했을 때, 노래를 대기열 끝에 추가하는 대신 바로 다음 곡으로 삽입할 수 있습니다.", + "@swipeInsertQueueNextSubtitle": {}, + "startupError": "앱 시작중에 문제가 발생했습니다. 오류 내용:{error}\n\n\"github.com/UnicornsOnLSD/finamp\"에 이 페이지의 캡처 화면을 첨부하여 '이슈'를 등록 해주세요. 이 문제가 지속되면 당신은 앱 데이터를 삭제하여 앱을 초기화 할 수 있습니다.", + "@startupError": { + "description": "The error message that shows when startup fails.", + "placeholders": { + "error": { + "type": "String", + "example": "Failed to open download DB" + } + } + }, + "playbackOrderShuffledTooltip": "임의 재생. 전환하려면 탭하세요.", + "@playbackOrderShuffledTooltip": {}, + "playbackOrderLinearTooltip": "순차 재생. 전환하려면 탭하세요.", + "@playbackOrderLinearTooltip": {}, + "loopModeAllTooltip": "모두 반복. 전환하려면 탭하세요.", + "@loopModeAllTooltip": {}, + "loopModeOneTooltip": "한곡 반복. 전환하려면 탭하세요.", + "@loopModeOneTooltip": {}, + "loopModeNoneTooltip": "반복 안 함. 전환하려면 탭하세요.", + "@loopModeNoneTooltip": {}, + "skipToPrevious": "이전 곡으로 넘기기", + "@skipToPrevious": {}, + "skipToNext": "다음 곡으로 넘기기", + "@skipToNext": {}, + "togglePlayback": "재생 전환하기", + "@togglePlayback": {}, + "playArtist": "{artist}의 모든 앨범 재생", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "{artist}의 모든 앨범 임의 재생", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "downloadArtist": "{artist}의 모든 앨범 다운로드", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "deleteFromDevice": "기기에서 삭제하기", + "@deleteFromDevice": {}, + "download": "다운로드", + "@download": {}, + "sync": "서버와 동기화하기", + "@sync": {}, + "about": "Finamp(핀앰프) 소개", + "@about": {} +} diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 1482151cf..fe288d70f 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -139,9 +139,9 @@ "@noErrors": {}, "addFavourite": "Dodaj do ulubionych", "@addFavourite": {}, - "addToPlaylistTooltip": "Dodaj do listy odtwarzania", + "addToPlaylistTooltip": "Dodaj do playlisty", "@addToPlaylistTooltip": {}, - "addToPlaylistTitle": "Dodaj do listy odtwarzania", + "addToPlaylistTitle": "Dodaj do Playlisty", "@addToPlaylistTitle": {}, "updateButtonLabel": "AKTUALIZUJ", "@updateButtonLabel": {}, @@ -434,7 +434,7 @@ "@transcode": {}, "applicationLegalese": "Licencja Mozilla Public License 2.0. Kod źródłowy dostępny na:\n\ngithub.com/jmshrv/finamp", "@applicationLegalese": {}, - "errorScreenError": "Wystąpił błąd podczas pobierania listy błędów. Utwórz zgłoszenie na portalu GitHub", + "errorScreenError": "Wystąpił błąd podczas pobierania listy błędów. Utwórz zgłoszenie na portalu GitHub i usuń dane aplikacji", "@errorScreenError": {}, "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.", "@internalExternalIpExplanation": { @@ -491,5 +491,49 @@ "playNext": "Następne", "@playNext": { "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." - } + }, + "interactions": "Interakcje", + "@interactions": {}, + "insertedIntoQueue": "Dodano do kolejki.", + "@insertedIntoQueue": { + "description": "Snackbar message that shows when the user successfully inserts items into the play queue at a location that is not necessarily the end." + }, + "noMusicLibrariesTitle": "Brak bibliotek muzycznych", + "@noMusicLibrariesTitle": { + "description": "Title for message that shows on the views screen when no music libraries could be found." + }, + "deleteDownloadsConfirmButtonText": "Usuń", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "deleteDownloadsAbortButtonText": "Cofnij", + "@deleteDownloadsAbortButtonText": {}, + "syncDownloadedPlaylists": "Synchronizuj pobrane playlisty", + "@syncDownloadedPlaylists": {}, + "showFastScroller": "Pokaż szybkie przewijanie", + "@showFastScroller": {}, + "refresh": "ODŚWIEŻ", + "@refresh": {}, + "swipeInsertQueueNext": "Odtwórz Przewiniętą Piosenkę Następnie", + "@swipeInsertQueueNext": {}, + "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.", + "@swipeInsertQueueNextSubtitle": {}, + "deleteDownloadsPrompt": "Czy napewno chcesz usunąć {itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} '{itemName}' z tego urządzenia?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "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\".", + "@noMusicLibrariesBody": {}, + "redesignBeta": "Przeprojektowanie Beta", + "@redesignBeta": {} } diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 7a0227b0f..1c862a866 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -9,11 +9,11 @@ "@addFavourite": {}, "addedToQueue": "Adicionado à fila.", "@addedToQueue": {}, - "internalExternalIpExplanation": "Se quer acessar o seu servidor Jellyfin remotamente, precisa usar o seu IP externo.\n\nSe o seu servidor está numa porta HTTP (80/443), não precisa especificar a porta. Esse será o caso se o servidor estiver atrás de um proxy reverso.", + "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.", "@internalExternalIpExplanation": { "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." }, - "urlStartWithHttps": "URL deve começar com http:// ou https://", + "urlStartWithHttps": "O URL deverá começar com http:// ou https://", "@urlStartWithHttps": { "description": "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" }, @@ -25,7 +25,7 @@ "@next": {}, "noErrors": "Sem erros!", "@noErrors": {}, - "errorScreenError": "Um erro ocorreu a aceder a lista de erros! A este ponto, deveria provavelmente catalogar um defeito no Github e apagar os dados da app", + "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", "@errorScreenError": {}, "shuffleButtonLabel": "MISTURAR", "@shuffleButtonLabel": {}, @@ -73,11 +73,11 @@ "@addToMix": {}, "serverUrl": "URL do servidor", "@serverUrl": {}, - "emptyServerUrl": "URL de servidor não pode ser vazia", + "emptyServerUrl": "O URL do servidor não pode estar em branco", "@emptyServerUrl": { "description": "Error message that shows when the user submits a login without a server URL" }, - "urlTrailingSlash": "URL não pode incluir a barra final", + "urlTrailingSlash": "O URL não pode ter uma barra no fim", "@urlTrailingSlash": { "description": "Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/)" }, @@ -89,7 +89,7 @@ }, "unknownName": "Nome desconhecido", "@unknownName": {}, - "selectMusicLibraries": "Selecione a biblioteca de Músicas", + "selectMusicLibraries": "Seleccione as suas bibliotecas de música", "@selectMusicLibraries": { "description": "App bar title for library select screen" }, @@ -99,11 +99,11 @@ "@albums": {}, "artists": "Artistas", "@artists": {}, - "genres": "Gêneros", + "genres": "Géneros", "@genres": {}, "playlists": "Listas de Reprodução", "@playlists": {}, - "startMix": "Começar Miscelânea", + "startMix": "Iniciar Mistura", "@startMix": {}, "music": "Música", "@music": {}, @@ -111,13 +111,13 @@ "@clear": {}, "favourites": "Favoritos", "@favourites": {}, - "shuffleAll": "Embaralhar todas", + "shuffleAll": "Misturar todas", "@shuffleAll": {}, "finamp": "Finamp", "@finamp": {}, - "downloads": "Descargas", + "downloads": "Transferências", "@downloads": {}, - "settings": "Configurações", + "settings": "Definições", "@settings": {}, "offlineMode": "Modo Offline", "@offlineMode": {}, @@ -155,11 +155,11 @@ "@revenue": {}, "runtime": "Duração", "@runtime": {}, - "downloadMissingImages": "Descarregar imagens ausentes", + "downloadMissingImages": "Transferir imagens inexistentes", "@downloadMissingImages": {}, "downloadErrors": "Erros de transferência", "@downloadErrors": {}, - "downloadedMissingImages": "{count,plural, =0{Nenhuma imagem ausente encontrada} =1{{count} imagem ausente descarregada} other{{count} imagens ausentes descarregadas}}", + "downloadedMissingImages": "{count,plural, =0{Não foram encontradas imagens em falta} =1{{count} imagem em falta transferida} other{{count} imagens em falta descarregadas}}", "@downloadedMissingImages": { "description": "Message that shows when the user downloads missing images", "placeholders": { @@ -206,7 +206,7 @@ } } }, - "dlEnqueued": "{count} enfileiradas", + "dlEnqueued": "{count} em espera", "@dlEnqueued": { "placeholders": { "count": { @@ -224,7 +224,7 @@ }, "downloadErrorsTitle": "Erros de Transferência", "@downloadErrorsTitle": {}, - "failedToGetSongFromDownloadId": "Falha em adquirir música do ID da descarga", + "failedToGetSongFromDownloadId": "Falha ao adquirir música do ID da descarga", "@failedToGetSongFromDownloadId": {}, "error": "Erro", "@error": {}, @@ -244,7 +244,7 @@ "@editPlaylistNameTitle": {}, "required": "Obrigatório", "@required": {}, - "updateButtonLabel": "ATUALIZAÇÃO", + "updateButtonLabel": "ACTUALIZAR", "@updateButtonLabel": {}, "playlistNameUpdated": "Nome da lista de reprodução atualizado.", "@playlistNameUpdated": {}, @@ -406,7 +406,7 @@ "@removedFromPlaylist": {}, "hideSongArtistsIfSameAsAlbumArtists": "Ocultar artistas da música se forem iguais aos artistas do álbum", "@hideSongArtistsIfSameAsAlbumArtists": {}, - "startMixNoSongsAlbum": "Mantenha pressionado um álbum para adicioná-lo ou removê-lo do criador de mixagens antes de iniciar uma mixagem", + "startMixNoSongsAlbum": "Antes de iniciar uma mistura, faça um toque longo num álbum para adicioná-lo ao editor de misturas", "@startMixNoSongsAlbum": { "description": "Snackbar message that shows when the user presses the instant mix button with no albums selected" }, @@ -438,7 +438,7 @@ }, "useCoverAsBackground": "Mostrar capa desfocada como plano de fundo do player", "@useCoverAsBackground": {}, - "startMixNoSongsArtist": "Mantenha pressionado um artista para adicioná-lo ou removê-lo do construtor de mixagem antes de iniciar uma mixagem", + "startMixNoSongsArtist": "Antes de iniciar uma mistura, faça um toque longo num artista para adicionar ou remover o mesmo do editor de misturas", "@startMixNoSongsArtist": { "description": "Snackbar message that shows when the user presses the instant mix button with no artists selected" }, @@ -486,7 +486,7 @@ }, "disableGestureSubtitle": "Se deseja desativar gestos.", "@disableGestureSubtitle": {}, - "startupError": "Algo correu mal durante a inicialização da aplicação. O erro foi:{error}\n\nPor favor crie um \"Issue\" em github.com/UnicornsOnLSD/finamp com uma captura de ecrã desta página. Se o problema persistir, pode tentar limpar os dados do aplicativo para redefini-lo.", + "startupError": "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.", "@startupError": { "description": "The error message that shows when startup fails.", "placeholders": { @@ -496,7 +496,7 @@ } } }, - "refresh": "ATUALIZAR", + "refresh": "ACTUALIZAR", "@refresh": {}, "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”.", "@noMusicLibrariesBody": {}, diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb index 3a82fb39e..ad74ed37f 100644 --- a/lib/l10n/app_pt_BR.arb +++ b/lib/l10n/app_pt_BR.arb @@ -380,7 +380,7 @@ }, "budget": "Orçamento", "@budget": {}, - "errorScreenError": "Um erro ocorreu acessando a lista de erros! A este ponto, você deveria provavelmente catalogar um defeito no Github e apagar os dados do aplicativo", + "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", "@errorScreenError": {}, "error": "Erro", "@error": {}, @@ -503,5 +503,88 @@ "noMusicLibrariesTitle": "Sem Bibliotecas de Música", "@noMusicLibrariesTitle": { "description": "Title for message that shows on the views screen when no music libraries could be found." - } + }, + "interactions": "Interações", + "@interactions": {}, + "swipeInsertQueueNext": "Tocar Música Deslizada em Seguida", + "@swipeInsertQueueNext": {}, + "swipeInsertQueueNextSubtitle": "Adicionar uma música como próximo item na lista quando for deslizada, ao invés de adicionar no final.", + "@swipeInsertQueueNextSubtitle": {}, + "deleteDownloadsPrompt": "Você tem certeza que quer deletar {itemType, select, album{o álbum} playlist{a lista de reprodução} artist{o artista} genre{o gênero} track{a música} other{}} '{itemName}' desse dispositivo?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "deleteDownloadsConfirmButtonText": "Deletar", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "deleteDownloadsAbortButtonText": "Cancelar", + "@deleteDownloadsAbortButtonText": {}, + "syncDownloadedPlaylists": "Sincronizar listas de reprodução baixadas", + "@syncDownloadedPlaylists": {}, + "showFastScroller": "Mostrar rolagem rápida", + "@showFastScroller": {}, + "redesignBeta": "Teste o beta", + "@redesignBeta": {}, + "playbackOrderLinearTooltip": "Tocando em ordem. Aperte para ativar.", + "@playbackOrderLinearTooltip": {}, + "playbackOrderShuffledTooltip": "Embaralhando. Aperte para ativar.", + "@playbackOrderShuffledTooltip": {}, + "loopModeAllTooltip": "Repetir tudo. Aperte para ativar.", + "@loopModeAllTooltip": {}, + "loopModeOneTooltip": "Repetir uma. Aperte para ativar.", + "@loopModeOneTooltip": {}, + "loopModeNoneTooltip": "Sem repetição. Aperte para ativar.", + "@loopModeNoneTooltip": {}, + "skipToNext": "Pular para próxima música", + "@skipToNext": {}, + "skipToPrevious": "Pular para música anterior", + "@skipToPrevious": {}, + "deleteFromDevice": "Remover do dispositivo", + "@deleteFromDevice": {}, + "download": "Baixar", + "@download": {}, + "sync": "Sincronizar com servidor", + "@sync": {}, + "downloadArtist": "Baixar todos os álbuns de {artist}", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "Tocar todos os álbuns de {artist} em modo aleatório", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "playArtist": "Tocar todos os álbuns de {artist}", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "togglePlayback": "Ativar reprodução", + "@togglePlayback": {}, + "about": "Sobre Finamp", + "@about": {} } diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 219c54804..f1393e8a4 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -13,11 +13,11 @@ "@urlTrailingSlash": { "description": "Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/)" }, - "selectMusicLibraries": "Выбрать библиотеку", + "selectMusicLibraries": "Выбрать музыкальные библиотеки", "@selectMusicLibraries": { "description": "App bar title for library select screen" }, - "couldNotFindLibraries": "Не было найдено библиотек.", + "couldNotFindLibraries": "Библиотеки не найдены.", "@couldNotFindLibraries": { "description": "Error message when the user does not have any libraries" }, @@ -29,7 +29,7 @@ "@music": {}, "finamp": "Finamp", "@finamp": {}, - "albumArtist": "Исполнитель альбома", + "albumArtist": "Исполнитель Альбома", "@albumArtist": {}, "artist": "Исполнитель", "@artist": {}, @@ -53,7 +53,7 @@ "@random": {}, "downloadErrors": "Ошибки Скачивания", "@downloadErrors": {}, - "downloadedImagesCount": "{count,plural,=1{{count} изображение} other{{count} изображения}}", + "downloadedImagesCount": "{count,plural,=1{{count} изображение} few{{count} изображения} other{{count} изображений}}", "@downloadedImagesCount": { "placeholders": { "count": { @@ -85,7 +85,7 @@ "@playButtonLabel": {}, "shuffleButtonLabel": "СЛУЧАЙНО", "@shuffleButtonLabel": {}, - "songCount": "{count,plural,=1{{count} Трек} other{{count} Треки}}", + "songCount": "{count,plural,=1{{count} трек} few{{count} трека} other{{count} треков}}", "@songCount": { "placeholders": { "count": { @@ -93,9 +93,9 @@ } } }, - "editPlaylistNameTooltip": "Отредактировать название плейлиста", + "editPlaylistNameTooltip": "Редактировать название плейлиста", "@editPlaylistNameTooltip": {}, - "editPlaylistNameTitle": "Отредактировать название плейлиста", + "editPlaylistNameTitle": "Изменить название плейлиста", "@editPlaylistNameTitle": {}, "required": "Необходимо", "@required": {}, @@ -125,7 +125,7 @@ "@downloadLocations": {}, "audioService": "Аудиосервис", "@audioService": {}, - "layoutAndTheme": "Тема", + "layoutAndTheme": "Макет и тема", "@layoutAndTheme": {}, "logOut": "Выйти", "@logOut": {}, @@ -173,7 +173,7 @@ "@landscape": {}, "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "Отображать исполнителя трека на странице альбома, если он совпадает с исполнителем альбома.", "@hideSongArtistsIfSameAsAlbumArtistsSubtitle": {}, - "theme": "Тема", + "theme": "Тема оформления", "@theme": {}, "system": "Системная", "@system": {}, @@ -183,13 +183,13 @@ "@dark": {}, "tabs": "Вкладки", "@tabs": {}, - "cancelSleepTimer": "Выключить таймер?", + "cancelSleepTimer": "Выключить Таймер?", "@cancelSleepTimer": {}, "yesButtonLabel": "ДА", "@yesButtonLabel": {}, "noButtonLabel": "НЕТ", "@noButtonLabel": {}, - "setSleepTimer": "Поставить таймер", + "setSleepTimer": "Поставить Таймер", "@setSleepTimer": {}, "sleepTimerTooltip": "Таймер", "@sleepTimerTooltip": {}, @@ -197,9 +197,9 @@ "@createButtonLabel": {}, "playlistCreated": "Плейлист создан.", "@playlistCreated": {}, - "noItem": "Нет файлов", + "noItem": "Нет Элементов", "@noItem": {}, - "noArtist": "Нет исполнителя", + "noArtist": "Нет Исполнителя", "@noArtist": {}, "unknownArtist": "Неизвестный Исполнитель", "@unknownArtist": {}, @@ -215,21 +215,21 @@ "@statusError": {}, "queue": "Очередь", "@queue": {}, - "addToQueue": "Добавить в очередь", + "addToQueue": "Добавить в Очередь", "@addToQueue": {}, - "replaceQueue": "Заменить очередь", + "replaceQueue": "Заменить Очередь", "@replaceQueue": {}, - "instantMix": "Мгновенный микс", + "instantMix": "Мгновенный Микс", "@instantMix": {}, - "goToAlbum": "Перейти к альбому", + "goToAlbum": "Перейти к Альбому", "@goToAlbum": {}, "addedToQueue": "Добавлено в очередь.", "@addedToQueue": {}, "queueReplaced": "Очередь заменена.", "@queueReplaced": {}, - "startingInstantMix": "Мгновенный микс запущен.", + "startingInstantMix": "Запуск мгновенного микса.", "@startingInstantMix": {}, - "responseError": "{error} Код ошибки {statusCode}.", + "responseError": "{error} Код состояния {statusCode}.", "@responseError": { "placeholders": { "error": { @@ -242,7 +242,7 @@ } } }, - "responseError401": "{error} Код ошибки {statusCode}. Это, скорее всего, значит, что либо вы неправильно указали логин или пароль, либо ваш клиент более не авторизирован.", + "responseError401": "{error} Код состояния {statusCode}. Возможно, вы использовали неверное имя пользователя/пароль или ваш клиент больше не авторизован.", "@responseError401": { "placeholders": { "error": { @@ -255,19 +255,19 @@ } } }, - "removeFromMix": "Удалить из микса", + "removeFromMix": "Удалить из Микса", "@removeFromMix": {}, - "invalidNumber": "Неправильное число", + "invalidNumber": "Неправильное Число", "@invalidNumber": {}, "addToPlaylistTooltip": "Добавить в плейлист", "@addToPlaylistTooltip": {}, - "addToPlaylistTitle": "Добавить в плейлист", + "addToPlaylistTitle": "Добавить в Плейлист", "@addToPlaylistTitle": {}, - "newPlaylist": "Новый плейлист", + "newPlaylist": "Новый Плейлист", "@newPlaylist": {}, - "noAlbum": "Нет альбома", + "noAlbum": "Нет Альбома", "@noAlbum": {}, - "addFavourite": "В избранное", + "addFavourite": "Добавить в Избранное", "@addFavourite": {}, "anErrorHasOccured": "Произошла ошибка.", "@anErrorHasOccured": {}, @@ -275,17 +275,17 @@ "@clear": {}, "settings": "Настройки", "@settings": {}, - "removeFavourite": "Удалить из избранного", + "removeFavourite": "Удалить из Избранного", "@removeFavourite": {}, - "addToMix": "Добавить в микс", + "addToMix": "Добавить в Микс", "@addToMix": {}, "downloadMissingImages": "Скачать отсутствующие изображения", "@downloadMissingImages": {}, - "offlineMode": "Режим без интернета", + "offlineMode": "Автономный режим", "@offlineMode": {}, "startMix": "Начать Микс", "@startMix": {}, - "internalExternalIpExplanation": "Чтобы получить доступ к вашему серверу Jellyfin необходимо использовать внешний IP.\n\nЕсли ваш сервер работает на HTTP портах (80/443) вам не нужно его укзывать, например, если вы используете обратный прокси.", + "internalExternalIpExplanation": "Чтобы получить удалённый доступ к серверу Jellyfin, используйте внешний IP-адрес.\n\nЕсли ваш сервер работает на портах HTTP(S) 80/443, указывать порт не нужно. Это обычно так, если сервер находится за обратным прокси-сервером.", "@internalExternalIpExplanation": { "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." }, @@ -309,17 +309,17 @@ "@sortBy": {}, "next": "Далее", "@next": {}, - "startMixNoSongsArtist": "Зажмите исполнителя, чтобы добавить или убрать его из составителя микса, прежде чем запустить микс", + "startMixNoSongsArtist": "Чтобы добавить или удалить исполнителя из микса, нажмите и удерживайте его имя", "@startMixNoSongsArtist": { "description": "Snackbar message that shows when the user presses the instant mix button with no artists selected" }, - "startMixNoSongsAlbum": "Зажмите альбом, чтобы добавить или убрать его из составителя микса, прежде чем запустить микс", + "startMixNoSongsAlbum": "Чтобы добавить или удалить альбом из микса, нажмите и удерживайте его", "@startMixNoSongsAlbum": { "description": "Snackbar message that shows when the user presses the instant mix button with no albums selected" }, "favourites": "Избранное", "@favourites": {}, - "shuffleAll": "Проиграть все в случайном порядке", + "shuffleAll": "Перемешать всё", "@shuffleAll": {}, "downloads": "Загрузки", "@downloads": {}, @@ -329,9 +329,9 @@ "@productionYear": {}, "revenue": "Доход", "@revenue": {}, - "runtime": "Время проката", + "runtime": "Время выполнения", "@runtime": {}, - "downloadedMissingImages": "{count,plural, =0{Не найдено отсутствующих изображений} =1{Скачано {count} отсутствующее изображение} other{Скачано {count} отсутствующих изображений}}", + "downloadedMissingImages": "{count,plural, =0{Не найдено отсутствующих изображений} =1{Скачано {count} отсутствующее изображение} few{Скачано {count} отсутствующих изображения} other{Скачано {count} отсутствующих изображений}}", "@downloadedMissingImages": { "description": "Message that shows when the user downloads missing images", "placeholders": { @@ -340,7 +340,7 @@ } } }, - "downloadCount": "{count,plural, =1{{count} загрузка} other{{count} загрузки}}", + "downloadCount": "{count,plural, =1{{count} загрузка} few{{count} загрузки} other{{count} загрузок}}", "@downloadCount": { "placeholders": { "count": { @@ -348,7 +348,7 @@ } } }, - "downloadedItemsCount": "{count,plural,=1{{count} файл} other{{count} файлы}}", + "downloadedItemsCount": "{count,plural,=1{{count} файл} few{{count} файла} other{{count} файлы}}", "@downloadedItemsCount": { "placeholders": { "count": { @@ -356,7 +356,7 @@ } } }, - "dlFailed": "{count} ошибка загрузки", + "dlFailed": "{count} не удалось", "@dlFailed": { "placeholders": { "count": { @@ -400,7 +400,7 @@ "@addDownloads": {}, "noErrors": "Ошибок нет!", "@noErrors": {}, - "errorScreenError": "Ошибка получения списка ошибок. Скорее всего, вам нужно сбросить приложение и сообщить о данной ошибке на Github", + "errorScreenError": "Ошибка при получении списка ошибок! Скорее всего, вам нужно очистить данные приложения и сообщить о данной ошибке на Github", "@errorScreenError": {}, "location": "Расположение", "@location": {}, @@ -446,7 +446,7 @@ "@useCoverAsBackgroundSubtitle": {}, "hideSongArtistsIfSameAsAlbumArtists": "Не отображать одинаковых исполнителей для трека и альбома", "@hideSongArtistsIfSameAsAlbumArtists": {}, - "startupError": "Что-то пошло не так во время запуска приложения. Ошибка: {error}\n\nПожалуйста, опубликуйте ошибку на github.com/UnicornsOnLSD/finamp со скриншотом данной страницы. Если данная ошибка продолжит появляться, очистите данные, чтобы сбросить настройки приложения.", + "startupError": "Что-то пошло не так во время запуска приложения. Возникла ошибка: {error}\n\nПожалуйста, создайте \"issue\" на github.com/UnicornsOnLSD/finamp и приложите скриншот этой страницы. Если проблема будет повторяться, вы можете очистить данные приложения, чтобы сбросить его настройки.", "@startupError": { "description": "The error message that shows when startup fails.", "placeholders": { @@ -458,7 +458,7 @@ }, "minutes": "Минуты", "@minutes": {}, - "redownloadedItems": "{count,plural, =0{Скачивание заново не требуеться.} =1{Заново скачен {count} предмет} other{Заново скачено {count} предметов}}", + "redownloadedItems": "{count,plural, =0{Не требуется повторная загрузка.} =1{Повторно загружен {count} элемент} few{Повторно загружены {count} элемента} other{Повторно загружено {count} элементов}}", "@redownloadedItems": { "placeholders": { "count": { @@ -468,13 +468,13 @@ }, "disableGesture": "Отключить жесты", "@disableGesture": {}, - "disableGestureSubtitle": "Нужно ли отключить жесты.", + "disableGestureSubtitle": "Стоит ли отключать жесты.", "@disableGestureSubtitle": {}, "bufferDuration": "Длительность буферизации", "@bufferDuration": {}, - "bufferDurationSubtitle": "Сколько секунд плеер будет буферизовать. Необходим перезапуск.", + "bufferDurationSubtitle": "Размер буфера плеера (в секундах). Требуется перезапуск.", "@bufferDurationSubtitle": {}, - "removedFromPlaylist": "Удалено из Плейлиста.", + "removedFromPlaylist": "Удалено из плейлиста.", "@removedFromPlaylist": {}, "removeFromPlaylistTooltip": "Удалить из плейлиста", "@removeFromPlaylistTooltip": {}, @@ -484,7 +484,7 @@ "@language": {}, "confirm": "Подтвердить", "@confirm": {}, - "showUncensoredLogMessage": "Этот журнал содержит вашу регистрационную информацию. Показать?", + "showUncensoredLogMessage": "Этот лог содержит ваши данные для входа. Показать?", "@showUncensoredLogMessage": {}, "resetTabs": "Сбросить вкладки", "@resetTabs": {}, @@ -494,10 +494,46 @@ }, "refresh": "ОБНОВИТЬ", "@refresh": {}, - "playNext": "Воспроизвести следующее", + "playNext": "Воспроизвести Следующей", "@playNext": { "description": "Popup menu item title for inserting an item into the play queue after the currently-playing item." }, - "noMusicLibrariesBody": "Finamp не смог найти ни одной музыкальной библиотеки. Убедитесь, что на вашем сервере Jellyfin есть хотя бы одна библиотека с типом содержимого \"Музыка\".", - "@noMusicLibrariesBody": {} + "noMusicLibrariesBody": "Finamp не обнаружил музыкальных библиотек. Убедитесь, что на вашем сервере Jellyfin есть хотя бы одна библиотека с типом контента \"Музыка\".", + "@noMusicLibrariesBody": {}, + "deleteDownloadsConfirmButtonText": "Удалить", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "deleteDownloadsAbortButtonText": "Отмена", + "@deleteDownloadsAbortButtonText": {}, + "noMusicLibrariesTitle": "Нет музыкальных библиотек", + "@noMusicLibrariesTitle": { + "description": "Title for message that shows on the views screen when no music libraries could be found." + }, + "syncDownloadedPlaylists": "Синхронизировать загруженные плейлисты", + "@syncDownloadedPlaylists": {}, + "swipeInsertQueueNextSubtitle": "Разрешить вставлять песню следующей в очереди при свайпе в списке песен, а не добавлять ее в конец.", + "@swipeInsertQueueNextSubtitle": {}, + "deleteDownloadsPrompt": "Вы уверены, что хотите удалить {itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} '{itemName}' с этого устройства?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "interactions": "Взаимодействия", + "@interactions": {}, + "swipeInsertQueueNext": "Воспроизвести смахнутую песню следующей", + "@swipeInsertQueueNext": {}, + "redesignBeta": "Новый дизайн (бета)", + "@redesignBeta": {}, + "showFastScroller": "Показать быструю прокрутку", + "@showFastScroller": {} } diff --git a/lib/l10n/app_sv.arb b/lib/l10n/app_sv.arb index 3b6e78f94..da7146a4a 100644 --- a/lib/l10n/app_sv.arb +++ b/lib/l10n/app_sv.arb @@ -525,5 +525,7 @@ "deleteDownloadsAbortButtonText": "Avbryt", "@deleteDownloadsAbortButtonText": {}, "syncDownloadedPlaylists": "Synkronisera nedladdade spellistor", - "@syncDownloadedPlaylists": {} + "@syncDownloadedPlaylists": {}, + "interactions": "Interaktioner", + "@interactions": {} } diff --git a/lib/l10n/app_th.arb b/lib/l10n/app_th.arb index 881d22e8d..29386121f 100644 --- a/lib/l10n/app_th.arb +++ b/lib/l10n/app_th.arb @@ -525,5 +525,9 @@ "deleteDownloadsAbortButtonText": "ยกเลิก", "@deleteDownloadsAbortButtonText": {}, "showFastScroller": "แสดงตัวเลื่อนแบบเร็ว", - "@showFastScroller": {} + "@showFastScroller": {}, + "syncDownloadedPlaylists": "ซิงก์เพลลิสต์ที่ดาวน์โหลดแล้ว", + "@syncDownloadedPlaylists": {}, + "interactions": "การกระทำ", + "@interactions": {} } diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index d91a7afe9..7cdf85418 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -527,5 +527,13 @@ "syncDownloadedPlaylists": "İndirilen çalma listelerini eşzamanla", "@syncDownloadedPlaylists": {}, "showFastScroller": "Hızlı kaydırıcıyı göster", - "@showFastScroller": {} + "@showFastScroller": {}, + "interactions": "Etkileşimler", + "@interactions": {}, + "swipeInsertQueueNext": "Kaydırılan Şarkıyı Ardından Oynat", + "@swipeInsertQueueNext": {}, + "swipeInsertQueueNextSubtitle": "Şarkı listesinde kaydırıldığında bir şarkıyı sona eklemek yerine sıradaki öge olarak eklemeyi etkinleştirin.", + "@swipeInsertQueueNextSubtitle": {}, + "redesignBeta": "Yeniden Tasarım Beta", + "@redesignBeta": {} } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index d450a97cd..2911bf273 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -527,5 +527,64 @@ "syncDownloadedPlaylists": "同步下载的播放列表", "@syncDownloadedPlaylists": {}, "showFastScroller": "显示快速滚动条", - "@showFastScroller": {} + "@showFastScroller": {}, + "swipeInsertQueueNext": "播放滑动的下一首歌曲", + "@swipeInsertQueueNext": {}, + "interactions": "交互", + "@interactions": {}, + "swipeInsertQueueNextSubtitle": "在歌曲列表中滑动时,可以将歌曲作为队列中的下一个项目插入,而不是将其附加到末尾。", + "@swipeInsertQueueNextSubtitle": {}, + "redesignBeta": "试用 Beta 版", + "@redesignBeta": {}, + "loopModeOneTooltip": "循环播放一首。点击即可切换。", + "@loopModeOneTooltip": {}, + "loopModeNoneTooltip": "不循环。点击即可切换。", + "@loopModeNoneTooltip": {}, + "skipToNext": "跳至下一首歌曲", + "@skipToNext": {}, + "togglePlayback": "切换播放", + "@togglePlayback": {}, + "playArtist": "播放 {artist} 的所有专辑", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "随机播放 {artist} 的所有专辑", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "deleteFromDevice": "从设备中删除", + "@deleteFromDevice": {}, + "playbackOrderShuffledTooltip": "随机播放。点击即可切换。", + "@playbackOrderShuffledTooltip": {}, + "playbackOrderLinearTooltip": "按顺序播放。点击即可切换。", + "@playbackOrderLinearTooltip": {}, + "loopModeAllTooltip": "全部循环播放。点击即可切换。", + "@loopModeAllTooltip": {}, + "download": "下载", + "@download": {}, + "skipToPrevious": "跳至上一首歌曲", + "@skipToPrevious": {}, + "downloadArtist": "下载 {artist} 的所有专辑", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "sync": "与服务器同步", + "@sync": {}, + "about": "关于 Finamp", + "@about": {} } diff --git a/lib/l10n/app_zh_Hant.arb b/lib/l10n/app_zh_Hant.arb index aeffdc84b..7f43b2191 100644 --- a/lib/l10n/app_zh_Hant.arb +++ b/lib/l10n/app_zh_Hant.arb @@ -1,9 +1,9 @@ { - "serverUrl": "服務器 URL", + "serverUrl": "伺服器 URL", "@serverUrl": {}, "showTextOnGridViewSubtitle": "是否在網格音樂螢幕上顯示文字(標題、歌手等)。", "@showTextOnGridViewSubtitle": {}, - "startupError": "應用程序啓動期間出現問題! 錯誤是:{error}\n\n請在 github.com/UnicornsOnLSD/finamp 上創建一個 Github 問題,並附上此頁面的螢幕截圖。 如果此頁面一直顯示,請清除您的應用數據以重置應用。", + "startupError": "應用程序啓動期間出現問題! 錯誤是:{error}\n\n請在 github.com/UnicornsOnLSD/finamp 上提出一個 Github 問題,並附上此頁面的螢幕截圖。 如果此頁面一直顯示,請清除您的應用數據以重置應用。", "@startupError": { "description": "The error message that shows when startup fails.", "placeholders": { @@ -13,11 +13,11 @@ } } }, - "internalExternalIpExplanation": "如果您希望能夠遠程訪問您的 Jellyfin 服務器,則需要使用您的外部 IP。\n\n如果您的服務器位於 HTTP 端口 (80/443) 上,則不必指定端口。 如果您的服務器位於反向代理後面,則可能會出現這種情況。", + "internalExternalIpExplanation": "如果您希望能夠遠程訪問您的 Jellyfin 伺服器,則需要使用您的外部 IP。\n\n如果您的伺服器位於 HTTP 端口 (80/443) 上,則不必指定端口。 如果您的伺服器位於反向代理後面,則可能會出現這種情況。", "@internalExternalIpExplanation": { "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." }, - "emptyServerUrl": "服務器 URL 不能為空", + "emptyServerUrl": "伺服器 URL 不能為空", "@emptyServerUrl": { "description": "Error message that shows when the user submits a login without a server URL" }, @@ -204,7 +204,7 @@ "@downloadErrorsTitle": {}, "noErrors": "沒有錯誤!", "@noErrors": {}, - "errorScreenError": "獲取錯誤列表時出錯! 現在您可能應該在 GitHub 上創建一個問題並清除應用數據", + "errorScreenError": "獲取錯誤列表時出錯!您可以在 GitHub 上提出問題並清除應用數據", "@errorScreenError": {}, "failedToGetSongFromDownloadId": "從下載 ID 獲取歌曲失敗", "@failedToGetSongFromDownloadId": {}, @@ -282,7 +282,7 @@ "@jellyfinUsesAACForTranscoding": {}, "enableTranscoding": "啓用轉碼", "@enableTranscoding": {}, - "enableTranscodingSubtitle": "如果啓用,音樂流將由服務器轉碼。", + "enableTranscodingSubtitle": "如果啓用,音樂流將由伺服器轉碼。", "@enableTranscodingSubtitle": {}, "bitrate": "位元速率", "@bitrate": {}, @@ -503,5 +503,37 @@ "noMusicLibrariesTitle": "尚無音樂庫", "@noMusicLibrariesTitle": { "description": "Title for message that shows on the views screen when no music libraries could be found." - } + }, + "redesignBeta": "重新設計的Beta測試版", + "@redesignBeta": {}, + "deleteDownloadsPrompt": "您確定要將 {itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} '{itemName}'從設備中刪除嗎?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "deleteDownloadsConfirmButtonText": "刪除", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "deleteDownloadsAbortButtonText": "取消", + "@deleteDownloadsAbortButtonText": {}, + "syncDownloadedPlaylists": "同步已下載的播放清", + "@syncDownloadedPlaylists": {}, + "interactions": "互動", + "@interactions": {}, + "showFastScroller": "顯示快速滾動條", + "@showFastScroller": {}, + "swipeInsertQueueNext": "滑動歌曲接著播放", + "@swipeInsertQueueNext": {}, + "swipeInsertQueueNextSubtitle": "開啟後滑動清單中的歌曲,可以將歌曲接著播放,而不是加到播放清單的最後一首。", + "@swipeInsertQueueNextSubtitle": {} } diff --git a/lib/l10n/app_zh_Hant_HK.arb b/lib/l10n/app_zh_Hant_HK.arb index 66ace72bb..a65fa360d 100644 --- a/lib/l10n/app_zh_Hant_HK.arb +++ b/lib/l10n/app_zh_Hant_HK.arb @@ -9,7 +9,7 @@ "@urlStartWithHttps": { "description": "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" }, - "urlTrailingSlash": "URL 不能以「/」結尾", + "urlTrailingSlash": "URL 不能以「/」作結", "@urlTrailingSlash": { "description": "Error message that shows when the user submits a server URL that ends with a trailing slash (for example, http://0.0.0.0/)" }, @@ -67,7 +67,7 @@ "@playCount": {}, "premiereDate": "推出日期", "@premiereDate": {}, - "productionYear": "推出年份", + "productionYear": "製作年份", "@productionYear": {}, "name": "名稱", "@name": {}, @@ -207,7 +207,7 @@ "@appDirectory": {}, "enterLowPriorityStateOnPause": "暫停播放時會進入「低優先」狀態", "@enterLowPriorityStateOnPause": {}, - "enterLowPriorityStateOnPauseSubtitle": "在停止播放時,允許「通知」能被「滑動移除」及關閉應用程式(適用於 Android 裝置)。", + "enterLowPriorityStateOnPauseSubtitle": "在停止播放時,允許本程式的「通知」能被掃走及關閉應用程式(適用於 Android 裝置)。", "@enterLowPriorityStateOnPauseSubtitle": {}, "shuffleAllSongCount": "隨機播放上限", "@shuffleAllSongCount": {}, @@ -217,9 +217,9 @@ "@message": {}, "pathReturnSlashErrorMessage": "不能使用「/」路徑", "@pathReturnSlashErrorMessage": {}, - "portrait": "垂直", + "portrait": "直向", "@portrait": {}, - "gridCrossAxisCountSubtitle": "使用{value}顯示模式時,每行的方格(歌曲、歌手等)數量。", + "gridCrossAxisCountSubtitle": "屏幕在{value}顯示時,每行顯示的資訊數量(例如歌曲、歌手等)。", "@gridCrossAxisCountSubtitle": { "description": "List tile subtitle for grid cross axis count. Value will either be the portrait or landscape key.", "placeholders": { @@ -229,17 +229,17 @@ } } }, - "showTextOnGridView": "在方格內顯示文字", + "showTextOnGridView": "在網絡內顯示文字", "@showTextOnGridView": {}, - "showTextOnGridViewSubtitle": "使用格狀顯示方式時,是否在方格內顯示歌曲資訊(名稱、歌手等)。", + "showTextOnGridViewSubtitle": "使用格狀顯示時,在網格內顯示歌曲資訊(名稱、歌手等)。", "@showTextOnGridViewSubtitle": {}, "useCoverAsBackground": "模糊化封面作為播放器的背景", "@useCoverAsBackground": {}, - "useCoverAsBackgroundSubtitle": "是否以模糊化的專輯封面圖片作為應用程式內的播放頁面的背景。", + "useCoverAsBackgroundSubtitle": "以模糊化的專輯封面作為應用程式內的播放頁面的背景。", "@useCoverAsBackgroundSubtitle": {}, "hideSongArtistsIfSameAsAlbumArtists": "隱藏與專輯歌手同名的歌手名稱", "@hideSongArtistsIfSameAsAlbumArtists": {}, - "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "當專輯的歌手與專輯歌曲的歌手名稱相同時,是否隱藏歌曲的歌手名稱。", + "hideSongArtistsIfSameAsAlbumArtistsSubtitle": "當專輯的歌手與歌曲的歌手相同時,隱藏歌曲的歌手名稱。", "@hideSongArtistsIfSameAsAlbumArtistsSubtitle": {}, "disableGesture": "禁用「手勢」功能", "@disableGesture": {}, @@ -350,7 +350,7 @@ } } }, - "downloadedMissingImages": "{count,plural, =0{沒有缺失的圖片} =1{已下載{count}張圖片} other{已下載{count}張圖片}}", + "downloadedMissingImages": "{count,plural, =0{沒有缺少的圖片} =1{已下載{count}張圖片} other{已下載{count}張圖片}}", "@downloadedMissingImages": { "description": "Message that shows when the user downloads missing images", "placeholders": { @@ -367,7 +367,7 @@ "@couldNotFindLibraries": { "description": "Error message when the user does not have any libraries" }, - "internalExternalIpExplanation": "如果您需要在局部區域網絡(LAN)以外的地方連接 Jellyfin,請使用伺服器的區域網絡(WAN)IP。\n\n如果目標伺服器使用的連接埠(port)是 HTTP port(80/433),則毋須填寫連接埠。", + "internalExternalIpExplanation": "如果您需要在局部區域網絡(LAN)以外的地方連接 Jellyfin,請使用伺服器的區域網絡(WAN)IP。\n\n如果目標伺服器使用的連接埠(port)是 HTTP 的預設連接埠(80/433),則毋須填寫連接埠。", "@internalExternalIpExplanation": { "description": "Extra info for which IP to use for remote access, and info on whether or not the user needs to specify a port." }, @@ -395,7 +395,7 @@ } } }, - "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", + "downloadedItemsImagesCount": "{downloadedItems}, {downloadedImages}", "@downloadedItemsImagesCount": { "description": "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", "placeholders": { @@ -433,17 +433,17 @@ "@customLocation": {}, "customLocationsBuggy": "現時,自訂位置功能因權限問題而未能完全正常運作。如非必要,建議不要使用。", "@customLocationsBuggy": {}, - "viewTypeSubtitle": "顯示歌曲的方式", + "viewTypeSubtitle": "顯示資訊的方式", "@viewTypeSubtitle": {}, - "viewType": "顯示方式", + "viewType": "顯示模式", "@viewType": {}, "grid": "格狀", "@grid": {}, "list": "清單", "@list": {}, - "landscape": "水平", + "landscape": "橫向", "@landscape": {}, - "gridCrossAxisCount": "{value}顯示模式的方格數量", + "gridCrossAxisCount": "{value}顯示網格數量", "@gridCrossAxisCount": { "description": "List tile title for grid cross axis count. Value will either be the portrait or landscape key.", "placeholders": { @@ -482,7 +482,7 @@ }, "language": "語言", "@language": {}, - "showUncensoredLogMessage": "紀錄檔內包含你的登入資訊。顯示?", + "showUncensoredLogMessage": "紀錄檔內包含你的登入資訊。你是否確認要顯示?", "@showUncensoredLogMessage": {}, "confirm": "確定", "@confirm": {}, @@ -503,5 +503,76 @@ "noMusicLibrariesTitle": "沒有音樂類媒體庫", "@noMusicLibrariesTitle": { "description": "Title for message that shows on the views screen when no music libraries could be found." - } + }, + "interactions": "互動", + "@interactions": {}, + "deleteDownloadsConfirmButtonText": "刪除", + "@deleteDownloadsConfirmButtonText": { + "description": "Shown in the confirmation dialog for deleting downloaded media from the local device." + }, + "deleteDownloadsPrompt": "你是否確定從裝置中刪除 {itemType, select, album{album} playlist{playlist} artist{artist} genre{genre} track{song} other{}} '{itemName}'?", + "@deleteDownloadsPrompt": { + "placeholders": { + "itemName": { + "type": "String", + "example": "Abandon Ship" + }, + "itemType": { + "type": "String", + "example": "album" + } + }, + "description": "Confirmation prompt shown before deleting downloaded media from the local device, destructive action, doesn't affect the media on the server." + }, + "deleteDownloadsAbortButtonText": "取消", + "@deleteDownloadsAbortButtonText": {}, + "syncDownloadedPlaylists": "同步已下載播放清單", + "@syncDownloadedPlaylists": {}, + "showFastScroller": "顯示快速卷軸", + "@showFastScroller": {}, + "redesignBeta": "測試版", + "@redesignBeta": {}, + "swipeInsertQueueNext": "滑動插播", + "@swipeInsertQueueNext": {}, + "swipeInsertQueueNextSubtitle": "在歌曲列表中輕掃歌曲時,將其插入至播放佇列的最頭而不是最後。", + "@swipeInsertQueueNextSubtitle": {}, + "skipToNext": "下一首歌", + "@skipToNext": {}, + "skipToPrevious": "上一首歌", + "@skipToPrevious": {}, + "download": "下載", + "@download": {}, + "deleteFromDevice": "從裝置中刪除", + "@deleteFromDevice": {}, + "downloadArtist": "下載 {artist}所有的專輯", + "@downloadArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "playArtist": "播放{artist}所有的專輯", + "@playArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "shuffleArtist": "隨機播放{artist}的專輯", + "@shuffleArtist": { + "placeholders": { + "artist": { + "type": "String", + "example": "The Beatles" + } + } + }, + "about": "關於 Finamp", + "@about": {}, + "sync": "與伺服器同步", + "@sync": {} } diff --git a/lib/services/jellyfin_api.chopper.dart b/lib/services/jellyfin_api.chopper.dart index 636081afa..0d4d2bf4c 100644 --- a/lib/services/jellyfin_api.chopper.dart +++ b/lib/services/jellyfin_api.chopper.dart @@ -670,5 +670,6 @@ final class _$JellyfinApi extends JellyfinApi { $request, requestConverter: JsonConverter.requestFactory, ); + return $response.bodyOrThrow; } } diff --git a/lib/services/jellyfin_api_helper.dart b/lib/services/jellyfin_api_helper.dart index ef5d03b8f..1e463b4d0 100644 --- a/lib/services/jellyfin_api_helper.dart +++ b/lib/services/jellyfin_api_helper.dart @@ -713,8 +713,6 @@ class JellyfinApiHelper { /// Removes the current user from the DB and revokes the token on Jellyfin Future logoutCurrentUser() async { - Response? response; - // We put this in a try-catch loop that basically ignores errors so that the // user can still log out during scenarios like wrong IP, no internet etc. @@ -736,14 +734,6 @@ class JellyfinApiHelper { "Jellyfin logout failed with error $e. Logging out anyway, but be aware that Jellyfin may have not got the signal.", e); } finally { - // If the logout response wasn't successful, warn the user in the logs. - // We continue anyway since this will mostly be for when the client becomes - // unauthorised, which will return 401. - if (response?.isSuccessful == false) { - _jellyfinApiHelperLogger.warning( - "Jellyfin logout returned ${response!.statusCode}. Logging out anyway, but be aware that Jellyfin may still consider this device logged in."); - } - // If we're unauthorised, the logout command will fail but we're already // basically logged out so we shouldn't fail. _finampUserHelper.removeUser(_finampUserHelper.currentUser!.id); diff --git a/pubspec.lock b/pubspec.lock index 5f91c5f8b..46ebd4c74 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -267,10 +267,10 @@ packages: dependency: transitive description: name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c url: "https://pub.dev" source: hosted - version: "0.4.1" + version: "0.4.2" clipboard: dependency: "direct main" description: @@ -291,10 +291,10 @@ packages: dependency: transitive description: name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" url: "https://pub.dev" source: hosted - version: "4.10.0" + version: "4.10.1" collection: dependency: "direct main" description: @@ -323,10 +323,10 @@ packages: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" cross_file: dependency: transitive description: @@ -443,10 +443,10 @@ packages: dependency: transitive description: name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" file_picker: dependency: "direct main" description: @@ -467,10 +467,10 @@ packages: dependency: transitive description: name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -743,10 +743,10 @@ packages: dependency: "direct main" description: name: infinite_scroll_pagination - sha256: b68bce20752fcf36c7739e60de4175494f74e99e9a69b4dd2fe3a1dd07a7f16a + sha256: "4047eb8191e8b33573690922a9e995af64c3949dc87efc844f936b039ea279df" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.1.0" intl: dependency: "direct main" description: @@ -791,10 +791,10 @@ packages: dependency: transitive description: name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf url: "https://pub.dev" source: hosted - version: "0.6.7" + version: "0.7.1" json_annotation: dependency: "direct main" description: @@ -1337,10 +1337,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" simple_gesture_detector: dependency: "direct main" description: @@ -1511,7 +1511,7 @@ packages: dependency: transitive description: name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted version: "1.3.2" @@ -1751,10 +1751,10 @@ packages: dependency: transitive description: name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.1.0" xml: dependency: transitive description: