From 60b91335f956d9ab25eef00fc4c8a778c12e7daf Mon Sep 17 00:00:00 2001 From: Chris Josten Date: Wed, 17 Jan 2024 15:28:57 +0100 Subject: [PATCH] sailfin: Improve layout on landscape and tablet screens I've dropped the whole ` * Theme.pixelRatio`-approach[^1] for determining when the UI should split into two columns, because the values seemed quite arbitrary and I was entering random numbers. I'm now doing it on multiples of `Theme.itemSizeHuge`, which is easier to reason about. This also fixes occasions where items in a grid would leave a bit of space to the right in the CollectionPage. Backdrop images in VideoPage and MusicAlbumPage now have a maximum height of half of the screen, to avoid filling the entire screen in landscape mode. Perhaps it doesn't always look good, but it makes the layout more usable. Images on the SeasonPage and MusicAlbumPage (in landscape) are now aligned to the right, to avoid blocking the Page back indicator. --- sailfish/qml/Constants.qml | 5 +- sailfish/qml/Utils.js | 4 +- sailfish/qml/components/PlayToolbar.qml | 5 +- sailfish/qml/components/PlaybackBar.qml | 7 +- sailfish/qml/pages/ConnectingPage.qml | 2 + .../qml/pages/itemdetails/BaseDetailPage.qml | 5 +- .../qml/pages/itemdetails/CollectionPage.qml | 6 +- .../qml/pages/itemdetails/MusicAlbumPage.qml | 29 +- .../qml/pages/itemdetails/MusicArtistPage.qml | 35 +- sailfish/qml/pages/itemdetails/SeasonPage.qml | 20 +- sailfish/qml/pages/itemdetails/VideoPage.qml | 1 + sailfish/qml/pages/setup/LoginDialog.qml | 1 + sailfish/translations/harbour-sailfin-de.ts | 412 +++++++----- sailfish/translations/harbour-sailfin-ru.ts | 629 +++++++++++------- sailfish/translations/harbour-sailfin.ts | 473 ++++++++----- 15 files changed, 999 insertions(+), 635 deletions(-) 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