diff --git a/sailfish/qml/Constants.qml b/sailfish/qml/Constants.qml index b4e3e71..3fc424e 100644 --- a/sailfish/qml/Constants.qml +++ b/sailfish/qml/Constants.qml @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2020 Chris Josten +Copyright (C) 2020-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -59,7 +59,8 @@ QtObject { } } - readonly property real libraryDelegatePosterHeight: libraryDelegateHeight * 1.5 // 1.6667 + readonly property real libraryDelegatePosterRatio: 1.5 + readonly property real libraryDelegatePosterHeight: libraryDelegateHeight * libraryDelegatePosterRatio readonly property real libraryProgressHeight: Theme.paddingMedium diff --git a/sailfish/qml/Utils.js b/sailfish/qml/Utils.js index 5716697..3617720 100644 --- a/sailfish/qml/Utils.js +++ b/sailfish/qml/Utils.js @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2020 Chris Josten +Copyright (C) 2020-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -52,7 +52,7 @@ function propsToQuery(options) { for (var prop in options) { if (options.hasOwnProperty(prop)) { var value = options[prop]; - if (prop === "maxWidth" || prop === "maxHeight") { + if (prop === "maxWidth" || prop === "maxHeight" || prop === "width" || prop === "height") { value = Math.floor(options[prop]); } query += "&" + prop + "=" + value; diff --git a/sailfish/qml/components/PlayToolbar.qml b/sailfish/qml/components/PlayToolbar.qml index c605d79..b721432 100644 --- a/sailfish/qml/components/PlayToolbar.qml +++ b/sailfish/qml/components/PlayToolbar.qml @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2020 Chris Josten +Copyright (C) 2020-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -26,12 +26,13 @@ Column { property real playProgress: 0.0 property bool favourited: false property alias imageBlurhash: playImage.blurhash + property real maxHeight: parent.width / imageAspectRatio signal playPressed(bool resume) spacing: Theme.paddingLarge BackgroundItem { width: parent.width - height: width / imageAspectRatio + height: Math.min(maxHeight, width / imageAspectRatio) RemoteImage { id: playImage anchors.fill: parent diff --git a/sailfish/qml/components/PlaybackBar.qml b/sailfish/qml/components/PlaybackBar.qml index beb1b80..26048f1 100644 --- a/sailfish/qml/components/PlaybackBar.qml +++ b/sailfish/qml/components/PlaybackBar.qml @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2021 Chris Josten +Copyright (C) 2021-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -18,7 +18,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ import QtQuick 2.6 -import QtMultimedia 5.6 import Sailfish.Silica 1.0 import nl.netsoj.chris.Jellyfin 1.0 as J @@ -231,9 +230,9 @@ PanelBackground { rightMargin: Theme.paddingMedium verticalCenter: parent.verticalCenter } - icon.source: manager.playbackState === MediaPlayer.PlayingState + icon.source: manager.playbackState === J.PlayerState.Playing ? "image://theme/icon-m-pause" : "image://theme/icon-m-play" - onClicked: manager.playbackState === MediaPlayer.PlayingState + onClicked: manager.playbackState === J.PlayerState.Playing ? manager.pause() : manager.play() } diff --git a/sailfish/qml/pages/ConnectingPage.qml b/sailfish/qml/pages/ConnectingPage.qml index 8cec2ce..299506f 100644 --- a/sailfish/qml/pages/ConnectingPage.qml +++ b/sailfish/qml/pages/ConnectingPage.qml @@ -2,6 +2,8 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 Page { + allowedOrientations: Orientation.All + PageBusyIndicator { running: true } diff --git a/sailfish/qml/pages/itemdetails/BaseDetailPage.qml b/sailfish/qml/pages/itemdetails/BaseDetailPage.qml index 223aa90..b1cdeec 100644 --- a/sailfish/qml/pages/itemdetails/BaseDetailPage.qml +++ b/sailfish/qml/pages/itemdetails/BaseDetailPage.qml @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2020 Chris Josten +Copyright (C) 2020-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -40,6 +40,9 @@ Page { property string _chosenBackdropImage: "" readonly property string parentId: itemData.parentId || "" + readonly property int gridColumnCount: Math.floor(pageRoot.width / Theme.itemSizeHuge) + readonly property int gridCellSize: Math.floor(pageRoot.width / gridColumnCount) + function updateBackdrop() { /*var rand = 0; if (itemData.backdropImageTags.length > 0) { diff --git a/sailfish/qml/pages/itemdetails/CollectionPage.qml b/sailfish/qml/pages/itemdetails/CollectionPage.qml index ce2c436..afb9104 100644 --- a/sailfish/qml/pages/itemdetails/CollectionPage.qml +++ b/sailfish/qml/pages/itemdetails/CollectionPage.qml @@ -63,9 +63,9 @@ BaseDetailPage { id: gridView anchors.fill: parent model: collectionModel - cellWidth: Constants.libraryDelegateWidth - cellHeight: Utils.usePortraitCover(itemData.collectionType) ? Constants.libraryDelegatePosterHeight - : Constants.libraryDelegateHeight + cellWidth: gridCellSize + cellHeight: Utils.usePortraitCover(itemData.collectionType) ? gridCellSize * Constants.libraryDelegatePosterRatio + : gridCellSize visible: itemData.status !== J.LoaderBase.Error header: PageHeader { diff --git a/sailfish/qml/pages/itemdetails/MusicAlbumPage.qml b/sailfish/qml/pages/itemdetails/MusicAlbumPage.qml index 5c72d1f..322b9a1 100644 --- a/sailfish/qml/pages/itemdetails/MusicAlbumPage.qml +++ b/sailfish/qml/pages/itemdetails/MusicAlbumPage.qml @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2020 Chris Josten +Copyright (C) 2020-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -29,10 +29,8 @@ import "../.." BaseDetailPage { id: albumPageRoot readonly property int _songIndexWidth: 100 - width: 800 * Theme.pixelRatio - property bool _collectionModelLoaded: false - readonly property bool _twoColumns: albumPageRoot.width / Theme.pixelRatio >= 800 + readonly property bool _twoColumns: gridColumnCount > 4 readonly property string _description: { if (itemData.type === "MusicAlbum") { //: Short description of the album: %1 -> album artist, %2 -> amount of songs, %3 -> duration, %4 -> release year @@ -63,17 +61,7 @@ BaseDetailPage { RowLayout { anchors.fill: parent - Item {height: 1; width: Theme.horizontalPageMargin; visible: wideAlbumCover.visible; } - Loader { - id: wideAlbumCover - visible: _twoColumns - Layout.minimumWidth: 1000 / Theme.pixelRatio - Layout.fillHeight: true - source: visible - ? "../../components/music/WideAlbumCover.qml" : "" - onLoaded: bindAlbum(item) - } - Item {height: 1; width: Theme.horizontalPageMargin; visible: wideAlbumCover.visible; } + SilicaListView { id: list Layout.fillHeight: true @@ -101,6 +89,17 @@ BaseDetailPage { VerticalScrollDecorator {} } + Item {height: 1; width: Theme.paddingLarge; visible: wideAlbumCover.visible; } + Loader { + id: wideAlbumCover + visible: _twoColumns + Layout.minimumWidth: gridCellSize * 2 + Layout.fillHeight: true + source: visible + ? "../../components/music/WideAlbumCover.qml" : "" + onLoaded: bindAlbum(item) + } + Item {height: 1; width: Theme.horizontalPageMargin; visible: wideAlbumCover.visible; } } function bindAlbum(item) { diff --git a/sailfish/qml/pages/itemdetails/MusicArtistPage.qml b/sailfish/qml/pages/itemdetails/MusicArtistPage.qml index 414628d..48ce3e1 100644 --- a/sailfish/qml/pages/itemdetails/MusicArtistPage.qml +++ b/sailfish/qml/pages/itemdetails/MusicArtistPage.qml @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2022 Chris Josten +Copyright (C) 2022-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -107,7 +107,7 @@ BaseDetailPage { left: parent.left right: parent.right } - height: width / 16 * 9 + height: Math.min(albumPage.height / 2, width / 16 * 9) fillMode: Image.PreserveAspectCrop source: Utils.itemBackdropUrl(apiClient.baseUrl, itemData, 0, {"maxWidth": parent.width}) blurhash: itemData.imageBlurHashes["Backdrop"][itemData.backdropImageTags[0]] @@ -219,15 +219,14 @@ BaseDetailPage { "pageTitle": qsTr("Discography of %1").arg(itemData.name) }) } + GridLayout { - width: parent.width - columns: 3 + anchors.left: parent.left + width: Math.min(appearsOnModel.count() * gridCellSize, gridColumnCount * gridCellSize) + columns: gridColumnCount columnSpacing: 0 rowSpacing: 0 - anchors { - left: parent.left - right: parent.right - } + Repeater { id: albumRepeater model: albumsModel @@ -237,8 +236,8 @@ BaseDetailPage { poster: Utils.itemModelImageUrl(appWindow.apiClient.baseUrl, model.jellyfinId, model.imageTags["Primary"], "Primary", {"height": height}) blurhash: model.imageBlurHashes["Primary"][model.imageTags["Primary"]] title: model.name - Layout.preferredWidth: Constants.libraryDelegateWidth * _multiplier - Layout.preferredHeight: Constants.libraryDelegateHeight * _multiplier + Layout.preferredWidth: gridCellSize * _multiplier + Layout.preferredHeight: gridCellSize * _multiplier Layout.rowSpan: _multiplier Layout.columnSpan: _multiplier onClicked: appWindow.navigateToItem(model.jellyfinId, model.mediaType, model.type, model.isFolder) @@ -256,14 +255,13 @@ BaseDetailPage { }) } GridLayout { - width: parent.width - columns: 3 + anchors.left: parent.left + width: Math.min(appearsOnModel.count() * gridCellSize, gridColumnCount * gridCellSize) + + columns: gridColumnCount columnSpacing: 0 rowSpacing: 0 - anchors { - left: parent.left - right: parent.right - } + Repeater { id: appearsOnRepeater model: appearsOnModel @@ -274,8 +272,9 @@ BaseDetailPage { blurhash: model.imageBlurHashes["Primary"][model.imageTags["Primary"]] title: model.name Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.preferredWidth: Constants.libraryDelegateWidth * _multiplier - Layout.preferredHeight: Constants.libraryDelegateHeight * _multiplier + Layout.preferredWidth: gridCellSize * _multiplier + Layout.maximumWidth: gridCellSize * _multiplier + Layout.preferredHeight: gridCellSize * _multiplier Layout.fillWidth: false Layout.fillHeight: false onClicked: appWindow.navigateToItem(model.jellyfinId, model.mediaType, model.type, model.isFolder) diff --git a/sailfish/qml/pages/itemdetails/SeasonPage.qml b/sailfish/qml/pages/itemdetails/SeasonPage.qml index cf1e604..1134b64 100644 --- a/sailfish/qml/pages/itemdetails/SeasonPage.qml +++ b/sailfish/qml/pages/itemdetails/SeasonPage.qml @@ -1,6 +1,6 @@ /* Sailfin: a Jellyfin client written using Qt -Copyright (C) 2020 Chris Josten +Copyright (C) 2020-2024 Chris Josten This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -58,7 +58,7 @@ BaseDetailPage { id: episodeImage anchors { top: parent.top - left: parent.left + right: parent.right bottom: parent.bottom } width: Constants.libraryDelegateWidth @@ -116,11 +116,11 @@ BaseDetailPage { Label { id: episodeTitle anchors { - left: episodeImage.right - leftMargin: Theme.paddingLarge + right: episodeImage.left + rightMargin: Theme.paddingLarge top: parent.top - right: parent.right - rightMargin: Theme.horizontalPageMargin + left: parent.left + leftMargin: Theme.horizontalPageMargin } text: model.name truncationMode: TruncationMode.Fade @@ -130,10 +130,10 @@ BaseDetailPage { Label { id: episodeOverview anchors { - left: episodeImage.right - leftMargin: Theme.paddingLarge - right: parent.right - rightMargin: Theme.horizontalPageMargin + right: episodeImage.left + rightMargin: Theme.paddingLarge + left: parent.left + leftMargin: Theme.horizontalPageMargin top: episodeTitle.bottom bottom: parent.bottom } diff --git a/sailfish/qml/pages/itemdetails/VideoPage.qml b/sailfish/qml/pages/itemdetails/VideoPage.qml index ae5bf66..dc9a244 100644 --- a/sailfish/qml/pages/itemdetails/VideoPage.qml +++ b/sailfish/qml/pages/itemdetails/VideoPage.qml @@ -63,6 +63,7 @@ BaseDetailPage { imageSource: detailPage.imageSource imageAspectRatio: Constants.horizontalVideoAspectRatio imageBlurhash: detailPage.imageBlurhash + maxHeight: detailPage.height / 2 Binding on favourited { when: _userdataReady value: itemData.userData.favorite diff --git a/sailfish/qml/pages/setup/LoginDialog.qml b/sailfish/qml/pages/setup/LoginDialog.qml index 31dac6a..e0643be 100644 --- a/sailfish/qml/pages/setup/LoginDialog.qml +++ b/sailfish/qml/pages/setup/LoginDialog.qml @@ -42,6 +42,7 @@ Dialog { acceptDestination: Page { + allowedOrientations: Orientation.All BusyLabel { text: qsTr("Logging in as %1").arg(username.text) running: true diff --git a/sailfish/translations/harbour-sailfin-de.ts b/sailfish/translations/harbour-sailfin-de.ts index ff4ad46..b23996f 100644 --- a/sailfish/translations/harbour-sailfin-de.ts +++ b/sailfish/translations/harbour-sailfin-de.ts @@ -4,30 +4,36 @@ AboutPage + About Sailfin - Open externally - - - - LGPL 2.1 License - - - + <p><b>Sailfin version %1</b><br/>Copyright © Chris Josten 2020–%2</p><p>Sailfin is Free Software licensed under the <a href='lgpl'>LGPL-v2.1</a> or later, at your choice. You can <a href="github">view its source code on GitHub</a>. Parts of the code of Sailfin are from other libraries. <a href='3rdparty'>View their licenses here</a>.</p> + Contributors SectionHeader + + + Open externally + + + + + LGPL 2.1 License + + AddServerConnectingPage + Connecting to %1 @@ -35,30 +41,37 @@ AddServerPage + Connect + Connect to Jellyfin + Server + Sailfin will try to search for Jellyfin servers on your local network automatically + enter address manually + Server address + e.g. https://demo.jellyfin.org @@ -66,10 +79,12 @@ BaseDetailPage + Retry + An error has occured @@ -77,106 +92,121 @@ CollectionPage + Loading - Sort by - Menu item for selecting the sort order of a collection - - - - Empty collection - - - - Add some items to this collection! - - - - Name - - - - Play count - - - - Date added - - - - Ascending - Sort order - - - - Descending - Sort order - - - - Sailfin - - - + Settings Pulley menu item: navigate to application settings page + Remote control Pulley menu item: shows controllable device page + + + + Sort by + Menu item for selecting the sort order of a collection + + + + + Empty collection + + + + + Add some items to this collection! + + + + + Name + + + + + Play count + + + + + Date added + + + + + Ascending + Sort order + + + + + Descending + Sort order + + + + + Sailfin + + ControllableDevicesPage + Remote control Page title: page for remote controlling other Jellyfin apps + %1 — %2 List of devices item title in the form of <app name> — <device name> - - CoverPage - - My Cover - Mein Cover - - DebugPage + Debug information + Show debug information + Websocket + Connection state + Unconnected + %1 (%2) + Device profile @@ -184,18 +214,22 @@ EpisodePage + Episode %1–%2 | %3 + Episode %1 | %2 + Overview + No overview available @@ -203,40 +237,30 @@ FilmPage + Released: %1 — Run time: %2 + Overview - - FirstPage - - Show Page 2 - Zur Seite 2 - - - UI Template - UI-Vorlage - - - Hello Sailors - Hallo Matrosen - - LegalPage + Legal + Sailfin contains code taken from other projects. Without them, Sailfin would not be possible! + This program contains small snippets of code taken from <a href="%1">%2</a>, which is licensed under the %3 license: @@ -244,34 +268,41 @@ LoginDialog + Logging in as %1 + Invalid username or password + Login Dialog action + Credentials Section header for entering username and password + Username Label placeholder for username field + Password Label placeholder for password field + Login message Message shown on login, configured by the server owner. Some form of a MOTD @@ -280,56 +311,67 @@ MainPage + Settings Pulley menu item: navigate to application settings page + + Remote control + Pulley menu item: shows controllable device page + + + + Reload Pulley menu item: reload items on page + Resume watching + Next up + Network error + Pull down to retry again - - Remote control - Pulley menu item: shows controllable device page - - MusicAlbumPage + %1 %2 songs | %3 | %4 Short description of the album: %1 -> album artist, %2 -> amount of songs, %3 -> duration, %4 -> release year + Unknown year Unknown album release year + Playlist %1 songs | %2 + Disc %1 @@ -337,23 +379,28 @@ MusicArtistPage + %1 songs | %2 albums + Discography + Discography of %1 Page title for the page with an overview of all albums, eps and singles by a specific artist + Appears on + %1 appears on Page title for the page with an overview of all albums a specific artist appears on @@ -362,56 +409,69 @@ MusicLibraryPage + + Settings + Pulley menu item: navigate to application settings page + + + + + Remote control + Pulley menu item: shows controllable device page + + + + Recently added Header on music library: Recently added music albums + Latest media Page title for the list of all albums within the music library + + Albums Page title for the list of all albums within the music library + + Playlists Page title for the list of all playlists within the music library + + Artists Header for music artists ---------- Page title for the list of all artists within the music library - - Settings - Pulley menu item: navigate to application settings page - - - - Remote control - Pulley menu item: shows controllable device page - - PlayQueue + Queue Now playing page queue section header + Playlist Now playing page playlist section header + Unknown section: %1 @@ -419,36 +479,43 @@ Page title for the list of all artists within the music library PlaybackBar - No audio - - - - Shuffle not yet implemented - - - - Stop - Pulley menu item: stops playback of music - - - + Nothing is playing Shown in a bright font when no media is playing in the bottom bar and now playing screen + Connected to %1 Shown when no media is being played, but the app is controlling another Jellyfin client %1 is the name of said client + Start playing some media! + + + No audio + + + + + Shuffle not yet implemented + + + + + Stop + Pulley menu item: stops playback of music + + PosterCover + %1/%2 @@ -456,6 +523,7 @@ Page title for the list of all artists within the music library QObject + Sailfin Application display name @@ -464,6 +532,20 @@ Page title for the list of all artists within the music library QuickConnectDialog + + Allow login + Accept button on dialog for submitting a Quick Connect code + + + + + To log a device in with Quick Connect, select the Quick Connect button and enter the displayed code in the field below. + Instructions on page that tells the user a bit about how Quick Connect works + + + + + Quick Connect code Label for textfield for entering the Quick Connect codeyy ---------- @@ -471,16 +553,7 @@ Placeholder text for textfield for entering the Quick Connect codeyy - Allow login - Accept button on dialog for submitting a Quick Connect code - - - - To log a device in with Quick Connect, select the Quick Connect button and enter the displayed code in the field below. - Instructions on page that tells the user a bit about how Quick Connect works - - - + The Quick Connect code was not accepted Error message shown below the textfield when it is not connected @@ -489,25 +562,16 @@ Placeholder text for textfield for entering the Quick Connect codeyy SeasonPage + No overview available No overview/summary text of an episode available - - SecondPage - - Nested Page - Unterseite - - - Item - Element - - SeriesPage + Seasons Seasons of a (TV) show @@ -516,70 +580,84 @@ Placeholder text for textfield for entering the Quick Connect codeyy SettingsPage + Settings Header of Settings page + Session - Log out - - - - Logging out - - - - Other - Other settings menu item - - - - Streaming settings - Settings list item for settings related to streaming - - - - Debug information - Debug information settings menu itemy - - - - About Sailfin - About Sailfin settings menu itemy - - - + Quick Connect This is a name used by Jellyfin and seems to be untranslated in other languages + + Log out + + + + + Logging out + + + + + Other + Other settings menu item + + + + Start page Combo box label for selecting where the application should start + Which page should be shown when the application starts? Combo box description for selecting where the application should start + All libraries (default) + + + Streaming settings + Settings list item for settings related to streaming + + + + + Debug information + Debug information settings menu itemy + + + + + About Sailfin + About Sailfin settings menu itemy + + SongDelegate + Go to %1 Context menu item for navigating to the artist of the selected track + Go to artists Context menu item for navigating to one of the artists of the selected track (opens submenu) @@ -588,22 +666,27 @@ Placeholder text for textfield for entering the Quick Connect codeyy StreamingPage + Streaming settings + Allow transcoding + If enabled, Sailfin may request the Jellyfin server to transcode media to a more suitable media format for this device. It is recommended to leave this enabled unless your server is weak. + %1 mbps + Maximum streaming bitrate @@ -611,28 +694,33 @@ Placeholder text for textfield for entering the Quick Connect codeyy UnsupportedPage - Item type (%1) unsupported - - - - Fallback page for %2 not found either -This is still an alpha version :) - - - + Settings Pulley menu item: navigate to application settings page + Remote control Pulley menu item: shows controllable device page + + + Item type (%1) unsupported + + + + + Fallback page for %2 not found either +This is still an alpha version :) + + UserGridDelegate + Other account @@ -640,41 +728,49 @@ This is still an alpha version :) VideoError + No error Just to be complete if the application shows a video playback error when there's no error. + Resource allocation error Video playback error: out of resources + Video format unsupported Video playback error: unsupported format/codec + Network error Video playback error: network error + Access denied Video playback error: access denied + Media service missing Video playback error: the media cannot be played because the media service could not be instantiated. + Retry Button to retry loading a video after a failure + Hide @@ -682,6 +778,7 @@ This is still an alpha version :) VideoPage + Run time: %2 @@ -689,18 +786,22 @@ This is still an alpha version :) VideoTrackSelector + Video track + Audio track + Subtitle track + Off Value in ComboBox to disable subtitles @@ -709,6 +810,7 @@ This is still an alpha version :) harbour-sailfin + Sailfin The application name for the notification diff --git a/sailfish/translations/harbour-sailfin-ru.ts b/sailfish/translations/harbour-sailfin-ru.ts index fecb903..b23996f 100644 --- a/sailfish/translations/harbour-sailfin-ru.ts +++ b/sailfish/translations/harbour-sailfin-ru.ts @@ -1,147 +1,173 @@ - + AboutPage + About Sailfin - О программе Sailfin - - - Open externally - Открыть внешним приложением - - - - Лицензия LGPL 2.1 - - - LGPL 2.1 License + <p><b>Sailfin version %1</b><br/>Copyright © Chris Josten 2020–%2</p><p>Sailfin is Free Software licensed under the <a href='lgpl'>LGPL-v2.1</a> or later, at your choice. You can <a href="github">view its source code on GitHub</a>. Parts of the code of Sailfin are from other libraries. <a href='3rdparty'>View their licenses here</a>.</p> + Contributors SectionHeader + + + Open externally + + + + + LGPL 2.1 License + + AddServerConnectingPage + Connecting to %1 - Соединяемся с %1 + AddServerPage + Connect - Соединиться + + Connect to Jellyfin - Соединиться с Jellyfin + + Server - Сервер + + Sailfin will try to search for Jellyfin servers on your local network automatically - Sailfin попробует найти серверы Jellyfin в локальной сети автоматически + + enter address manually - ввести адрес вручную + + Server address - Адрес сервера + + e.g. https://demo.jellyfin.org - Напр. https://demo.jellyfin.org + BaseDetailPage + Retry - Попробовать снова + + An error has occured - Произошла ошибка + CollectionPage + Loading - Загрузка - - - Sort by - Menu item for selecting the sort order of a collection - Сортировка - - - Empty collection - Пустая коллекция - - - Add some items to this collection! - Добавьте что-то в эту коллекцию! - - - Name - Название - - - Play count - Количество проигрываний - - - Date added - Дата добавления - - - Ascending - Sort order - По возрастанию - - - Descending - Sort order - По убыванию - - - Sailfin + Settings Pulley menu item: navigate to application settings page - Настройки + + Remote control Pulley menu item: shows controllable device page + + + + Sort by + Menu item for selecting the sort order of a collection + + + + + Empty collection + + + + + Add some items to this collection! + + + + + Name + + + + + Play count + + + + + Date added + + + + + Ascending + Sort order + + + + + Descending + Sort order + + + + + Sailfin + + ControllableDevicesPage + Remote control Page title: page for remote controlling other Jellyfin apps + %1 — %2 List of devices item title in the form of <app name> — <device name> @@ -150,30 +176,37 @@ DebugPage + Debug information - Отладочная информация + + Show debug information - Показывать отладочную информацию + + Websocket + Connection state + Unconnected + %1 (%2) + Device profile @@ -181,266 +214,308 @@ EpisodePage + Episode %1–%2 | %3 - Серия %1–%2 | %3 + + Episode %1 | %2 - Серия %1 | %2 + + Overview - Описание + + No overview available - Нет описания + FilmPage + Released: %1 — Run time: %2 - Вышел: %1 — Длительность: %2 + + Overview - Описание + LegalPage + Legal - This program contains small snippets of code taken from <a href="%1">%2</a>, which is licensed under the %3 license: + + Sailfin contains code taken from other projects. Without them, Sailfin would not be possible! - Sailfin contains code taken from other projects. Without them, Sailfin would not be possible! + + This program contains small snippets of code taken from <a href="%1">%2</a>, which is licensed under the %3 license: LoginDialog + Logging in as %1 - Входим как %1 + + + Invalid username or password + + + + Login Dialog action - Войти + + Credentials Section header for entering username and password - Учетные данные + + Username Label placeholder for username field - Имя пользователя + + Password Label placeholder for password field - Пароль + + Login message Message shown on login, configured by the server owner. Some form of a MOTD - Сообщение при входе - - - Invalid username or password - Неверное имя пользователя или пароль + MainPage - Resume watching - Продолжить просмотр - - - Next up - Продолжения - - - Network error - Ошибка сети - - - Pull down to retry again - Потяните вниз чтобы попробовать снова - - + Settings Pulley menu item: navigate to application settings page - Настройки - - - Reload - Pulley menu item: reload items on page - Обновить + + Remote control Pulley menu item: shows controllable device page + + + Reload + Pulley menu item: reload items on page + + + + + Resume watching + + + + + Next up + + + + + Network error + + + + + Pull down to retry again + + MusicAlbumPage + %1 %2 songs | %3 | %4 Short description of the album: %1 -> album artist, %2 -> amount of songs, %3 -> duration, %4 -> release year - %1 -%2 песен | %3 | %4 + + Unknown year Unknown album release year - Неизвестный год + + Playlist %1 songs | %2 - Плейлист -%1 песни | %2 + + Disc %1 - Диск %1 + MusicArtistPage + %1 songs | %2 albums - %1 песен | %2 альбомов + + Discography - Дискография + + Discography of %1 Page title for the page with an overview of all albums, eps and singles by a specific artist - Дискография %1 + + Appears on - Появляется на + + %1 appears on Page title for the page with an overview of all albums a specific artist appears on - %1 появляется на + MusicLibraryPage + + Settings + Pulley menu item: navigate to application settings page + + + + + Remote control + Pulley menu item: shows controllable device page + + + + Recently added Header on music library: Recently added music albums - Добавлены недавно + + Latest media Page title for the list of all albums within the music library - Самые новые песни + + + Albums Page title for the list of all albums within the music library - Альбомы + + + Playlists Page title for the list of all playlists within the music library - Плейлисты + + + Artists Header for music artists ---------- Page title for the list of all artists within the music library - Исполнители - - - Settings - Pulley menu item: navigate to application settings page - Настройки - - - Remote control - Pulley menu item: shows controllable device page PlayQueue + Queue Now playing page queue section header - Очередь + + Playlist Now playing page playlist section header - Плейлист + + Unknown section: %1 - Неизвестная секция: %1 + PlaybackBar - No media selected - Ничего не выбрано - - - Play some media! - Начните что-то проигрывать! - - - No audio - Нет звука - - - Shuffle not yet implemented - Перемешивание ещё не работает - - - Stop - Pulley menu item: stops playback of music - Стоп - - + Nothing is playing Shown in a bright font when no media is playing in the bottom bar and now playing screen + Connected to %1 Shown when no media is being played, but the app is controlling another Jellyfin client %1 is the name of said client + Start playing some media! + + + No audio + + + + + Shuffle not yet implemented + + + + + Stop + Pulley menu item: stops playback of music + + PosterCover + %1/%2 @@ -448,6 +523,7 @@ Page title for the list of all artists within the music library QObject + Sailfin Application display name @@ -456,6 +532,20 @@ Page title for the list of all artists within the music library QuickConnectDialog + + Allow login + Accept button on dialog for submitting a Quick Connect code + + + + + To log a device in with Quick Connect, select the Quick Connect button and enter the displayed code in the field below. + Instructions on page that tells the user a bit about how Quick Connect works + + + + + Quick Connect code Label for textfield for entering the Quick Connect codeyy ---------- @@ -463,16 +553,7 @@ Placeholder text for textfield for entering the Quick Connect codeyy - Allow login - Accept button on dialog for submitting a Quick Connect code - - - - To log a device in with Quick Connect, select the Quick Connect button and enter the displayed code in the field below. - Instructions on page that tells the user a bit about how Quick Connect works - - - + The Quick Connect code was not accepted Error message shown below the textfield when it is not connected @@ -481,181 +562,215 @@ Placeholder text for textfield for entering the Quick Connect codeyy SeasonPage + No overview available No overview/summary text of an episode available - Нет описания + SeriesPage + Seasons Seasons of a (TV) show - Сезоны + SettingsPage - Other - Other settings menu item - Другие - - - About Sailfin - About Sailfin settings menu itemy - О программе Sailfin - - - Session - Сессия - - - Log out - Выйти - - - Logging out - Выходим - - - Debug information - Debug information settings menu itemy - Отладочная информация - - + Settings Header of Settings page - Настройки + - Streaming settings - Settings list item for settings related to streaming - Настройки стриминга + + Session + + Quick Connect This is a name used by Jellyfin and seems to be untranslated in other languages + + Log out + + + + + Logging out + + + + + Other + Other settings menu item + + + + Start page Combo box label for selecting where the application should start + Which page should be shown when the application starts? Combo box description for selecting where the application should start + All libraries (default) + + + Streaming settings + Settings list item for settings related to streaming + + + + + Debug information + Debug information settings menu itemy + + + + + About Sailfin + About Sailfin settings menu itemy + + SongDelegate + Go to %1 Context menu item for navigating to the artist of the selected track - Перейти к %1 + + Go to artists Context menu item for navigating to one of the artists of the selected track (opens submenu) - Перейти к исполнителям + StreamingPage + Streaming settings - Настройки стриминга + + Allow transcoding - Разрешить транскодинг + + If enabled, Sailfin may request the Jellyfin server to transcode media to a more suitable media format for this device. It is recommended to leave this enabled unless your server is weak. - Если включено, Sailfin может попросить сервер Jellyfin перекодировать медиафайл в более подходящий формат для устройства. Рекомендуется оставить это включенным, если ваш сервер не слишком слабый. + + %1 mbps - %1 мегабит/сек + + Maximum streaming bitrate - Максимальный битрейт стриминга + UnsupportedPage - Item type (%1) unsupported - Тип файла (%1) не поддерживается - - - Fallback page for %2 not found either -This is still an alpha version :) + + Settings + Pulley menu item: navigate to application settings page - Settings - Pulley menu item: navigate to application settings page - Настройки - - + Remote control Pulley menu item: shows controllable device page + + + Item type (%1) unsupported + + + + + Fallback page for %2 not found either +This is still an alpha version :) + + UserGridDelegate + Other account - Другая учетная запись + VideoError - Resource allocation error - Video playback error: out of resources - - - - Video format unsupported - Video playback error: unsupported format/codec - - - - Network error - Video playback error: network error - Ошибка сети - - - Access denied - Video playback error: access denied - - - - Media service missing - Video playback error: the media cannot be played because the media service could not be instantiated. - - - - Retry - Button to retry loading a video after a failure - Попробовать снова - - + No error Just to be complete if the application shows a video playback error when there's no error. + + Resource allocation error + Video playback error: out of resources + + + + + Video format unsupported + Video playback error: unsupported format/codec + + + + + Network error + Video playback error: network error + + + + + Access denied + Video playback error: access denied + + + + + Media service missing + Video playback error: the media cannot be played because the media service could not be instantiated. + + + + + Retry + Button to retry loading a video after a failure + + + + Hide @@ -663,33 +778,39 @@ This is still an alpha version :) VideoPage + Run time: %2 - Длительность: %2 + VideoTrackSelector + + Video track + + + + Audio track - Аудиодорожка + + Subtitle track - Дорожка субтитров + + Off Value in ComboBox to disable subtitles - Выключено - - - Video track - Видеодорожка + harbour-sailfin + Sailfin The application name for the notification diff --git a/sailfish/translations/harbour-sailfin.ts b/sailfish/translations/harbour-sailfin.ts index be39f8f..b23996f 100644 --- a/sailfish/translations/harbour-sailfin.ts +++ b/sailfish/translations/harbour-sailfin.ts @@ -4,30 +4,36 @@ AboutPage + About Sailfin - About Sailfin - - - Open externally - - - - LGPL 2.1 License + <p><b>Sailfin version %1</b><br/>Copyright © Chris Josten 2020–%2</p><p>Sailfin is Free Software licensed under the <a href='lgpl'>LGPL-v2.1</a> or later, at your choice. You can <a href="github">view its source code on GitHub</a>. Parts of the code of Sailfin are from other libraries. <a href='3rdparty'>View their licenses here</a>.</p> + Contributors SectionHeader + + + Open externally + + + + + LGPL 2.1 License + + AddServerConnectingPage + Connecting to %1 @@ -35,30 +41,37 @@ AddServerPage + Connect + Connect to Jellyfin + Server + Sailfin will try to search for Jellyfin servers on your local network automatically + enter address manually + Server address + e.g. https://demo.jellyfin.org @@ -66,10 +79,12 @@ BaseDetailPage + Retry + An error has occured @@ -77,67 +92,82 @@ CollectionPage + Loading - Sort by - Menu item for selecting the sort order of a collection - - - - Empty collection - - - - Add some items to this collection! - - - - Name - - - - Play count - - - - Date added - - - - Ascending - Sort order - - - - Descending - Sort order - - - - Sailfin - - - + Settings Pulley menu item: navigate to application settings page + Remote control Pulley menu item: shows controllable device page + + + + Sort by + Menu item for selecting the sort order of a collection + + + + + Empty collection + + + + + Add some items to this collection! + + + + + Name + + + + + Play count + + + + + Date added + + + + + Ascending + Sort order + + + + + Descending + Sort order + + + + + Sailfin + + ControllableDevicesPage + Remote control Page title: page for remote controlling other Jellyfin apps + %1 — %2 List of devices item title in the form of <app name> — <device name> @@ -146,30 +176,37 @@ DebugPage + Debug information + Show debug information + Websocket + Connection state + Unconnected + %1 (%2) + Device profile @@ -177,18 +214,22 @@ EpisodePage + Episode %1–%2 | %3 + Episode %1 | %2 + Overview + No overview available @@ -196,10 +237,12 @@ FilmPage + Released: %1 — Run time: %2 + Overview @@ -207,107 +250,128 @@ LegalPage + Legal - This program contains small snippets of code taken from <a href="%1">%2</a>, which is licensed under the %3 license: + + Sailfin contains code taken from other projects. Without them, Sailfin would not be possible! - Sailfin contains code taken from other projects. Without them, Sailfin would not be possible! + + This program contains small snippets of code taken from <a href="%1">%2</a>, which is licensed under the %3 license: LoginDialog + Logging in as %1 + + Invalid username or password + + + + Login Dialog action + Credentials Section header for entering username and password + Username Label placeholder for username field + Password Label placeholder for password field + Login message Message shown on login, configured by the server owner. Some form of a MOTD - - Invalid username or password - - MainPage - Resume watching - - - - Next up - - - + Settings Pulley menu item: navigate to application settings page - Network error + + Remote control + Pulley menu item: shows controllable device page + Reload Pulley menu item: reload items on page - Pull down to retry again + + Resume watching - Remote control - Pulley menu item: shows controllable device page + + Next up + + + + + Network error + + + + + Pull down to retry again MusicAlbumPage + %1 %2 songs | %3 | %4 Short description of the album: %1 -> album artist, %2 -> amount of songs, %3 -> duration, %4 -> release year + Unknown year Unknown album release year + Playlist %1 songs | %2 + Disc %1 @@ -315,23 +379,28 @@ MusicArtistPage + %1 songs | %2 albums + Discography + Discography of %1 Page title for the page with an overview of all albums, eps and singles by a specific artist + Appears on + %1 appears on Page title for the page with an overview of all albums a specific artist appears on @@ -340,56 +409,69 @@ MusicLibraryPage + + Settings + Pulley menu item: navigate to application settings page + + + + + Remote control + Pulley menu item: shows controllable device page + + + + Recently added Header on music library: Recently added music albums + Latest media Page title for the list of all albums within the music library + + Albums Page title for the list of all albums within the music library + + Playlists Page title for the list of all playlists within the music library + + Artists Header for music artists ---------- Page title for the list of all artists within the music library - - Settings - Pulley menu item: navigate to application settings page - - - - Remote control - Pulley menu item: shows controllable device page - - PlayQueue + Queue Now playing page queue section header + Playlist Now playing page playlist section header + Unknown section: %1 @@ -397,36 +479,43 @@ Page title for the list of all artists within the music library PlaybackBar - No audio - - - - Shuffle not yet implemented - - - - Stop - Pulley menu item: stops playback of music - - - + Nothing is playing Shown in a bright font when no media is playing in the bottom bar and now playing screen + Connected to %1 Shown when no media is being played, but the app is controlling another Jellyfin client %1 is the name of said client + Start playing some media! + + + No audio + + + + + Shuffle not yet implemented + + + + + Stop + Pulley menu item: stops playback of music + + PosterCover + %1/%2 @@ -434,6 +523,7 @@ Page title for the list of all artists within the music library QObject + Sailfin Application display name @@ -442,6 +532,20 @@ Page title for the list of all artists within the music library QuickConnectDialog + + Allow login + Accept button on dialog for submitting a Quick Connect code + + + + + To log a device in with Quick Connect, select the Quick Connect button and enter the displayed code in the field below. + Instructions on page that tells the user a bit about how Quick Connect works + + + + + Quick Connect code Label for textfield for entering the Quick Connect codeyy ---------- @@ -449,16 +553,7 @@ Placeholder text for textfield for entering the Quick Connect codeyy - Allow login - Accept button on dialog for submitting a Quick Connect code - - - - To log a device in with Quick Connect, select the Quick Connect button and enter the displayed code in the field below. - Instructions on page that tells the user a bit about how Quick Connect works - - - + The Quick Connect code was not accepted Error message shown below the textfield when it is not connected @@ -467,6 +562,7 @@ Placeholder text for textfield for entering the Quick Connect codeyy SeasonPage + No overview available No overview/summary text of an episode available @@ -475,6 +571,7 @@ Placeholder text for textfield for entering the Quick Connect codeyy SeriesPage + Seasons Seasons of a (TV) show @@ -483,70 +580,84 @@ Placeholder text for textfield for entering the Quick Connect codeyy SettingsPage + Settings Header of Settings page - Other - Other settings menu item - - - - About Sailfin - About Sailfin settings menu itemy - About Sailfin - - + Session - Log out - - - - Logging out - - - - Streaming settings - Settings list item for settings related to streaming - - - - Debug information - Debug information settings menu itemy - - - + Quick Connect This is a name used by Jellyfin and seems to be untranslated in other languages + + Log out + + + + + Logging out + + + + + Other + Other settings menu item + + + + Start page Combo box label for selecting where the application should start + Which page should be shown when the application starts? Combo box description for selecting where the application should start + All libraries (default) + + + Streaming settings + Settings list item for settings related to streaming + + + + + Debug information + Debug information settings menu itemy + + + + + About Sailfin + About Sailfin settings menu itemy + + SongDelegate + Go to %1 Context menu item for navigating to the artist of the selected track + Go to artists Context menu item for navigating to one of the artists of the selected track (opens submenu) @@ -555,22 +666,27 @@ Placeholder text for textfield for entering the Quick Connect codeyy StreamingPage + Streaming settings + Allow transcoding + If enabled, Sailfin may request the Jellyfin server to transcode media to a more suitable media format for this device. It is recommended to leave this enabled unless your server is weak. + %1 mbps + Maximum streaming bitrate @@ -578,28 +694,33 @@ Placeholder text for textfield for entering the Quick Connect codeyy UnsupportedPage - Item type (%1) unsupported - - - - Fallback page for %2 not found either -This is still an alpha version :) - - - + Settings Pulley menu item: navigate to application settings page + Remote control Pulley menu item: shows controllable device page + + + Item type (%1) unsupported + + + + + Fallback page for %2 not found either +This is still an alpha version :) + + UserGridDelegate + Other account @@ -607,41 +728,49 @@ This is still an alpha version :) VideoError - Resource allocation error - Video playback error: out of resources - - - - Video format unsupported - Video playback error: unsupported format/codec - - - - Network error - Video playback error: network error - - - - Access denied - Video playback error: access denied - - - - Media service missing - Video playback error: the media cannot be played because the media service could not be instantiated. - - - - Retry - Button to retry loading a video after a failure - - - + No error Just to be complete if the application shows a video playback error when there's no error. + + Resource allocation error + Video playback error: out of resources + + + + + Video format unsupported + Video playback error: unsupported format/codec + + + + + Network error + Video playback error: network error + + + + + Access denied + Video playback error: access denied + + + + + Media service missing + Video playback error: the media cannot be played because the media service could not be instantiated. + + + + + Retry + Button to retry loading a video after a failure + + + + Hide @@ -649,6 +778,7 @@ This is still an alpha version :) VideoPage + Run time: %2 @@ -656,26 +786,31 @@ This is still an alpha version :) VideoTrackSelector + + Video track + + + + Audio track + Subtitle track + Off Value in ComboBox to disable subtitles - - Video track - - harbour-sailfin + Sailfin The application name for the notification