diff --git a/.gitignore b/.gitignore index bef0909..6f93296 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,10 @@ -/*.pro.user -/mcc.json -/youtube-data-api-v3.key -/youtube-client-id.json +*.pro.user* +mcc.json +youtube-data-api-v3* +youtube-client-id* +rpm/*.spec* +src/config.h +*.bak +*.autosave +scripts/version-str +youtube-dl-lite diff --git a/LICENSE.YTPlayer b/LICENSE.YTPlayer index 4244002..de8a8da 100644 --- a/LICENSE.YTPlayer +++ b/LICENSE.YTPlayer @@ -1,4 +1,6 @@ Copyright (c) 2014-2015 Piotr Tworek +Copyright (c) 2015-2018 Petr Tsymbarovich +Copyright (c) 2019-2020 Matti Viljanen All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/README.md b/README.md index ecc2e1e..d803518 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,11 @@ YTPlayer YTPlayer is an unofficial YouTube client for SailfishOS.
- - - + +  + +  +
Getting the source @@ -14,7 +16,7 @@ Getting the source Since YTPlayer uses some extra 3rd party components shipped in git submodules it needs to be cloned with --recursive option. Ex: -- git clone --recursive https://github.com/tworaz/sailfish-ytplayer.git +- git clone --recursive https://github.com/direc85/sailfish-ytplayer.git Build Prequisites ----------------- @@ -33,7 +35,25 @@ Building 4. Load harbour-ytplayer.pro file. 5. Build and deploy the application to your phone/tablet/emulator. +If translations don't work, try the following: + +1. Select i486/armv7hl > Release > Deploy as ARM package +2. Build > Clean project "harbour-ytplayer" +3. Build > Build project "harbour-ytplayer" (or click the hammer icon) +4. Build > Deploy project "harbour-ytplayer" (or click the play icon) + Translating ----------- -If you want to translate YTPlayer into your native language you can use Transifex (https://www.transifex.com/tworaz/ytplayer). +If you would like to create a new translation for YTPlayer, this is roughly how it's done: +- Fork the project +- Copy translations/en_GB.ts file to your language (e.g. no.ts for Norwgian) +- Add the new file to translations/translations.pri files TRANSLATIONS section accordingly +- Translate the new file + - Qt Linguist comes with Sailfish Application SDK + - Your generic UTF-8 capable text editor will work, too +- Test the translation +- Commit the changes +- Make a pull request + +Or you can avoid forking by just creating a new issue and attach the new translated .ts file in the issue. diff --git a/YTPlayer.qrc b/YTPlayer.qrc index 9796c19..dfbb464 100644 --- a/YTPlayer.qrc +++ b/YTPlayer.qrc @@ -1,22 +1,35 @@ resources/mcc-data.json - resources/logo.png - languages/translations.json + translations/translations.json + harbour-ytplayer.png + artwork/Ko-fi_Icon_RGB_rounded.png - resources/icons/approval-64.png - resources/icons/dislike-m.png - resources/icons/downloaded-videos-64.png - resources/icons/like-m.png - resources/icons/rss-m.png - resources/icons/search-m.png - resources/icons/video-multi-m.png - resources/icons/categorize-64.png - resources/icons/bookmark-2-64.png - resources/icons/star-8-64.png - resources/icons/play-64.png - resources/icons/pause-64.png + resources/icons/approval-64-white.png + resources/icons/dislike-m-white.png + resources/icons/downloaded-videos-64-white.png + resources/icons/like-m-white.png + resources/icons/rss-m-white.png + resources/icons/search-m-white.png + resources/icons/video-multi-m-white.png + resources/icons/categorize-64-white.png + resources/icons/bookmark-2-64-white.png + resources/icons/star-8-64-white.png + resources/icons/play-64-white.png + resources/icons/pause-64-white.png + resources/icons/approval-64-black.png + resources/icons/dislike-m-black.png + resources/icons/downloaded-videos-64-black.png + resources/icons/like-m-black.png + resources/icons/rss-m-black.png + resources/icons/search-m-black.png + resources/icons/video-multi-m-black.png + resources/icons/categorize-64-black.png + resources/icons/bookmark-2-64-black.png + resources/icons/star-8-64-black.png + resources/icons/play-64-black.png + resources/icons/pause-64-black.png resources/fonts/youtube-icons.ttf @@ -41,6 +54,7 @@ qml/cover/VideoOverview.qml qml/pages/About.qml qml/pages/Account.qml + qml/pages/APIKeys.qml qml/pages/CacheSettings.qml qml/pages/CategoryVideoList.qml qml/pages/ChannelBrowser.qml diff --git a/artwork/Ko-fi_Icon_RGB_rounded.png b/artwork/Ko-fi_Icon_RGB_rounded.png new file mode 100644 index 0000000..995171e Binary files /dev/null and b/artwork/Ko-fi_Icon_RGB_rounded.png differ diff --git a/artwork/icons/harbour-ytplayer-icon.svg b/artwork/icons/harbour-ytplayer-icon.svg new file mode 100644 index 0000000..5db9666 --- /dev/null +++ b/artwork/icons/harbour-ytplayer-icon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/artwork/screenshots/20150915210645.jpg b/artwork/screenshots/20150915210645.jpg deleted file mode 100644 index f26e81c..0000000 Binary files a/artwork/screenshots/20150915210645.jpg and /dev/null differ diff --git a/artwork/screenshots/20150915210731.jpg b/artwork/screenshots/20150915210731.jpg deleted file mode 100644 index 8d2f10f..0000000 Binary files a/artwork/screenshots/20150915210731.jpg and /dev/null differ diff --git a/artwork/screenshots/20150915210805.jpg b/artwork/screenshots/20150915210805.jpg deleted file mode 100644 index 355052a..0000000 Binary files a/artwork/screenshots/20150915210805.jpg and /dev/null differ diff --git a/artwork/screenshots/VirtualBox_Sailfish OS Emulator_02_12_2018_00_53_48.png b/artwork/screenshots/VirtualBox_Sailfish OS Emulator_02_12_2018_00_53_48.png new file mode 100644 index 0000000..9640625 Binary files /dev/null and b/artwork/screenshots/VirtualBox_Sailfish OS Emulator_02_12_2018_00_53_48.png differ diff --git a/artwork/screenshots/VirtualBox_Sailfish OS Emulator_12_02_2019_15_00_00.png b/artwork/screenshots/VirtualBox_Sailfish OS Emulator_12_02_2019_15_00_00.png new file mode 100644 index 0000000..bc10b58 Binary files /dev/null and b/artwork/screenshots/VirtualBox_Sailfish OS Emulator_12_02_2019_15_00_00.png differ diff --git a/artwork/screenshots/VirtualBox_Sailfish OS Emulator_12_02_2019_15_00_45.png b/artwork/screenshots/VirtualBox_Sailfish OS Emulator_12_02_2019_15_00_45.png new file mode 100644 index 0000000..1612c71 Binary files /dev/null and b/artwork/screenshots/VirtualBox_Sailfish OS Emulator_12_02_2019_15_00_45.png differ diff --git a/harbour-ytplayer.png b/harbour-ytplayer.png index f1965e2..bc824bb 100644 Binary files a/harbour-ytplayer.png and b/harbour-ytplayer.png differ diff --git a/harbour-ytplayer.pro b/harbour-ytplayer.pro index 53a9d94..03f599f 100644 --- a/harbour-ytplayer.pro +++ b/harbour-ytplayer.pro @@ -4,90 +4,81 @@ TARGET = harbour-ytplayer -CONFIG += sailfishapp sailfishapp_no_deploy_qml -QT += dbus sql concurrent +CONFIG += sailfishapp sailfishapp_no_deploy_qml # sailfishapp_i18n + +PKGCONFIG += nemonotifications-qt5 + +QT += dbus sql concurrent qml core multimedia SOURCES += \ - src/YTPlayer.cpp \ - src/YTUtils.cpp \ - src/YTLogger.cpp \ - src/YTPrefs.cpp \ - src/YTRequest.cpp \ - src/YTListModel.cpp \ - src/YTNetworkManager.cpp \ - src/YTLocalVideo.cpp \ - src/YTLocalVideoData.cpp \ - src/YTLocalVideoManager.cpp \ - src/YTLocalVideoListModel.cpp \ - src/YTVideoDownloadNotification.cpp \ - src/YTVIdeoUrlFetcher.cpp \ - src/YTSuggestionEngine.cpp \ - src/YTTranslations.cpp \ - src/YTWatchedRecently.cpp \ - src/YTFavorites.cpp \ - src/YTSqlListModel.cpp + src/YTPlayer.cpp \ + src/YTUtils.cpp \ + src/YTLogger.cpp \ + src/YTPrefs.cpp \ + src/YTRequest.cpp \ + src/YTListModel.cpp \ + src/YTNetworkManager.cpp \ + src/YTLocalVideo.cpp \ + src/YTLocalVideoData.cpp \ + src/YTLocalVideoManager.cpp \ + src/YTLocalVideoListModel.cpp \ + src/YTVideoDownloadNotification.cpp \ + src/YTVIdeoUrlFetcher.cpp \ + src/YTSuggestionEngine.cpp \ + src/YTTranslations.cpp \ + src/YTWatchedRecently.cpp \ + src/YTFavorites.cpp \ + src/YTSqlListModel.cpp \ + src/YTUpdater.cpp \ + src/YTUpdateWorker.cpp HEADERS += \ - src/YTPlayer.h \ - src/YTUtils.h \ - src/YTLogger.h \ - src/YTPrefs.h \ - src/YTRequest.h \ - src/YTListModel.h \ - src/YTNetworkManager.h \ - src/YTLocalVideo.h \ - src/YTLocalVideoData.h \ - src/YTLocalVideoManager.h \ - src/YTLocalVideoListModel.h \ - src/YTVideoDownloadNotification.h \ - src/YTVideoUrlFetcher.h \ - src/YTSuggestionEngine.h \ - src/YTTranslations.h \ - src/YTWatchedRecently.h \ - src/YTFavorites.h \ - src/YTSqlListModel.h + src/YTPlayer.h \ + src/YTUtils.h \ + src/YTLogger.h \ + src/YTPrefs.h \ + src/YTRequest.h \ + src/YTListModel.h \ + src/YTNetworkManager.h \ + src/YTLocalVideo.h \ + src/YTLocalVideoData.h \ + src/YTLocalVideoManager.h \ + src/YTLocalVideoListModel.h \ + src/YTVideoDownloadNotification.h \ + src/YTVideoUrlFetcher.h \ + src/YTSuggestionEngine.h \ + src/YTTranslations.h \ + src/YTWatchedRecently.h \ + src/YTFavorites.h \ + src/YTSqlListModel.h \ + src/YTUpdater.h \ + src/YTUpdateWorker.h QML_SOURCES = \ - qml/*.qml \ - qml/pages/*.qml \ - qml/cover/*.qml \ - qml/common/*.qml \ - qml/common/*.js + qml/*.qml \ + qml/pages/*.qml \ + qml/cover/*.qml \ + qml/common/*.qml \ + qml/common/*.js OTHER_FILES += \ - $$QML_SOURCES \ - harbour-ytplayer.desktop \ - scripts/mcc-data-util.py \ - scripts/generate-config-h.py \ - scripts/get_version_str.sh \ - rpm/harbour-ytplayer.spec - -include(third_party/youtube_dl.pri) -include(languages/translations.pri) - -KEY_FILE = $$top_srcdir/youtube-data-api-v3.key -CLIENT_ID_FILE = $$top_srcdir/youtube-client-id.json + $$QML_SOURCES \ + harbour-ytplayer.desktop \ + scripts/get_version_str.sh \ + translations/*.ts -!exists($$KEY_FILE) { - error("YouTube data api key file not found: youtube-data-api-v3.key") -} -!exists($$CLIENT_ID_FILE) { - warning("YouTube client ID file not found, client authotization won't work!") -} +DISTFILES += \ + rpm/harbour-ytplayer.spec \ + rpm/harbour-ytplayer.yaml \ + translations/*.qm \ + rpm/harbour-ytplayer.changes -configh.input = KEY_FILE -configh.output = $$top_builddir/config.h -configh.commands = \ - $$top_srcdir/scripts/generate-config-h.py \ - --keyfile=$$KEY_FILE \ - --idfile=$$CLIENT_ID_FILE \ - --outfile=$$top_builddir/config.h -configh.CONFIG += no_link +SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172 -QMAKE_EXTRA_COMPILERS += configh -PRE_TARGETDEPS += compiler_configh_make_all +include(translations/translations.pri) -DEFINES += VERSION_STR=\\\"$$system($${top_srcdir}/scripts/get_version_str.sh)\\\" +VERSION_RUN = $$system(bash $${top_srcdir}/scripts/get_version_str.sh) +DEFINES += VERSION_STR=\\\"$$system(cat $${top_srcdir}/scripts/version-str)\\\" licenses.files = $$files($$top_srcdir/LICENSE.*) licenses.path = /usr/share/$${TARGET}/licenses @@ -99,13 +90,3 @@ SOURCES += $$QML_SOURCES RESOURCES += \ YTPlayer.qrc - -mcc_data.target = mcc-data -mcc_data.commands = \ - $$top_srcdir/scripts/mcc-data-util.py \ - --keyfile=$$top_srcdir/youtube-data-api-v3.key \ - --mccfile=$$top_srcdir/resources/mcc-data.json \ - --verbose --mode check - -QMAKE_EXTRA_TARGETS += mcc-data -PRE_TARGETDEPS += mcc-data diff --git a/icons/108x108/harbour-ytplayer.png b/icons/108x108/harbour-ytplayer.png new file mode 100644 index 0000000..fff0281 Binary files /dev/null and b/icons/108x108/harbour-ytplayer.png differ diff --git a/icons/128x128/harbour-ytplayer.png b/icons/128x128/harbour-ytplayer.png new file mode 100644 index 0000000..1867e66 Binary files /dev/null and b/icons/128x128/harbour-ytplayer.png differ diff --git a/icons/172x172/harbour-ytplayer.png b/icons/172x172/harbour-ytplayer.png new file mode 100644 index 0000000..89bdb3e Binary files /dev/null and b/icons/172x172/harbour-ytplayer.png differ diff --git a/icons/86x86/harbour-ytplayer.png b/icons/86x86/harbour-ytplayer.png new file mode 100644 index 0000000..bc824bb Binary files /dev/null and b/icons/86x86/harbour-ytplayer.png differ diff --git a/languages/translations.json b/languages/translations.json deleted file mode 100644 index 9777976..0000000 --- a/languages/translations.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "default" : "en_GB", - "items" : [ - { - "name" : "Čeština", - "code" : "cs_CZ", - "authors" : [ - "Bobsik" - ] - }, - { - "name" : "Deutsch", - "code" : "de", - "authors" : [ - "Björn Bidar ", - "Pascal Schmid" - ] - }, - { - "name" : "English (UK)", - "code" : "en_GB", - "authors" : [ - "Piotr Tworek " - ] - }, - { - "name" : "Italiano", - "code" : "it_IT", - "authors" : [ - "Gio Scino" - ] - }, - { - "name" : "Nederlands", - "code" : "nl_NL", - "authors" : [ - "Heimen Stoffels" - ] - }, - { - "name" : "Русский", - "code" : "ru_RU", - "authors" : [ - "Petr Tsymbarovich " - ] - }, - { - "name" : "Svenska", - "code" : "sv", - "authors" : [ - "Åke Engelbrektson " - ] - } - ] -} diff --git a/languages/translations.pri b/languages/translations.pri deleted file mode 100644 index 3a5efa9..0000000 --- a/languages/translations.pri +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2015 Piotr Tworek. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE.YTPlayer file. - -TRANSLATIONS += \ - languages/cs_CZ.ts \ - languages/de.ts \ - languages/en_GB.ts \ - languages/it_IT.ts \ - languages/nl_NL.ts \ - languages/ru_RU.ts \ - languages/sv.ts - -OTHER_FILES += languages/translations.json - -updateqm.input = TRANSLATIONS -updateqm.output = $$top_builddir/languages/${QMAKE_FILE_BASE}.qm -updateqm.commands = \ - lrelease -idbased ${QMAKE_FILE_IN} \ - -qm $$top_builddir/languages/${QMAKE_FILE_BASE}.qm -updateqm.CONFIG += no_link -QMAKE_EXTRA_COMPILERS += updateqm - -PRE_TARGETDEPS += compiler_updateqm_make_all - -localization.files = $$files($$top_builddir/languages/*.qm) -localization.path = /usr/share/$${TARGET}/languages - -INSTALLS += localization diff --git a/qml/YTPlayer.qml b/qml/YTPlayer.qml index e5e2b59..3d1aa1a 100644 --- a/qml/YTPlayer.qml +++ b/qml/YTPlayer.qml @@ -29,7 +29,7 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 -import org.nemomobile.notifications 1.0 +import Nemo.Notifications 1.0 import harbour.ytplayer 1.0 import "pages" @@ -40,13 +40,15 @@ ApplicationWindow readonly property double thumbnailAspectRatio: 9 / 16 readonly property string youtubeIconsFontName: "youtube-icons" readonly property int kMaxCoverThumbnailCount: 12 - readonly property int kThumbnailWidth: 120 readonly property color kBlackTransparentBg: "#AA000000" readonly property string kYoutubeVideoUrlBase: "https://www.youtube.com/watch?v=" readonly property int kListAutoLoadItemThreshold: 10 readonly property int kStandardAnimationDuration: 250 readonly property int kLongAnimationDuration: 500 readonly property int kPreferredButtonWidth: 300 + property string iconColor: Theme.darkPrimaryColor !== "undefined" + && Theme.darkPrimaryColor === Theme.primaryColor + ? "-black" : "-white" initialPage: Component { MainMenu { } } cover: YTNetworkManager.online ? @@ -93,9 +95,8 @@ ApplicationWindow function openLinkInBrowser(url) { Log.debug("Opening link in browser: " + url) - pageStack.push(Qt.resolvedUrl("pages/BrowserLauncher.qml"), { - "url" : url, - }) + pageStack.push(Qt.resolvedUrl("pages/BrowserLauncher.qml"), + { "url" : url }) } Timer { @@ -106,6 +107,10 @@ ApplicationWindow if (!YTNetworkManager.online) { YTNetworkManager.onOnlineChanged(false) } + if(!YTUpdater.ytdlExists()) { + pageStack.push(Qt.resolvedUrl("pages/Settings.qml"), + { autoUpdate: true }) + } } } diff --git a/qml/common/MainMenuItem.qml b/qml/common/MainMenuItem.qml index 1b50fd3..bec6cd2 100644 --- a/qml/common/MainMenuItem.qml +++ b/qml/common/MainMenuItem.qml @@ -31,34 +31,38 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 BackgroundItem { - id: root - property alias text: label.text property alias icon: image.source property int sidePadding: Theme.paddingMedium property bool active: false + height: Theme.itemSizeSmall - Row { - id: wrapper - x: root.sidePadding - width: parent.width - 2 * root.sidePadding - height: label.height + 2 * Theme.paddingMedium - spacing: Theme.paddingLarge - - AsyncImage { - id: image - anchors.verticalCenter: parent.verticalCenter - height: 64 - width: 64 - fillMode: Image.PreserveAspectFit + AsyncImage { + id: image + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: Theme.paddingLarge + } + width: parent.height * 0.7 + height: parent.height * 0.7 + fillMode: Image.PreserveAspectFit + } + Label { + id: label + anchors { + verticalCenter: parent.verticalCenter + left: image.right + right: parent.right + leftMargin: Theme.paddingLarge + rightMargin: sidePadding } - Label { - id: label - anchors.verticalCenter: parent.verticalCenter - color: root.highlighted ? Theme.highlightColor : Theme.primaryColor - font.family: Theme.fontFamilyHeading - font.pixelSize: Theme.fontSizeLarge - width: parent.width - image.width - 2 * parent.spacing + color: parent.highlighted + ? Theme.highlightColor + : Theme.primaryColor + font { + family: Theme.fontFamilyHeading + pixelSize: Theme.fontSizeMedium } } } diff --git a/qml/common/SettingsButton.qml b/qml/common/SettingsButton.qml index 71abf03..bbdf19a 100644 --- a/qml/common/SettingsButton.qml +++ b/qml/common/SettingsButton.qml @@ -35,6 +35,7 @@ BackgroundItem { property alias text: label.text property bool selected: false + property alias color: label.color Label { id: label diff --git a/qml/common/YTLikeButtons.qml b/qml/common/YTLikeButtons.qml index 8bbda91..b8df5f4 100644 --- a/qml/common/YTLikeButtons.qml +++ b/qml/common/YTLikeButtons.qml @@ -131,7 +131,7 @@ Row { Image { property color hcolor: parent.pressed ? Theme.highlightColor : Theme.primaryColor id: likeIcon - source: "qrc:///icons/like-m.png" + source: "qrc:///icons/like-m"+iconColor+".png" anchors.verticalCenter: parent.verticalCenter opacity: parent.selected ? 1 : priv.inactiveButtonOpacity Behavior on opacity { @@ -190,7 +190,7 @@ Row { Image { property color hcolor: parent.pressed ? Theme.highlightColor : Theme.primaryColor id: dislikeIcon - source: "qrc:///icons/dislike-m.png" + source: "qrc:///icons/dislike-m"+iconColor+".png" anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter opacity: parent.selected ? 1 : priv.inactiveButtonOpacity diff --git a/qml/common/YTListItem.qml b/qml/common/YTListItem.qml index 865f821..c11a6d4 100644 --- a/qml/common/YTListItem.qml +++ b/qml/common/YTListItem.qml @@ -42,8 +42,8 @@ ListItem { AsyncImage { id: thumbnail - width: kThumbnailWidth - height: width * thumbnailAspectRatio + height: Theme.itemSizeMedium * 0.85 + width: height / thumbnailAspectRatio anchors { verticalCenter: parent.verticalCenter left: parent.left @@ -55,18 +55,19 @@ ListItem { Rectangle { anchors.bottom: parent.bottom anchors.right: parent.right - visible: (ytItem.duration.length > 0) && - parent.status === Image.Ready + visible: (ytItem.duration.length > 0) && parent.status === Image.Ready color: "black" height: childrenRect.height width: childrenRect.width + 2 * Theme.paddingSmall + opacity: 0.8 Label { x: Theme.paddingSmall text: ytItem.duration.length > 0 ? (new DJS.Duration(ytItem.duration)).asClock() : "" - color: Theme.primaryColor - font.pixelSize: Theme.fontSizeExtraSmall * 0.8 + color: Theme.lightPrimaryColor + font.pixelSize: Theme.fontSizeExtraSmall * 0.7 + font.weight: Font.Bold horizontalAlignment: Text.AlignHCenter } } @@ -80,14 +81,24 @@ ListItem { wrapMode: Text.Wrap anchors { left: thumbnail.right - right: parent.right + right: imageChannel.visible ? imageChannel.right : parent.right leftMargin: Theme.paddingSmall rightMargin: Theme.paddingSmall verticalCenter: parent.verticalCenter } - font { - family: Theme.fontFamily - pixelSize: Theme.fontSizeExtraSmall + font.pixelSize: Theme.fontSizeSmall + } + + Image { + id: imageChannel + source: "image://theme/icon-m-media-artists" + visible: youtubeId.kind === "youtube#channel" + width: Theme.iconSizeMedium + height: Theme.iconSizeMedium + anchors { + right: parent.right + rightMargin: Theme.paddingSmall + verticalCenter: parent.verticalCenter } } diff --git a/qml/common/YTVideoList.qml b/qml/common/YTVideoList.qml index 7bf5b0e..cf9dee6 100644 --- a/qml/common/YTVideoList.qml +++ b/qml/common/YTVideoList.qml @@ -66,6 +66,7 @@ YTListView { } delegate: YTListItem { + contentHeight: Theme.itemSizeMedium width: parent.width title: snippet.title thumbnails: snippet.thumbnails diff --git a/qml/cover/ChannelBrowser.qml b/qml/cover/ChannelBrowser.qml index ec64d3b..9835c77 100644 --- a/qml/cover/ChannelBrowser.qml +++ b/qml/cover/ChannelBrowser.qml @@ -92,7 +92,7 @@ CoverBackground { font.family: Theme.fontFamilyHeading font.pixelSize: Theme.fontSizeSmall font.bold: true - color: Theme.primaryColor + color: Theme.lightPrimaryColor maximumLineCount: 2 wrapMode: Text.WordWrap elide: Text.ElideRight diff --git a/qml/cover/Default.qml b/qml/cover/Default.qml index 1a2d1d1..22715e8 100644 --- a/qml/cover/Default.qml +++ b/qml/cover/Default.qml @@ -114,7 +114,7 @@ CoverBackground { font.family: Theme.fontFamilyHeading font.pixelSize: Theme.fontSizeSmall font.bold: true - color: Theme.primaryColor + color: Theme.lightPrimaryColor maximumLineCount: 2 wrapMode: Text.Wrap text: "YTPlayer" diff --git a/qml/cover/NetworkOffline.qml b/qml/cover/NetworkOffline.qml index 8bb060f..87ea0a3 100644 --- a/qml/cover/NetworkOffline.qml +++ b/qml/cover/NetworkOffline.qml @@ -57,7 +57,7 @@ CoverBackground { horizontalAlignment: Text.AlignHCenter font.pixelSize: Theme.fontSizeSmall font.family: Theme.fontFamilyHeading - color: Theme.primaryColor + color: Theme.lightPrimaryColor maximumLineCount: 2 wrapMode: Text.Wrap //: Network offline screen label diff --git a/qml/pages/About.qml b/qml/pages/About.qml index aa39be0..94cb386 100644 --- a/qml/pages/About.qml +++ b/qml/pages/About.qml @@ -12,135 +12,150 @@ Page { requestCoverPage("Default.qml") } - Column { - id: headerPart - anchors.top: parent.top - width: parent.width + SilicaFlickable { + id: aboutFlickable + anchors.fill: parent + contentHeight: aboutColumn.height + Theme.paddingLarge - PageHeader { - //: Title of about page - //% "About YTPlayer" - title: qsTrId("ytplayer-title-about") - } - Item { - width: parent.width - height: Theme.paddingMedium - } - Image { - anchors.horizontalCenter: parent.horizontalCenter - height: 256 - fillMode: Image.PreserveAspectFit - source: "qrc:///logo.png" - } - Item { - width: parent.width - height: Theme.paddingMedium - } - Label { - width: parent.width - anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Theme.fontSizeSmall - wrapMode: Text.WordWrap - maximumLineCount: 2 - horizontalAlignment: Text.AlignHCenter - //: YTPlayer application description in about page - //% "Unofficial YouTube client for Sailfish OS" - text: qsTrId("ytplayer-label-application-description") - } - Item { - width: parent.width - height: Theme.paddingMedium - } - Label { - anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Theme.fontSizeExtraSmall - color: Theme.secondaryColor - //: Region code field value - //% "Region code: %1" - text: qsTrId("ytplayer-label-region-code").arg(regionCode) - } - Label { - anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Theme.fontSizeExtraSmall - color: Theme.secondaryColor - //: Version label value - //% "Version: %1" - text: qsTrId("ytplayer-label-version").arg(YTUtils.version) - } - Item { - width: parent.width - height: Theme.paddingMedium - } - Label { - anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Theme.fontSizeExtraSmall - color: Theme.secondaryColor - text: "Copyright \u00A9 2014-2015 Piotr Tworek" - } - Label { - width: parent.width - anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Theme.fontSizeExtraSmall - color: Theme.secondaryColor - wrapMode: Text.WordWrap - maximumLineCount: 2 - horizontalAlignment: Text.AlignHCenter - //: Label displaying YTPlayer licensing information - //% "YTPlayer is licensed under 3-clause BSD License" - text: qsTrId("ytplayer-label-application-license") - } - } + VerticalScrollDecorator { flickable: aboutFlickable } - Item { - anchors.top: headerPart.bottom - anchors.bottom: urlPart.top - width: parent.width Column { + id: aboutColumn + anchors.top: parent.top width: parent.width - anchors.centerIn: parent - readonly property real buttonWidth: Math.max(kPreferredButtonWidth, b1.implicitWidth, - b2.implicitWidth, b2.implicitWidth) - Button { - id: b1 - width: parent.buttonWidth + spacing: Theme.paddingLarge + + PageHeader { + //: Title of about page + //% "About YTPlayer" + title: qsTrId("ytplayer-title-about") + } + Image { anchors.horizontalCenter: parent.horizontalCenter - //: Button for showing license viewer page - //% "View license" - text: qsTrId("ytplayer-action-view-license") - onClicked: pageStack.push(Qt.resolvedUrl("LicenseViewer.qml"), { - "licenseFile": "LICENSE.YTPlayer" - }) + height: Theme.itemSizeMedium + width: Theme.itemSizeMedium + fillMode: Image.PreserveAspectFit + source: "qrc:///logo.png" } - Item { height: Theme.paddingLarge; width: parent.width } - Button { - id: b2 - width: parent.buttonWidth + Label { + width: parent.width anchors.horizontalCenter: parent.horizontalCenter - //: Label for button showing third party software listing page - //% "Third party software" - text: qsTrId("ytplayer-action-third-party-software") - onClicked: pageStack.push(Qt.resolvedUrl("ThirdPartySoftware.qml")) + font.pixelSize: Theme.fontSizeSmall + wrapMode: Text.WordWrap + maximumLineCount: 2 + horizontalAlignment: Text.AlignHCenter + //: YTPlayer application description in about page + //% "Unofficial YouTube client for Sailfish OS" + text: qsTrId("ytplayer-label-application-description") } - Item { height: Theme.paddingLarge; width: parent.width } - Button { - id: b3 - width: parent.buttonWidth + Label { anchors.horizontalCenter: parent.horizontalCenter - //: Label for button showing application translation credits page - //% "Translations" - text: qsTrId("ytplayer-action-translation-credits") - onClicked: pageStack.push(Qt.resolvedUrl("TranslationCredits.qml")) + font.pixelSize: Theme.fontSizeExtraSmall + color: Theme.secondaryColor + //: Region code field value + //% "Region code: %1" + text: qsTrId("ytplayer-label-region-code").arg(regionCode) + } + Label { + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: Theme.fontSizeExtraSmall + color: Theme.secondaryColor + //: Version label value + //% "Version: %1" + text: qsTrId("ytplayer-label-version").arg(YTUtils.version) + } + Label { + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: Theme.fontSizeExtraSmall + color: Theme.secondaryColor + horizontalAlignment: Text.AlignHCenter + text: "Copyright \u00A9 2014-2015 Piotr Tworek\n" + +"2015-2018 Petr Tsymbarovich\n" + +"2019-2020 Matti Viljanen" + } + Label { + width: parent.width + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: Theme.fontSizeExtraSmall + color: Theme.secondaryColor + wrapMode: Text.WordWrap + maximumLineCount: 2 + horizontalAlignment: Text.AlignHCenter + //: Label displaying YTPlayer licensing information + //% "YTPlayer is licensed under 3-clause BSD License" + text: qsTrId("ytplayer-label-application-license") + } + Column { + width: parent.width + spacing: Theme.paddingLarge + readonly property real buttonWidth: Math.max(kPreferredButtonWidth, + b1.implicitWidth, + b2.implicitWidth, + b3.implicitWidth, + b4.implicitWidth) + Button { + id: b1 + width: parent.buttonWidth + anchors.horizontalCenter: parent.horizontalCenter + //: Button for showing license viewer page + //% "View license" + text: qsTrId("ytplayer-action-view-license") + onClicked: pageStack.push(Qt.resolvedUrl("LicenseViewer.qml"), { "licenseFile": "LICENSE.YTPlayer" }) + } + Button { + id: b2 + width: parent.buttonWidth + anchors.horizontalCenter: parent.horizontalCenter + //: Label for button showing third party software listing page + //% "Third party software" + text: qsTrId("ytplayer-action-third-party-software") + onClicked: pageStack.push(Qt.resolvedUrl("ThirdPartySoftware.qml")) + } + Button { + id: b3 + width: parent.buttonWidth + anchors.horizontalCenter: parent.horizontalCenter + //: Label for button showing application translation credits page + //% "Translations" + text: qsTrId("ytplayer-action-translation-credits") + onClicked: pageStack.push(Qt.resolvedUrl("TranslationCredits.qml")) + } + Button { + id: b4 + width: parent.buttonWidth + anchors.horizontalCenter: parent.horizontalCenter + text: "GitHub" + onClicked: Qt.openUrlExternally("https://github.com/direc85/sailfish-ytplayer") + } + } + + Label { + width: parent.width - 2 * Theme.horizontalPageMargin + wrapMode: Text.WordWrap + font.pixelSize: Theme.fontSizeSmall + anchors.horizontalCenter: parent.horizontalCenter + color: Theme.secondaryColor + //: Description for Ko-Fi donation link image + //% "The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee!" + text: qsTrId("ytplayer-about-ko-fiz") } - } - } - Label { - id: urlPart - anchors.horizontalCenter: parent.horizontalCenter - anchors.bottom: parent.bottom - anchors.bottomMargin: Theme.paddingSmall - color: Theme.secondaryColor - font.pixelSize: Theme.fontSizeTiny - text: "https://github.com/tworaz/sailfish-ytplayer" + BackgroundItem { + anchors.horizontalCenter: parent.horizontalCenter + width: Theme.iconSizeExtraLarge * 1.2 + height: Theme.iconSizeExtraLarge * 1.2 + onClicked: Qt.openUrlExternally("https://ko-fi.com/direc85") + contentItem.radius: Theme.paddingSmall + + Image { + anchors.centerIn: parent + source: "qrc:///ko-fi.png" + width: Theme.iconSizeExtraLarge + height: Theme.iconSizeExtraLarge + smooth: true + asynchronous: true + } + } + } } } diff --git a/qml/pages/Account.qml b/qml/pages/Account.qml index 7d96635..8b3f78f 100644 --- a/qml/pages/Account.qml +++ b/qml/pages/Account.qml @@ -44,7 +44,7 @@ Page { //: YouTube subscribed channels page title //% "Subscribed channels" title: qsTrId("ytplayer-title-subscribed-channels") - topPulleyVisible: true + topPulleyVisible: false } }, State { @@ -206,6 +206,7 @@ Page { } delegate: YTListItem { + contentHeight: Theme.itemSizeMedium title: snippet.title thumbnails: snippet.thumbnails youtubeId: { diff --git a/qml/pages/ChannelBrowser.qml b/qml/pages/ChannelBrowser.qml index 7cb2cf0..59a580b 100644 --- a/qml/pages/ChannelBrowser.qml +++ b/qml/pages/ChannelBrowser.qml @@ -30,7 +30,7 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 import harbour.ytplayer 1.0 -import org.nemomobile.notifications 1.0 +import Nemo.Notifications 1.0 import "../common" Page { diff --git a/qml/pages/DownloadSettings.qml b/qml/pages/DownloadSettings.qml index ff700e3..838fbd3 100644 --- a/qml/pages/DownloadSettings.qml +++ b/qml/pages/DownloadSettings.qml @@ -43,7 +43,7 @@ Page { //% "Automatically resume downloads" text: qsTrId("ytplayer-label-autoresume") //: Description of video download auto resume switch in settings - //% "On startup, resume all downloads which were either quened or " + //% "On startup, resume all downloads which were either queued or " //% "in progress when YTPlayer was closed." description: qsTrId("ytplayer-description-autoresume") checked: YTPrefs.getBool("Download/ResumeOnStartup") diff --git a/qml/pages/DownloadedVideos.qml b/qml/pages/DownloadedVideos.qml index 291cb24..8ca8c16 100644 --- a/qml/pages/DownloadedVideos.qml +++ b/qml/pages/DownloadedVideos.qml @@ -73,7 +73,7 @@ Page { AsyncImage { id: thumbnail - width: kThumbnailWidth + width: Theme.itemSizeMedium height: width * thumbnailAspectRatio anchors { verticalCenter: parent.verticalCenter diff --git a/qml/pages/Favorites.qml b/qml/pages/Favorites.qml index c35c906..f2ebfe6 100644 --- a/qml/pages/Favorites.qml +++ b/qml/pages/Favorites.qml @@ -91,6 +91,7 @@ Page { model: YTFavorites delegate: YTListItem { + contentHeight: Theme.itemSizeMedium title: video_title duration: video_duration menu: contextMenuComponent diff --git a/qml/pages/LicenseViewer.qml b/qml/pages/LicenseViewer.qml index 227584f..873b912 100644 --- a/qml/pages/LicenseViewer.qml +++ b/qml/pages/LicenseViewer.qml @@ -45,10 +45,11 @@ Page { } SilicaFlickable { + id: licenseFlickable anchors.fill: parent - anchors.leftMargin: Theme.paddingMedium - anchors.rightMargin: Theme.paddingMedium - contentHeight: column.height + contentHeight: column.height + Theme.paddingLarge + + VerticalScrollDecorator { flickable: licenseFlickable } Column { id: column @@ -61,14 +62,13 @@ Page { } Text { id: licenseText - width: parent.width + x: Theme.paddingMedium + width: parent.width - 2*x font.pixelSize: Theme.fontSizeExtraSmall color: Theme.secondaryColor text: YTUtils.getLicense(licenseFile) wrapMode: Text.Wrap } } - - VerticalScrollDecorator {} } } diff --git a/qml/pages/LogViewer.qml b/qml/pages/LogViewer.qml index 2c57e38..57523cc 100644 --- a/qml/pages/LogViewer.qml +++ b/qml/pages/LogViewer.qml @@ -30,7 +30,7 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 import harbour.ytplayer 1.0 -import org.nemomobile.notifications 1.0 +import Nemo.Notifications 1.0 Page { allowedOrientations: Orientation.All diff --git a/qml/pages/MainMenu.qml b/qml/pages/MainMenu.qml index 3034bf6..cf916bc 100644 --- a/qml/pages/MainMenu.qml +++ b/qml/pages/MainMenu.qml @@ -94,7 +94,7 @@ Page { //: Menu option to show about page //% "About" text: qsTrId("ytplayer-action-about") - //icon: "qrc:///icons/info-64.png" + //icon: "qrc:///icons/info-64"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("About.qml")) } MenuItem { @@ -142,7 +142,7 @@ Page { //: Menu option responsible for showing user subscriptions page //% "Subscriptions" text: qsTrId("ytplayer-action-subscriptions") - icon: "qrc:///icons/rss-m.png" + icon: "qrc:///icons/rss-m"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("Account.qml"), { "state" : "SUBSCRIPTION_CHANNELS" }) } @@ -216,21 +216,21 @@ Page { //: Menu option showing video favorites page //% "Favorites" text: qsTrId("ytplayer-acton-favorites") - icon: "qrc:///icons/star-8-64.png" + icon: "qrc:///icons/star-8-64"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("Favorites.qml")) } MainMenuItem { //: Menu option to show video categories page //% "Categories" text: qsTrId("ytplayer-action-video-categories") - icon: "qrc:///icons/categorize-64.png" + icon: "qrc:///icons/categorize-64"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("VideoCategories.qml")) } MainMenuItem { //: Menu option showing downloaded videos page //% "Downloads" text: qsTrId("ytplayer-action-downloaded-videos") - icon: "qrc:///icons/downloaded-videos-64.png" + icon: "qrc:///icons/downloaded-videos-64"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("DownloadedVideos.qml")) } MainMenuItem { @@ -238,7 +238,7 @@ Page { //% "Recommendations" text: qsTrId("ytplayer-action-recommended") visible: priv.showAccount - icon: "qrc:///icons/approval-64.png" + icon: "qrc:///icons/approval-64"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("Account.qml"), { "state" : "RECOMMENDED" }) } @@ -246,7 +246,7 @@ Page { //: Menu opion showing recently watched videos page //% "Watched recently" text: qsTrId("ytplayer-action-watched-recently") - icon: "qrc:///icons/video-multi-m.png" + icon: "qrc:///icons/video-multi-m"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("WatchedRecently.qml")) } MainMenuItem { @@ -254,7 +254,7 @@ Page { //% "Likes" text: qsTrId("ytplayer-action-likes") visible: priv.showAccount - icon: "qrc:///icons/like-m.png" + icon: "qrc:///icons/like-m"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("Account.qml"), { "state" : "LIKES" }) } @@ -263,7 +263,7 @@ Page { //% "Dislikes" text: qsTrId("ytplayer-action-dislikes") visible: priv.showAccount - icon: "qrc:///icons/dislike-m.png" + icon: "qrc:///icons/dislike-m"+iconColor+".png" onClicked: pageStack.push(Qt.resolvedUrl("Account.qml"), { "state" : "DISLIKES" }) } diff --git a/qml/pages/PlayerSettings.qml b/qml/pages/PlayerSettings.qml index 9b7d6b4..b94c36f 100644 --- a/qml/pages/PlayerSettings.qml +++ b/qml/pages/PlayerSettings.qml @@ -41,7 +41,7 @@ Page { } Slider { - //: Lael for slider changing video player controls hide delay + //: Label for slider changing video player controls hide delay //% "Controls hide delay" label: qsTrId("ytplayer-label-controls-hide-delay") width: parent.width diff --git a/qml/pages/Search.qml b/qml/pages/Search.qml index c2cb2ea..3539d3e 100644 --- a/qml/pages/Search.qml +++ b/qml/pages/Search.qml @@ -239,6 +239,7 @@ Page { } delegate: YTListItem { + contentHeight: Theme.itemSizeMedium width: parent.width title: snippet.title thumbnails: snippet.thumbnails diff --git a/qml/pages/Settings.qml b/qml/pages/Settings.qml index 38b0706..d393c2a 100644 --- a/qml/pages/Settings.qml +++ b/qml/pages/Settings.qml @@ -15,9 +15,82 @@ Page { if (status === PageStatus.Active) { accountSwitch.checked = YTPrefs.isAuthEnabled() requestCoverPage("Default.qml") + if(autoUpdate) { + // We have to use this so that the + // functions do not fire at page activation + updateButtonClicked = true + startUpdate() + } } } + // Update-related properties + property bool autoUpdate: false // Used from YTPlayer.qml + property string localVersion: YTUpdater.localVersion + property string remoteVersion: YTUpdater.remoteVersion + property bool updating: YTUpdater.updating + property bool updateButtonClicked: false + + // Update check helper; just for convenience + function updateMenuItem(itemEnabled, spinnerEnabled, newText) { + updateYtdlButton.text = newText + updateYtdlButton.enabled = itemEnabled + updateYtdlIndicator.running = spinnerEnabled + + } + + // Phase 1: Check the local version + function startUpdate() { + //: Shown while checking for local version of youtube-dl + //% "Checking local version..." + updateMenuItem(false, true, qsTrId("ytplayer-update-checking-local-version")) + YTUpdater.checkLocalVersion() + } + + // Phase 2: Check the remote version + onLocalVersionChanged: { + if(!updateButtonClicked || localVersion === "checkingLocalVersion") + return; + //: Shown while checking for remote version of youtube-dl + //% "Checking remote version..." + updateMenuItem(false, true, qsTrId("ytplayer-update-checking-remote-version")) + YTUpdater.checkRemoteVersion() + } + + // Phase 3: Compare the versions, and update if needed, or stop here + onRemoteVersionChanged: { + if(!updateButtonClicked || remoteVersion === "checkingRemoteVersion") + return; + if(remoteVersion === "----.--.--") + //: Shown when checking youtube-dl version from the Internet failed + //% "Could not check for updates" + updateMenuItem(true, false, qsTrId("ytplayer-update-checking-remote-version-failed")) + else if(remoteVersion !== localVersion) { + //: Shown while downloading the youtube-dl update from the Internet + //% "Downloading youtube-dl..." + updateMenuItem(false, true, qsTrId("ytplayer-update-downloading")) + YTUpdater.startUpdate() + } + else + //: Shown when youtube-dl is up to date and no update is needed + //% "Youtube-dl is up to date" + updateMenuItem(false, false, qsTrId("ytplayer-update-up-to-date")) + } + + // Phase 4: Verify the updated version, or inform about failure + onUpdatingChanged: { + if(!updateButtonClicked) + return; + if(localVersion !== remoteVersion) + //: Shown after youtube-dl update failed + //% "Updating youtube-dl failed" + updateMenuItem(false, false, qsTrId("ytplayer-update-failed")) + else(localVersion === remoteVersion) + //: Shown after youtube-dl update succeeded + //% "Updated youtube-dl succesfully" + updateMenuItem(false, false, qsTrId("ytplayer-update-successful")) + } + SilicaFlickable { anchors.fill: parent readonly property real _h: topColumn.height + bottomColumn.height @@ -76,6 +149,37 @@ Page { anchors.bottom: parent.bottom anchors.bottomMargin: Theme.paddingLarge + Item { + height: updateYtdlButton.height + width: parent.width / parent.columns + SettingsButton { + id: updateYtdlButton + anchors.fill: parent + enabled: localVersion !== remoteVersion + text: { + if(localVersion !== remoteVersion) + //: MenuItem text for updating youtube-dl + //% "Update youtube-dl" + return qsTrId("ytplayer-update-youtubedl") + else + qsTrId("ytplayer-update-up-to-date") + } + color: (root.highlighted | root.selected) ? Theme.highlightColor : (enabled ? Theme.primaryColor : Theme.secondaryColor) + onClicked: { + // We have to use this so that the + // functions do not fire at page activation + updateButtonClicked = true + startUpdate() + } + } + BusyIndicator { + id: updateYtdlIndicator + anchors.centerIn: parent + size: BusyIndicatorSize.Medium + running: false + visible: running + } + } SettingsButton { width: parent.width / parent.columns //: Label for menu option showing cache settings page @@ -121,6 +225,15 @@ Page { pageStack.push(Qt.resolvedUrl("SearchSettings.qml")) } } + SettingsButton { + width: parent.width / parent.columns + //: Label for menu option to enter YouTube API keys + //% "API keys" + text: qsTrId("ytplayer-action-set-api-keys") + onClicked: { + pageStack.push(Qt.resolvedUrl("APIKeys.qml")) + } + } } // Column VerticalScrollDecorator {} diff --git a/qml/pages/TranslationCredits.qml b/qml/pages/TranslationCredits.qml index 63e3f92..77844ef 100644 --- a/qml/pages/TranslationCredits.qml +++ b/qml/pages/TranslationCredits.qml @@ -34,7 +34,7 @@ Page { allowedOrientations: Orientation.All SilicaListView { - id: listview + id: listView anchors.fill: parent PullDownMenu { @@ -46,6 +46,8 @@ Page { } } + VerticalScrollDecorator { flickable: listView} + header: PageHeader { //: Title of translation credits page //% "Translations" @@ -56,28 +58,29 @@ Page { delegate: Column { id: listItem - width: parent.width - property variant autors: listview.model[index].authors + x: Theme.paddingLarge + width: parent.width - 2*x + property variant authors: listView.model[index].authors - Label { - anchors.horizontalCenter: parent.horizontalCenter - text: listview.model[index].name - font.pixelSize: Theme.fontSizeLarge + SectionHeader { + text: listView.model[index].name + font.pixelSize: Theme.fontSizeSmall } Repeater { - model: listItem.autors + model: listItem.authors Label { - anchors.horizontalCenter: parent.horizontalCenter - text: listItem.autors[index] + anchors { + horizontalCenter: parent.horizontalCenter + bottomMargin: Theme.paddingSmall + } + text: listItem.authors[index] font.pixelSize: Theme.fontSizeExtraSmall + width: parent.width + wrapMode: Text.Wrap + //horizontalAlignment: Text.AlignHCenter } } - Item { - width: parent.width - height: Theme.paddingLarge - } } - VerticalScrollDecorator {} } } diff --git a/qml/pages/VideoCategories.qml b/qml/pages/VideoCategories.qml index c8286e4..b237b24 100644 --- a/qml/pages/VideoCategories.qml +++ b/qml/pages/VideoCategories.qml @@ -83,31 +83,41 @@ Page { delegate: BackgroundItem { id: delegate + width: page.width + height: Theme.itemSizeSmall - Row { - x: Theme.paddingMedium - width: page.width - spacing: Theme.paddingLarge - anchors.verticalCenter: parent.verticalCenter - - Text { - anchors.verticalCenter: parent.verticalCenter - horizontalAlignment: Text.AlignHCenter - width: 60 - font.family: youtubeIconsFontName - font.pixelSize: Theme.fontSizeLarge - color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor - text: H.getYouTubeIconForCategoryId(id) + // The logo on the left is actually a font character! + // ...which actually causes the vertical align to be off. + Text { + id: catLogo + anchors { + left: parent.left + verticalCenter: parent.verticalCenter + leftMargin: Theme.paddingLarge } + horizontalAlignment: Text.AlignHCenter + width: height + font.pixelSize: Theme.fontSizeLarge + font.family: youtubeIconsFontName + color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor + text: H.getYouTubeIconForCategoryId(id) + } - Label { - text: snippet.title - anchors.verticalCenter: parent.verticalCenter - color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor - font { - pixelSize: Theme.fontSizeLarge - family: Theme.fontFamilyHeading - } + Label { + text: snippet.title + maximumLineCount: 1 + truncationMode: TruncationMode.Fade + anchors { + verticalCenter: parent.verticalCenter + left: catLogo.right + right: parent.right + leftMargin: Theme.paddingLarge + rightMargin: Theme.paddingMedium + } + color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor + font { + pixelSize: Theme.fontSizeLarge + family: Theme.fontFamilyHeading } } diff --git a/qml/pages/VideoOverview.qml b/qml/pages/VideoOverview.qml index cbf666f..400f13b 100644 --- a/qml/pages/VideoOverview.qml +++ b/qml/pages/VideoOverview.qml @@ -5,7 +5,7 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 import harbour.ytplayer 1.0 -import org.nemomobile.notifications 1.0 +import Nemo.Notifications 1.0 import "../common/Helpers.js" as Helpers import "../common/duration.js" as DJS import "../common" @@ -500,7 +500,75 @@ Page { wrapMode: Text.Wrap font.pixelSize: Theme.fontSizeExtraSmall linkColor: Theme.highlightColor - onLinkActivated: openLinkInBrowser(link) + onLinkActivated: { + var match = link.match(/^(https?\:\/\/)?(www\.)?youtu.*\/.*$/) + if (!match) { + console.log("The activated link is not an Youtube link") + openLinkInBrowser(link) + return + } + + match = link.match(/^.*youtu.*(embed\/|watch\?v=|\&v=|\.be\/)([A-Za-z0-9_\-]{11}).*$/) + if (match) { + console.log("The link to a Youtube video was activated") + pageStack.push(Qt.resolvedUrl("VideoOverview.qml"), { + "videoId" : match[2] + }) + return + } + + match = link.match(/^.*\/channel\/([A-Za-z0-9_\-]{1,}).*$/) + if (match) { + console.log(match) + console.log("The link to a Youtube channel was activated") + pageStack.push(Qt.resolvedUrl("ChannelBrowser.qml"), { + "channelId" : match[1] + }) + return + } + + match = link.match(/^.*\/playlist.*$/) + if (match) { + console.log("The link to a Youtube playlist was activated") + openLinkInBrowser(link) + return + } + + match = link.match(/^.*\/([A-Za-z0-9_\-]{1,}).*$/) + if (match) { + channelIdRequest.link = link + channelIdRequest.params = { + part : "id", + forUsername : match[1] + } + channelIdRequest.run() + } + } + + YTRequest { + property string link + + id: channelIdRequest + method: YTRequest.List + resource: "channels" + + onSuccess: { + console.log(response) + console.assert(response.kind === "youtube#channelListResponse") + if (response.items.length === 0) { + console.log("Could not find a channel with username ", params.forUsername) + openLinkInBrowser(link) + return + } + + var item = response.items[0] + console.assert(item.kind === "youtube#channel") + console.log("The link to a Youtube user was activated") + pageStack.push(Qt.resolvedUrl("ChannelBrowser.qml"), { + "channelId" : item.id + }) + } + } } } diff --git a/qml/pages/VideoPlayer.qml b/qml/pages/VideoPlayer.qml index 7ee5e2e..9760578 100644 --- a/qml/pages/VideoPlayer.qml +++ b/qml/pages/VideoPlayer.qml @@ -5,8 +5,9 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 import QtMultimedia 5.0 +import Sailfish.Media 1.0 import harbour.ytplayer 1.0 -import org.nemomobile.notifications 1.0 +import Nemo.Notifications 1.0 import "../common/Helpers.js" as H import "../common" @@ -171,6 +172,7 @@ Page { PageHeader { id: header z: videoOutput.z + 2 + visible: opacity > 0.0 Behavior on opacity { FadeAnimation {} } @@ -184,13 +186,19 @@ Page { color: "black" opacity: 0.5 z: header.z - 1 + visible: opacity > 0.0 Behavior on opacity { FadeAnimation {} } } Rectangle { - color: "black" + color: Qt.application.active ? "black" : "transparent" + Behavior on color { + ColorAnimation { + duration: Qt.application.active ? 300 : 0 + } + } width: page.width height: page.height Text { @@ -237,12 +245,12 @@ Page { YTIconButton { id: playButton anchors.centerIn: parent - source: "qrc:///icons/play-64.png" + source: "qrc:///icons/play-64-white.png" } YTIconButton { id: pauseButton anchors.centerIn: parent - source: "qrc:///icons/pause-64.png" + source: "qrc:///icons/pause-64-white.png" } } } @@ -388,8 +396,9 @@ Page { Text { id: statusLabel font.pixelSize: Theme.fontSizeSmall - color: Theme.highlightColor + color: Theme.lightPrimaryColor !== "undefined" ? Theme.lightPrimaryColor : Theme.primaryColor } + visible: opacity > 0.0 Behavior on opacity { FadeAnimation {} } @@ -404,12 +413,16 @@ Page { radius: 4.0 color: "black" opacity: 0.0 + visible: opacity > 0.0 Behavior on opacity { FadeAnimation {} } } Slider { id: progressSlider + color: Theme.lightPrimaryColor !== "undefined" ? Theme.lightPrimaryColor : Theme.primaryColor + backgroundColor: Theme.lightSecondaryColor !== "undefined" ? Theme.lightSecondaryColor : Theme.secondaryColor + highlightColor: Theme.highlightColor anchors.bottom: bottomMenu.top width: parent.width z: videoOutput.z + 2 @@ -417,11 +430,13 @@ Page { enabled: true minimumValue: 0 valueText: H.parseDuration(value) + valueLabelColor: Theme.lightPrimaryColor !== "undefined" ? Theme.lightPrimaryColor : Theme.primaryColor onPressed: controlsTimer.stop() onReleased: { mediaPlayer.seek(value) controlsTimer.startIfNeeded() } + visible: opacity > 0.0 Behavior on opacity { FadeAnimation {} } @@ -435,12 +450,13 @@ Page { color: "black" opacity: 0.5 z: progressSlider.z - 1 + visible: opacity > 0.0 Behavior on opacity { FadeAnimation {} } } Text { - color: "white" + color: Theme.lightPrimaryColor anchors.right: parent.right anchors.bottom: parent.bottom anchors.bottomMargin: Theme.paddingSmall @@ -449,6 +465,7 @@ Page { text: H.parseDuration(mediaPlayer.duration) opacity: mediaPlayer.duration > 0 ? progressSliderBg.opacity * 2 : 0.0 z: progressSliderBg.z + 1 + visible: opacity > 0.0 Behavior on opacity { FadeAnimation {} } @@ -457,7 +474,7 @@ Page { PushUpMenu { id: bottomMenu bottomMargin: Theme.paddingSmall - visible: priv.controlsVisible && multipleQualitiesAvailable + visible: opacity > 0.0 && priv.controlsVisible && multipleQualitiesAvailable property bool multipleQualitiesAvailable: false property Item selectedItem diff --git a/qml/pages/WatchedRecently.qml b/qml/pages/WatchedRecently.qml index 445168c..5c14ad4 100644 --- a/qml/pages/WatchedRecently.qml +++ b/qml/pages/WatchedRecently.qml @@ -97,6 +97,7 @@ Page { model: YTWatchedRecently delegate: YTListItem { + contentHeight: Theme.itemSizeMedium title: video_title duration: video_duration youtubeId: { diff --git a/qml/pages/YTOAuth2.qml b/qml/pages/YTOAuth2.qml index 70cca7c..00bc09f 100644 --- a/qml/pages/YTOAuth2.qml +++ b/qml/pages/YTOAuth2.qml @@ -31,7 +31,7 @@ import QtQuick 2.0 import QtWebKit 3.0 import Sailfish.Silica 1.0 import harbour.ytplayer 1.0 -import org.nemomobile.notifications 1.0 +import Nemo.Notifications 1.0 Page { id: page @@ -91,17 +91,13 @@ Page { } } - SilicaWebView { + WebView { id: webview anchors.fill: parent visible: false property string _authCode: "" - header: PageHeader { - title: page.pageTitle - } - url: request.oAuth2Url onLoadingChanged: { @@ -130,7 +126,7 @@ Page { } else if (title.indexOf('Denied error') !== -1) { Log.debug("Youtube OAuth access denied!") //: Message informing the user about YouTube OAuth autorization denial - //% "YouTube OAuth access denined!" + //% "YouTube OAuth access denied!" failureNotification.previewBody = qsTrId("ytplayer-oauth-access-denied") failureNotification.publish() pageStack.navigateBack(PageStackAction.Animated) diff --git a/resources/icons/approval-64-black.png b/resources/icons/approval-64-black.png new file mode 100644 index 0000000..4ed3595 Binary files /dev/null and b/resources/icons/approval-64-black.png differ diff --git a/resources/icons/approval-64.png b/resources/icons/approval-64-white.png similarity index 100% rename from resources/icons/approval-64.png rename to resources/icons/approval-64-white.png diff --git a/resources/icons/bookmark-2-64-black.png b/resources/icons/bookmark-2-64-black.png new file mode 100644 index 0000000..d95fe32 Binary files /dev/null and b/resources/icons/bookmark-2-64-black.png differ diff --git a/resources/icons/bookmark-2-64.png b/resources/icons/bookmark-2-64-white.png similarity index 100% rename from resources/icons/bookmark-2-64.png rename to resources/icons/bookmark-2-64-white.png diff --git a/resources/icons/categorize-64-black.png b/resources/icons/categorize-64-black.png new file mode 100644 index 0000000..4753380 Binary files /dev/null and b/resources/icons/categorize-64-black.png differ diff --git a/resources/icons/categorize-64.png b/resources/icons/categorize-64-white.png similarity index 100% rename from resources/icons/categorize-64.png rename to resources/icons/categorize-64-white.png diff --git a/resources/icons/dislike-m-black.png b/resources/icons/dislike-m-black.png new file mode 100644 index 0000000..3b0721c Binary files /dev/null and b/resources/icons/dislike-m-black.png differ diff --git a/resources/icons/dislike-m.png b/resources/icons/dislike-m-white.png similarity index 100% rename from resources/icons/dislike-m.png rename to resources/icons/dislike-m-white.png diff --git a/resources/icons/downloaded-videos-64-black.png b/resources/icons/downloaded-videos-64-black.png new file mode 100644 index 0000000..c227c46 Binary files /dev/null and b/resources/icons/downloaded-videos-64-black.png differ diff --git a/resources/icons/downloaded-videos-64.png b/resources/icons/downloaded-videos-64-white.png similarity index 100% rename from resources/icons/downloaded-videos-64.png rename to resources/icons/downloaded-videos-64-white.png diff --git a/resources/icons/like-m-black.png b/resources/icons/like-m-black.png new file mode 100644 index 0000000..0626bf8 Binary files /dev/null and b/resources/icons/like-m-black.png differ diff --git a/resources/icons/like-m.png b/resources/icons/like-m-white.png similarity index 100% rename from resources/icons/like-m.png rename to resources/icons/like-m-white.png diff --git a/resources/icons/pause-64-black.png b/resources/icons/pause-64-black.png new file mode 100644 index 0000000..b2bbe1c Binary files /dev/null and b/resources/icons/pause-64-black.png differ diff --git a/resources/icons/pause-64.png b/resources/icons/pause-64-white.png similarity index 100% rename from resources/icons/pause-64.png rename to resources/icons/pause-64-white.png diff --git a/resources/icons/play-64-black.png b/resources/icons/play-64-black.png new file mode 100644 index 0000000..dac9624 Binary files /dev/null and b/resources/icons/play-64-black.png differ diff --git a/resources/icons/play-64.png b/resources/icons/play-64-white.png similarity index 100% rename from resources/icons/play-64.png rename to resources/icons/play-64-white.png diff --git a/resources/icons/rss-m-black.png b/resources/icons/rss-m-black.png new file mode 100644 index 0000000..224256e Binary files /dev/null and b/resources/icons/rss-m-black.png differ diff --git a/resources/icons/rss-m.png b/resources/icons/rss-m-white.png similarity index 100% rename from resources/icons/rss-m.png rename to resources/icons/rss-m-white.png diff --git a/resources/icons/search-m-black.png b/resources/icons/search-m-black.png new file mode 100644 index 0000000..6f72b57 Binary files /dev/null and b/resources/icons/search-m-black.png differ diff --git a/resources/icons/search-m.png b/resources/icons/search-m-white.png similarity index 100% rename from resources/icons/search-m.png rename to resources/icons/search-m-white.png diff --git a/resources/icons/star-8-64-black.png b/resources/icons/star-8-64-black.png new file mode 100644 index 0000000..e15612d Binary files /dev/null and b/resources/icons/star-8-64-black.png differ diff --git a/resources/icons/star-8-64.png b/resources/icons/star-8-64-white.png similarity index 100% rename from resources/icons/star-8-64.png rename to resources/icons/star-8-64-white.png diff --git a/resources/icons/video-multi-m-black.png b/resources/icons/video-multi-m-black.png new file mode 100644 index 0000000..ac5e201 Binary files /dev/null and b/resources/icons/video-multi-m-black.png differ diff --git a/resources/icons/video-multi-m.png b/resources/icons/video-multi-m-white.png similarity index 100% rename from resources/icons/video-multi-m.png rename to resources/icons/video-multi-m-white.png diff --git a/resources/logo.png b/resources/logo.png deleted file mode 100644 index 3125dc1..0000000 Binary files a/resources/logo.png and /dev/null differ diff --git a/rpm/harbour-ytplayer.changes b/rpm/harbour-ytplayer.changes new file mode 100644 index 0000000..ec5f36f --- /dev/null +++ b/rpm/harbour-ytplayer.changes @@ -0,0 +1,93 @@ +* Tue Jun 27 2021 Matti Viljanen 0.6.18-1 +- Added youtube-dl update functionality in Settings +- Read youtube-client-id.json and youtube-data-api-v3.key from Downloads +- Improve error reporting a bit + +* Sun Jan 31 2021 Matti Viljanen 0.6.17-1 +- Use youtube-dl instead of youtube-dl-lite for now +- Update youtube-dl to 2021.01.24.1 +- Remove preinstalled API keys +- Enable (require) user supplied API keys +- Release experimental aarch64 version + +* Thu Jun 11 2020 Matti Viljanen 0.6.16-1 +- Update youtube-dl-lite to 2020.05.08 + +* Mon Jun 1 2020 Matti Viljanen 0.6.15-1 +- Revert "Recommened" videos change + +* Sun May 31 2020 Matti Viljanen 0.6.14-1 +- Remove "Latest" menu item from subscriptions +- "Fix" "Recommened" videos in main menu +- Update About page + +* Sat Mar 21 2020 Matti Viljanen 0.6.13-1 +- Update youtube-dl-lite to 2020.03.08 + +* Tue Feb 25 2020 Matti Viljanen 0.6.12-1 +- BETA RELEASE +- Uses custom version of youtube-dl +- Update functionality temporarily disabled + +* Sun Feb 23 2020 Matti Viljanen 0.6.11-1 +- Fix version number on about page +- Fix video player page on SFOS 2.2 + +* Tue Sep 24 2019 Matti Viljanen 0.6.10-1 +- Update Chinese translation +- Use .yaml file to generate .spec +- Use git head revision in About page + +* Sun Sep 15 2019 Matti Viljanen 0.6.9-1 +- Remove unused 1080p menu element + +* Sun Sep 15 2019 Matti Viljanen 0.6.8-1 +- Fix updating youtube-dl +- Use internal log when updating youtube-dl +- Better propagate youtube-dl update internally +- Translations refreshed + +* Fri May 24 2019 Matti Viljanen 0.6.7-1 +- Update German translation +- Fix category cover page background + +* Mon May 20 2019 Matti Viljanen 0.6.6-1 +- Improve dark theme support +- Fix version number on About page +- Restore logo in various pages +- Adjust main menu list item size +- Adjust video list item size +- Update Swedish translation + +* Sat May 18 2019 Matti Viljanen 0.6.5-1 +- Added youtube-dl update functionality in Settings +- Added auto-updating youtube-dl, if it is missing +- Not bundling youtube-dl anymore +- Fix for light theme cover +- Compiled using Sailfish Application SDK 2.1 (3.0.3.9) +- Changelog added + +* Sat Mar 30 2019 Matti Viljanen 0.6.2-1 +- Fix quota issue (thanks for help, tworaz!) +- Re-uploaded correct armv7hl build + +* Sat Mar 30 2019 Matti Viljanen 0.6.1-3 +- 0.6.1-RC3 +- Compile using Sailfish Application SDK 2.1 EA (3.0.3) +- Update youtube-dl + +* Tue Feb 12 2019 Matti Viljanen 0.6.0-2 +- 0.6.0-RC2 +- Compile fixes +- Enable youtube-dl lazy extractors +- Add channel icon to search results for channels +- Main menu, Categories list, Video list layout fixes +- About, Translations and License layout fixes +- About page credits updated + +* Mon Feb 11 2019 Matti Viljanen 0.6.0-1 +- 0.6.0-RC1 +- Update youtube-dl to 2019.02.09 +- Fix translations +- Performance fixes +- Tons of compile- and project-related fixes diff --git a/rpm/harbour-ytplayer.spec b/rpm/harbour-ytplayer.spec index 57e8bec..4a6aa70 100644 --- a/rpm/harbour-ytplayer.spec +++ b/rpm/harbour-ytplayer.spec @@ -1,26 +1,33 @@ -%{!?qtc_qmake:%define qtc_qmake %qmake} -%{!?qtc_qmake5:%define qtc_qmake5 %qmake5} -%{!?qtc_make:%define qtc_make make} -%{?qtc_builddir:%define _builddir %qtc_builddir} +# +# Do NOT Edit the Auto-generated Part! +# Generated by: spectacle version 0.32 +# Name: harbour-ytplayer + +# >> macros +# << macros + Summary: Native YouTube client for SailfishOS -Version: 0.5.99 +Version: 0.6.18 Release: 1 -Group: Qt/Qt +Group: Applications/Multimedia License: BSD-3-Clause -URL: https://github.com/tworaz/sailfish-ytplayer +URL: https://github.com/direc85/sailfish-ytplayer Source0: %{name}-%{version}.tar.bz2 +Source100: harbour-ytplayer.yaml Requires: sailfishsilica-qt5 >= 0.10.9 Requires: pyotherside-qml-plugin-python3-qt5 -BuildRequires: pkgconfig(Qt5Quick) -BuildRequires: pkgconfig(Qt5Qml) +Requires: nemo-qml-plugin-notifications-qt5 +BuildRequires: pkgconfig(sailfishapp) >= 1.0.2 BuildRequires: pkgconfig(Qt5Core) +BuildRequires: pkgconfig(Qt5Qml) +BuildRequires: pkgconfig(Qt5Quick) BuildRequires: pkgconfig(Qt5DBus) -BuildRequires: pkgconfig(sailfishapp) >= 0.0.10 +BuildRequires: pkgconfig(Qt5Concurrent) +BuildRequires: pkgconfig(nemonotifications-qt5) BuildRequires: desktop-file-utils -BuildRequires: zip -BuildRequires: python3-base +BuildRequires: qt5-qttools-linguist %description YTPlayer is an unofficial YouTube client for SailfishOS @@ -29,23 +36,40 @@ YTPlayer is an unofficial YouTube client for SailfishOS %prep %setup -q -n %{name}-%{version} +# >> setup +# << setup + %build -%qtc_qmake5 -%qtc_make %{?_smp_mflags} +# >> build pre +# << build pre + +%qmake5 + +make %{?_smp_mflags} + +# >> build post +# << build post %install rm -rf %{buildroot} +# >> install pre +# << install pre %qmake5_install +# >> install post +# << install post + desktop-file-install --delete-original \ - --dir %{buildroot}%{_datadir}/applications \ + --dir %{buildroot}%{_datadir}/applications \ %{buildroot}%{_datadir}/applications/*.desktop %files -%defattr(0644,root,root,-) -%attr(0755,root,root) %{_bindir}/%{name} -%attr(0755,root,root) %{_datadir}/%{name}/bin/youtube-dl +%defattr(-,root,root,-) +%{_bindir} +%{_datadir}/%{name} %{_datadir}/%{name}/licenses -%{_datadir}/%{name}/languages +%{_datadir}/%{name}/translations %{_datadir}/applications/%{name}.desktop -%{_datadir}/icons/hicolor/86x86/apps/%{name}.png +%{_datadir}/icons/hicolor/*/apps/%{name}.png +# >> files +# << files diff --git a/rpm/harbour-ytplayer.yaml b/rpm/harbour-ytplayer.yaml new file mode 100644 index 0000000..d174574 --- /dev/null +++ b/rpm/harbour-ytplayer.yaml @@ -0,0 +1,51 @@ +Name: harbour-ytplayer +Summary: Native YouTube client for SailfishOS +Version: 0.6.18 +Release: 1 +# The contents of the Group field should be one of the groups listed here: +# https://github.com/mer-tools/spectacle/blob/master/data/GROUPS +Group: Applications/Multimedia +URL: https://github.com/direc85/sailfish-ytplayer +License: BSD-3-Clause +# This must be generated before uploading a package to a remote build service. +# Usually this line does not need to be modified. +Sources: +- '%{name}-%{version}.tar.bz2' +Description: | + YTPlayer is an unofficial YouTube client for SailfishOS +Configure: none +Builder: qmake5 + +# This section specifies build dependencies that are resolved using pkgconfig. +# This is the preferred way of specifying build dependencies for your package. +PkgConfigBR: + - sailfishapp >= 1.0.2 + - Qt5Core + - Qt5Qml + - Qt5Quick + - Qt5DBus + - Qt5Concurrent + - nemonotifications-qt5 + +# Build dependencies without a pkgconfig setup can be listed here +PkgBR: + - desktop-file-utils + - qt5-qttools-linguist + +# Runtime dependencies which are not automatically detected +Requires: + - sailfishsilica-qt5 >= 0.10.9 + - pyotherside-qml-plugin-python3-qt5 + - nemo-qml-plugin-notifications-qt5 + +# All installed files +Files: + - '%{_bindir}' + - '%{_datadir}/%{name}' + - '%{_datadir}/%{name}/licenses' + - '%{_datadir}/%{name}/translations' + - '%{_datadir}/applications/%{name}.desktop' + - '%{_datadir}/icons/hicolor/*/apps/%{name}.png' + +# For more information about yaml and what's supported in Sailfish OS +# build system, please see https://wiki.merproject.org/wiki/Spectacle diff --git a/scripts/generate-config-h.py b/scripts/generate-config-h.py deleted file mode 100755 index 5473f3f..0000000 --- a/scripts/generate-config-h.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python - -import re -import json -import sys, getopt - -from pprint import pprint - -def show_help(): - print(sys.argv[0] + ' -k -c -o ') - -def warn(msg): - sys.stderr.write("WARNING: " + msg + "\n") - -def get_api_key_define(keyfile): - f = open(keyfile, 'r') - line = f.readline() - line = line.rstrip("\n") - f.close() - out = "/*\n * Value obtained from: " + keyfile + "\n */\n" - out += "#define YOUTUBE_DATA_API_V3_KEY \"" + line + "\"\n" - return out - -def get_client_id_defines(idfile): - f = open(idfile, 'r') - data = json.load(f) - f.close() - - if "installed" not in data: - warn("\"installed\" key not found in " + idfile); - return None - - dict = data["installed"] - - outstr = "/*\n * Values obtained from: %s" % idfile + "\n */\n" - - if "auth_uri" not in dict: - warn("\"auth_uri\" key not found in " + idfile) - return None - outstr += "#define YOUTUBE_AUTH_URI \"" + dict["auth_uri"] + "\"\n" - - if "client_id" not in dict: - warn("\"client_id\" key not found in " + idfile) - return None - outstr += "#define YOUTUBE_AUTH_CLIENT_ID \"" + dict["client_id"] + "\"\n" - - if "client_secret" not in dict: - warn("\"client_secret\" key not found in " + idfile) - return None - outstr += "#define YOUTUBE_AUTH_CLIENT_SECRET \"" + dict["client_secret"] + "\"\n" - - if "token_uri" not in dict: - warn("\"token_uri\" key not found in " + idfile) - return None - outstr += "#define YOUTUBE_AUTH_TOKEN_URI \"" + dict["token_uri"] + "\"\n" - - if "redirect_uris" not in dict: - warn("\n\"redirect_uris\" key not found in " + idfile) - return None - - supported_redirect_uri = "urn:ietf:wg:oauth:2.0:oob" - support_urn_oob = False - for uri in dict["redirect_uris"]: - if uri == supported_redirect_uri: - support_urn_oob = True - break - - if not support_urn_oob: - warn('"' + supported_redirect_uri + '" redirect type not supported by given client id!') - return None - - outstr += '#define YOUTUBE_AUTH_REDIRECT_URI \"' + supported_redirect_uri + "\"\n" - - return outstr - -def main(argv): - outputfile = None - keyfile = None - idfile = None - - try: - opts, args = getopt.getopt(argv,"hk:d:o:",["keyfile=", "idfile=" ,"outfile="]) - except getopt.GetoptError: - show_help() - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - show_help() - sys.exit() - elif opt in ("-o", "--outfile"): - outputfile = arg - elif opt in ("-k", "--keyfile"): - keyfile = arg - elif opt in ("-d", "--idfile"): - idfile = arg - else: - show_help() - sys.exit(3) - - out = None - if outputfile: - out = open(outputfile, "w") - print("Generating config file: " + outputfile + "\n"); - else: - sys.stderr.write("Generating config file\n"); - out = sys.stdout - - out.write("/*\n * Autogenerated by: %s" % (sys.argv[0]) + "\n */\n\n") - out.write("#ifndef _CONFIG_H_\n") - out.write("#define _CONFIG_H_\n\n") - - if keyfile: - out.write(get_api_key_define(keyfile)) - out.write("\n") - - if idfile: - defs = get_client_id_defines(idfile) - out.write(get_client_id_defines(idfile)) - out.write("\n") - - out.write("#endif\n"); - - if out != sys.stdout: - out.close() - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/scripts/get_version_str.sh b/scripts/get_version_str.sh index e7616b7..e7df6ec 100755 --- a/scripts/get_version_str.sh +++ b/scripts/get_version_str.sh @@ -1,13 +1,12 @@ #!/bin/sh +cd "$(dirname "$0")"/.. +_BASE=$(grep -oE 'Version:[[:space:]]*[0-9.]*' rpm/harbour-ytplayer.spec | awk '{ print $2 }') +_REV=$(grep -oE 'Release:[[:space:]]*[0-9.]*' rpm/harbour-ytplayer.spec | awk '{ print $2 }') +_FILE=scripts/version-str -_SCRIPT=$(readlink -f $0) -_DIR=$(dirname $_SCRIPT)/.. - -_BASE=$(grep -oE 'Version:[[:space:]]*[0-9.]*' $_DIR/rpm/harbour-ytplayer.spec | awk '{ print $2 }') - -if [ -d $_DIR/.git ]; then - _REV=$(git rev-parse --short HEAD) - echo "$_BASE-$_REV" -else - echo $_BASE +if [ -f .git/HEAD ] ; then + _REV=$(cat .git/$(cat .git/HEAD | awk '{ print $2 }') 2>&1 | cut -c1-7) + echo "$_BASE-$_REV" > $_FILE +elif [ ! -f $_FILE ]; then + echo "$_BASE-$_REV" > $_FILE fi diff --git a/scripts/mcc-data-util.py b/scripts/mcc-data-util.py deleted file mode 100755 index 73361bc..0000000 --- a/scripts/mcc-data-util.py +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env python2 - -import httplib, urllib, json -import sys, os, getopt, re - -verbose = False - -def show_help(): - print ("%s [options]\n" % sys.argv[0]) - print (" --mode [check|generate], -m Select mode (required)") - print (" --keyfile [file], -k YouTube data API key file (required)") - print (" --mccfile [file], -c Mobile Country code file path (required)") - print (" --verbose, -v Enable verbose log messages") - print (" --help, -h Show this help message") - - -def country_exists(country, mccData): - for e in mccData: - if e["gl"] == country["gl"]: - return True - return False - - -def error(msg): - sys.stderr.write("[ERROR] " + msg + "\n") - -def warn(msg): - sys.stderr.write("[WARNING] " + msg + "\n") - - -def get_supported_localizations(keypath): - keyfile = open(keypath, 'r') - key = keyfile.readline(); - #print("YouTube Data API v3 key: " + key) - keyfile.close() - - conn = httplib.HTTPSConnection("www.googleapis.com") - params = urllib.urlencode({'part' : 'snippet', 'key' : key}) - conn.request("GET", '/youtube/v3/i18nRegions?' + params) - response = conn.getresponse() - - if (response.status != 200): - print("Warning: Connection to YouTube data API failed") - conn.close() - return None - - data = json.load(response) - conn.close() - return data - - -def check(mccpath, i18n_data): - f = open(mccpath, 'r') - mcc_data = json.load(f); - f.close(); - - missing = i18n_data[:] - for country in i18n_data: - gl = country["snippet"]["gl"] - for key in mcc_data: - if mcc_data[key]["gl"] == gl: - missing.remove(country) - break; - - if len(missing) > 0: - warn ("No MCC data for %d countries" % len(missing)) - else: - print ("[INFO] All localization regions supported by YouTube have entries in " + mccpath) - - if verbose: - for country in missing: - snippet = country["snippet"] - warn ("No MCC data for %s (%s)" % (snippet["name"], snippet["gl"])) - - return 0 - - -def generate(mccpath, i18n_data): - out_data = {} - - if mccpath and os.path.isfile(mccpath): - f = open(mccpath, "r") - out_data = json.load(f) - f.close() - temp = i18n_data[:] - for country in i18n_data: - gl = country["snippet"]["gl"] - for key in out_data: - if out_data[key]["gl"] == gl: - temp.remove(country) - break; - i18n_data = temp - - for country in i18n_data: - s = country["snippet"] - try: - response = raw_input ("Mobile country code(s) for %s (%s): " % (s["name"], s["gl"]) ) - except EOFError: - sys.stdout.write('\n') - continue - except KeyboardInterrupt: - sys.stdout.write('\n') - break - - codes = re.split(r'\ +', response) - for c in codes: - mcc = int(c) - if out_data.has_key(mcc): - error("MCC code %d already exists for %s" % (mcc, out_data[mcc]["name"])) - return 1 - out_data[mcc] = s; - - print ("[INFO] Writing MCC data to: " + mccpath) - outfile = open(mccpath, 'w+') - json.dump(out_data, outfile) - outfile.close() - - return 0 - - -def main(argv): - global verbose - keypath = None - mccpath = None - mode = None - - try: - opts, args = getopt.getopt(argv,"hvm:k:c:", - ["help", "verbose", "mode=", "keyfile=", "mccfile="]) - except getopt.GetoptError: - show_help() - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - show_help() - sys.exit(0) - elif opt in ("-v", "--verbose"): - verbose = True - elif opt in ("-k", "--keyfile"): - keypath = arg - elif opt in ("-c", "--mccfile"): - mccpath = arg - elif opt in ("-m", "--mode"): - mode = arg - - if not mode: - show_help() - sys.exit(1) - - if not keypath: - show_help() - sys.exit(1) - - if not (mode == "check" or mode == "generate"): - error ("Invalid mode: " + mode) - sys.exit(3) - - if (not os.path.isfile(keypath)): - error ("Keyfile does not exist: " + keypath) - sys.exit(3) - - if not mccpath: - error ("MCC Data file not specified (--mccfile)") - sys.exit(3) - - if mode == "check" and not os.path.isfile(mccpath): - error ("MCC Data file not exist: %s" % mccpath) - sys.exit(3) - - i18n_data = get_supported_localizations(keypath) - if not i18n_data: - sys.exit(1) - - i18n_data = i18n_data["items"] - - if (mode == "check"): - return check (mccpath, i18n_data) - else: - return generate (mccpath, i18n_data) - - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/src/YTFavorites.cpp b/src/YTFavorites.cpp index 82f83ab..b75ffd4 100644 --- a/src/YTFavorites.cpp +++ b/src/YTFavorites.cpp @@ -29,11 +29,6 @@ #include "YTFavorites.h" -#include -#include -#include -#include - namespace { const char kCreateDbQueryText[] = diff --git a/src/YTFavorites.h b/src/YTFavorites.h index cc817df..f55bb32 100644 --- a/src/YTFavorites.h +++ b/src/YTFavorites.h @@ -33,6 +33,10 @@ #include "YTSqlListModel.h" #include +#include +#include +#include +#include class QSqlQuery; diff --git a/src/YTListModel.cpp b/src/YTListModel.cpp index badfffd..4e28c2a 100644 --- a/src/YTListModel.cpp +++ b/src/YTListModel.cpp @@ -29,9 +29,6 @@ #include "YTListModel.h" -#include -#include - YTListModel::YTListModel(QObject *parent) : QAbstractListModel(parent) , _filter(new YTListModelFilter(this)) diff --git a/src/YTListModel.h b/src/YTListModel.h index f21b926..df133e0 100644 --- a/src/YTListModel.h +++ b/src/YTListModel.h @@ -34,7 +34,8 @@ #include #include #include - +#include +#include class YTListModelFilter: public QObject { diff --git a/src/YTLocalVideo.cpp b/src/YTLocalVideo.cpp index 5c83e11..9e8f90c 100644 --- a/src/YTLocalVideo.cpp +++ b/src/YTLocalVideo.cpp @@ -29,8 +29,6 @@ #include "YTLocalVideo.h" -#include - #include "YTLocalVideoManager.h" #include "YTLocalVideoData.h" #include "YTPlayer.h" diff --git a/src/YTLocalVideo.h b/src/YTLocalVideo.h index df8ca6a..6ebc3cf 100644 --- a/src/YTLocalVideo.h +++ b/src/YTLocalVideo.h @@ -34,6 +34,7 @@ #include #include #include +#include class YTLocalVideoManager; class YTLocalVideoData; diff --git a/src/YTLocalVideoData.cpp b/src/YTLocalVideoData.cpp index cc02028..651d099 100644 --- a/src/YTLocalVideoData.cpp +++ b/src/YTLocalVideoData.cpp @@ -29,14 +29,6 @@ #include "YTLocalVideoData.h" -#include -#include -#include -#include -#include -#include -#include - #include "YTLocalVideoManager.h" #include "YTPlayer.h" @@ -281,7 +273,7 @@ YTLocalVideoData::videoDownloadFinished() Q_ASSERT(_videoFile->size() > 0); Q_ASSERT(_videoPath.endsWith(kPartialContentSuffix)); - _videoPath = _videoPath.left(_videoPath.size() - strlen(kPartialContentSuffix)); + _videoPath = _videoPath.left(_videoPath.size() - static_cast(strlen(kPartialContentSuffix))); if (QFile(_videoPath).exists()) QFile(_videoPath).remove(); diff --git a/src/YTLocalVideoData.h b/src/YTLocalVideoData.h index 4d1a3e3..eacbcaa 100644 --- a/src/YTLocalVideoData.h +++ b/src/YTLocalVideoData.h @@ -36,6 +36,13 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include #include "YTLocalVideo.h" diff --git a/src/YTLocalVideoListModel.cpp b/src/YTLocalVideoListModel.cpp index c14d170..ddab6f7 100644 --- a/src/YTLocalVideoListModel.cpp +++ b/src/YTLocalVideoListModel.cpp @@ -29,14 +29,6 @@ #include "YTLocalVideoListModel.h" -#include -#include -#include -#include -#include - -#include - #include "YTLocalVideoManager.h" #include "YTLocalVideo.h" diff --git a/src/YTLocalVideoListModel.h b/src/YTLocalVideoListModel.h index ded7304..f63c53e 100644 --- a/src/YTLocalVideoListModel.h +++ b/src/YTLocalVideoListModel.h @@ -34,6 +34,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include class YTLocalVideoManager; diff --git a/src/YTLocalVideoManager.cpp b/src/YTLocalVideoManager.cpp index 894f404..7028f8c 100644 --- a/src/YTLocalVideoManager.cpp +++ b/src/YTLocalVideoManager.cpp @@ -29,16 +29,6 @@ #include "YTLocalVideoManager.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "YTNetworkManager.h" #include "YTLocalVideoData.h" #include "YTRequest.h" @@ -49,13 +39,13 @@ class YTDownloadInfo : public QObject { Q_OBJECT public: explicit YTDownloadInfo(QSharedPointer data, - QNetworkAccessManager& nam, QObject *parent = 0) + QNetworkAccessManager& nam, QObject *parent = nullptr) : QObject(parent) , _downloadData(data) - , _streamRequest(NULL) - , _snippetRequest(NULL) - , _thumbnailReply(NULL) - , _videoReply(NULL) + , _streamRequest(nullptr) + , _snippetRequest(nullptr) + , _thumbnailReply(nullptr) + , _videoReply(nullptr) , _initialVideoOffset(0) , _networkAccessManager(nam) { @@ -130,7 +120,7 @@ private slots: } _thumbnailReply->disconnect(); _thumbnailReply->deleteLater(); - _thumbnailReply = NULL; + _thumbnailReply = nullptr; } void onVideoDownloadFinished() @@ -148,7 +138,7 @@ private slots: QNetworkRequest::RedirectionTargetAttribute).toUrl(); _videoReply->disconnect(); _videoReply->deleteLater(); - _videoReply = NULL; + _videoReply = nullptr; startVideoDataDownload(); return; } else { @@ -162,16 +152,16 @@ private slots: } _videoReply->disconnect(); _videoReply->deleteLater(); - _videoReply = NULL; + _videoReply = nullptr; } void onVideoDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { Q_ASSERT(_videoReply); if (bytesTotal != 0) { - double p = (double)(_initialVideoOffset + bytesReceived) / - (_initialVideoOffset + bytesTotal); - _downloadData->reportVideoDownloadProgress(p * 100); + double p = (_initialVideoOffset + static_cast(bytesReceived)) / + (_initialVideoOffset + static_cast(bytesTotal)); + _downloadData->reportVideoDownloadProgress(static_cast(p * 100.0)); } _downloadData->videoDataFetched(_videoReply->readAll()); } @@ -191,8 +181,6 @@ private slots: quality = "720p"; } else if (map.contains("360p")) { quality = "360p"; - } else if (map.contains("1080p")) { - quality = "1080p"; } else { Q_ASSERT(false); onMetadataRequestError(response); @@ -222,7 +210,7 @@ private slots: _downloadData->setQuality(quality); _streamRequest->deleteLater(); - _streamRequest = NULL; + _streamRequest = nullptr; beginDataDownloadsIfPossible(); } @@ -265,7 +253,7 @@ private slots: _downloadData->setDuration(contentDetails["duration"].toString()); _snippetRequest->deleteLater(); - _snippetRequest = NULL; + _snippetRequest = nullptr; beginDataDownloadsIfPossible(); } @@ -284,7 +272,7 @@ private slots: if (_snippetRequest->isRunning()) _snippetRequest->abort(); _snippetRequest->deleteLater(); - _snippetRequest = NULL; + _snippetRequest = nullptr; qDebug() << "Cleaning up snippet request"; } if (_streamRequest) { @@ -292,7 +280,7 @@ private slots: if (_streamRequest->isRunning()) _streamRequest->abort(); _streamRequest->deleteLater(); - _streamRequest = NULL; + _streamRequest = nullptr; qDebug() << "Cleaning up stream request"; } if (_videoReply) { @@ -300,7 +288,7 @@ private slots: if (_videoReply->isRunning()) _videoReply->abort(); _videoReply->deleteLater(); - _videoReply = NULL; + _videoReply = nullptr; qDebug() << "Cleaning up video reply"; } if (_thumbnailReply) { @@ -308,7 +296,7 @@ private slots: if (_thumbnailReply->isRunning()) _thumbnailReply->abort(); _thumbnailReply->deleteLater(); - _thumbnailReply = NULL; + _thumbnailReply = nullptr; qDebug() << "Cleaning up thumbnail reply"; } } diff --git a/src/YTLocalVideoManager.h b/src/YTLocalVideoManager.h index 0f20874..2574cd1 100644 --- a/src/YTLocalVideoManager.h +++ b/src/YTLocalVideoManager.h @@ -32,12 +32,21 @@ #include #include -#include +#include #include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include class QNetworkAccessManager; class YTLocalVideoData; diff --git a/src/YTLogger.cpp b/src/YTLogger.cpp index 3fe552f..b0743de 100644 --- a/src/YTLogger.cpp +++ b/src/YTLogger.cpp @@ -29,10 +29,6 @@ #include "YTLogger.h" -#include -#include -#include - namespace { int kLogCacheSize = 200; const char kLogFileName[] = "YTPlayer.log"; @@ -45,7 +41,7 @@ static QString _log_str_arr[] = { QString("[INFO] ") }; -QtMessageHandler YTLogger::_original_handler = NULL; +QtMessageHandler YTLogger::_original_handler = nullptr; QContiguousCache YTLogger::_log_cache = QContiguousCache(kLogCacheSize); diff --git a/src/YTLogger.h b/src/YTLogger.h index f7700ec..cb4a871 100644 --- a/src/YTLogger.h +++ b/src/YTLogger.h @@ -37,6 +37,9 @@ #include #include #include +#include +#include +#include class YTLogger : public QAbstractListModel { diff --git a/src/YTNetworkManager.cpp b/src/YTNetworkManager.cpp index c441dd2..ecc6e42 100644 --- a/src/YTNetworkManager.cpp +++ b/src/YTNetworkManager.cpp @@ -29,17 +29,6 @@ #include "YTNetworkManager.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "YTPlayer.h" #include "YTRequest.h" @@ -50,11 +39,14 @@ _isCellular(const QNetworkConfiguration& config) { switch (config.bearerType()) { case QNetworkConfiguration::Bearer2G: - case QNetworkConfiguration::BearerBluetooth: case QNetworkConfiguration::BearerHSPA: case QNetworkConfiguration::BearerCDMA2000: case QNetworkConfiguration::BearerWCDMA: case QNetworkConfiguration::BearerWiMAX: + case QNetworkConfiguration::BearerEVDO: + case QNetworkConfiguration::BearerLTE: + case QNetworkConfiguration::Bearer3G: + case QNetworkConfiguration::Bearer4G: return true; default: return false; @@ -217,7 +209,7 @@ YTNetworkManager::closeNetworkSession() _session->close(); delete _session; - _session = NULL; + _session = nullptr; } qint64 diff --git a/src/YTNetworkManager.h b/src/YTNetworkManager.h index 918bf57..5c86241 100644 --- a/src/YTNetworkManager.h +++ b/src/YTNetworkManager.h @@ -33,6 +33,16 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include class QNetworkConfigurationManager; class QNetworkAccessManager; diff --git a/src/YTPlayer.cpp b/src/YTPlayer.cpp index 519c7a9..55df722 100644 --- a/src/YTPlayer.cpp +++ b/src/YTPlayer.cpp @@ -27,21 +27,13 @@ * SUCH DAMAGE. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#ifdef QT_QML_DEBUG +#include +#endif -#include "YTVideoDownloadNotification.h" #include "YTPlayer.h" + +#include "YTVideoDownloadNotification.h" #include "YTListModel.h" #include "YTNetworkManager.h" #include "YTLocalVideoManager.h" @@ -56,6 +48,7 @@ #include "YTLogger.h" #include "YTUtils.h" #include "YTPrefs.h" +#include "YTUpdater.h" namespace { const QString kApplicationDBFileName = "YTPlayer.sqlite"; @@ -79,8 +72,8 @@ InitApplicationDatabase() QThread* GetBackgroundTaskThread() { - static QThread* thread = NULL; - if (thread == NULL) { + static QThread* thread = nullptr; + if (thread == nullptr) { thread = new QThread(); thread->start(); thread->setPriority(QThread::LowPriority); @@ -91,8 +84,8 @@ GetBackgroundTaskThread() QNetworkDiskCache* GetImageDiskCache() { - static QNetworkDiskCache* cache = NULL; - if (cache == NULL) { + static QNetworkDiskCache* cache = nullptr; + if (cache == nullptr) { cache = new QNetworkDiskCache(); QString datadir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); datadir += "/ImageCache"; @@ -108,8 +101,8 @@ GetImageDiskCache() QNetworkDiskCache* GetAPIResponseDiskCache() { - static QNetworkDiskCache* cache = NULL; - if (cache == NULL) { + static QNetworkDiskCache* cache = nullptr; + if (cache == nullptr) { cache = new QNetworkDiskCache(); QString datadir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); datadir += "/APIRequestCache"; @@ -137,6 +130,20 @@ class YTPNetworkAccessManagerFactory: public QQmlNetworkAccessManagerFactory int main(int argc, char *argv[]) { + // Some more speed & memory improvements + // Borrowed these from LLC MediaPlayer :) + setenv("QT_NO_FAST_MOVE", "0", 0); + setenv("QT_NO_FT_CACHE","0",0); + setenv("QT_NO_FAST_SCROLL","0",0); + setenv("QT_NO_ANTIALIASING","1",1); + setenv("QT_NO_FREE","0",0); + setenv("QT_PREDICT_FUTURE", "1", 1); + setenv("QT_NO_BUG", "1", 1); + setenv("QT_NO_QT", "1", 1); + // Taken from sailfish-browser + setenv("USE_ASYNC", "1", 1); + QQuickWindow::setDefaultAlphaBuffer(true); + QScopedPointer app(SailfishApp::application(argc, argv)); QScopedPointer view(SailfishApp::createView()); YTTranslations translations; @@ -153,6 +160,8 @@ main(int argc, char *argv[]) // Make sure the logger is initialized YTLogger::instance(); + YTUpdater updater; + if (!YTTranslations::initialize()) { qCritical() << "Failed to initialize YTTranslations!"; return -1; @@ -181,6 +190,7 @@ main(int argc, char *argv[]) view->rootContext()->setContextProperty("YTTranslations", &translations); view->rootContext()->setContextProperty("YTWatchedRecently", &watched_recently); view->rootContext()->setContextProperty("YTFavorites", &favorites); + view->rootContext()->setContextProperty("YTUpdater", &updater); view->engine()->addImportPath("qrc:/ui/qml/"); view->setSource(QUrl("qrc:/ui/qml/YTPlayer.qml")); diff --git a/src/YTPlayer.h b/src/YTPlayer.h index 272bd8d..3166793 100644 --- a/src/YTPlayer.h +++ b/src/YTPlayer.h @@ -30,8 +30,21 @@ #ifndef YTPLAYER_H #define YTPLAYER_H +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include QThread* GetBackgroundTaskThread(); QNetworkDiskCache* GetImageDiskCache(); diff --git a/src/YTPrefs.cpp b/src/YTPrefs.cpp index 446391d..09cc5ed 100644 --- a/src/YTPrefs.cpp +++ b/src/YTPrefs.cpp @@ -29,11 +29,6 @@ #include "YTPrefs.h" -#include -#include -#include -#include - #include "YTLocalVideoManager.h" const char kWiFiOnly[] = "WiFi"; @@ -94,6 +89,77 @@ YTPrefs::initialize() if (!settings.contains(kSearchSuggestionEngineKey)) settings.setValue(kSearchSuggestionEngineKey, kHistorySuggestionEngine); + + + if (!settings.contains("YouTube/DataURL")) + settings.setValue("YouTube/DataURL", "https://www.googleapis.com/youtube/v3/"); + if (!settings.contains("YouTube/VideoInfoURL")) + settings.setValue("YouTube/VideoInfoURL","http://www.youtube.com/get_video_info"); + + // Not the best place to read and handle the JSON code, but here it is. + QFile keyFile(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QDir::separator() + "youtube-data-api-v3.key"); + QFile dataApiFile(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QDir::separator() + "youtube-client-id.json"); + if(keyFile.exists() && dataApiFile.exists() && + keyFile.open(QFile::ReadOnly) && dataApiFile.open(QFile::ReadOnly)) { + qDebug() << "Trying to proccess youtube-client-id.json..."; + QJsonParseError jsonError; + QByteArray bytes = dataApiFile.readAll(); + QJsonDocument dataJsonD = QJsonDocument::fromJson(bytes, &jsonError); + qDebug() << "JSON parse result:" << jsonError.errorString(); + + QJsonObject installed = dataJsonD.object().value(QString("installed")).toObject(); + settings.setValue("YouTube/AuthURI", installed["auth_uri"].toString()); + qDebug() << "AuthURI" << settings.value("YouTube/AuthURI"); + settings.setValue("YouTube/TokenUri",installed["token_uri"].toString()); + qDebug() << "TokenUri" << settings.value("YouTube/TokenUri"); + settings.setValue("YouTube/RedirectURI", installed["redirect_uris"].toArray()[0].toString()); + qDebug() << "RedirectURI" << settings.value("YouTube/RedirectURI"); + + settings.setValue("YouTube/ClientID", installed["client_id"].toString()); + qDebug() << "ClientID" << settings.value("YouTube/ClientID"); + settings.setValue("YouTube/ClientSecret", installed["client_secret"].toString()); + qDebug() << "ClientSecret" << settings.value("YouTube/ClientSecret"); + + QString oldKey = settings.value("YouTube/DataAPIv3Key","").toString(); + + qDebug() << "Trying to proccess youtube-client-id.json..."; + settings.setValue("YouTube/DataAPIv3Key", QString(keyFile.readAll()).toUtf8()); + qDebug() << "DataAPIv3Key" << settings.value("YouTube/DataAPIv3Key"); + + if(settings.value("YouTube/DataAPIv3Key").toString().count() == 0 + || settings.value("YouTube/ClientSecret").toString().count() == 0 + || settings.value("YouTube/ClientID").toString().count() == 0) { + Notification notification; + notification.setAppName("YTPlayer"); + notification.setAppIcon("harbour-ytplayer"); + //: Error while parsing user-supplied json and key files + //% "Could not parse %1 or %2" + notification.setPreviewBody(qtTrId("ytplayer-msg-error-parsing-json") + .arg("youtube-client-id.json", "youtube-data-api-v3.key")); + notification.publish(); + } + else if(oldKey != settings.value("YouTube/DataAPIv3Key").toString()) { + settings.remove("YouTube/AccessToken"); + settings.remove("YouTube/RefreshToken"); + settings.remove("YouTube/AccessTokenType"); + settings.setValue("AccountIntegration", false); + } + } + else if(settings.value("YouTube/DataAPIv3Key").toString().count() == 0 + || settings.value("YouTube/ClientSecret").toString().count() == 0 + || settings.value("YouTube/ClientID").toString().count() == 0) { + Notification notification; + notification.setAppName("YTPlayer"); + //: User hasn't provided the .json and .key files in Downloads directory + //% "Files %1 and %2 not found in Downloads folder" + notification.setPreviewBody(qtTrId("ytplayer-msg-error-json-files-not-found") + .arg("youtube-client-id.json", "youtube-data-api-v3.key")); + notification.publish(); + } + if(keyFile.isOpen()) + keyFile.close(); + if(dataApiFile.isOpen()) + dataApiFile.close(); } void diff --git a/src/YTPrefs.h b/src/YTPrefs.h index 7aae690..b027e09 100644 --- a/src/YTPrefs.h +++ b/src/YTPrefs.h @@ -32,6 +32,17 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include extern const char kWiFiOnly[]; extern const char kCellularOnly[]; diff --git a/src/YTRequest.cpp b/src/YTRequest.cpp index c937fc6..cf9117f 100644 --- a/src/YTRequest.cpp +++ b/src/YTRequest.cpp @@ -29,27 +29,13 @@ #include "YTRequest.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "YTVideoUrlFetcher.h" #include "YTNetworkManager.h" #include "YTTranslations.h" #include "YTPlayer.h" #include "YTUtils.h" -#include "config.h" namespace { -static const QString kYouTubeDataV3Url("https://www.googleapis.com/youtube/v3/"); -static const QString kYouTubeGetVideoInfoUrl("http://www.youtube.com/get_video_info"); static const QString kMaxResults("50"); // Maximum allowed by YouTube static const int kMaxRetryCount = 3; } @@ -57,14 +43,15 @@ static const int kMaxRetryCount = 3; static void appendParams(QUrlQuery& query, QVariantMap& params) { - for (QVariantMap::const_iterator i = params.begin(); i != params.end(); ++i) + for (QVariantMap::const_iterator i = params.constBegin(); i != params.constEnd(); ++i) query.addQueryItem(i.key(), i.value().toString()); } static void appendCommonParams(QUrlQuery& query) { - query.addQueryItem("key", YOUTUBE_DATA_API_V3_KEY); + QSettings settings; + query.addQueryItem("key", settings.value("YouTube/DataAPIv3Key").toString()); query.addQueryItem("regionCode", YTUtils::getRegionCode()); query.addQueryItem("maxResults", kMaxResults); query.addQueryItem("hl", YTTranslations::language()); @@ -92,22 +79,22 @@ appendAuthHeader(QNetworkRequest& request) static QString methodToString(YTRequest::Method method) { - switch (method) { - case YTRequest::List: return "list"; - case YTRequest::Post: return "post"; - case YTRequest::Delete: return "delete"; - default: return "unknown"; - } + if(method == YTRequest::List) return "list"; + if(method == YTRequest::List) return "list"; + if(method == YTRequest::Post) return "post"; + if(method == YTRequest::Delete) return "delete"; + return "unknown"; } static QUrl youtubeDataAPIUrl(QString resource, QVariantMap params) { QUrlQuery query; + QSettings settings; appendParams(query, params); appendCommonParams(query); - QUrl url(kYouTubeDataV3Url + resource); + QUrl url(settings.value("YouTube/DataURL").toString() + resource); url.setQuery(query); return url; } @@ -116,6 +103,7 @@ static QUrl youtubeVideoInfoUrl(QVariantMap params) { QUrlQuery query; + QSettings settings; appendParams(query, params); query.addQueryItem("el", "player_embedded"); query.addQueryItem("gl", YTUtils::getRegionCode()); @@ -125,20 +113,20 @@ youtubeVideoInfoUrl(QVariantMap params) query.addQueryItem("hl", "en"); } - QUrl url(kYouTubeGetVideoInfoUrl); + QUrl url(settings.value("YouTube/VideoInfoURL").toString()); url.setQuery(query); return url; } YTRequest::YTRequest(QObject *parent, QNetworkAccessManager* nam) : QObject(parent) - , _reply(NULL) - , _token_reply(NULL) - , _url_fetcher(NULL) + , _reply(nullptr) + , _token_reply(nullptr) + , _url_fetcher(nullptr) , _network_access_manager(nam ? *nam : GetNetworkAccessManager()) , _loaded(false) , _busy(false) - , _model(NULL) + , _model(nullptr) , _retryCount(0) { Q_ASSERT(thread() == _network_access_manager.thread()); @@ -150,18 +138,17 @@ YTRequest::~YTRequest() if (!_reply->isFinished()) _reply->abort(); _reply->deleteLater(); - _reply = NULL; + _reply = nullptr; } if (_token_reply) { if (!_token_reply->isFinished()) _token_reply->abort(); - _reply->deleteLater(); - _token_reply = NULL; + _token_reply = nullptr; } if (_url_fetcher) { _url_fetcher->disconnect(); _url_fetcher->deleteLater(); - _url_fetcher = NULL; + _url_fetcher = nullptr; } } @@ -248,13 +235,13 @@ YTRequest::onTokenRequestFinished() handleError(_token_reply); if (_reply) { delete _reply; - _reply = NULL; + _reply = nullptr; } break; } _token_reply->deleteLater(); - _token_reply = NULL; + _token_reply = nullptr; } void @@ -262,11 +249,13 @@ YTRequest::onFinished() { Q_ASSERT(_reply); + QSettings settings; + bool busy = false; switch (_reply->error()) { case QNetworkReply::NoError: - if (_reply->request().url().toString().startsWith(kYouTubeGetVideoInfoUrl)) { + if (_reply->request().url().toString().startsWith(settings.value("YouTube/VideoInfoURL").toString())) { if (!handleVideoInfoReply(_reply)) { busy = true; break; @@ -303,13 +292,14 @@ YTRequest::onFinished() refreshToken(); break; } + /* fall thru */ default: handleError(_reply); break; } _reply->deleteLater(); - _reply = NULL; + _reply = nullptr; setBusy(busy); } @@ -358,6 +348,18 @@ YTRequest::handleError(QNetworkReply *reply) QByteArray data = reply->readAll(); QJsonDocument json = QJsonDocument::fromJson(data); qCritical() << "API Error: " << json; + + QString message = json.object().value(QString("error")).toObject()["message"].toString(); + if(message.length() > 0) { + message.remove(QRegExp("<[^>]*>")); + + Notification notification; + notification.setAppName("YTPlayer"); + notification.setAppIcon("harbour-ytplayer"); + notification.setPreviewBody(message); + notification.publish(); + } + emit error(QVariant(json.object())); } else { QVariantMap map; @@ -471,9 +473,6 @@ YTRequest::handleVideoInfoReply(QNetworkReply *reply) case 22: // MP4 1280 x 720 outMap.insert("720p", streamDetailsMap); break; - case 37: // MP4 1920 x 1080 - outMap.insert("1080p", streamDetailsMap); - break; } } @@ -484,26 +483,29 @@ YTRequest::handleVideoInfoReply(QNetworkReply *reply) void YTRequest::requestToken() { + QSettings settings; QUrlQuery query; + QSettings settings; appendParams(query, _params); //query.addQueryItem("code", authCode); - query.addQueryItem("client_id", YOUTUBE_AUTH_CLIENT_ID); - query.addQueryItem("client_secret", YOUTUBE_AUTH_CLIENT_SECRET); + query.addQueryItem("client_id", settings.value("YouTube/ClientID").toString()); + query.addQueryItem("client_secret", settings.value("YouTube/ClientSecret").toString()); + query.addQueryItem("redirect_uri", "urn:ietf:wg:oauth:2.0:oob"); query.addQueryItem("grant_type", "authorization_code"); QByteArray data = query.toString(QUrl::FullyEncoded).toLocal8Bit(); qDebug() << "Requesting YouTube OAuth2 tokens"; - QNetworkRequest request(QUrl(YOUTUBE_AUTH_TOKEN_URI)); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + QNetworkRequest* request = new QNetworkRequest(QUrl(settings.value("YouTube/TokenUri").toString())); + request->setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); if (_token_reply) { Q_ASSERT(_token_reply->isFinished()); delete _token_reply; } - _token_reply = _network_access_manager.post(request, data); + _token_reply = _network_access_manager.post(*request, data); connect(_token_reply, SIGNAL(finished()), this, SLOT(onTokenRequestFinished())); } @@ -516,21 +518,21 @@ YTRequest::refreshToken() qDebug() << "OAuth2 token expired, refreshing"; Q_ASSERT(settings.value("YouTube/RefreshToken").isValid()); - query.addQueryItem("client_id", YOUTUBE_AUTH_CLIENT_ID); - query.addQueryItem("client_secret", YOUTUBE_AUTH_CLIENT_SECRET); + query.addQueryItem("client_id", settings.value("YouTube/ClientID").toString()); + query.addQueryItem("client_secret", settings.value("YouTube/ClientSecret").toString()); query.addQueryItem("refresh_token", settings.value("YouTube/RefreshToken").toString()); query.addQueryItem("grant_type", "refresh_token"); QByteArray data = query.toString(QUrl::FullyEncoded).toLocal8Bit(); - QNetworkRequest request(QUrl(YOUTUBE_AUTH_TOKEN_URI)); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + QNetworkRequest* request = new QNetworkRequest(QUrl(settings.value("YouTube/TokenUri").toString())); + request->setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); if (_token_reply) { Q_ASSERT(_token_reply->isFinished()); delete _token_reply; } - _token_reply = _network_access_manager.post(request, data); + _token_reply = _network_access_manager.post(*request, data); connect(_token_reply, SIGNAL(finished()), this, SLOT(onTokenRequestFinished())); } @@ -556,16 +558,18 @@ YTRequest::tryExternalStreamFetcher() } QUrl -YTRequest::oAuth2Url() const +YTRequest::oAuth2Url() { + QSettings settings; QUrlQuery query; - query.addQueryItem("client_id", YOUTUBE_AUTH_CLIENT_ID); - query.addQueryItem("redirect_uri", YOUTUBE_AUTH_REDIRECT_URI); + QSettings settings; + query.addQueryItem("client_id", settings.value("YouTube/ClientID").toString()); + query.addQueryItem("redirect_uri", settings.value("YouTube/RedirectURI").toString()); query.addQueryItem("scope", "https://www.googleapis.com/auth/youtube"); query.addQueryItem("response_type", "code"); query.addQueryItem("access_type=", "offline"); - QUrl url(YOUTUBE_AUTH_URI); + QUrl url((settings.value("YouTube/AuthURI").toString())); url.setQuery(query); return url; } diff --git a/src/YTRequest.h b/src/YTRequest.h index c2935a3..73fcbd3 100644 --- a/src/YTRequest.h +++ b/src/YTRequest.h @@ -34,10 +34,23 @@ #include #include #include -#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #include "YTListModel.h" +#include "YTUpdater.h" class QNetworkAccessManager; class YTVideoUrlFetcher; @@ -108,7 +121,7 @@ protected slots: bool loaded() const { return _loaded; } void setModel(YTListModel *model) { _model = model; } YTListModel *model() const { return _model; } - QUrl oAuth2Url() const; + QUrl oAuth2Url(); void setLoaded(bool); void setBusy(bool); diff --git a/src/YTSqlListModel.cpp b/src/YTSqlListModel.cpp index 1c2e964..6d483d8 100644 --- a/src/YTSqlListModel.cpp +++ b/src/YTSqlListModel.cpp @@ -29,11 +29,6 @@ #include "YTSqlListModel.h" -#include -#include -#include -#include - namespace { static int kResultPageSize = 50; diff --git a/src/YTSqlListModel.h b/src/YTSqlListModel.h index 4fd9d14..5d33034 100644 --- a/src/YTSqlListModel.h +++ b/src/YTSqlListModel.h @@ -33,6 +33,10 @@ #include #include #include +#include +#include +#include +#include class QSqlQuery; diff --git a/src/YTSuggestionEngine.cpp b/src/YTSuggestionEngine.cpp index 49457ad..deaa2d5 100644 --- a/src/YTSuggestionEngine.cpp +++ b/src/YTSuggestionEngine.cpp @@ -29,15 +29,6 @@ #include "YTSuggestionEngine.h" -#include -#include -#include -#include -#include -#include -#include -#include - #include "YTRequest.h" #include "YTPrefs.h" @@ -91,7 +82,7 @@ initDatabase() YTSuggestionEngine::YTSuggestionEngine(QObject *parent) : QObject(parent) , _network_access_manager(YTRequest::GetNetworkAccessManager()) - , _reply(NULL) + , _reply(nullptr) { static bool db_initialized = false; if (!db_initialized) { @@ -113,7 +104,7 @@ YTSuggestionEngine::~YTSuggestionEngine() { if (_reply) { delete _reply; - _reply = NULL; + _reply = nullptr; } } @@ -204,7 +195,7 @@ YTSuggestionEngine::onFinished() } _reply->deleteLater(); - _reply = NULL; + _reply = nullptr; } int diff --git a/src/YTSuggestionEngine.h b/src/YTSuggestionEngine.h index 2a36355..9d81dd0 100644 --- a/src/YTSuggestionEngine.h +++ b/src/YTSuggestionEngine.h @@ -30,11 +30,19 @@ #ifndef YTSUGGESTIONENGINE_H #define YTSUGGESTIONENGINE_H -#include +#include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include class QNetworkReply; diff --git a/src/YTTranslations.cpp b/src/YTTranslations.cpp index 1a58349..655dc0a 100644 --- a/src/YTTranslations.cpp +++ b/src/YTTranslations.cpp @@ -29,14 +29,6 @@ #include "YTTranslations.h" -#include -#include -#include -#include -#include -#include -#include - #include "YTPrefs.h" namespace { @@ -82,7 +74,7 @@ bool YTTranslations::initialize() { QString locale = QLocale::system().name(); - QString dir = SailfishApp::pathTo(QString("languages")).toLocalFile(); + QString dir = SailfishApp::pathTo(QString("translations")).toLocalFile(); qDebug() << "System locale is:" << locale; @@ -102,10 +94,12 @@ YTTranslations::initialize() } if (!_translator.load(_language, dir)) { - qCritical() << "Failed to load translation:" << _language; + qCritical() << "Failed to load translation:" << dir + _language; return false; } + + return QGuiApplication::installTranslator(&_translator); } @@ -143,7 +137,7 @@ YTTranslations::setLanguage(QString lang) QSettings().setValue(kLanguageKey, lang); } - QString dir = SailfishApp::pathTo(QString("languages")).toLocalFile(); + QString dir = SailfishApp::pathTo(QString("translations")).toLocalFile(); _translator.load(lang, dir); emit languageChanged(lang); diff --git a/src/YTTranslations.h b/src/YTTranslations.h index f384cb3..872559d 100644 --- a/src/YTTranslations.h +++ b/src/YTTranslations.h @@ -33,6 +33,13 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include class YTTranslations : public QObject { diff --git a/src/YTUpdateWorker.cpp b/src/YTUpdateWorker.cpp new file mode 100644 index 0000000..77c1f7a --- /dev/null +++ b/src/YTUpdateWorker.cpp @@ -0,0 +1,88 @@ +#include "YTUpdateWorker.h" + +YTUpdateWorker::YTUpdateWorker() : QObject() +{ + logger = &YTLogger::instance(); +} + +void YTUpdateWorker::refreshLocal() { + QFile ytdl(ytdlFilename); + if(ytdl.exists()) { + QProcess process; + QStringList args; + args.append(QString(ytdlFilename)); + args.append(QString("--version")); + + process.start(python, args, QIODevice::ReadOnly); + process.waitForFinished(); + + if (process.exitStatus() == QProcess::NormalExit && + process.exitCode() == 0) { + localVersion = QString(process.readAllStandardOutput()); + localVersion = localVersion.trimmed(); + logger->info(QString("youtube-dl " +localVersion+ " is installed")); + YTVideoUrlFetcher::setVersion(localVersion, true); + } + } + else { + logger->warn(QString("youtube-dl is not installed")); + localVersion = "0000.00.00"; + YTVideoUrlFetcher::setVersion(localVersion, false); + } + emit localRefreshComplete(localVersion); + return; +} + +void YTUpdateWorker::refreshRemote() { + QProcess process; + QStringList args; + args.append(QString("-L")); + args.append(QString("http://yt-dl.org/")); + + process.start(curl, args, QIODevice::ReadOnly); + process.waitForFinished(); + + if(process.exitStatus() == QProcess::NormalExit && + process.exitCode() == 0) { + remoteVersion = QString(process.readAllStandardOutput()); + remoteVersion = remoteVersion.section("(v",1,1).section(")",0,0); + logger->info(QString("youtube-dl " + remoteVersion + " is available for download")); + } + else { + logger->error(QString("Could not download youtube-dl update information")); + } + + // If the string could not be parsed, + // no network connection etc. + if(remoteVersion.length() < 10 || remoteVersion.length() > 20) { + logger->error(QString("Could not parse youtube-dl update information")); + remoteVersion = "----.--.--"; + } + + emit remoteRefreshComplete(remoteVersion); + return; +} + +void YTUpdateWorker::installUpdate() { + QProcess process; + QStringList args; + args.append(QString("-L")); + args.append(QString("https://yt-dl.org/downloads/latest/youtube-dl")); + args.append(QString("-o")); + args.append(QString(ytdlFilename)); + + process.start(curl, args, QIODevice::ReadOnly); + process.waitForFinished(); + + if (process.exitStatus() == QProcess::NormalExit && + process.exitCode() == 0) { + logger->info("youtube-dl updated successfully"); + refreshLocal(); + YTVideoUrlFetcher::runInitialCheck(); + } + else { + logger->error("youtube-dl update failed"); + } + emit updateComplete(); + return; +} diff --git a/src/YTUpdateWorker.h b/src/YTUpdateWorker.h new file mode 100644 index 0000000..ef5bba8 --- /dev/null +++ b/src/YTUpdateWorker.h @@ -0,0 +1,38 @@ +#ifndef YTUPDATEWORKER_H +#define YTUPDATEWORKER_H + +#include +#include +#include +#include +#include +#include +#include "YTLogger.h" +#include "YTVideoUrlFetcher.h" + +class YTUpdateWorker : public QObject +{ + Q_OBJECT +public: + YTUpdateWorker(); + +public slots: + void refreshLocal(); + void refreshRemote(); + void installUpdate(); + +private: + const QString curl = "/usr/bin/curl"; + const QString python = "/usr/bin/python3"; + const QString ytdlFilename = QStandardPaths::writableLocation(QStandardPaths::DataLocation)+QDir::separator()+"youtube-dl"; + QString localVersion = "----.--.--"; + QString remoteVersion = "----.--.--"; + YTLogger* logger; + +signals: + void updateComplete(); + void localRefreshComplete(QString localVersion); + void remoteRefreshComplete(QString remoteVersion); +}; + +#endif // YTUPDATEWORKER_H diff --git a/src/YTUpdater.cpp b/src/YTUpdater.cpp new file mode 100644 index 0000000..dd13252 --- /dev/null +++ b/src/YTUpdater.cpp @@ -0,0 +1,74 @@ +#include "YTUpdater.h" + +YTUpdater::YTUpdater(): QObject() { + QTimer::singleShot(0, this, SLOT()); + + ytThread = new QThread(this); + //ytThread->setPriority(QThread::NormalPriority); + + ytWorker = new YTUpdateWorker(); + ytWorker->moveToThread(ytThread); + + ytThread->start(); + + connect(ytWorker, SIGNAL(localRefreshComplete(QString)), this, SLOT(setLocalVersion(QString))); + connect(ytWorker, SIGNAL(remoteRefreshComplete(QString)), this, SLOT(setRemoteVersion(QString))); + connect(ytWorker, SIGNAL(updateComplete()), this, SLOT(updateComplete())); + + connect(this, SIGNAL(refreshLocal()), ytWorker, SLOT(refreshLocal())); + connect(this, SIGNAL(refreshRemote()), ytWorker, SLOT(refreshRemote())); + connect(this, SIGNAL(installUpdate()), ytWorker, SLOT(installUpdate())); + + return; +} + +bool YTUpdater::ytdlExists() { + QFile ytdl(QStandardPaths::writableLocation(QStandardPaths::DataLocation)+QDir::separator()+"youtube-dl"); + return ytdl.exists(); +} + +void YTUpdater::setLocalVersion(QString newVersion) { + localVersion = newVersion; + emit localVersionChanged(newVersion); + checking = false; + emit checkingChanged(checking); +} + +void YTUpdater::setRemoteVersion(QString newVersion) { + remoteVersion = newVersion; + emit remoteVersionChanged(newVersion); + checking = false; + emit checkingChanged(checking); +} + +void YTUpdater::startUpdate() { + emit installUpdate(); + updating = true; + emit updatingChanged(updating); + return; +} + +void YTUpdater::updateComplete() { + updating = false; + emit updatingChanged(updating); + return; +} + + +void YTUpdater::checkLocalVersion() { + checking = true; + emit checkingChanged(checking); + localVersion = "checkingLocalVersion"; + emit localVersionChanged(localVersion); + emit refreshLocal(); + return; +} + +void YTUpdater::checkRemoteVersion() { + checking = true; + emit checkingChanged(checking); + remoteVersion = "checkingRemoteVersion"; + emit remoteVersionChanged(remoteVersion); + emit refreshRemote(); + return; +} diff --git a/src/YTUpdater.h b/src/YTUpdater.h new file mode 100644 index 0000000..1a1ceb1 --- /dev/null +++ b/src/YTUpdater.h @@ -0,0 +1,69 @@ +#ifndef YTUPDATER_H +#define YTUPDATER_H + +#include +#include +#include +#include +#include +#include +#include +#include "YTUpdateWorker.h" + +class YTUpdater: public QObject +{ + Q_OBJECT + +public: + YTUpdater(); + + Q_PROPERTY(QString localVersion READ getLocalVersion NOTIFY localVersionChanged) + Q_PROPERTY(QString remoteVersion READ getRemoteVersion NOTIFY remoteVersionChanged) + Q_PROPERTY(bool checking READ isChecking NOTIFY checkingChanged) + Q_PROPERTY(bool updating READ isUpdating NOTIFY updatingChanged) + + Q_INVOKABLE void startUpdate(); + Q_INVOKABLE void checkLocalVersion(); + Q_INVOKABLE void checkRemoteVersion(); + Q_INVOKABLE bool ytdlExists(); + + QString getLocalVersion() { return localVersion; } + QString getRemoteVersion() { return remoteVersion; } + bool isUpdating() { return updating; } + bool isChecking() { return checking; } + +private: + + // These must be non-identical strings, + // and not "----.--.--" + QString localVersion = "localVersion"; + QString remoteVersion = "remoteVersion"; + + bool updating = false; + bool checking = false; + + YTUpdateWorker *ytWorker; + QThread *ytThread; + + QString curl = "/usr/bin/curl"; + QString python = "/usr/bin/python3"; + + QThread* GetNewThread(); + +private slots: + void setLocalVersion(QString newVersion); + void setRemoteVersion(QString newVersion); + void updateComplete(); + +signals: + void localVersionChanged(QString newVersion); + void remoteVersionChanged(QString newVersion); + void updatingChanged(bool status); + void checkingChanged(bool status); + + void refreshLocal(); + void refreshRemote(); + void installUpdate(); +}; + +#endif // YTUPDATER_H diff --git a/src/YTUtils.cpp b/src/YTUtils.cpp index 080bab8..2d1d212 100644 --- a/src/YTUtils.cpp +++ b/src/YTUtils.cpp @@ -27,18 +27,6 @@ * SUCH DAMAGE. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "config.h" #include "YTUtils.h" #include "YTVideoUrlFetcher.h" diff --git a/src/YTUtils.h b/src/YTUtils.h index 2c4632b..aac7eb7 100644 --- a/src/YTUtils.h +++ b/src/YTUtils.h @@ -31,6 +31,16 @@ #define NATIVEUTIL_H #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include class YTUtils : public QObject { diff --git a/src/YTVIdeoUrlFetcher.cpp b/src/YTVIdeoUrlFetcher.cpp index d6d1637..0717b3e 100644 --- a/src/YTVIdeoUrlFetcher.cpp +++ b/src/YTVIdeoUrlFetcher.cpp @@ -28,33 +28,21 @@ */ #include "YTVideoUrlFetcher.h" - -#include -#include -#include -#include -#include -#include -#include - #include "YTPlayer.h" namespace { -const char kYouTubeDLBinaryName[] = "youtube-dl"; const int kMaxResponseCacheSize = 20; - -QString getYouTubeDLPath() -{ - static QString program; - if (program.isEmpty()) { - program = SailfishApp::pathTo("bin").toLocalFile(); - program.append(QDir::separator()); - program.append(kYouTubeDLBinaryName); - Q_ASSERT(QFile(program).exists()); +const QString ytdlFilename = QStandardPaths::writableLocation(QStandardPaths::DataLocation)+QDir::separator()+"youtube-dl"; + + QString getYouTubeDLPath() + { + static QString program; + if (program.isEmpty()) { + program = "/usr/bin/python3"; + Q_ASSERT(QFile(program).exists()); + } + return program; } - return program; -} - } QCache YTVideoUrlFetcher::_response_cache; @@ -62,9 +50,11 @@ QString YTVideoUrlFetcher::_version_str; bool YTVideoUrlFetcher::_works = false; YTVideoUrlFetcher::YTVideoUrlFetcher() - : QObject(0) - , _process(0) + : QObject(nullptr) + , _process(nullptr) { + Q_ASSERT(QFile(ytdlFilename).exists()); + static bool registered = false; if (!registered) { qRegisterMetaType("QProcess::ExitStatus"); @@ -78,8 +68,16 @@ YTVideoUrlFetcher::YTVideoUrlFetcher() void YTVideoUrlFetcher::runInitialCheck() { + QFile youtubedl(ytdlFilename); + if(!youtubedl.exists()) { + _version_str = ""; + _works = false; + qWarning() << "youtube-dl is non functional: file not found"; + return; + } + QStringList arguments; - arguments << "--version"; + arguments << ytdlFilename << "--version"; QProcess process; process.start(getYouTubeDLPath(), arguments, QIODevice::ReadOnly); @@ -92,10 +90,16 @@ YTVideoUrlFetcher::runInitialCheck() _works = true; qDebug() << "youtube-dl works, current version:" << _version_str; } else { - qWarning() << "youtune-dl is non functional:" << process.readAllStandardError(); + qWarning() << "youtube-dl is non functional:" << process.readAllStandardError(); } } +void +YTVideoUrlFetcher::setVersion(QString newVersion, bool newWorks) { + _version_str = newVersion; + _works = newWorks; +} + void YTVideoUrlFetcher::fetchUrlsFor(QString videoId) { @@ -119,7 +123,8 @@ YTVideoUrlFetcher::onFetchUrlsFor(QString videoId) } QStringList arguments; - arguments << "--dump-json" + arguments << ytdlFilename + << "--dump-json" << "--youtube-skip-dash-manifest" << "--no-cache-dir" << "--no-call-home" @@ -127,7 +132,7 @@ YTVideoUrlFetcher::onFetchUrlsFor(QString videoId) qDebug() << "YouTubeDL subprocess:" << getYouTubeDLPath() << arguments; - _process = new QProcess(0); + _process = new QProcess(nullptr); connect(_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(onProcessFinished(int, QProcess::ExitStatus))); connect(_process, SIGNAL(error(QProcess::ProcessError)), @@ -177,7 +182,7 @@ YTVideoUrlFetcher::onProcessFinished(int code, QProcess::ExitStatus status) emit failure(map); } delete _process; - _process = NULL; + _process = nullptr; } void @@ -185,7 +190,7 @@ YTVideoUrlFetcher::onProcessError(QProcess::ProcessError error) { qCritical() << "Process error:" << error; delete _process; - _process = NULL; + _process = nullptr; emit failure(QVariantMap()); } @@ -196,7 +201,7 @@ YTVideoUrlFetcher::~YTVideoUrlFetcher() _process->kill(); _process->waitForFinished(); _process->deleteLater(); - _process = NULL; + _process = nullptr; } } @@ -238,9 +243,6 @@ YTVideoUrlFetcher::parseResponse(QJsonDocument doc) case 22: response.insert("720p", details); break; - case 37: - response.insert(("1080p"), details); - break; } } diff --git a/src/YTVideoUrlFetcher.h b/src/YTVideoUrlFetcher.h index f468aaa..ef4c80a 100644 --- a/src/YTVideoUrlFetcher.h +++ b/src/YTVideoUrlFetcher.h @@ -32,9 +32,14 @@ #include #include -#include #include #include +#include +#include +#include +#include +#include +#include class YTVideoUrlFetcher: public QObject { @@ -45,6 +50,7 @@ class YTVideoUrlFetcher: public QObject static void runInitialCheck(); static bool available() { return _works; } static QString version() { return _version_str; } + static void setVersion(QString newVersion, bool newWorks); void fetchUrlsFor(QString videoId); diff --git a/src/YTWatchedRecently.cpp b/src/YTWatchedRecently.cpp index 742068f..84c73b2 100644 --- a/src/YTWatchedRecently.cpp +++ b/src/YTWatchedRecently.cpp @@ -29,12 +29,6 @@ #include "YTWatchedRecently.h" -#include -#include -#include -#include -#include - namespace { const int kMaximumDatabaseRows = 500; diff --git a/src/YTWatchedRecently.h b/src/YTWatchedRecently.h index e329db3..3bc43a0 100644 --- a/src/YTWatchedRecently.h +++ b/src/YTWatchedRecently.h @@ -34,6 +34,11 @@ #include #include +#include +#include +#include +#include +#include class YTWatchedRecently : public YTSqlListModel { diff --git a/third_party/youtube-dl b/third_party/youtube-dl deleted file mode 160000 index d85187e..0000000 --- a/third_party/youtube-dl +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d85187eb747b9d32d44ce4f31985432288f4a4f2 diff --git a/third_party/youtube_dl.pri b/third_party/youtube_dl.pri deleted file mode 100644 index d5a793e..0000000 --- a/third_party/youtube_dl.pri +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2015 Piotr Tworek. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE.YTPlayer file. - -_SRC = $$PWD/youtube-dl -_BUILD_DIR = $$top_builddir/build-ytdl -_PYTHON='$$LITERAL_HASH!/usr/bin/env python3' - -ytdl.target = youtube-dl -ytdl.commands = \ - cd $$_SRC && \ - touch README.txt youtube-dl.1 youtube-dl.fish youtube-dl.bash-completion && \ - python3 setup.py build_py --quiet --compile -O2 --build-lib $$_BUILD_DIR && \ - cd $$_BUILD_DIR && \ - find youtube_dl -type f -name '*.pyo' -delete && \ - zip --quiet -r youtube-dl youtube_dl/ && \ - zip --quiet --junk-paths youtube-dl youtube_dl/__main__.py && \ - echo \\"$$_PYTHON\\" > youtube-dl && \ - cat youtube-dl.zip >> youtube-dl && \ - chmod +x youtube-dl; \ - rm -f youtube-dl.zip -ytdl.depends = $$_SRC/youtube_dl/version.py - -QMAKE_EXTRA_TARGETS += ytdl -PRE_TARGETDEPS += youtube-dl - -ytdl.files = $$files($$_BUILD_DIR/youtube-dl) -ytdl.path = /usr/share/$${TARGET}/bin - -INSTALLS += ytdl diff --git a/translations/ca.ts b/translations/ca.ts new file mode 100644 index 0000000..c8d308d --- /dev/null +++ b/translations/ca.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Categories + + + Search + Label of video search text field + Cerca + + + Search + Menu option to show search page + Cerca + + + Settings + Settings page title + Configuració + + + Settings + Menu option to show settings page + Configuració + + + About YTPlayer + Title of about page + Quant a YTPlayer + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Client no oficial de YouTube per a SailfishOS + + + Version: %1 + Version label value + Versió: %1 + + + Region code: %1 + Region code field value + Codi de regió: %1 + + + Published on + Label for video upload date field + Publicat el + + + Duration + Label for video duration field + Durada + + + Created on + Label for youtube channel creation date field + Creat el + + + Video count + Label for channel video count field + Visualitzacions + + + Latest videos + Label/Title for the list of latest videos in certain category + Últims vídeos + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + No s'ha pogut carregar la pàgina d'autorització OAuth + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + S'ha denegat l'accés a l' OAuth de YouTube + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + S'ha iniciat sessió correctament + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + Error en l'autorització OAuth + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Deixa la subscripció + + + Subscribe + Subscriu-m'hi + + + Categories + Menu option to show video categories page + Categories + + + No results + Background label informing the user there are no search results + Cap resultat + + + Log viewer + Visor del registre + + + Network Offline + Network offline screen label + Fora de línia + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Qualitat de vídeo + + + Likes + YouTube likes page title + M'agrada + + + Dislikes + YouTube dislikes page title + No m'agrada + + + Recommendations + Menu option fo show YouTube recommendations page + Recomanacions + + + Subscriptions + Menu option responsible for showing user subscriptions page + Subscripcions + + + Likes + Menu option responsible for showing user likes page + M'agrada + + + Dislikes + Menu option responsible for showing user dislikes page + No m'agrada + + + Recommended for you + YouTube recommendations page title + Recomanat per a tu + + + Subscribed channels + YouTube subscribed channels page title + Canals subscrits + + + Latest videos + YouTube latest subscribed videos page title + Últims vídeos + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Últims vídeos + + + Retry + Label of network connection retry button + Torna a intentar-ho + + + About + Menu option to show about page + Quant a + + + View license + Button for showing license viewer page + Mostra la llicència + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer està sota la llicència BSD de 3 clàusules + + + Third party software + Label for button showing third party software listing page + Programari de tercers + + + License + License viewer page title + Llicència + + + Third party software + Third party software license page title + Programari de tercers + + + Signing in + Information label informing the user YouTube sign in process is in progress + S'està iniciant sessió + + + Search options + Search options page title + Opcions de cerca + + + Advanced + Generic options menu/button label + Avançades + + + Result type + Label for YouTube content type search combo box + Tipus de resultats + + + Any + Label for generic option menu matching any content type + Qualsevol + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Canal + + + Video + Label for menu option indicating YouTube video content type + Vídeo + + + High definition + Label for high video quality menu option + Alta definició + + + Standard definition + Label for standard video quality menu option + Definició estàndard + + + Video duration + Label for video duration combo box + Durada del vídeo + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + Més de 20 minuts + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + Entre 4 i 20 minuts + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Menys de 4 minuts + + + Video type + Label for video type combo box + Tipus de vídeo + + + Episode + Label for episode video type + Episodi + + + Movie + Label for movie video type + Pel·lícula + + + Video license + Label for video license combo box + Llicència del vídeo + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Tipus d'esdeveniment + + + Completed + Label for completed event type option + Finalitzats + + + Live + Label for live event type option + En directe + + + Upcoming + Label for upcoming event type option + Pròxims + + + Order by + Label for search result ordering combo box + Ordena per + + + Relevance + Label for relevance ordering menu option + Rellevància + + + Date + Label for date ordering menu option + Data + + + Rating + Label for rating ordering menu option + Valoració + + + Title + Label for title ordering menu option + Títol + + + Video count + Label for video count ordering menu option + Visualitzacions + + + View count + Label for view count ordering menu option + Mostra les visualitzacions + + + Safe search + Label for safe search combo box + Cerca segura + + + Moderate + Label for moderate content search filtering option + Moderat + + + None + Label for no search content filtering menu option + Cap + + + Strict + Label for strict search content filtering menu option + Estricte + + + Published before + Label for published before search option menu + Publicat abans del + + + Published after + Label for published after search option MenuItem + Publicat després del + + + Play + Label for video play button. + Reprodueix + + + Clear cache + Menu option to clear application caches + Neteja la memòria cau + + + Image cache size + Label for image cache size slider + Mida de la memòria cau d'imatges + + + Current usage + Label for current cache usage label + Utilització actual + + + YouTube API response cache size + Label for YouTube API response cache size slider + Mida de la memòria cau de respostes de l'API de YouTube + + + Download queued + "Label indicating video was queued for preload" + S'ha afegit la descàrrega a la cua + + + Remove + Menu action to remove the element from the list + Elimina + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + Cap vídeo + + + Downloaded + Label indicating the video was downloaded to local device storage + Descàrregues + + + Cache settings + Title of cache settings page + Configuració de la memòria cau + + + Download paused + "Label indicating video download was paused" + S'ha aturat la descàrrega + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + S'està descarregant: %1% + + + Video download finished + Notification summary informing the user video download has been finished + La descàrrega del vídeo ha finalitzat + + + Video download failed + Notification summary informing the user video download has failed + Error en la descàrrega del vídeo + + + Downloads + Menu option showing downloaded videos page + Descàrregues + + + Downloaded videos + Title of downloaded videos page + Vídeos descarregats + + + Download settings + Title of video download settings pge + Configuració de les descàrregues + + + Preferred video quality + Label for preferred video quality selection combobox + Qualitat de vídeo preferida + + + Connection type + Label for video download connection type combobox + Tipus de connexió + + + Automatically resume downloads + Label for video download auto resume switch in settings + Reprèn les descàrregues automàticament + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + En iniciar l'aplicació, es reprenen totes les descàrregues que estiguessin en progrés o a la cua en el moment de tancar YTPlayer. + + + Paused + Label for video download staus indicator telling the user download is paused + En pausa + + + Queued + En cua + + + Resume + Menu action to resume paused video download + Reprèn + + + Pause + Menu action to pause in progress video download + Pausa + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Només WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi + Xarxa mòbil + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Només xarxa mòbil + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Número màxim de descàrregues concurrents + + + Cancel + Menu action to cancel paused/queued video download + Cancel·la + + + Download video + Menu option triggering video preload + Descarrega el vídeo + + + Cancel download + Menu option canceling pending/in progress video preload + Cancel·la la descàrrega + + + Pause download + Menu option allowing the user to pause video download + Pausa la descàrrega + + + Resume download + Menu option allowing the user to resume video download + Reprèn la descàrrega + + + Remove download + Menu option allowing the user to remove downloaded video + Elimina la descàrrega + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + S'està cancel·lant la descàrrega + + + Removing download + Remorse popup message telling the user video download will be removed + S'està eliminant la descàrrega + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + S'està netejant la memòria cau + + + Cache + Label for menu option showing cache settings page + Memòria cau + + + Download + Label for menu option showing video download settings page + Descarrega + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + Integració amb el compte de YouTube + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + Permet que YTPlayer gestioni el vostre compte d'usuari de YouTube. + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Us heu subscrit al canal + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + S'està deixant la subscripció del canal + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Heu deixat la subscripció al canal + + + Copy link to clipboard + Menu option copying video link to clipboard + Copia l'enllaç al porta-retalls + + + Link copied + Notification summary informing the user link was copied to clipboard + S'ha copiat l'enllaç + + + Open link from clipboard + Menu opion for opening video links from clipboard + Obre l'enllaç del porta-retalls + + + Open in browser + Menu option opening YouTube video page in a web browser + Obre al navegador + + + Browser channel + menu option allowing the user to browser YouTube channel + Navega pel canal + + + No video streams available + Notification summary informing the user direct video playback is not possible + No hi ha cap flux de vídeos disponible + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + YTPlayer no ha pogut trobar cap flux de vídeos utilitzable + + + Launching browser + Message informing the user web browser is being launched + S'està llançant el navegador + + + Clear history + Menu option allowing the user to clear search history + Neteja l'historial + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + S'està netejant l'historial + + + Search settings + Search settings page title + Configuració de la cerca + + + Suggestion source + Label for the search suggestion engine combo box + Origen del suggeriment + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Cerca a l'historial + + + Search + Label for menu option showing search settings page + Cerca + + + Save log + Menu action allowing the user to save application log + Desa el fitxer de registre + + + Saving log + Remorse popup message telling the user log file will be saved + S'està desant el fitxer de registre + + + Log saved + Body of notification informing the user application log was saved + S'ha desat el fitxer de registre + + + View logs + Label for menu option showing application log viewer + Mostra el registre + + + Language settings + Title of language settings page + Configuració d'idioma + + + Language + Label for menu option showing application language settings page + Idioma + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Canvia l'idioma a %1? + + + Translations + Label for button showing application translation credits page + Traduccions + + + Translations + Title of translation credits page + Traduccions + + + Channels + Label for channels section indicator in main menu + Canals + + + Videos + Main menu label indicating videos section of the page + Vídeos + + + Watched recently + Menu opion showing recently watched videos page + Vist recentment + + + Watched recently + Title for recently watched videos page + Vist recentment + + + Favorites + Menu option showing video favorites page + Preferits + + + Favorites + Title for favorite videos page + Preferits + + + Hide search + Menu option allowing the user to hide search field + Amaga la cerca + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + S'està eliminant el preferit + + + Player settings + Title of video player settings page + Configuració de la reproducció + + + Player + Label for menu option showing video player settings page + Reproductor + + + Looking for streams + Status message indicating video player is looking for audio/video streams + S'estan buscant fluxos de vídeo + + + Buffering: %1% + Media player status indicating content is buffering + S'està carregant %1% + + + Loading + Media player status indicating content is loading + S'està carregant + + + Stalled + Media player status indicating content loading has stalled + S'ha trabat + + + Invalid media + Media player status indicating invalid content type + Fitxer multimèdia invàlid + + + Controls hide delay + Label for slider changing video player controls hide delay + Retard en l'ocultació dels controls + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Pausa automàtica en minimitzar l'aplicació + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + Pausa la reproducció quan l'aplicació passa a un segon terme. + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Qualitat de vídeo per defecte amb WiFi + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Qualitat de vídeo per defecte amb xarxa mòbil + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Càrrega anticipada de vídeos + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + Comença la càrrega del vídeo abans que s'accedeixi a la pàgina de reproducció. + + + Always + Menu option allowing the player to always preaload video data. + Sempre + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Només WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Només xarxa mòbil + + + Never + Menu option disallowing the player to always preaload video data. + Mai + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + No hi ha cap imatge + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + No hi ha cap flux de vídeo + + + Video no longer available + Notification summary informing the user video is no longer available. + El vídeo ja no està disponible + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + Aquest vídeo s'ha eliminat de YouTube + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + El canal ja no està disponible + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Ajudeu a traduir YTPlayer + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/languages/cs_CZ.ts b/translations/cs_CZ.ts similarity index 91% rename from languages/cs_CZ.ts rename to translations/cs_CZ.ts index 0478217..1711723 100644 --- a/languages/cs_CZ.ts +++ b/translations/cs_CZ.ts @@ -1,6 +1,8 @@ - + + + - + Video categories Video categories page title @@ -77,7 +79,7 @@ Nepodařilo se načíst OAuth autorizační stránku! - YouTube OAuth access denined! + YouTube OAuth access denied! Message informing the user about YouTube OAuth autorization denial Přístup YouTube OAuth zamítnut! @@ -116,9 +118,7 @@ Network Offline - Network offline screen label ----------- -Network offline screen label + Network offline screen label Síť nedostupná @@ -190,9 +190,7 @@ Label for menu option allowing the user to change video quality View license - Button for showing license viewer page ----------- -Button for showing license viewer page + Button for showing license viewer page Zobrazit licenci @@ -414,9 +412,7 @@ Label for channel name text field Current usage - Label for current cache usage label ----------- -Label for current cache usage label + Label for current cache usage label Aktuální využití @@ -431,9 +427,7 @@ Label for current cache usage label Remove - Menu action to remove the element from the list ----------- -Menu action to remove the element from the list + Menu action to remove the element from the list Smazat @@ -506,7 +500,7 @@ Label informing the user there are no watched recently videos Automaticky pokračovat ve stahování - On startup, resume all downloads which were either quened or in progress when YTPlayer was closed. + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. Description of video download auto resume switch in settings Po startu pokračovat ve stahování všech videí, které byly zařazeny do fronty, nebo probíhaly, než byl YTPlayer zavřen. @@ -581,16 +575,12 @@ Label informing the user there are no watched recently videos Cancelling download - Remorse popup message telling the user video download will be cancelled ----------- -Remorse popup message telling the user video download will be cancelled + Remorse popup message telling the user video download will be cancelled Rušení stahování Removing download - Remorse popup message telling the user video download will be removed ----------- -Remorse popup message telling the user video download will be removed + Remorse popup message telling the user video download will be removed Mazání stahování @@ -660,7 +650,6 @@ Remorse popup message telling the user video download will be removed No video streams available - Direct video playback not possible Notification summary informing the user direct video playback is not possible Žádná videa @@ -786,9 +775,7 @@ Remorse popup message telling the user video download will be removed Hide search - Menu option allowing the user to hide search field ----------- -Menu option allowing the user to hide search field + Menu option allowing the user to hide search field Skrýt hledání @@ -833,7 +820,7 @@ Menu option allowing the user to hide search field Controls hide delay - Lael for slider changing video player controls hide delay + Label for slider changing video player controls hide delay Zpoždění skrytí ovládacích prvků @@ -843,7 +830,6 @@ Menu option allowing the user to hide search field Automatically pause video playback when application is deactivated. - Automatically pause video playback when application is deactivated Description of video auto pause option switch. Automaticky pozastavit přehrávání videa když je aplikace pozastavena @@ -889,7 +875,7 @@ Menu option allowing the user to hide search field No image - Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. Žádné náhledy @@ -899,13 +885,11 @@ Menu option allowing the user to hide search field Video no longer available - Video no longer available! Notification summary informing the user video is no longer available. Video již nedostupné Video was removed from YouTube - Video was removed from YouTube. Notification body explaining why video is no longer available. Video bylo smazáno z YouTube @@ -919,5 +903,61 @@ Menu option allowing the user to hide search field Menu option opening a link to YTPlayer translation page on Transifex. Překládat aplikaci YTPlayer + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + - \ No newline at end of file + diff --git a/languages/de.ts b/translations/de.ts similarity index 91% rename from languages/de.ts rename to translations/de.ts index 2002312..edb84f7 100644 --- a/languages/de.ts +++ b/translations/de.ts @@ -1,6 +1,8 @@ - + + + - + Video categories Video categories page title @@ -77,7 +79,7 @@ Laden der OAuth-Authorisierungsseite fehlgeschlagen! - YouTube OAuth access denined! + YouTube OAuth access denied! Message informing the user about YouTube OAuth autorization denial YouTube OAuth-Zugriff verweigert! @@ -116,9 +118,7 @@ Network Offline - Network offline screen label ----------- -Network offline screen label + Network offline screen label Netzwerk nicht verfügbar @@ -190,9 +190,7 @@ Label for menu option allowing the user to change video quality View license - Button for showing license viewer page ----------- -Button for showing license viewer page + Button for showing license viewer page Sieh Lizenz an @@ -414,9 +412,7 @@ Label for channel name text field Current usage - Label for current cache usage label ----------- -Label for current cache usage label + Label for current cache usage label Aktuelle Nutzung @@ -431,9 +427,7 @@ Label for current cache usage label Remove - Menu action to remove the element from the list ----------- -Menu action to remove the element from the list + Menu action to remove the element from the list Löschen @@ -506,7 +500,7 @@ Label informing the user there are no watched recently videos Setze Downloads automatisch fort - On startup, resume all downloads which were either quened or in progress when YTPlayer was closed. + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. Description of video download auto resume switch in settings Setze beim Starten alle Downloads fort, die entweder eingereiht waren oder heruntergeladen wurden, als YTPlayer geschlossen wurde @@ -581,16 +575,12 @@ Label informing the user there are no watched recently videos Cancelling download - Remorse popup message telling the user video download will be cancelled ----------- -Remorse popup message telling the user video download will be cancelled + Remorse popup message telling the user video download will be cancelled Download abbrechen Removing download - Remorse popup message telling the user video download will be removed ----------- -Remorse popup message telling the user video download will be removed + Remorse popup message telling the user video download will be removed Entferne Download @@ -660,7 +650,6 @@ Remorse popup message telling the user video download will be removed No video streams available - Direct video playback not possible Notification summary informing the user direct video playback is not possible Keine Videostreams verfügbar @@ -786,9 +775,7 @@ Remorse popup message telling the user video download will be removed Hide search - Menu option allowing the user to hide search field ----------- -Menu option allowing the user to hide search field + Menu option allowing the user to hide search field Verberge Suche @@ -833,7 +820,7 @@ Menu option allowing the user to hide search field Controls hide delay - Lael for slider changing video player controls hide delay + Label for slider changing video player controls hide delay Verzögerung beim Steueremelente verstecken @@ -843,7 +830,6 @@ Menu option allowing the user to hide search field Automatically pause video playback when application is deactivated. - Automatically pause video playback when application is deactivated Description of video auto pause option switch. Pausiere Videowiedergabe automatisch wenn die Anwendung in den Hintergrund verschoben wird @@ -889,7 +875,7 @@ Menu option allowing the user to hide search field No image - Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. Kein Bild @@ -899,13 +885,11 @@ Menu option allowing the user to hide search field Video no longer available - Video no longer available! Notification summary informing the user video is no longer available. Video nicht länger verfügbar Video was removed from YouTube - Video was removed from YouTube. Notification body explaining why video is no longer available. Video wurde von YouTube entfernt @@ -919,5 +903,61 @@ Menu option allowing the user to hide search field Menu option opening a link to YTPlayer translation page on Transifex. Übersetze YTPlayer + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + Überprüfe lokale Version... + + + Checking remote version... + Shown while checking for remote version of youtube-dl + Überprüfe rechnerferne Version... + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + Konnte nicht nach Aktualisierungen suchen + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + Youtube-dl wird heruntergeladen... + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + Youtube-dl ist aktuell + + + Updating youtube-dl failed + Shown after youtube-dl update failed + Youtube-dl Aktualisierung fehlgeschlagen + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + Youtube-dl Aktualisierung erfolgreich + + + Update youtube-dl + MenuItem text for updating youtube-dl + Aktualisiere youtube-dl + - \ No newline at end of file + diff --git a/translations/el.ts b/translations/el.ts new file mode 100644 index 0000000..0323369 --- /dev/null +++ b/translations/el.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Κατηγορίες βίντεο + + + Search + Label of video search text field + Αναζήτηση + + + Search + Menu option to show search page + Αναζήτηση + + + Settings + Settings page title + Ρυθμίσεις + + + Settings + Menu option to show settings page + Ρυθμίσεις + + + About YTPlayer + Title of about page + Περί του YTPlayer + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Ανεπίσημος πελάτης του YouTube για το Sailfish OS + + + Version: %1 + Version label value + Έκδοση: %1 + + + Region code: %1 + Region code field value + Κωδικός χώρας: %1 + + + Published on + Label for video upload date field + Δημοσιεύτηκε στις + + + Duration + Label for video duration field + Διάρκεια + + + Created on + Label for youtube channel creation date field + Δημιουργήθηκε στις + + + Video count + Label for channel video count field + Πλήθος βίντεο + + + Latest videos + Label/Title for the list of latest videos in certain category + Τελευταία βίντεο + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + Αποτυχία φόρτωσης της σελίδας πιστοποίησης OAuth! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + Άρνηση πρόσβασης στο YouTube OAuth! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + Η σύνδεση ήταν επιτυχής + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + Η πιστοποίηση OAuth απέτυχε! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Ακύρωση συνδρομής + + + Subscribe + Συνδρομή + + + Categories + Menu option to show video categories page + Κατηγορίες + + + No results + Background label informing the user there are no search results + Κανένα αποτέλεσμα + + + Log viewer + Προβολέας καταγραφών + + + Network Offline + Network offline screen label + Δίκτυο εκτός σύνδεσης + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Video quality + + + Likes + YouTube likes page title + Μου αρέσει + + + Dislikes + YouTube dislikes page title + Δεν μου αρέσει + + + Recommendations + Menu option fo show YouTube recommendations page + Συστάσεις + + + Subscriptions + Menu option responsible for showing user subscriptions page + Συνδρομές + + + Likes + Menu option responsible for showing user likes page + Μου αρέσει + + + Dislikes + Menu option responsible for showing user dislikes page + Δεν μου αρέσει + + + Recommended for you + YouTube recommendations page title + Συνιστάται για εσάς + + + Subscribed channels + YouTube subscribed channels page title + Κανάλια με συνδρομή + + + Latest videos + YouTube latest subscribed videos page title + Τελευταία βίντεο + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Τελευταία βίντεο + + + Retry + Label of network connection retry button + Προσπάθεια ξανά + + + About + Menu option to show about page + Περί + + + View license + Button for showing license viewer page + Προβολή άδειας χρήσης + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + Το YTPlayer υπόκειται στην άδεια χρήσης 3-ρητρών BSD + + + Third party software + Label for button showing third party software listing page + Λογισμικό τρίτων + + + License + License viewer page title + Άδεια χρήσης + + + Third party software + Third party software license page title + Λογισμικό τρίτων + + + Signing in + Information label informing the user YouTube sign in process is in progress + Σύνδεση + + + Search options + Search options page title + Επιλογές αναζήτησης + + + Advanced + Generic options menu/button label + Προηγμένες + + + Result type + Label for YouTube content type search combo box + Τύπος αποτελέσματος + + + Any + Label for generic option menu matching any content type + Οποιοσδήποτε + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Κανάλι + + + Video + Label for menu option indicating YouTube video content type + Βίντεο + + + High definition + Label for high video quality menu option + Υψηλή ανάλυση + + + Standard definition + Label for standard video quality menu option + Τυπική ανάλυση + + + Video duration + Label for video duration combo box + Διάρκεια βίντεο + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + Μεγαλύτερη από 20 λεπτά + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + Μεταξύ 4 και 20 λεπτών + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Λιγότερη από 4 λεπτά + + + Video type + Label for video type combo box + Τύπος του βίντεο + + + Episode + Label for episode video type + Επεισόδιο + + + Movie + Label for movie video type + Ταινία + + + Video license + Label for video license combo box + Άδεια χρήσης του βίντεο + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Τύπος γεγονότος + + + Completed + Label for completed event type option + Ολοκληρωμένο + + + Live + Label for live event type option + Ζωντανό + + + Upcoming + Label for upcoming event type option + Προσεχώς + + + Order by + Label for search result ordering combo box + Ταξινόμηση ανά + + + Relevance + Label for relevance ordering menu option + Συνάφεια + + + Date + Label for date ordering menu option + Ημερομηνία + + + Rating + Label for rating ordering menu option + Αξιολόγηση + + + Title + Label for title ordering menu option + Τίτλος + + + Video count + Label for video count ordering menu option + Πλήθος βίντεο + + + View count + Label for view count ordering menu option + Πλήθος προβολών + + + Safe search + Label for safe search combo box + Ασφαλής αναζήτηση + + + Moderate + Label for moderate content search filtering option + Μέτρια + + + None + Label for no search content filtering menu option + Ουδεμία + + + Strict + Label for strict search content filtering menu option + Αυστηρή + + + Published before + Label for published before search option menu + Δημοσίευση πριν τις + + + Published after + Label for published after search option MenuItem + Δημοσίευση μετά τις + + + Play + Label for video play button. + Αναπαραγωγή + + + Clear cache + Menu option to clear application caches + Εκκαθάριση της κρυφής μνήμης + + + Image cache size + Label for image cache size slider + Μέγεθος κρυφής μνήμης εικόνας + + + Current usage + Label for current cache usage label + Τρέχουσα χρήση + + + YouTube API response cache size + Label for YouTube API response cache size slider + Μέγεθος λανθάνουσας μνήμης απόκρισης του YouTube API + + + Download queued + "Label indicating video was queued for preload" + Τηλεφόρτωση στην ουρά αναμονής + + + Remove + Menu action to remove the element from the list + Αφαίρεση + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + Κανένα βίντεο + + + Downloaded + Label indicating the video was downloaded to local device storage + Ειλημμένα + + + Cache settings + Title of cache settings page + Ρυθμίσεις κρυφής μνήμης + + + Download paused + "Label indicating video download was paused" + Η λήψη ανεστάλη + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + Τηλεφορτώνεται: %1% + + + Video download finished + Notification summary informing the user video download has been finished + Η λήψη του βίντεο ολοκληρώθηκε + + + Video download failed + Notification summary informing the user video download has failed + Η λήψη του βίντεο απέτυχε + + + Downloads + Menu option showing downloaded videos page + Λήψεις + + + Downloaded videos + Title of downloaded videos page + Ειλημμένα βίντεο + + + Download settings + Title of video download settings pge + Ρυθμίσεις λήψεων + + + Preferred video quality + Label for preferred video quality selection combobox + Προτιμώμενη ποιότητα βίντεο + + + Connection type + Label for video download connection type combobox + Τύπος σύνδεσης + + + Automatically resume downloads + Label for video download auto resume switch in settings + Αυτόματη συνέχιση λήψεων + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + Κατά την εκκίνηση θα συνεχίζονται οι τηλεφορτώσεις στην ουρά αναμονής ή αυτές που ήταν σε εξέλιξη κατά το κλείσιμο του YTPlayer. + + + Paused + Label for video download staus indicator telling the user download is paused + Ανεστάλη + + + Queued + Στην ουρά αναμονής + + + Resume + Menu action to resume paused video download + Συνέχιση + + + Pause + Menu action to pause in progress video download + Παύση + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Μόνο WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi + Δίκτυο κινητής + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Μόνο δίκτυο κινητής + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Όριο ταυτόχρονων λήψεων + + + Cancel + Menu action to cancel paused/queued video download + Ακύρωση + + + Download video + Menu option triggering video preload + Λήψη του βίντεο + + + Cancel download + Menu option canceling pending/in progress video preload + Ακύρωση της λήψης + + + Pause download + Menu option allowing the user to pause video download + Παύση της λήψης + + + Resume download + Menu option allowing the user to resume video download + Συνέχιση της λήψης + + + Remove download + Menu option allowing the user to remove downloaded video + Αφαίρεση της λήψης + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + Ακύρωση της λήψης + + + Removing download + Remorse popup message telling the user video download will be removed + Αφαίρεση της λήψης + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + Καθαρισμός της κρυφής μνήμης + + + Cache + Label for menu option showing cache settings page + Κρυφή μνήμη + + + Download + Label for menu option showing video download settings page + Λήψη + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + Ενσωμάτωση λογαριασμού YouTube + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + Να επιτρέπεται στο YTPlayer να διαχειρίζεται τον λογαριασμό χρήστη YouTube. + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Ενεγράφητε στο κανάλι + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + Ακύρωση συνδρομής καναλιού + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Η συνδρομή ακυρώθηκε + + + Copy link to clipboard + Menu option copying video link to clipboard + Αντιγραφή συνδέσμου στο πρόχειρο + + + Link copied + Notification summary informing the user link was copied to clipboard + Ο σύνδεσμος αντιγράφηκε + + + Open link from clipboard + Menu opion for opening video links from clipboard + Άνοιγμα συνδέσμου από το Πρόχειρο + + + Open in browser + Menu option opening YouTube video page in a web browser + Άνοιγμα στον φυλλομετρητή + + + Browser channel + menu option allowing the user to browser YouTube channel + Περιήγηση στο κανάλι + + + No video streams available + Notification summary informing the user direct video playback is not possible + Καμιά ροή βίντεο διαθέσιμη + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + Το YTPlayer δεν μπόρεσε να βρει ροές βίντεο προς χρήση + + + Launching browser + Message informing the user web browser is being launched + Εκκίνηση φυλλομετρητή + + + Clear history + Menu option allowing the user to clear search history + Καθαρισμός ιστορικού + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + Καθαρισμός ιστορικού + + + Search settings + Search settings page title + Ρυθμίσεις αναζήτησης + + + Suggestion source + Label for the search suggestion engine combo box + Πηγή συστάσεων + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Ιστορικό αναζητήσεων + + + Search + Label for menu option showing search settings page + Αναζήτηση + + + Save log + Menu action allowing the user to save application log + Αποθήκευση καταγραφής + + + Saving log + Remorse popup message telling the user log file will be saved + Αποθήκευση καταγραφής + + + Log saved + Body of notification informing the user application log was saved + Η καταγραφή αποθηκεύτηκε + + + View logs + Label for menu option showing application log viewer + Προβολή καταγραφών + + + Language settings + Title of language settings page + Ρυθμίσεις γλώσσας + + + Language + Label for menu option showing application language settings page + Γλώσσα + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Αλλαγή της γλώσσας σε %1; + + + Translations + Label for button showing application translation credits page + Μεταφράσεις + + + Translations + Title of translation credits page + Μεταφράσεις + + + Channels + Label for channels section indicator in main menu + Κανάλια + + + Videos + Main menu label indicating videos section of the page + Βίντεο + + + Watched recently + Menu opion showing recently watched videos page + Ιδωμένα προσφάτως + + + Watched recently + Title for recently watched videos page + Ιδωμένα προσφάτως + + + Favorites + Menu option showing video favorites page + Σελιδοδείκτες + + + Favorites + Title for favorite videos page + Αγαπημένα + + + Hide search + Menu option allowing the user to hide search field + Απόκρυψη της αναζήτησης + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Αφαίρεση σελιδοδείκτη + + + Player settings + Title of video player settings page + Ρυθμίσεις αναπαραγωγέα + + + Player + Label for menu option showing video player settings page + Αναπαραγωγέας + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Αναζήτηση ροών + + + Buffering: %1% + Media player status indicating content is buffering + Πλήρωση ενδιάμεσης μνήμης: %1% + + + Loading + Media player status indicating content is loading + Φόρτωση + + + Stalled + Media player status indicating content loading has stalled + Σε φραγή + + + Invalid media + Media player status indicating invalid content type + Μη έγκυρο μέσο + + + Controls hide delay + Label for slider changing video player controls hide delay + Καθυστέρηση απόκρυψης πλήκτρων ελέγχου + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Αυτόματη παύση όταν τίθεται στο παρασκήνιο + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + Αυτόματη παύση της αναπαραγωγής του βίντεο όταν η εφαρμογή τίθεται στο παρασκήνιο. + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Εξ ορισμού ποιότητα βίντεο με WiFi + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Εξ ορισμού ποιότητα βίντεο με κινητής + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Προφόρτωση του βίντεο + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + Έναρξη προφόρτωσης των δεδομένων του βίντεο πριν την ενεργοποίηση της σελίδας αναπαραγωγής. + + + Always + Menu option allowing the player to always preaload video data. + Πάντα + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Μόνο WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Μόνο δίκτυο κινητής + + + Never + Menu option disallowing the player to always preaload video data. + Ποτέ + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Χωρίς εικόνα + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Καμιά ροή! + + + Video no longer available + Notification summary informing the user video is no longer available. + Το βίντεο δεν είναι πια διαθέσιμο + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + Το βίντεο έχει αφαιρεθεί από το YouTube + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + Το κανάλι δεν είναι πια διαθέσιμο + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Μετάφραση του YTPlayer + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/languages/en_GB.ts b/translations/en_GB.ts similarity index 91% rename from languages/en_GB.ts rename to translations/en_GB.ts index 61cbe4f..b59aad7 100644 --- a/languages/en_GB.ts +++ b/translations/en_GB.ts @@ -46,7 +46,7 @@ Region code: %1 Region code field value - Region Code: %1 + Region code: %1 Published on @@ -79,7 +79,7 @@ Failed to load OAuth authorization page! - YouTube OAuth access denined! + YouTube OAuth access denied! Message informing the user about YouTube OAuth autorization denial YouTube OAuth access denied! @@ -118,9 +118,7 @@ Network Offline - Network offline screen label ----------- -Network offline screen label + Network offline screen label Network Offline @@ -192,9 +190,7 @@ Label for menu option allowing the user to change video quality View license - Button for showing license viewer page ----------- -Button for showing license viewer page + Button for showing license viewer page View license @@ -416,9 +412,7 @@ Label for channel name text field Current usage - Label for current cache usage label ----------- -Label for current cache usage label + Label for current cache usage label Current usage @@ -433,9 +427,7 @@ Label for current cache usage label Remove - Menu action to remove the element from the list ----------- -Menu action to remove the element from the list + Menu action to remove the element from the list Remove @@ -508,7 +500,7 @@ Label informing the user there are no watched recently videos Automatically resume downloads - On startup, resume all downloads which were either quened or in progress when YTPlayer was closed. + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. Description of video download auto resume switch in settings On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. @@ -583,16 +575,12 @@ Label informing the user there are no watched recently videos Cancelling download - Remorse popup message telling the user video download will be cancelled ----------- -Remorse popup message telling the user video download will be cancelled + Remorse popup message telling the user video download will be cancelled Cancelling download Removing download - Remorse popup message telling the user video download will be removed ----------- -Remorse popup message telling the user video download will be removed + Remorse popup message telling the user video download will be removed Removing download @@ -618,7 +606,7 @@ Remorse popup message telling the user video download will be removed Allow YTPlayer to manage YouTube user account. Description of switch activating/deactivating YouTube account integration - Allow YTPlayer to manager YouTube user account. + Allow YTPlayer to manage YouTube user account. Channel subscribed @@ -628,7 +616,7 @@ Remorse popup message telling the user video download will be removed Unsubscribing channel Remorse popup message telling the user channel is about to be unsubscribed - Unsiscribing channel + Unsubscribing channel Channel unsubscribed @@ -662,7 +650,6 @@ Remorse popup message telling the user video download will be removed No video streams available - Direct video playback not possible Notification summary informing the user direct video playback is not possible No video streams available @@ -788,9 +775,7 @@ Remorse popup message telling the user video download will be removed Hide search - Menu option allowing the user to hide search field ----------- -Menu option allowing the user to hide search field + Menu option allowing the user to hide search field Hide search @@ -835,7 +820,7 @@ Menu option allowing the user to hide search field Controls hide delay - Lael for slider changing video player controls hide delay + Label for slider changing video player controls hide delay Controls hide delay @@ -845,7 +830,6 @@ Menu option allowing the user to hide search field Automatically pause video playback when application is deactivated. - Automatically pause video playback when application is deactivated Description of video auto pause option switch. Automatically pause video playback when application is deactivated. @@ -901,13 +885,11 @@ Menu option allowing the user to hide search field Video no longer available - Video no longer available! Notification summary informing the user video is no longer available. Video no longer available Video was removed from YouTube - Video was removed from YouTube. Notification body explaining why video is no longer available. Video was removed from YouTube @@ -921,5 +903,61 @@ Menu option allowing the user to hide search field Menu option opening a link to YTPlayer translation page on Transifex. Translate YTPlayer + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + Could not parse %1 or %2 + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + Files %1 and %2 not found in Downloads folder + + + Checking local version... + Shown while checking for local version of youtube-dl + Checking local version... + + + Checking remote version... + Shown while checking for remote version of youtube-dl + Checking remote version... + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + Could not check for updates + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + Downloading youtube-dl... + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + Youtube-dl is up to date + + + Updating youtube-dl failed + Shown after youtube-dl update failed + Updating youtube-dl failed + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + Updated youtube-dl succesfully + + + Update youtube-dl + MenuItem text for updating youtube-dl + Update youtube-dl + diff --git a/translations/es.ts b/translations/es.ts new file mode 100644 index 0000000..8560984 --- /dev/null +++ b/translations/es.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Categorías de vídeo + + + Search + Label of video search text field + Buscar + + + Search + Menu option to show search page + Buscar + + + Settings + Settings page title + Ajustes + + + Settings + Menu option to show settings page + Ajustes + + + About YTPlayer + Title of about page + Acerca de YTPlayer + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Cliente no oficial de YouTube para Sailfish OS + + + Version: %1 + Version label value + Versión: %1 + + + Region code: %1 + Region code field value + Código de región: %1 + + + Published on + Label for video upload date field + Publicado el + + + Duration + Label for video duration field + Duración + + + Created on + Label for youtube channel creation date field + Creado el + + + Video count + Label for channel video count field + Número de vídeos + + + Latest videos + Label/Title for the list of latest videos in certain category + Últimos vídeos + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + ¡No se ha podido cargar la página de autorización OAuth! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + ¡Acceso denegado al OAuth de YouTube! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + Se ha iniciado la sesión correctamente + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + ¡Ha fallado la autorización OAuth! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Cancelar suscripción + + + Subscribe + Suscribirse + + + Categories + Menu option to show video categories page + Categorías + + + No results + Background label informing the user there are no search results + No hay resultados + + + Log viewer + Visor de registro + + + Network Offline + Network offline screen label + Red sin conexión + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Calidad del vídeo + + + Likes + YouTube likes page title + Me gusta + + + Dislikes + YouTube dislikes page title + No me gusta + + + Recommendations + Menu option fo show YouTube recommendations page + Recomendaciones + + + Subscriptions + Menu option responsible for showing user subscriptions page + Suscripciones + + + Likes + Menu option responsible for showing user likes page + Me gusta + + + Dislikes + Menu option responsible for showing user dislikes page + No me gusta + + + Recommended for you + YouTube recommendations page title + Recomendados para ti + + + Subscribed channels + YouTube subscribed channels page title + Suscripciones + + + Latest videos + YouTube latest subscribed videos page title + Últimos vídeos + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Últimos vídeos + + + Retry + Label of network connection retry button + Volver a intentar + + + About + Menu option to show about page + Acerca de + + + View license + Button for showing license viewer page + Ver licencia + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer está autorizado bajo licencia BSD de 3 cláusulas + + + Third party software + Label for button showing third party software listing page + Software de terceros + + + License + License viewer page title + Licencia + + + Third party software + Third party software license page title + Software de terceros + + + Signing in + Information label informing the user YouTube sign in process is in progress + Iniciando sesión + + + Search options + Search options page title + Opciones de búsqueda + + + Advanced + Generic options menu/button label + Avanzado + + + Result type + Label for YouTube content type search combo box + Tipo de resultado + + + Any + Label for generic option menu matching any content type + Cualquiera + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Canal + + + Video + Label for menu option indicating YouTube video content type + Vídeo + + + High definition + Label for high video quality menu option + Alta definición + + + Standard definition + Label for standard video quality menu option + Definición standard + + + Video duration + Label for video duration combo box + Duración del vídeo + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + Más de 20 minutos + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + Entre 4 y 20 minutos + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Menos de 4 minutos + + + Video type + Label for video type combo box + Tipo de vídeo + + + Episode + Label for episode video type + Capítulo + + + Movie + Label for movie video type + Película + + + Video license + Label for video license combo box + Licencia del vídeo + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Tipo de evento + + + Completed + Label for completed event type option + Finalizado + + + Live + Label for live event type option + En directo + + + Upcoming + Label for upcoming event type option + Próximos + + + Order by + Label for search result ordering combo box + Ordenar por + + + Relevance + Label for relevance ordering menu option + Relevancia + + + Date + Label for date ordering menu option + Fecha + + + Rating + Label for rating ordering menu option + Valoración + + + Title + Label for title ordering menu option + Título + + + Video count + Label for video count ordering menu option + Número de vídeos + + + View count + Label for view count ordering menu option + Visualizaciones + + + Safe search + Label for safe search combo box + Búsqueda segura + + + Moderate + Label for moderate content search filtering option + Moderada + + + None + Label for no search content filtering menu option + Ninguna + + + Strict + Label for strict search content filtering menu option + Estricta + + + Published before + Label for published before search option menu + Publicado antes de + + + Published after + Label for published after search option MenuItem + Publicado después de + + + Play + Label for video play button. + Reproducir + + + Clear cache + Menu option to clear application caches + Limpiar caché + + + Image cache size + Label for image cache size slider + Tamaño de la caché de imagen + + + Current usage + Label for current cache usage label + En uso + + + YouTube API response cache size + Label for YouTube API response cache size slider + Tamaño de la caché de respuesta de la API de YouTube + + + Download queued + "Label indicating video was queued for preload" + Descarga en cola + + + Remove + Menu action to remove the element from the list + Eliminar + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + No hay vídeos + + + Downloaded + Label indicating the video was downloaded to local device storage + Descargado + + + Cache settings + Title of cache settings page + Ajustes de la caché + + + Download paused + "Label indicating video download was paused" + Descarga en pausa + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + Descargando: %1% + + + Video download finished + Notification summary informing the user video download has been finished + Descarga de vídeo finalizada + + + Video download failed + Notification summary informing the user video download has failed + Falló la descarga del vídeo + + + Downloads + Menu option showing downloaded videos page + Descargas + + + Downloaded videos + Title of downloaded videos page + Vídeos descargados + + + Download settings + Title of video download settings pge + Ajustes de descarga + + + Preferred video quality + Label for preferred video quality selection combobox + Calidad de vídeo preferido + + + Connection type + Label for video download connection type combobox + Tipo de conexión + + + Automatically resume downloads + Label for video download auto resume switch in settings + Reanudar las descargas automáticamente + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + Al iniciar, se reanudan todas las descargas que estaban en cola o en proceso cuando se cerró YTPlayer. + + + Paused + Label for video download staus indicator telling the user download is paused + En pausa + + + Queued + En cola + + + Resume + Menu action to resume paused video download + Reanudar + + + Pause + Menu action to pause in progress video download + Detener + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Sólo WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi + datos móviles + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Sólo datos móviles + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Máx. de cargas simultaneas + + + Cancel + Menu action to cancel paused/queued video download + Cancelar + + + Download video + Menu option triggering video preload + Descargar vídeo + + + Cancel download + Menu option canceling pending/in progress video preload + Cancelar descarga + + + Pause download + Menu option allowing the user to pause video download + Detener descarga + + + Resume download + Menu option allowing the user to resume video download + Reanudar descarga + + + Remove download + Menu option allowing the user to remove downloaded video + Eliminar descarga + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + Cancelando descarga + + + Removing download + Remorse popup message telling the user video download will be removed + Eliminando descarga + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + Limpiando caché + + + Cache + Label for menu option showing cache settings page + Caché + + + Download + Label for menu option showing video download settings page + Descargar + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + Integración con tu cuenta de YouTube + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + Permites que YTPlayer gestione tu cuenta de usuario de YouTube. + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Canal suscrito + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + Cancelando suscripción al canal + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Suscripción al canal cancelado + + + Copy link to clipboard + Menu option copying video link to clipboard + Copiar enlace al portapapeles + + + Link copied + Notification summary informing the user link was copied to clipboard + Enlace copiado + + + Open link from clipboard + Menu opion for opening video links from clipboard + Abrir enlace desde el portapapeles + + + Open in browser + Menu option opening YouTube video page in a web browser + Abrir en el navegador + + + Browser channel + menu option allowing the user to browser YouTube channel + Explorar canal + + + No video streams available + Notification summary informing the user direct video playback is not possible + No hay secuencias de vídeo disponibles + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + YTPlayer no ha encontrado secuencias de vídeo utilizables + + + Launching browser + Message informing the user web browser is being launched + Lanzando navegador + + + Clear history + Menu option allowing the user to clear search history + Limpiar historial + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + Limpiando historial + + + Search settings + Search settings page title + Ajustes de búsqueda + + + Suggestion source + Label for the search suggestion engine combo box + Fuente propuesta + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Historial de búsquedas + + + Search + Label for menu option showing search settings page + Buscar + + + Save log + Menu action allowing the user to save application log + Guardar registro + + + Saving log + Remorse popup message telling the user log file will be saved + Guardando registro + + + Log saved + Body of notification informing the user application log was saved + Registro guardado + + + View logs + Label for menu option showing application log viewer + Ver registros + + + Language settings + Title of language settings page + Ajustes del idioma + + + Language + Label for menu option showing application language settings page + Idioma + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + ¿Cambiar idioma a %1? + + + Translations + Label for button showing application translation credits page + Traducciones + + + Translations + Title of translation credits page + Traducciones + + + Channels + Label for channels section indicator in main menu + Canales + + + Videos + Main menu label indicating videos section of the page + Vídeos + + + Watched recently + Menu opion showing recently watched videos page + Vistos recientemente + + + Watched recently + Title for recently watched videos page + Vistos recientemente + + + Favorites + Menu option showing video favorites page + Favoritos + + + Favorites + Title for favorite videos page + Favoritos + + + Hide search + Menu option allowing the user to hide search field + Ocultar búsqueda + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Eliminando favorito + + + Player settings + Title of video player settings page + Ajustes del reproductor + + + Player + Label for menu option showing video player settings page + Reproductor + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Buscando secuencias + + + Buffering: %1% + Media player status indicating content is buffering + Cargando %1% en búfer + + + Loading + Media player status indicating content is loading + Cargando + + + Stalled + Media player status indicating content loading has stalled + Estancado + + + Invalid media + Media player status indicating invalid content type + Multimedia no válido + + + Controls hide delay + Label for slider changing video player controls hide delay + Retraso en la ocultación de controles + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Pausa automática al minimizar + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + La reproducción del vídeo se detiene al minimizar la aplicación. + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Calidad del vídeo por defecto con WiFi + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Calidad del vídeo por defecto con datos móviles + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Carga anticipada de vídeos + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + La carga de datos del vídeo comienza antes de acceder a la página del reproductor. + + + Always + Menu option allowing the player to always preaload video data. + Siempre + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Sólo WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Sólo datos móviles + + + Never + Menu option disallowing the player to always preaload video data. + Nunca + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + No hay imagen + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + ¡No hay secuencias de vídeo! + + + Video no longer available + Notification summary informing the user video is no longer available. + El vídeo ya no está disponible + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + El vídeo fue eliminado de YouTube + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + El canal ya no está disponible + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Traducer YTPlayer + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/translations/fi_FI.ts b/translations/fi_FI.ts new file mode 100644 index 0000000..7fa0a24 --- /dev/null +++ b/translations/fi_FI.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Kategoriat + + + Search + Label of video search text field + Haku + + + Search + Menu option to show search page + Etsi + + + Settings + Settings page title + Asetukset + + + Settings + Menu option to show settings page + Asetukset + + + About YTPlayer + Title of about page + Tietoa sovelluksesta: YTPlayer + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + YouTuben epävirallinen asiakassovellus Sailfish -käyttöjärjestelmälle + + + Version: %1 + Version label value + Versio: %1 + + + Region code: %1 + Region code field value + Aluekoodi: %1 + + + Published on + Label for video upload date field + Julkaistu + + + Duration + Label for video duration field + Kesto + + + Created on + Label for youtube channel creation date field + Luotu + + + Video count + Label for channel video count field + Näyttökerrat + + + Latest videos + Label/Title for the list of latest videos in certain category + Viimeisimmät videot + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + OAuth -valtuutussivun lataus epäonnistui! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + YouTube OAuth kielsi pääsyn! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + Sisäänkirjautuminen onnistui + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + OAuth-valtuutus epäonnistui! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Peruuta tilaus + + + Subscribe + Tilaa kanava + + + Categories + Menu option to show video categories page + Kategoriat + + + No results + Background label informing the user there are no search results + Ei tuloksia + + + Log viewer + Lokitietojen tarkastelu + + + Network Offline + Network offline screen label + Ei verkkoyhteyttä + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Videon laatu + + + Likes + YouTube likes page title + Tykkään tästä + + + Dislikes + YouTube dislikes page title + En tykkää tästä + + + Recommendations + Menu option fo show YouTube recommendations page + Suositellut + + + Subscriptions + Menu option responsible for showing user subscriptions page + Tilatut kanavat + + + Likes + Menu option responsible for showing user likes page + Tykkään tästä + + + Dislikes + Menu option responsible for showing user dislikes page + En tykkää tästä + + + Recommended for you + YouTube recommendations page title + Sinulle suositeltuja + + + Subscribed channels + YouTube subscribed channels page title + Tilatut kanavat + + + Latest videos + YouTube latest subscribed videos page title + Viimeisimmät videot + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Viimeisimmät videot + + + Retry + Label of network connection retry button + Yritä uudelleen + + + About + Menu option to show about page + Tietoja + + + View license + Button for showing license viewer page + Tarkastele lisenssiä + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer on lisensoitu 3-lausekkeisella BSD lisenssillä + + + Third party software + Label for button showing third party software listing page + Kolmannen osapuolen ohjelmisto + + + License + License viewer page title + Lisenssi + + + Third party software + Third party software license page title + Kolmannen osapuolen ohjelmisto + + + Signing in + Information label informing the user YouTube sign in process is in progress + Kirjaudutaan + + + Search options + Search options page title + Hakuvaihtoehdot + + + Advanced + Generic options menu/button label + Lisäasetukset + + + Result type + Label for YouTube content type search combo box + Hakutulosten vaihtoehdot + + + Any + Label for generic option menu matching any content type + Mikä tahansa + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Kanava + + + Video + Label for menu option indicating YouTube video content type + Video + + + High definition + Label for high video quality menu option + Teräväpiirto HD + + + Standard definition + Label for standard video quality menu option + Normaali tarkkuus SD + + + Video duration + Label for video duration combo box + Kesto + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + Pitempi kuin 20 minuuttia + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + 4 - 20 minuuttia + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Vähemmän kuin 4 minuuttia + + + Video type + Label for video type combo box + Ominaisuudet + + + Episode + Label for episode video type + Jakso + + + Movie + Label for movie video type + Elokuva + + + Video license + Label for video license combo box + Videon lisenssi + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Tapahtuman tyyppi + + + Completed + Label for completed event type option + Suoritettu + + + Live + Label for live event type option + Suora lähetys + + + Upcoming + Label for upcoming event type option + Tulossa + + + Order by + Label for search result ordering combo box + Lajittelu + + + Relevance + Label for relevance ordering menu option + Osuvuus + + + Date + Label for date ordering menu option + Latauspäivä + + + Rating + Label for rating ordering menu option + Luokitus + + + Title + Label for title ordering menu option + Nimi + + + Video count + Label for video count ordering menu option + Näyttökerrat + + + View count + Label for view count ordering menu option + Tarkastele näyttökertoja + + + Safe search + Label for safe search combo box + Turvallinen haku + + + Moderate + Label for moderate content search filtering option + Moderoi + + + None + Label for no search content filtering menu option + Ei mitään + + + Strict + Label for strict search content filtering menu option + Tarkka + + + Published before + Label for published before search option menu + Julkaistu ennen + + + Published after + Label for published after search option MenuItem + Julkaistu jälkeen + + + Play + Label for video play button. + Toista + + + Clear cache + Menu option to clear application caches + Pyyhi välimuisti + + + Image cache size + Label for image cache size slider + Kuvan välimuistin koko + + + Current usage + Label for current cache usage label + Tämänhetkinen käyttö: + + + YouTube API response cache size + Label for YouTube API response cache size slider + YouTuben ohjelmointirajapinnan reaktion välimuistin koko + + + Download queued + "Label indicating video was queued for preload" + Lataus jonossa + + + Remove + Menu action to remove the element from the list + Poista + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + Ei videoita + + + Downloaded + Label indicating the video was downloaded to local device storage + Ladattu + + + Cache settings + Title of cache settings page + Välimuistin asetukset + + + Download paused + "Label indicating video download was paused" + Lataus keskeytetty + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + Latautunut: %1% + + + Video download finished + Notification summary informing the user video download has been finished + Videon lataus suoritettu + + + Video download failed + Notification summary informing the user video download has failed + Videon lataus epäonnistui + + + Downloads + Menu option showing downloaded videos page + Ladatut videot + + + Downloaded videos + Title of downloaded videos page + Ladatut videot + + + Download settings + Title of video download settings pge + Lataamisen asetukset + + + Preferred video quality + Label for preferred video quality selection combobox + Videon ensisijainen laatu + + + Connection type + Label for video download connection type combobox + Yhteyden tyyppi + + + Automatically resume downloads + Label for video download auto resume switch in settings + Jatka automaattisesti latauksia + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + Käynnistyessä jatkaa kaikkien sekä käynnissä olevien että jonossa olevien videoiden lataamista siitä, mihin lataaminen YouTuben viimeksi sulkeutuessa keskeytyi. + + + Paused + Label for video download staus indicator telling the user download is paused + Keskeytetty + + + Queued + Jonossa + + + Resume + Menu action to resume paused video download + Jatka + + + Pause + Menu action to pause in progress video download + Keskeytä + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Vain WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi + matkapuhelinverkko + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Vain matkapuhelinverkko + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Samanaikaisten latausten enimmäismäärä + + + Cancel + Menu action to cancel paused/queued video download + Peruuta + + + Download video + Menu option triggering video preload + Lataa video + + + Cancel download + Menu option canceling pending/in progress video preload + Peruuta lataus + + + Pause download + Menu option allowing the user to pause video download + Keskeytä lataus + + + Resume download + Menu option allowing the user to resume video download + Jatka latausta + + + Remove download + Menu option allowing the user to remove downloaded video + Poista lataus + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + Latausta peruutetan + + + Removing download + Remorse popup message telling the user video download will be removed + Lataus poistetaan + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + Pyyhitään välimuisti + + + Cache + Label for menu option showing cache settings page + Välimuisti + + + Download + Label for menu option showing video download settings page + Lataaminen + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + YouTube -tunnuksen yhdentäminen + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + Anna sovelluksen YTPlayer hallinnoida YouTube käyttäjätiliä + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Kanava on tilattu + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + Kanavatilaus perutaan + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Kanavatilaus on peruttu + + + Copy link to clipboard + Menu option copying video link to clipboard + Kopioi linkki leikepöydälle + + + Link copied + Notification summary informing the user link was copied to clipboard + Linkki kopioitu + + + Open link from clipboard + Menu opion for opening video links from clipboard + Avaa linkki leikepöydältä + + + Open in browser + Menu option opening YouTube video page in a web browser + Avaa selaimessa + + + Browser channel + menu option allowing the user to browser YouTube channel + Selaa kanavaa + + + No video streams available + Notification summary informing the user direct video playback is not possible + Videotoistoa ei ole saatavilla + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + YTPlayer ei löytänyt käyttökelpoista videotoistoa + + + Launching browser + Message informing the user web browser is being launched + Selain käynnistetään + + + Clear history + Menu option allowing the user to clear search history + Pyyhi historia + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + Pyyhitään historia + + + Search settings + Search settings page title + Hakuasetukset + + + Suggestion source + Label for the search suggestion engine combo box + Hakuehdotusten lähde + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Hakuhistoria + + + Search + Label for menu option showing search settings page + Etsi + + + Save log + Menu action allowing the user to save application log + Tallenna loki + + + Saving log + Remorse popup message telling the user log file will be saved + Tallennetaan lokia + + + Log saved + Body of notification informing the user application log was saved + Loki tallennettu + + + View logs + Label for menu option showing application log viewer + Tarkastele lokeja + + + Language settings + Title of language settings page + Kieliasetukset + + + Language + Label for menu option showing application language settings page + Kieli + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Vaihdetaanko kieleksi %1? + + + Translations + Label for button showing application translation credits page + Käännökset + + + Translations + Title of translation credits page + Käännökset + + + Channels + Label for channels section indicator in main menu + Kanavat + + + Videos + Main menu label indicating videos section of the page + Videot + + + Watched recently + Menu opion showing recently watched videos page + Katsottu äskettäin + + + Watched recently + Title for recently watched videos page + Katsottu äskettäin + + + Favorites + Menu option showing video favorites page + Suosikit + + + Favorites + Title for favorite videos page + Suosikit + + + Hide search + Menu option allowing the user to hide search field + Piilota haku + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Poistetaan suosikki + + + Player settings + Title of video player settings page + Toiston asetukset + + + Player + Label for menu option showing video player settings page + Videotoisto + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Etsitään toistettavia videoita + + + Buffering: %1% + Media player status indicating content is buffering + Puskuroidaan %1% + + + Loading + Media player status indicating content is loading + Lataa + + + Stalled + Media player status indicating content loading has stalled + Pysähtynyt + + + Invalid media + Media player status indicating invalid content type + Virheellinen media + + + Controls hide delay + Label for slider changing video player controls hide delay + Ohjainten piilottamisen viive + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Keskeytyy automaattisesti kun pois käytöstä + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + Keskeytä videotoisto automaattisesti kun sovellus on pois käytöstä + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Videon oletettu laatu Wi-Fi -yhteydellä + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Videon oletettu laatu matkapuhelinverkolla + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Varhainen videon lataus + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + Aloita videotiedoston esilataaminen jo ennen kuin soitinsivu on aktiivinen. + + + Always + Menu option allowing the player to always preaload video data. + Aina + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Vain WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Vain laite + + + Never + Menu option disallowing the player to always preaload video data. + Ei koskaan + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Ei kuvaa + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Ei toistettavia videoita! + + + Video no longer available + Notification summary informing the user video is no longer available. + Tämä video ei enää ole saatavilla + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + Video on poistettu YouTube:lta + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + Tämä kanava ei ole enää saatavilla + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Osallistu YTPlayer-sovelluksen käännöstyöhön + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + Alkuperäinen tekijä, tworaz, ansaitsee kaiken kunnian tämän sovelluksen kehittämisestä. Jos kuitenkin haluat tukea ylläpitäjää, voit tarjota hänelle kupin kahvia! + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + Tiedostojen %1 ja %2 käsittely epäonnistui + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + Tarkistetaan paikallinen versio... + + + Checking remote version... + Shown while checking for remote version of youtube-dl + Tarkistetaan päivitykset... + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + Päivitystarkistus epäonnistui + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + Ladataan youtube-dl... + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + Youtube-dl on ajan tasalla + + + Updating youtube-dl failed + Shown after youtube-dl update failed + Youtube-dl -päivitys epäonnistui + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + Youtube-dl päivitetty + + + Update youtube-dl + MenuItem text for updating youtube-dl + Päivitä youtube-dl + + + diff --git a/translations/fr_FR.ts b/translations/fr_FR.ts new file mode 100644 index 0000000..68b94bb --- /dev/null +++ b/translations/fr_FR.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Catégories + + + Search + Label of video search text field + Que cherchez-vous ? + + + Search + Menu option to show search page + Rechercher + + + Settings + Settings page title + Paramètres + + + Settings + Menu option to show settings page + Paramètres + + + About YTPlayer + Title of about page + À propos de YTPlayer + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Un client YouTube pour Sailfish OS. + + + Version: %1 + Version label value + Version : %1 + + + Region code: %1 + Region code field value + Code Région : %1 + + + Published on + Label for video upload date field + Publié le + + + Duration + Label for video duration field + Durée + + + Created on + Label for youtube channel creation date field + Inscrit le + + + Video count + Label for channel video count field + Nombre de vidéos + + + Latest videos + Label/Title for the list of latest videos in certain category + Dernières vidéos + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + Le chargement de la page d'autorisation OAuth a échoué ! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + L'accès à l'OAuth YouTube a échoué ! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + Connexion réussie + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + L'autorisation OAuth a échoué ! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Se désabonner + + + Subscribe + S'abonner + + + Categories + Menu option to show video categories page + Catégories + + + No results + Background label informing the user there are no search results + Aucun résultat + + + Log viewer + Journal + + + Network Offline + Network offline screen label + Réseau hors-ligne + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Qualité + + + Likes + YouTube likes page title + J'aime + + + Dislikes + YouTube dislikes page title + Je n'aime pas + + + Recommendations + Menu option fo show YouTube recommendations page + Recommandations + + + Subscriptions + Menu option responsible for showing user subscriptions page + Abonnements + + + Likes + Menu option responsible for showing user likes page + J'aime + + + Dislikes + Menu option responsible for showing user dislikes page + Je n'aime pas + + + Recommended for you + YouTube recommendations page title + Quelques recommandations + + + Subscribed channels + YouTube subscribed channels page title + Chaînes suivies + + + Latest videos + YouTube latest subscribed videos page title + Dernières vidéos + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Dernières vidéos + + + Retry + Label of network connection retry button + Réessayer + + + About + Menu option to show about page + À propos + + + View license + Button for showing license viewer page + Voir la licence + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer est soumis aux conditions de la licence BSD 3-CL. + + + Third party software + Label for button showing third party software listing page + Logiciels tiers + + + License + License viewer page title + Licence + + + Third party software + Third party software license page title + Logiciels tiers + + + Signing in + Information label informing the user YouTube sign in process is in progress + Connexion en cours + + + Search options + Search options page title + Options de recherche + + + Advanced + Generic options menu/button label + Avancé + + + Result type + Label for YouTube content type search combo box + Type de résultat + + + Any + Label for generic option menu matching any content type + Tout + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Chaîne + + + Video + Label for menu option indicating YouTube video content type + Vidéo + + + High definition + Label for high video quality menu option + HD + + + Standard definition + Label for standard video quality menu option + Standard + + + Video duration + Label for video duration combo box + Durée de la vidéo + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + Plus de 20 minutes + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + Entre 4 et 20 minutes + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Moins de 4 minutes + + + Video type + Label for video type combo box + Type de vidéo + + + Episode + Label for episode video type + Épisode + + + Movie + Label for movie video type + Film + + + Video license + Label for video license combo box + Licence de la vidéo + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Type d’événement + + + Completed + Label for completed event type option + Terminé + + + Live + Label for live event type option + En direct + + + Upcoming + Label for upcoming event type option + À venir + + + Order by + Label for search result ordering combo box + Trier par + + + Relevance + Label for relevance ordering menu option + Pertinence + + + Date + Label for date ordering menu option + Date + + + Rating + Label for rating ordering menu option + Classement + + + Title + Label for title ordering menu option + Titre + + + Video count + Label for video count ordering menu option + Nombre de vidéos + + + View count + Label for view count ordering menu option + Nombre de vues + + + Safe search + Label for safe search combo box + Mode restreint + + + Moderate + Label for moderate content search filtering option + Modéré + + + None + Label for no search content filtering menu option + Désactivé + + + Strict + Label for strict search content filtering menu option + Strict + + + Published before + Label for published before search option menu + Publications avant + + + Published after + Label for published after search option MenuItem + Publications après + + + Play + Label for video play button. + Lecture + + + Clear cache + Menu option to clear application caches + Effacer le cache + + + Image cache size + Label for image cache size slider + Taille du cache d'images + + + Current usage + Label for current cache usage label + Utilisation courante + + + YouTube API response cache size + Label for YouTube API response cache size slider + Taille du cache de réponse de l'API YouTube + + + Download queued + "Label indicating video was queued for preload" + Téléchargement en attente + + + Remove + Menu action to remove the element from the list + Supprimer + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + Aucune vidéo + + + Downloaded + Label indicating the video was downloaded to local device storage + Téléchargée + + + Cache settings + Title of cache settings page + Paramètres du cache + + + Download paused + "Label indicating video download was paused" + Téléchargement en pause + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + Téléchargement : %1% + + + Video download finished + Notification summary informing the user video download has been finished + Téléchargement de la vidéo terminé + + + Video download failed + Notification summary informing the user video download has failed + Échec du téléchargement de la vidéo + + + Downloads + Menu option showing downloaded videos page + Vidéos téléchargées + + + Downloaded videos + Title of downloaded videos page + Vidéos téléchargées + + + Download settings + Title of video download settings pge + Paramètres de téléchargement + + + Preferred video quality + Label for preferred video quality selection combobox + Qualité préférée + + + Connection type + Label for video download connection type combobox + Type de connexion + + + Automatically resume downloads + Label for video download auto resume switch in settings + Reprendre automatiquement les téléchargements + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + Au démarrage, reprendre tous les téléchargements qui étaient en cours ou en attente lors de la fermeture de YTPlayer. + + + Paused + Label for video download staus indicator telling the user download is paused + En pause + + + Queued + En attente + + + Resume + Menu action to resume paused video download + Reprendre la lecture + + + Pause + Menu action to pause in progress video download + Pause + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Wi-Fi seulement + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + Wi-Fi + réseau mobile + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Réseau mobile seulement + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Téléchargements simultanés max. + + + Cancel + Menu action to cancel paused/queued video download + Annuler + + + Download video + Menu option triggering video preload + Télécharger la vidéo + + + Cancel download + Menu option canceling pending/in progress video preload + Annuler le téléchargement + + + Pause download + Menu option allowing the user to pause video download + Mettre en pause le téléchargement + + + Resume download + Menu option allowing the user to resume video download + Reprendre le téléchargement + + + Remove download + Menu option allowing the user to remove downloaded video + Supprimer la vidéo téléchargée + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + Annulation du téléchargement + + + Removing download + Remorse popup message telling the user video download will be removed + Suppression de la vidéo téléchargée + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + Nettoyage du cache + + + Cache + Label for menu option showing cache settings page + Cache + + + Download + Label for menu option showing video download settings page + Téléchargement + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + Intégration du compte YouTube + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + Autorise YTPlayer à gérer votre compte utilisateur YouTube. + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Abonné à la chaîne + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + Désabonnement de la chaîne + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Désabonné de la chaîne + + + Copy link to clipboard + Menu option copying video link to clipboard + Copier le lien dans le presse-papier + + + Link copied + Notification summary informing the user link was copied to clipboard + Lien copié + + + Open link from clipboard + Menu opion for opening video links from clipboard + Ouvrir le lien depuis le presse-papier + + + Open in browser + Menu option opening YouTube video page in a web browser + Ouvrir dans le navigateur + + + Browser channel + menu option allowing the user to browser YouTube channel + Parcourir la chaîne + + + No video streams available + Notification summary informing the user direct video playback is not possible + Aucun flux vidéo disponible + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + YTPlayer n'a pas trouvé de flux vidéo exploitable + + + Launching browser + Message informing the user web browser is being launched + Ouverture du navigateur + + + Clear history + Menu option allowing the user to clear search history + Nettoyer l'historique + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + Nettoyage de l'historique + + + Search settings + Search settings page title + Paramètres de recherche + + + Suggestion source + Label for the search suggestion engine combo box + Source des suggestions + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Historique de recherche + + + Search + Label for menu option showing search settings page + Recherche + + + Save log + Menu action allowing the user to save application log + Enregistrer le journal + + + Saving log + Remorse popup message telling the user log file will be saved + Enregistrement du journal + + + Log saved + Body of notification informing the user application log was saved + Journal enregistré + + + View logs + Label for menu option showing application log viewer + Voir le journal + + + Language settings + Title of language settings page + Paramètres de langue + + + Language + Label for menu option showing application language settings page + Langue + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Passer en %1 ? + + + Translations + Label for button showing application translation credits page + Traductions + + + Translations + Title of translation credits page + Traductions + + + Channels + Label for channels section indicator in main menu + Chaînes + + + Videos + Main menu label indicating videos section of the page + Vidéos + + + Watched recently + Menu opion showing recently watched videos page + Derniers visionnages + + + Watched recently + Title for recently watched videos page + Derniers visionnages + + + Favorites + Menu option showing video favorites page + Favoris + + + Favorites + Title for favorite videos page + Favoris + + + Hide search + Menu option allowing the user to hide search field + Masquer la recherche + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Suppression du favori + + + Player settings + Title of video player settings page + Paramètres de lecture + + + Player + Label for menu option showing video player settings page + Lecteur + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Recherche de flux + + + Buffering: %1% + Media player status indicating content is buffering + Mise en mémoire tampon : %1% + + + Loading + Media player status indicating content is loading + Chargement + + + Stalled + Media player status indicating content loading has stalled + Bloqué + + + Invalid media + Media player status indicating invalid content type + Média non valide + + + Controls hide delay + Label for slider changing video player controls hide delay + Délai de masquage des contrôles + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Pause automatique en arrière-plan + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + Met automatiquement en pause la vidéo lorsque l'application passe en arrière-plan. + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Qualité par défaut avec Wi-Fi + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Qualité par défaut avec réseau mobile + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Préchargement de la vidéo + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + Démarre le préchargement de la vidéo avant même que le lecteur ne soit mis en route. + + + Always + Menu option allowing the player to always preaload video data. + Toujours + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Wi-Fi seulement + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Réseau mobile seulement + + + Never + Menu option disallowing the player to always preaload video data. + Jamais + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Pas d'image + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Pas de flux ! + + + Video no longer available + Notification summary informing the user video is no longer available. + Vidéo indisponible + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + La vidéo a été supprimée de YouTube + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + Chaîne indisponible + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Traduire YTPlayer + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/translations/harbour-ytplayer.ts b/translations/harbour-ytplayer.ts new file mode 100644 index 0000000..2e4fb1c --- /dev/null +++ b/translations/harbour-ytplayer.ts @@ -0,0 +1,1166 @@ + + + + + + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + + + + + + Network Offline + Network offline screen label + + + + + About YTPlayer + Title of about page + + + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + + + + + Region code: %1 + Region code field value + + + + + Version: %1 + Version label value + + + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + + + + + + View license + Button for showing license viewer page + + + + + Third party software + Label for button showing third party software listing page + + + + + Translations + Label for button showing application translation credits page + + + + + Subscribed channels + YouTube subscribed channels page title + + + + + Latest videos + YouTube latest subscribed videos page title + + + + + Likes + YouTube likes page title + + + + + Dislikes + YouTube dislikes page title + + + + + Recommended for you + YouTube recommendations page title + + + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + + + + + Launching browser + Message informing the user web browser is being launched + + + + + Clear cache + Menu option to clear application caches + + + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + + + + + Cache settings + Title of cache settings page + + + + + Image cache size + Label for image cache size slider + + + + + + Current usage + Label for current cache usage label + + + + + YouTube API response cache size + Label for YouTube API response cache size slider + + + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + + + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + + + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + + + + + Subscribe + + + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + + + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + + + + + Created on + Label for youtube channel creation date field + + + + + Video count + Label for channel video count field + + + + + Latest videos + Label/Title for the list of latest videos in certain category + + + + + Downloaded videos + Title of downloaded videos page + + + + + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + + + + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + + + + + + Removing download + Remorse popup message telling the user video download will be removed + + + + + Paused + Label for video download staus indicator telling the user download is paused + + + + + Queued + + + + + Resume + Menu action to resume paused video download + + + + + Pause + Menu action to pause in progress video download + + + + + + Remove + Menu action to remove the element from the list + + + + + Cancel + Menu action to cancel paused/queued video download + + + + + Download settings + Title of video download settings pge + + + + + Automatically resume downloads + Label for video download auto resume switch in settings + + + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + + + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + + + + + Preferred video quality + Label for preferred video quality selection combobox + + + + + Connection type + Label for video download connection type combobox + + + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + + + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + + + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + + + + + + Hide search + Menu option allowing the user to hide search field + + + + + + + Search + Menu option to show search page + + + + + Favorites + Title for favorite videos page + + + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + + + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + + + + + Language settings + Title of language settings page + + + + + License + License viewer page title + + + + + Log viewer + + + + + Save log + Menu action allowing the user to save application log + + + + + Saving log + Remorse popup message telling the user log file will be saved + + + + + Log saved + Body of notification informing the user application log was saved + + + + + About + Menu option to show about page + + + + + Settings + Menu option to show settings page + + + + + Open link from clipboard + Menu opion for opening video links from clipboard + + + + + Channels + Label for channels section indicator in main menu + + + + + Subscriptions + Menu option responsible for showing user subscriptions page + + + + + Videos + Main menu label indicating videos section of the page + + + + + Favorites + Menu option showing video favorites page + + + + + Categories + Menu option to show video categories page + + + + + Downloads + Menu option showing downloaded videos page + + + + + Recommendations + Menu option fo show YouTube recommendations page + + + + + Watched recently + Menu opion showing recently watched videos page + + + + + Likes + Menu option responsible for showing user likes page + + + + + Dislikes + Menu option responsible for showing user dislikes page + + + + + Retry + Label of network connection retry button + + + + + Player settings + Title of video player settings page + + + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + + + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + + + + + Controls hide delay + Label for slider changing video player controls hide delay + + + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + + + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + + + + + Always + Menu option allowing the player to always preaload video data. + + + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + + + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + + + + + Never + Menu option disallowing the player to always preaload video data. + + + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + + + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + + + + + Advanced + Generic options menu/button label + + + + + Search + Label of video search text field + + + + + No results + Background label informing the user there are no search results + + + + + Search options + Search options page title + + + + + Result type + Label for YouTube content type search combo box + + + + + + + + + + Any + Label for generic option menu matching any content type + + + + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + + + + + Video + Label for menu option indicating YouTube video content type + + + + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + + + + + High definition + Label for high video quality menu option + + + + + Standard definition + Label for standard video quality menu option + + + + + Video duration + Label for video duration combo box + + + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + + + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + + + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + + + + + Video type + Label for video type combo box + + + + + Episode + Label for episode video type + + + + + Movie + Label for movie video type + + + + + Video license + Label for video license combo box + + + + + Creative Commons + Label for Creative Commons license type + + + + + YouTube + Label for YouTube license type + + + + + Event Type + Label for video event type combo box + + + + + Completed + Label for completed event type option + + + + + Live + Label for live event type option + + + + + Upcoming + Label for upcoming event type option + + + + + Order by + Label for search result ordering combo box + + + + + Relevance + Label for relevance ordering menu option + + + + + Date + Label for date ordering menu option + + + + + Rating + Label for rating ordering menu option + + + + + Title + Label for title ordering menu option + + + + + Video count + Label for video count ordering menu option + + + + + View count + Label for view count ordering menu option + + + + + Safe search + Label for safe search combo box + + + + + Moderate + Label for moderate content search filtering option + + + + + None + Label for no search content filtering menu option + + + + + Strict + Label for strict search content filtering menu option + + + + + Published before + Label for published before search option menu + + + + + Published after + Label for published after search option MenuItem + + + + + Clear history + Menu option allowing the user to clear search history + + + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + + + + + Search settings + Search settings page title + + + + + Suggestion source + Label for the search suggestion engine combo box + + + + + Google + Label for Google based search suggestion engine + + + + + Search history + Label for history based search suggestion engine + + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + + View logs + Label for menu option showing application log viewer + + + + + Settings + Settings page title + + + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + + + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + + Cache + Label for menu option showing cache settings page + + + + + Download + Label for menu option showing video download settings page + + + + + Language + Label for menu option showing application language settings page + + + + + Player + Label for menu option showing video player settings page + + + + + Search + Label for menu option showing search settings page + + + + + Third party software + Third party software license page title + + + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + + + + + Translations + Title of translation credits page + + + + + Video categories + Video categories page title + + + + + Video no longer available + Notification summary informing the user video is no longer available. + + + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + + + + + Download video + Menu option triggering video preload + + + + + Cancel download + Menu option canceling pending/in progress video preload + + + + + Pause download + Menu option allowing the user to pause video download + + + + + Resume download + Menu option allowing the user to resume video download + + + + + Remove download + Menu option allowing the user to remove downloaded video + + + + + Copy link to clipboard + Menu option copying video link to clipboard + + + + + Link copied + Notification summary informing the user link was copied to clipboard + + + + + Open in browser + Menu option opening YouTube video page in a web browser + + + + + Browser channel + menu option allowing the user to browser YouTube channel + + + + + Play + Label for video play button. + + + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + + + + + Downloaded + Label indicating the video was downloaded to local device storage + + + + + Download queued + "Label indicating video was queued for preload" + + + + + Download paused + "Label indicating video download was paused" + + + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + + + + + Published on + Label for video upload date field + + + + + Duration + Label for video duration field + + + + + Looking for streams + Status message indicating video player is looking for audio/video streams + + + + + No video streams available + Notification summary informing the user direct video playback is not possible + + + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + + + + + + Buffering: %1% + Media player status indicating content is buffering + + + + + Loading + Media player status indicating content is loading + + + + + Stalled + Media player status indicating content loading has stalled + + + + + Invalid media + Media player status indicating invalid content type + + + + + Watched recently + Title for recently watched videos page + + + + + Signing in + Information label informing the user YouTube sign in process is in progress + + + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + + + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + + + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + + + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + + + + + Video download finished + Notification summary informing the user video download has been finished + + + + + Video download failed + Notification summary informing the user video download has failed + + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + diff --git a/translations/hu_HU.ts b/translations/hu_HU.ts new file mode 100644 index 0000000..640a8f9 --- /dev/null +++ b/translations/hu_HU.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Videókategóriák + + + Search + Label of video search text field + Keresés + + + Search + Menu option to show search page + Keresés + + + Settings + Settings page title + Beállítások + + + Settings + Menu option to show settings page + Beállítások + + + About YTPlayer + Title of about page + A YTPlayer névjegye + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Nem hivatalos YouTube kliens Sailfish OS-re + + + Version: %1 + Version label value + Verzió: %1 + + + Region code: %1 + Region code field value + Régiókód: %1 + + + Published on + Label for video upload date field + Közzététel ideje + + + Duration + Label for video duration field + Időtartam + + + Created on + Label for youtube channel creation date field + Létrehozás ideje + + + Video count + Label for channel video count field + Video száma + + + Latest videos + Label/Title for the list of latest videos in certain category + Legújabb videók + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + OAuth hitelesítési oldal betöltése sikertelen! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + YouTube OAuth hozzáférés megtagadva! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + A belépés sikeres + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + OAuth hitelesítés sikertelen! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Leiratkozás + + + Subscribe + Feliratkozás + + + Categories + Menu option to show video categories page + Kategóriák + + + No results + Background label informing the user there are no search results + Nincs találat + + + Log viewer + Napló nézegető + + + Network Offline + Network offline screen label + Nincs hálózat + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Videóminőség + + + Likes + YouTube likes page title + Tetszik + + + Dislikes + YouTube dislikes page title + Nem tetszik + + + Recommendations + Menu option fo show YouTube recommendations page + Ajánlások + + + Subscriptions + Menu option responsible for showing user subscriptions page + Előfizetések + + + Likes + Menu option responsible for showing user likes page + Tetszik + + + Dislikes + Menu option responsible for showing user dislikes page + Nem tetszik + + + Recommended for you + YouTube recommendations page title + Neked ajánlott + + + Subscribed channels + YouTube subscribed channels page title + Előfizetett csatornák + + + Latest videos + YouTube latest subscribed videos page title + Legújabb videók + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Legújabb videók + + + Retry + Label of network connection retry button + Újra + + + About + Menu option to show about page + Névjegy + + + View license + Button for showing license viewer page + Licenc megtekintése + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + A YTPlayer a 3-clause BSD License alatt jelent meg. + + + Third party software + Label for button showing third party software listing page + Harmadik féltől származó szoftverek + + + License + License viewer page title + Licenc + + + Third party software + Third party software license page title + Harmadik féltől származó szoftverek + + + Signing in + Information label informing the user YouTube sign in process is in progress + Belépés + + + Search options + Search options page title + Keresési lehetőségek + + + Advanced + Generic options menu/button label + Haladó + + + Result type + Label for YouTube content type search combo box + Eredmény típus + + + Any + Label for generic option menu matching any content type + Bármi + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Csatorna + + + Video + Label for menu option indicating YouTube video content type + Videó + + + High definition + Label for high video quality menu option + HD + + + Standard definition + Label for standard video quality menu option + SD + + + Video duration + Label for video duration combo box + Videó időtartam + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + 20 percnél hosszabb + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + 4 és 20 perc között + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Kevesebb, mint 4 perc + + + Video type + Label for video type combo box + Videó típus + + + Episode + Label for episode video type + Rész + + + Movie + Label for movie video type + Mozi + + + Video license + Label for video license combo box + Videó licenc + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Eseménytípus + + + Completed + Label for completed event type option + Kész + + + Live + Label for live event type option + Élő + + + Upcoming + Label for upcoming event type option + Következő + + + Order by + Label for search result ordering combo box + Rendezés + + + Relevance + Label for relevance ordering menu option + Relevancia + + + Date + Label for date ordering menu option + Dátum + + + Rating + Label for rating ordering menu option + Értékelés + + + Title + Label for title ordering menu option + Cím + + + Video count + Label for video count ordering menu option + Video száma + + + View count + Label for view count ordering menu option + Megtekintések száma + + + Safe search + Label for safe search combo box + Biztonságos keresés + + + Moderate + Label for moderate content search filtering option + Mérsékelt + + + None + Label for no search content filtering menu option + Semmi + + + Strict + Label for strict search content filtering menu option + Szigorú + + + Published before + Label for published before search option menu + Kiadva ez előtt: + + + Published after + Label for published after search option MenuItem + Kiadva ez után: + + + Play + Label for video play button. + Lejátszás + + + Clear cache + Menu option to clear application caches + Gyorsítótár ürítése + + + Image cache size + Label for image cache size slider + Kép gyorsítótár mérete + + + Current usage + Label for current cache usage label + Jelenlegi használat + + + YouTube API response cache size + Label for YouTube API response cache size slider + YouTube API válasz gyorsítótár mérete + + + Download queued + "Label indicating video was queued for preload" + Letöltés sorbállítva + + + Remove + Menu action to remove the element from the list + Eltávolítás + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + Nincsenek videók + + + Downloaded + Label indicating the video was downloaded to local device storage + Letöltve + + + Cache settings + Title of cache settings page + Gyorsítótár beállítások + + + Download paused + "Label indicating video download was paused" + Letöltés szüneteltetve + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + Letöltés: %1% + + + Video download finished + Notification summary informing the user video download has been finished + Videó letöltése kész + + + Video download failed + Notification summary informing the user video download has failed + Videó letöltése sikertelen + + + Downloads + Menu option showing downloaded videos page + Letöltések + + + Downloaded videos + Title of downloaded videos page + Letöltött videók + + + Download settings + Title of video download settings pge + Letöltési beállítások + + + Preferred video quality + Label for preferred video quality selection combobox + Kedvelt videóminőség + + + Connection type + Label for video download connection type combobox + Kapcsolattípus + + + Automatically resume downloads + Label for video download auto resume switch in settings + Letöltések automatikus folytatása + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + Indításkor, minden a YTPlayer bezárása előtt sorbaállított, vagy folyamatban lévő letöltés folytatása. + + + Paused + Label for video download staus indicator telling the user download is paused + Szüneteltetve + + + Queued + Sorbaállítva + + + Resume + Menu action to resume paused video download + Folytatás + + + Pause + Menu action to pause in progress video download + Szünet + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Csak WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi és mobil hálózat + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Csak mobil hálózat + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Max. folyamatban lévő letöltés + + + Cancel + Menu action to cancel paused/queued video download + Mégse + + + Download video + Menu option triggering video preload + Videó letöltése + + + Cancel download + Menu option canceling pending/in progress video preload + Letöltés elvetése + + + Pause download + Menu option allowing the user to pause video download + Letöltés megállítása + + + Resume download + Menu option allowing the user to resume video download + Letöltés folytatása + + + Remove download + Menu option allowing the user to remove downloaded video + Letöltés eltávolítása + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + Letöltés elvetése + + + Removing download + Remorse popup message telling the user video download will be removed + Letöltés eltávolítása + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + Gyorsítótár ürítése + + + Cache + Label for menu option showing cache settings page + Gyorsítótár + + + Download + Label for menu option showing video download settings page + Letöltés + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + YouTube-fiók integráció + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + A YTPlayer kezelheti a YouTube-fiókot. + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Leiratkozva + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + Leiratkozás a csatornáról + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Leiratkozva + + + Copy link to clipboard + Menu option copying video link to clipboard + Hivatkozás vágólapra másolása + + + Link copied + Notification summary informing the user link was copied to clipboard + Hivatkozás másolva + + + Open link from clipboard + Menu opion for opening video links from clipboard + Vágólapon lévő hivatkozás megnyitása + + + Open in browser + Menu option opening YouTube video page in a web browser + Megnyitás böngészőben + + + Browser channel + menu option allowing the user to browser YouTube channel + Csatorna böngészése + + + No video streams available + Notification summary informing the user direct video playback is not possible + Nincsenek elérhető videóstream-ek + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + A YTPlayer nem talált használható videóstream-eket + + + Launching browser + Message informing the user web browser is being launched + Böngésző indítása + + + Clear history + Menu option allowing the user to clear search history + Előzmények törlése + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + Előzmények törlése + + + Search settings + Search settings page title + Keresési beállítások + + + Suggestion source + Label for the search suggestion engine combo box + Ajánlás forrása + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Keresési előzmények + + + Search + Label for menu option showing search settings page + Keresés + + + Save log + Menu action allowing the user to save application log + Napló mentése + + + Saving log + Remorse popup message telling the user log file will be saved + Napló mentése + + + Log saved + Body of notification informing the user application log was saved + Napló mentve + + + View logs + Label for menu option showing application log viewer + Naplók megtekintése + + + Language settings + Title of language settings page + Nyelvi beállítások + + + Language + Label for menu option showing application language settings page + Nyelv + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Nyelv megváltoztatása erre: %1? + + + Translations + Label for button showing application translation credits page + Fordítások + + + Translations + Title of translation credits page + Fordítások + + + Channels + Label for channels section indicator in main menu + Csatornák + + + Videos + Main menu label indicating videos section of the page + Videók + + + Watched recently + Menu opion showing recently watched videos page + Nemrég megnézett + + + Watched recently + Title for recently watched videos page + Nemrég megnézett + + + Favorites + Menu option showing video favorites page + Kedvencek + + + Favorites + Title for favorite videos page + Kedvencek + + + Hide search + Menu option allowing the user to hide search field + Keresés elrejtése + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Kedvenc eltávolítása + + + Player settings + Title of video player settings page + Lejátszó beállítások + + + Player + Label for menu option showing video player settings page + Lejátszó + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Stream-ek keresése + + + Buffering: %1% + Media player status indicating content is buffering + Töltés %1% + + + Loading + Media player status indicating content is loading + Töltés + + + Stalled + Media player status indicating content loading has stalled + Elakadva + + + Invalid media + Media player status indicating invalid content type + Érvénytelen média + + + Controls hide delay + Label for slider changing video player controls hide delay + Kezelőszervek elrejtésének késleltetése + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Háttérbe küldéskor automatikusan szünet + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + Ha az alkalmazás háttérbe kerül, automatikusan szüneteljen a videólejátszás + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Alapértelmezett videóminőség WiFi-n + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Alapértelmezett videóminőség mobil hálózaton + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Előzetes videó betöltés + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + A videó betöltésének megkezdése a lejátszó oldal aktiválása előtt. + + + Always + Menu option allowing the player to always preaload video data. + Mindig + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Csak WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Csak mobil hálózat + + + Never + Menu option disallowing the player to always preaload video data. + Soha + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Nincs kép + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Nincsenek stream-ek + + + Video no longer available + Notification summary informing the user video is no longer available. + A videó már nem elérhető + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + A videót eltávolították a YouTube-ról + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + A csatorna már nem elérhető + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + YTPlayer fordítása + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/languages/it_IT.ts b/translations/it_IT.ts similarity index 91% rename from languages/it_IT.ts rename to translations/it_IT.ts index bfc40b6..c6235bb 100644 --- a/languages/it_IT.ts +++ b/translations/it_IT.ts @@ -1,6 +1,8 @@ - + + + - + Video categories Video categories page title @@ -77,7 +79,7 @@ Impossibile caricare la pagina di autorizzazione OAuth! - YouTube OAuth access denined! + YouTube OAuth access denied! Message informing the user about YouTube OAuth autorization denial Accesso OAuth di YouTube negato! @@ -116,9 +118,7 @@ Network Offline - Network offline screen label ----------- -Network offline screen label + Network offline screen label Rete Disconnessa @@ -190,9 +190,7 @@ Label for menu option allowing the user to change video quality View license - Button for showing license viewer page ----------- -Button for showing license viewer page + Button for showing license viewer page Visualizza licenza @@ -414,9 +412,7 @@ Label for channel name text field Current usage - Label for current cache usage label ----------- -Label for current cache usage label + Label for current cache usage label Utilizzo corrente @@ -431,9 +427,7 @@ Label for current cache usage label Remove - Menu action to remove the element from the list ----------- -Menu action to remove the element from the list + Menu action to remove the element from the list Elimina @@ -506,7 +500,7 @@ Label informing the user there are no watched recently videos Riprendi automaticamente i download - On startup, resume all downloads which were either quened or in progress when YTPlayer was closed. + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. Description of video download auto resume switch in settings All'avvio, riprendere tutti i download che erano in coda o in corso quando YTPlayer è stato chiuso. @@ -581,16 +575,12 @@ Label informing the user there are no watched recently videos Cancelling download - Remorse popup message telling the user video download will be cancelled ----------- -Remorse popup message telling the user video download will be cancelled + Remorse popup message telling the user video download will be cancelled Annullamento download Removing download - Remorse popup message telling the user video download will be removed ----------- -Remorse popup message telling the user video download will be removed + Remorse popup message telling the user video download will be removed Rimozione download @@ -660,7 +650,6 @@ Remorse popup message telling the user video download will be removed No video streams available - Direct video playback not possible Notification summary informing the user direct video playback is not possible Nessun flusso video disponibile @@ -786,9 +775,7 @@ Remorse popup message telling the user video download will be removed Hide search - Menu option allowing the user to hide search field ----------- -Menu option allowing the user to hide search field + Menu option allowing the user to hide search field Nascondi ricerca @@ -833,7 +820,7 @@ Menu option allowing the user to hide search field Controls hide delay - Lael for slider changing video player controls hide delay + Label for slider changing video player controls hide delay Controlli nascondi ritardo @@ -843,7 +830,6 @@ Menu option allowing the user to hide search field Automatically pause video playback when application is deactivated. - Automatically pause video playback when application is deactivated Description of video auto pause option switch. Pausa automatica della riproduzione video quando l'applicazione viene disattivata @@ -889,7 +875,7 @@ Menu option allowing the user to hide search field No image - Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. Nessuna immagine @@ -899,13 +885,11 @@ Menu option allowing the user to hide search field Video no longer available - Video no longer available! Notification summary informing the user video is no longer available. Il video non è più disponibile Video was removed from YouTube - Video was removed from YouTube. Notification body explaining why video is no longer available. Il video è stato rimosso da YouTube @@ -919,5 +903,61 @@ Menu option allowing the user to hide search field Menu option opening a link to YTPlayer translation page on Transifex. Tradurre YTPlayer + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + - \ No newline at end of file + diff --git a/translations/ja.ts b/translations/ja.ts new file mode 100644 index 0000000..410e0e5 --- /dev/null +++ b/translations/ja.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + カテゴリー + + + Search + Label of video search text field + 検索 + + + Search + Menu option to show search page + 検索 + + + Settings + Settings page title + 設定 + + + Settings + Menu option to show settings page + 設定 + + + About YTPlayer + Title of about page + YTPkayerについて + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Unofficial YouTube client for Sailfish OS + + + Version: %1 + Version label value + Version: %1 + + + Region code: %1 + Region code field value + Region code: %1 + + + Published on + Label for video upload date field + + + + Duration + Label for video duration field + + + + Created on + Label for youtube channel creation date field + + + + Video count + Label for channel video count field + + + + Latest videos + Label/Title for the list of latest videos in certain category + 最新動画 + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + OAuth認証ページを読み込めませんでした! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + サインインしました + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + 登録解除 + + + Subscribe + 登録 + + + Categories + Menu option to show video categories page + カテゴリー + + + No results + Background label informing the user there are no search results + + + + Log viewer + + + + Network Offline + Network offline screen label + + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + + + + Likes + YouTube likes page title + 高評価 + + + Dislikes + YouTube dislikes page title + 低評価 + + + Recommendations + Menu option fo show YouTube recommendations page + おすすめ + + + Subscriptions + Menu option responsible for showing user subscriptions page + 登録チャンネル + + + Likes + Menu option responsible for showing user likes page + 高評価 + + + Dislikes + Menu option responsible for showing user dislikes page + 低評価 + + + Recommended for you + YouTube recommendations page title + あなたへのおすすめ + + + Subscribed channels + YouTube subscribed channels page title + 登録済チャンネル + + + Latest videos + YouTube latest subscribed videos page title + 最新動画 + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + 最新動画 + + + Retry + Label of network connection retry button + + + + About + Menu option to show about page + + + + View license + Button for showing license viewer page + + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + + + + Third party software + Label for button showing third party software listing page + + + + License + License viewer page title + + + + Third party software + Third party software license page title + + + + Signing in + Information label informing the user YouTube sign in process is in progress + + + + Search options + Search options page title + 検索オプション + + + Advanced + Generic options menu/button label + + + + Result type + Label for YouTube content type search combo box + + + + Any + Label for generic option menu matching any content type + + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + チャンネル + + + Video + Label for menu option indicating YouTube video content type + 動画 + + + High definition + Label for high video quality menu option + + + + Standard definition + Label for standard video quality menu option + + + + Video duration + Label for video duration combo box + + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + 20分以上 + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + + + + Video type + Label for video type combo box + + + + Episode + Label for episode video type + + + + Movie + Label for movie video type + + + + Video license + Label for video license combo box + + + + Creative Commons + Label for Creative Commons license type + + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + + + + Completed + Label for completed event type option + + + + Live + Label for live event type option + + + + Upcoming + Label for upcoming event type option + + + + Order by + Label for search result ordering combo box + + + + Relevance + Label for relevance ordering menu option + + + + Date + Label for date ordering menu option + 日付 + + + Rating + Label for rating ordering menu option + レーティング + + + Title + Label for title ordering menu option + タイトル + + + Video count + Label for video count ordering menu option + + + + View count + Label for view count ordering menu option + + + + Safe search + Label for safe search combo box + + + + Moderate + Label for moderate content search filtering option + + + + None + Label for no search content filtering menu option + + + + Strict + Label for strict search content filtering menu option + + + + Published before + Label for published before search option menu + + + + Published after + Label for published after search option MenuItem + + + + Play + Label for video play button. + + + + Clear cache + Menu option to clear application caches + + + + Image cache size + Label for image cache size slider + + + + Current usage + Label for current cache usage label + + + + YouTube API response cache size + Label for YouTube API response cache size slider + + + + Download queued + "Label indicating video was queued for preload" + ダウンロード待ちです + + + Remove + Menu action to remove the element from the list + 削除 + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + + + + Downloaded + Label indicating the video was downloaded to local device storage + ダウンロード済 + + + Cache settings + Title of cache settings page + + + + Download paused + "Label indicating video download was paused" + + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + + + + Video download finished + Notification summary informing the user video download has been finished + + + + Video download failed + Notification summary informing the user video download has failed + + + + Downloads + Menu option showing downloaded videos page + + + + Downloaded videos + Title of downloaded videos page + + + + Download settings + Title of video download settings pge + + + + Preferred video quality + Label for preferred video quality selection combobox + + + + Connection type + Label for video download connection type combobox + + + + Automatically resume downloads + Label for video download auto resume switch in settings + + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + + + + Paused + Label for video download staus indicator telling the user download is paused + + + + Queued + + + + Resume + Menu action to resume paused video download + + + + Pause + Menu action to pause in progress video download + + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + + + + Cancel + Menu action to cancel paused/queued video download + + + + Download video + Menu option triggering video preload + + + + Cancel download + Menu option canceling pending/in progress video preload + + + + Pause download + Menu option allowing the user to pause video download + + + + Resume download + Menu option allowing the user to resume video download + + + + Remove download + Menu option allowing the user to remove downloaded video + + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + + + + Removing download + Remorse popup message telling the user video download will be removed + + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + + + + Cache + Label for menu option showing cache settings page + + + + Download + Label for menu option showing video download settings page + + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + + + + Copy link to clipboard + Menu option copying video link to clipboard + + + + Link copied + Notification summary informing the user link was copied to clipboard + + + + Open link from clipboard + Menu opion for opening video links from clipboard + + + + Open in browser + Menu option opening YouTube video page in a web browser + + + + Browser channel + menu option allowing the user to browser YouTube channel + + + + No video streams available + Notification summary informing the user direct video playback is not possible + + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + + + + Launching browser + Message informing the user web browser is being launched + + + + Clear history + Menu option allowing the user to clear search history + + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + + + + Search settings + Search settings page title + + + + Suggestion source + Label for the search suggestion engine combo box + + + + Google + Label for Google based search suggestion engine + + + + Search history + Label for history based search suggestion engine + 検索履歴 + + + Search + Label for menu option showing search settings page + 検索 + + + Save log + Menu action allowing the user to save application log + + + + Saving log + Remorse popup message telling the user log file will be saved + + + + Log saved + Body of notification informing the user application log was saved + + + + View logs + Label for menu option showing application log viewer + + + + Language settings + Title of language settings page + 言語設定 + + + Language + Label for menu option showing application language settings page + 言語 + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + + + + Translations + Label for button showing application translation credits page + + + + Translations + Title of translation credits page + + + + Channels + Label for channels section indicator in main menu + + + + Videos + Main menu label indicating videos section of the page + + + + Watched recently + Menu opion showing recently watched videos page + 履歴 + + + Watched recently + Title for recently watched videos page + 履歴 + + + Favorites + Menu option showing video favorites page + お気に入り + + + Favorites + Title for favorite videos page + お気に入り + + + Hide search + Menu option allowing the user to hide search field + + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + + + + Player settings + Title of video player settings page + + + + Player + Label for menu option showing video player settings page + + + + Looking for streams + Status message indicating video player is looking for audio/video streams + + + + Buffering: %1% + Media player status indicating content is buffering + + + + Loading + Media player status indicating content is loading + + + + Stalled + Media player status indicating content loading has stalled + + + + Invalid media + Media player status indicating invalid content type + + + + Controls hide delay + Label for slider changing video player controls hide delay + + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + + + + Always + Menu option allowing the player to always preaload video data. + 常時 + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + + + + Never + Menu option disallowing the player to always preaload video data. + + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + + + + Video no longer available + Notification summary informing the user video is no longer available. + + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + YouTubeから削除されています + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/languages/nl_NL.ts b/translations/nl_NL.ts similarity index 84% rename from languages/nl_NL.ts rename to translations/nl_NL.ts index e3e65e3..fe1a727 100644 --- a/languages/nl_NL.ts +++ b/translations/nl_NL.ts @@ -1,6 +1,6 @@ - + @@ -36,7 +36,7 @@ Unofficial YouTube client for Sailfish OS YTPlayer application description in about page - Onofficiële YouTube-app voor SailfishOS + Onofficiële YouTube-app voor Sailfish OS Version: %1 @@ -61,45 +61,25 @@ Created on Label for youtube channel creation date field - Gecreeërd op + Gemaakt op Video count Label for channel video count field - Aantal video's - - - Buffering: %1% - Media player status indicating content is buffering - Bezig met bufferen: %1% - - - Loading - Media player status indicating content is loading - Bezig met laden - - - Stalled - Media player status indicating content loading has stalled - Onderbroken - - - Invalid media - Media player status indicating invalid content type - Ongeldige media + Aantal video’s Latest videos Label/Title for the list of latest videos in certain category - Nieuwste video's + Nieuwste video’s Failed to load OAuth authorization page! YouTube OAuth page loading failure message - Mislukt om OAuth-authorisatiepagina te laden! + OAuth-autorisatiepagina laden mislukt! - YouTube OAuth access denined! + YouTube OAuth access denied! Message informing the user about YouTube OAuth autorization denial YouTube OAuth-toegang geweigerd! @@ -111,12 +91,12 @@ OAuth authorization failed! Error message informing the user about OAuth authorization failure - OAuth-authorisatie mislukt! + OAuth-autorisatie mislukt! Unsubscribe Menu option to unsubscribe from YouTube channel - De-abonneren + Abonnement opzeggen Subscribe @@ -124,9 +104,8 @@ Categories - Video categories Menu option to show video categories page - Video-categorieën + Categorieën No results @@ -135,7 +114,7 @@ Log viewer - Logboek-weergave + Logboekweergave Network Offline @@ -147,7 +126,7 @@ Label for video quality selection combo box ---------- Label for menu option allowing the user to change video quality - Video-kwaliteit + Videokwaliteit Likes @@ -161,9 +140,8 @@ Label for menu option allowing the user to change video quality Recommendations - Recommended for you Menu option fo show YouTube recommendations page - Aanbevolen voor u + Aanbevelingen Subscriptions @@ -183,7 +161,7 @@ Label for menu option allowing the user to change video quality Recommended for you YouTube recommendations page title - Recommended for you + Aanbevolen voor jou Subscribed channels @@ -193,12 +171,12 @@ Label for menu option allowing the user to change video quality Latest videos YouTube latest subscribed videos page title - Nieuwste video's + Nieuwste video’s Latest videos Sub-Menu option responsible for showing latest subsribed videos page - Nieuwste video's + Nieuwste video’s Retry @@ -218,7 +196,7 @@ Label for menu option allowing the user to change video quality YTPlayer is licensed under 3-clause BSD License Label displaying YTPlayer licensing information - YTPlayer is gelicenseerd met de uit 3 clausules bestaande BSD-licentie + YTPlayer is uitgegeven onder de uit 3 clausules bestaande BSD-licentie Third party software @@ -295,7 +273,7 @@ Label for channel name text field Between 4 and 20 minutes Label for medium (4-20 miniutes) video option menu - Between 4 and 20 minutes + Tussen 4 en 20 minuten Less than 4 minutes @@ -320,7 +298,7 @@ Label for channel name text field Video license Label for video license combo box - Video-licentie + Videolicentie Creative Commons @@ -380,7 +358,7 @@ Label for channel name text field Video count Label for video count ordering menu option - Aantal video's + Aantal video’s View count @@ -459,7 +437,7 @@ Label for channel name text field Label informing the user there are not favorite videos ---------- Label informing the user there are no watched recently videos - Geen video's + Geen video’s Downloaded @@ -484,7 +462,7 @@ Label informing the user there are no watched recently videos Video download finished Notification summary informing the user video download has been finished - Downloaden van video afgerond + Downloaden van video voltooid Video download failed @@ -493,19 +471,18 @@ Label informing the user there are no watched recently videos Downloads - Downloaded videos Menu option showing downloaded videos page - Gedownloade video's + Downloads Downloaded videos Title of downloaded videos page - Gedownloade video's + Gedownloade video’s Download settings Title of video download settings pge - Download-instellingen + Downloadinstellingen Preferred video quality @@ -523,7 +500,7 @@ Label informing the user there are no watched recently videos Downloads automatisch hervatten - On startup, resume all downloads which were either quened or in progress when YTPlayer was closed. + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. Description of video download auto resume switch in settings Alle downloads in de wachtrij of die bezig waren met downloaden toen YTPlayer werd gesloten hervatten bij het opstarten. @@ -549,17 +526,17 @@ Label informing the user there are no watched recently videos WiFi only Menu option indicating downloads are allowed only when using WiFi - Alleen bij WiFi-verbinding + Alleen bij wifiverbinding WiFi + Cellular Menu option indicating downloads are allowed on both WiFi and 3G - Bij WiFi- en mobiele data-verbinding + Bij wifi- en mobielegegevensverbinding Cellular only Menu option indicating downloads are allowed only when using 3G - Alleen bij mobiele data-verbinding + Alleen bij mobielegegevensverbinding Max. concurrent downloads @@ -599,17 +576,17 @@ Label informing the user there are no watched recently videos Cancelling download Remorse popup message telling the user video download will be cancelled - Bezig met annuleren van download + Download wordt geannuleerd Removing download Remorse popup message telling the user video download will be removed - Bezig met verwijderen van download + Download wordt verwijderd Clearing cache Remorse popup message telling the user the cache will be cleaned - Bezig met legen van cache + Cache wordt geleegd Cache @@ -629,7 +606,7 @@ Label informing the user there are no watched recently videos Allow YTPlayer to manage YouTube user account. Description of switch activating/deactivating YouTube account integration - Toestaan dat YTPlayer uw YouTube-gebruikersaccount beheert. + Toestaan dat YTPlayer je YouTube-gebruikersaccount beheert. Channel subscribed @@ -639,12 +616,12 @@ Label informing the user there are no watched recently videos Unsubscribing channel Remorse popup message telling the user channel is about to be unsubscribed - Bezig met de-abonneren op kanaal + Abonnement wordt opgezegd Channel unsubscribed Notification summary telling the user channel was succesfully unsubscribed - Kanaal gede-abonneerd + Abonnement opgezegd Copy link to clipboard @@ -664,7 +641,7 @@ Label informing the user there are no watched recently videos Open in browser Menu option opening YouTube video page in a web browser - Openen in webbrowser + Openen in browser Browser channel @@ -673,9 +650,8 @@ Label informing the user there are no watched recently videos No video streams available - Direct video playback not possible Notification summary informing the user direct video playback is not possible - Direct afspelen van video is niet mogelijk + Geen videostreams beschikbaar YTPLayer failed to find usable video streams @@ -685,7 +661,7 @@ Label informing the user there are no watched recently videos Launching browser Message informing the user web browser is being launched - Bezig met openen van webbrowser + Browser wordt geopend Clear history @@ -695,7 +671,7 @@ Label informing the user there are no watched recently videos Clearing history "Remorse popup message telling the user search history is about to be cleared" - Bezig met wissen van geschiedenis + Geschiedenis wordt gewist Search settings @@ -704,9 +680,8 @@ Label informing the user there are no watched recently videos Suggestion source - Suggestion engine Label for the search suggestion engine combo box - Motor voor suggesties + Bron voor suggesties Google @@ -715,193 +690,273 @@ Label informing the user there are no watched recently videos Search history - History Label for history based search suggestion engine - Geschiedenis + Zoekgeschiedenis Search Label for menu option showing search settings page Zoeken - - No image - Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. - - - - Translations - Label for button showing application translation credits page - - - - Channel no longer available - Label for placeholder informing the user the channel is no longer available. - - - - Hide search - Menu option allowing the user to hide search field - - - - Favorites - Title for favorite videos page - - - - Removing favorite - Remorse popup message telling the use favorite is about to be removed - - - - Change language to %1? - Dialog text asking the user if UI language change should be performed - - - - Language settings - Title of language settings page - - Save log Menu action allowing the user to save application log - + Logboek opslaan Saving log Remorse popup message telling the user log file will be saved - + Logboek wordt opgeslagen Log saved Body of notification informing the user application log was saved - + Logboek opgeslagen + + + View logs + Label for menu option showing application log viewer + Logboeken bekijken + + + Language settings + Title of language settings page + Taalinstellingen + + + Language + Label for menu option showing application language settings page + Taal + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Taal wijzigen naar %1? + + + Translations + Label for button showing application translation credits page + Vertalingen + + + Translations + Title of translation credits page + Vertalingen Channels Label for channels section indicator in main menu - Kanalen + Kanalen Videos Main menu label indicating videos section of the page - + Video’s + + + Watched recently + Menu opion showing recently watched videos page + Recent bekeken + + + Watched recently + Title for recently watched videos page + Recent bekeken Favorites Menu option showing video favorites page - + Favorieten - - Watched recently - Menu opion showing recently watched videos page - + + Favorites + Title for favorite videos page + Favorieten + + + Hide search + Menu option allowing the user to hide search field + Zoekregel verbergen + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Favoriet wordt verwijderd Player settings Title of video player settings page - + Spelerinstellingen + + + Player + Label for menu option showing video player settings page + Speler + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Streams worden gezocht + + + Buffering: %1% + Media player status indicating content is buffering + Bezig met bufferen: %1% + + + Loading + Media player status indicating content is loading + Bezig met laden + + + Stalled + Media player status indicating content loading has stalled + Onderbroken + + + Invalid media + Media player status indicating invalid content type + Ongeldige media + + + Controls hide delay + Label for slider changing video player controls hide delay + Vertraging voor verbergen van besturing Auto pause when deactivated Label for video auto pause option on/off switch. - + Automatisch pauzeren indien niet actief Automatically pause video playback when application is deactivated. Description of video auto pause option switch. - + Pauzeer automatisch het afspelen van video’s indien de applicatie niet actief is. - - Controls hide delay - Lael for slider changing video player controls hide delay - + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Standaardkwaliteit van video bij wifiverbinding + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Standaardkwaliteit van video bij mobielegegevensverbinding Early video loading Label for combo box allowing the user to change video autoload behavior. - + Video’s vroeg laden Start preloading video data before player page is activated. Descripton for combo box allowing the user to change video autload behavior. - + Begin videogegevens te laden vooraleer spelerpagina actief is. Always Menu option allowing the player to always preaload video data. - + Altijd WiFi only Menu option allowing the player to preaload video data only when using WiFi connection. - Alleen bij WiFi-verbinding + Alleen bij wifiverbinding Cellular only Menu option allowing the player to preaload video data only when using cellular connection. - Alleen bij mobiele data-verbinding + Alleen bij mobielegegevensverbinding Never Menu option disallowing the player to always preaload video data. - + Nooit - - Default video quality on WiFi - Label for combo box allowing the user to change default video quality when using WiFi connection. + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Geen afbeelding + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Geen streams! + + + Video no longer available + Notification summary informing the user video is no longer available. + Video niet meer beschikbaar + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + Deze video is verwijderd van YouTube + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + Kanaal niet meer beschikbaar + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Vertaal YTPlayer + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image - - Default video quality on cellular - Label for combo box allowing the user to change default video quality when using cellular connection. + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files - - View logs - Label for menu option showing application log viewer + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory - - Language - Label for menu option showing application language settings page + + Checking local version... + Shown while checking for local version of youtube-dl - - Player - Label for menu option showing video player settings page + + Checking remote version... + Shown while checking for remote version of youtube-dl - - Translations - Title of translation credits page + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed - - Video no longer available - Notification summary informing the user video is no longer available. + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet - - Video was removed from YouTube - Notification body explaining why video is no longer available. + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed - - No streams! - Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + + Updating youtube-dl failed + Shown after youtube-dl update failed - - Looking for streams - Status message indicating video player is looking for audio/video streams + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded - - Watched recently - Title for recently watched videos page + + Update youtube-dl + MenuItem text for updating youtube-dl diff --git a/translations/pl_PL.ts b/translations/pl_PL.ts new file mode 100644 index 0000000..f8a0733 --- /dev/null +++ b/translations/pl_PL.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Kategorie video + + + Search + Label of video search text field + Szukaj + + + Search + Menu option to show search page + Szukaj + + + Settings + Settings page title + Ustawienia + + + Settings + Menu option to show settings page + Ustawienia + + + About YTPlayer + Title of about page + O YTPlayerze + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Nieoficjalny klient YouTube dla Sailfish OS + + + Version: %1 + Version label value + Wersja: %1 + + + Region code: %1 + Region code field value + Kod Regionu: %1 + + + Published on + Label for video upload date field + Opublikowany + + + Duration + Label for video duration field + Czas trwania + + + Created on + Label for youtube channel creation date field + Utworzony + + + Video count + Label for channel video count field + Liczba klipów + + + Latest videos + Label/Title for the list of latest videos in certain category + Ostatnie klipy + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + Nie udało się załadować strony autoryzacji OAuth! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + YouTube OAuth odmowa dostępu! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + Logowanie zakończone sukcesem + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + Autoryzacja OAuth nieudana! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Zakończ subskrypcję + + + Subscribe + Zasubskrybuj + + + Categories + Menu option to show video categories page + Kategorie + + + No results + Background label informing the user there are no search results + Brak wyników + + + Log viewer + Podgląd zdarzeń + + + Network Offline + Network offline screen label + Sieć niepodłączona + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Jakość wideo + + + Likes + YouTube likes page title + Lubię + + + Dislikes + YouTube dislikes page title + Nie lubię + + + Recommendations + Menu option fo show YouTube recommendations page + Polecane + + + Subscriptions + Menu option responsible for showing user subscriptions page + Subskrypcje + + + Likes + Menu option responsible for showing user likes page + Lubię + + + Dislikes + Menu option responsible for showing user dislikes page + Nie lubię + + + Recommended for you + YouTube recommendations page title + Polecane Tobie + + + Subscribed channels + YouTube subscribed channels page title + Kanały zasubskrybowane + + + Latest videos + YouTube latest subscribed videos page title + Ostatnie klipy + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Ostatnie klipy + + + Retry + Label of network connection retry button + Ponów + + + About + Menu option to show about page + O programie + + + View license + Button for showing license viewer page + Pokaż licencję + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer podlega licencji "3-clause BSD License" + + + Third party software + Label for button showing third party software listing page + Oprogramowanie firm trzecich + + + License + License viewer page title + Licencja + + + Third party software + Third party software license page title + Oprogramowanie firm trzecich + + + Signing in + Information label informing the user YouTube sign in process is in progress + Logowanie + + + Search options + Search options page title + Opcje wyszukiwania + + + Advanced + Generic options menu/button label + Zaawansowane + + + Result type + Label for YouTube content type search combo box + Typ wyniku + + + Any + Label for generic option menu matching any content type + Wszystkie + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Kanał + + + Video + Label for menu option indicating YouTube video content type + Wideo + + + High definition + Label for high video quality menu option + HD + + + Standard definition + Label for standard video quality menu option + SD + + + Video duration + Label for video duration combo box + Długość wideo + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + Dłuższe niż 20 minut + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + Między 4 a 20 minutami + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Mniej niż 4 minuty + + + Video type + Label for video type combo box + Type wideo + + + Episode + Label for episode video type + Odcinek + + + Movie + Label for movie video type + Film + + + Video license + Label for video license combo box + Licencja wideo + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Typ wydarzenia + + + Completed + Label for completed event type option + Zakończone + + + Live + Label for live event type option + Na żywo + + + Upcoming + Label for upcoming event type option + Nadchodzące + + + Order by + Label for search result ordering combo box + Sortuj po + + + Relevance + Label for relevance ordering menu option + Trafność + + + Date + Label for date ordering menu option + Data + + + Rating + Label for rating ordering menu option + Ocena + + + Title + Label for title ordering menu option + Tytuł + + + Video count + Label for video count ordering menu option + Liczba klipów + + + View count + Label for view count ordering menu option + Liczba odtworzeń + + + Safe search + Label for safe search combo box + Bezpieczne wyszukiwanie + + + Moderate + Label for moderate content search filtering option + Umiarkowane + + + None + Label for no search content filtering menu option + Brak + + + Strict + Label for strict search content filtering menu option + Rygorystyczny + + + Published before + Label for published before search option menu + Opublikowane przed + + + Published after + Label for published after search option MenuItem + Opublikowane po + + + Play + Label for video play button. + Odtwarzaj + + + Clear cache + Menu option to clear application caches + Kasuj pamięć podręczną + + + Image cache size + Label for image cache size slider + Rozmiar pamięci podręcznej obrazów + + + Current usage + Label for current cache usage label + Bierzące zużycie + + + YouTube API response cache size + Label for YouTube API response cache size slider + Rozmiar pamięci poręcznej YouTube API + + + Download queued + "Label indicating video was queued for preload" + Pobieranie zakolejkowane + + + Remove + Menu action to remove the element from the list + Usuń + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + Brak klipów + + + Downloaded + Label indicating the video was downloaded to local device storage + Pobrano + + + Cache settings + Title of cache settings page + Ustawienia pamięci podręcznej + + + Download paused + "Label indicating video download was paused" + Pobieranie zatrzymane + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + Pobieranie: %1% + + + Video download finished + Notification summary informing the user video download has been finished + Pobierania zakończone + + + Video download failed + Notification summary informing the user video download has failed + Błąd pobierania + + + Downloads + Menu option showing downloaded videos page + Pobrane + + + Downloaded videos + Title of downloaded videos page + Pobrane klipy + + + Download settings + Title of video download settings pge + Ustawienia pobierania + + + Preferred video quality + Label for preferred video quality selection combobox + Preferowana jakość video + + + Connection type + Label for video download connection type combobox + Typ połączenia + + + Automatically resume downloads + Label for video download auto resume switch in settings + Automatycznie wznawiaj pobieranie + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + Podczas statu, wznów wszystkie pobierania, które były pobierane lub zakolejkowane podczas zanmykanie YTPlayera. + + + Paused + Label for video download staus indicator telling the user download is paused + Wstrzymane + + + Queued + W kolejce + + + Resume + Menu action to resume paused video download + Wznów + + + Pause + Menu action to pause in progress video download + Wstrzymaj + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Tylko WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi + Komórkowe + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Tylko komórkowe + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Max jednocześnie pobieranych + + + Cancel + Menu action to cancel paused/queued video download + Anuluj + + + Download video + Menu option triggering video preload + Pobierz wideo + + + Cancel download + Menu option canceling pending/in progress video preload + Anuluj pobieranie + + + Pause download + Menu option allowing the user to pause video download + Wstrzymaj pobieranie + + + Resume download + Menu option allowing the user to resume video download + Wznów pobieranie + + + Remove download + Menu option allowing the user to remove downloaded video + Usuń pobrany plik + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + Anulowanie pobierania + + + Removing download + Remorse popup message telling the user video download will be removed + Usuwanie pobranego pliku + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + Kasowanie pamięci podręcznej + + + Cache + Label for menu option showing cache settings page + Pamięć podręczna + + + Download + Label for menu option showing video download settings page + Pobierz + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + Integracja z kontem YouTube + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + Pozwól YTPlayer'owi zarządzać kontem użytkownika YouTube. + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Kanał zasubskrybowany + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + Zrezygnuj z subskrypcji kanału + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Subskrypcja kanału zakończona + + + Copy link to clipboard + Menu option copying video link to clipboard + Skopiuj link do schowka + + + Link copied + Notification summary informing the user link was copied to clipboard + Odnośnik skopiowany + + + Open link from clipboard + Menu opion for opening video links from clipboard + Otwórz odnośnik ze schowka + + + Open in browser + Menu option opening YouTube video page in a web browser + Otwórz w przeglądarce + + + Browser channel + menu option allowing the user to browser YouTube channel + Przeglądaj kanał + + + No video streams available + Notification summary informing the user direct video playback is not possible + Brak strumieni wideo + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + Nie udało się znaleźć prawidłowego strumienia wideo + + + Launching browser + Message informing the user web browser is being launched + Uruchamianie przeglądarki + + + Clear history + Menu option allowing the user to clear search history + Skasuj historię + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + Kasowanie historii + + + Search settings + Search settings page title + Ustawienia szukania + + + Suggestion source + Label for the search suggestion engine combo box + Źródło sugestii + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Historia wyszukiwania + + + Search + Label for menu option showing search settings page + Szukaj + + + Save log + Menu action allowing the user to save application log + Zapisz dziennik + + + Saving log + Remorse popup message telling the user log file will be saved + Zapisywanie dziennika + + + Log saved + Body of notification informing the user application log was saved + Dziennik zapisany + + + View logs + Label for menu option showing application log viewer + Obejrzyj dziennik + + + Language settings + Title of language settings page + Ustawienia języka + + + Language + Label for menu option showing application language settings page + Język + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Zmienić język na %1? + + + Translations + Label for button showing application translation credits page + Tłumaczenia + + + Translations + Title of translation credits page + Tłumaczenia + + + Channels + Label for channels section indicator in main menu + Kanały + + + Videos + Main menu label indicating videos section of the page + Wideo + + + Watched recently + Menu opion showing recently watched videos page + Ostatnio oglądane + + + Watched recently + Title for recently watched videos page + Ostatnio oglądane + + + Favorites + Menu option showing video favorites page + Ulubione + + + Favorites + Title for favorite videos page + Ulubione + + + Hide search + Menu option allowing the user to hide search field + Ukryj wyszukiwanie + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Usuwanie ulubionego + + + Player settings + Title of video player settings page + Ustawienia odtwarzacza + + + Player + Label for menu option showing video player settings page + Odtwarzacz + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Szukanie strumieni + + + Buffering: %1% + Media player status indicating content is buffering + Buforowanie %1% + + + Loading + Media player status indicating content is loading + Ładowanie + + + Stalled + Media player status indicating content loading has stalled + Zatrzymane + + + Invalid media + Media player status indicating invalid content type + Niewłaściwe media + + + Controls hide delay + Label for slider changing video player controls hide delay + Opóźnienie ukrycia kontrolek + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Auto pauza przy deaktywacji + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + Automatycznie pauzuj wideo gdy aplikacja jest deaktywowana. + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Domyślna jakość przy WiFi + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Domyślna jakość na komórkowym + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Wczesne ładowanie wideo + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + Zacznij ładować dane zanim zostanie uaktywniony odtwarzacz + + + Always + Menu option allowing the player to always preaload video data. + Zawsze + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Tylko WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Tylko komórkowe + + + Never + Menu option disallowing the player to always preaload video data. + Nigdy + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Brak obrazka + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Brak źródeł! + + + Video no longer available + Notification summary informing the user video is no longer available. + Film niedostępny + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + Film został usunięty z YouTube + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + Kanał niedostępny + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Pomóż w tłumaczeniu YTPlayera + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/translations/pt_BR.ts b/translations/pt_BR.ts new file mode 100644 index 0000000..4856c44 --- /dev/null +++ b/translations/pt_BR.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Categorias de vídeos + + + Search + Label of video search text field + Pesquisa + + + Search + Menu option to show search page + Pesquisa + + + Settings + Settings page title + Configurações + + + Settings + Menu option to show settings page + Configurações + + + About YTPlayer + Title of about page + Sobre YTPlayer + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Cliente não oficial do YouTube para o Sailfish OS + + + Version: %1 + Version label value + Versão: %1 + + + Region code: %1 + Region code field value + Código da região: %1 + + + Published on + Label for video upload date field + Publicado em + + + Duration + Label for video duration field + Duração + + + Created on + Label for youtube channel creation date field + Criado em + + + Video count + Label for channel video count field + Contagem de vídeos + + + Latest videos + Label/Title for the list of latest videos in certain category + Últimos vídeos + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + Falha ao carregar a página de autorização OAuth! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + O acesso do YouTube OAuth negado! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + Faça login com sucesso + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + A autorização OAuth falhou! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Cancelar inscrição + + + Subscribe + Inscrever + + + Categories + Menu option to show video categories page + Categorias + + + No results + Background label informing the user there are no search results + Sem resultados + + + Log viewer + Visualizador de log + + + Network Offline + Network offline screen label + Rede Offline + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Qualidade de vídeo + + + Likes + YouTube likes page title + Curtidas + + + Dislikes + YouTube dislikes page title + Descurtidas + + + Recommendations + Menu option fo show YouTube recommendations page + Recomendações + + + Subscriptions + Menu option responsible for showing user subscriptions page + Assinaturas + + + Likes + Menu option responsible for showing user likes page + Curtidas + + + Dislikes + Menu option responsible for showing user dislikes page + Descurtidas + + + Recommended for you + YouTube recommendations page title + Recomendado para você + + + Subscribed channels + YouTube subscribed channels page title + Canais inscritos + + + Latest videos + YouTube latest subscribed videos page title + Últimos vídeos + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Últimos vídeos + + + Retry + Label of network connection retry button + Repetir + + + About + Menu option to show about page + Sobre + + + View license + Button for showing license viewer page + Ver licença + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer está licenciado sob a licença BSD de 3 cláusulas + + + Third party software + Label for button showing third party software listing page + Software de terceiros + + + License + License viewer page title + Licença + + + Third party software + Third party software license page title + Software de terceiros + + + Signing in + Information label informing the user YouTube sign in process is in progress + Entrando + + + Search options + Search options page title + Opções de busca + + + Advanced + Generic options menu/button label + Avançado + + + Result type + Label for YouTube content type search combo box + Tipo de resultado + + + Any + Label for generic option menu matching any content type + Qualquer + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Canal + + + Video + Label for menu option indicating YouTube video content type + Vídeo + + + High definition + Label for high video quality menu option + Alta definição + + + Standard definition + Label for standard video quality menu option + Definição padrão + + + Video duration + Label for video duration combo box + Duração do vídeo + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + Mais de 20 minutos + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + Entre 4 e 20 minutos + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + Menos de 4 minutos + + + Video type + Label for video type combo box + Tipo de vídeo + + + Episode + Label for episode video type + Episódio + + + Movie + Label for movie video type + Filme + + + Video license + Label for video license combo box + Licença de vídeo + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + Youtube + + + Event Type + Label for video event type combo box + Tipo de evento + + + Completed + Label for completed event type option + Concluído + + + Live + Label for live event type option + Live + + + Upcoming + Label for upcoming event type option + Próximos + + + Order by + Label for search result ordering combo box + Ordenar por + + + Relevance + Label for relevance ordering menu option + Relevância + + + Date + Label for date ordering menu option + Data + + + Rating + Label for rating ordering menu option + Avaliação + + + Title + Label for title ordering menu option + Título + + + Video count + Label for video count ordering menu option + Contagem de vídeos + + + View count + Label for view count ordering menu option + Ver contagem + + + Safe search + Label for safe search combo box + Pesquisa segura + + + Moderate + Label for moderate content search filtering option + Moderado + + + None + Label for no search content filtering menu option + Nenhum + + + Strict + Label for strict search content filtering menu option + Estrito + + + Published before + Label for published before search option menu + Publicado antes + + + Published after + Label for published after search option MenuItem + Publicado após + + + Play + Label for video play button. + Play + + + Clear cache + Menu option to clear application caches + Limpar cache + + + Image cache size + Label for image cache size slider + Tamanho do cache de imagem + + + Current usage + Label for current cache usage label + Uso atual + + + YouTube API response cache size + Label for YouTube API response cache size slider + Tamanho do cache de resposta da API do YouTube + + + Download queued + "Label indicating video was queued for preload" + Download na fila + + + Remove + Menu action to remove the element from the list + Remover + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + Sem vídeos + + + Downloaded + Label indicating the video was downloaded to local device storage + Baixado + + + Cache settings + Title of cache settings page + Configurações de cache + + + Download paused + "Label indicating video download was paused" + Download pausado + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + Baixando: %1% + + + Video download finished + Notification summary informing the user video download has been finished + Download de vídeo terminado + + + Video download failed + Notification summary informing the user video download has failed + Falha no download de vídeo + + + Downloads + Menu option showing downloaded videos page + Download + + + Downloaded videos + Title of downloaded videos page + Vídeos baixados + + + Download settings + Title of video download settings pge + Configurações de downloads + + + Preferred video quality + Label for preferred video quality selection combobox + Qualidade de vídeo preferencial + + + Connection type + Label for video download connection type combobox + Tipo de conexão + + + Automatically resume downloads + Label for video download auto resume switch in settings + Retomar automaticamente as transferências + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + Na inicialização, retome todos as transferências que estavam em fila ou em andamento quando YTPlayer foi fechado. + + + Paused + Label for video download staus indicator telling the user download is paused + Pausado + + + Queued + Enfileiradas + + + Resume + Menu action to resume paused video download + Retornar + + + Pause + Menu action to pause in progress video download + Pausa + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Somente WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi + Dados móveis + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Somente dados móveis + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + Max. transferências simultâneas + + + Cancel + Menu action to cancel paused/queued video download + Cancelar + + + Download video + Menu option triggering video preload + Baixar vídeo + + + Cancel download + Menu option canceling pending/in progress video preload + Cancelar a transferência + + + Pause download + Menu option allowing the user to pause video download + Pausar download + + + Resume download + Menu option allowing the user to resume video download + Retornar download + + + Remove download + Menu option allowing the user to remove downloaded video + Remover download + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + Cancelando download + + + Removing download + Remorse popup message telling the user video download will be removed + Removendo download + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + Apagando o cache + + + Cache + Label for menu option showing cache settings page + Cache + + + Download + Label for menu option showing video download settings page + Download + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + Integração da conta do YouTube + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + Permitir que o YTPlayer gerencie a conta de usuário do YouTube. + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + Canal inscrito + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + Cancelar a inscrição de canal + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + Canal cancelado + + + Copy link to clipboard + Menu option copying video link to clipboard + Copiar o link para a área de transferência + + + Link copied + Notification summary informing the user link was copied to clipboard + Link copiado + + + Open link from clipboard + Menu opion for opening video links from clipboard + Abrir link da área de transferência + + + Open in browser + Menu option opening YouTube video page in a web browser + Abra no navegador + + + Browser channel + menu option allowing the user to browser YouTube channel + Procurar canal + + + No video streams available + Notification summary informing the user direct video playback is not possible + Não há stream de vídeo disponíveis + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + YTPlayer falhou ao encontrar streaming de vídeo utilizáveis + + + Launching browser + Message informing the user web browser is being launched + Abrindo o navegador + + + Clear history + Menu option allowing the user to clear search history + Apagar o histórico + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + Limpando o histórico + + + Search settings + Search settings page title + Configurações de pesquisa + + + Suggestion source + Label for the search suggestion engine combo box + Fonte de sugestão + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + Histórico de busca + + + Search + Label for menu option showing search settings page + Pesquisa + + + Save log + Menu action allowing the user to save application log + Salvar registro + + + Saving log + Remorse popup message telling the user log file will be saved + Salvando Log + + + Log saved + Body of notification informing the user application log was saved + Registro salvo + + + View logs + Label for menu option showing application log viewer + Ver logs + + + Language settings + Title of language settings page + Configurações de linguagem + + + Language + Label for menu option showing application language settings page + Idioma + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + Alterar idioma para %1? + + + Translations + Label for button showing application translation credits page + Traduções + + + Translations + Title of translation credits page + Traduções + + + Channels + Label for channels section indicator in main menu + Canais + + + Videos + Main menu label indicating videos section of the page + Vídeos + + + Watched recently + Menu opion showing recently watched videos page + Assistido recentemente + + + Watched recently + Title for recently watched videos page + Assistido recentemente + + + Favorites + Menu option showing video favorites page + Favoritos + + + Favorites + Title for favorite videos page + Favoritos + + + Hide search + Menu option allowing the user to hide search field + Ocultar pesquisa + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + Removendo favoritos + + + Player settings + Title of video player settings page + Configurações do Player + + + Player + Label for menu option showing video player settings page + Player + + + Looking for streams + Status message indicating video player is looking for audio/video streams + Procurando por streaming + + + Buffering: %1% + Media player status indicating content is buffering + Carregando %1% + + + Loading + Media player status indicating content is loading + Carregando + + + Stalled + Media player status indicating content loading has stalled + Parado + + + Invalid media + Media player status indicating invalid content type + Mídia inválida + + + Controls hide delay + Label for slider changing video player controls hide delay + Controla ocultar o atraso + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + Pausa automática quando desativada + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + Pausar automaticamente a reprodução de vídeo quando o aplicativo é desativado. + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + Qualidade de vídeo padrão quando o WiFi está em uso. + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + Qualidade padrão de vídeo ao utilizar dados moveis. + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + Pré-carregamento de vídeo + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + Comece a pré-carregar dados de vídeo antes que a página do player seja ativada. + + + Always + Menu option allowing the player to always preaload video data. + Sempre + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + Somente WiIFI + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + Somente dados móveis + + + Never + Menu option disallowing the player to always preaload video data. + Nunca + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Sem imagem + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Sem streaming! + + + Video no longer available + Notification summary informing the user video is no longer available. + Vídeo não mais disponível + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + O vídeo foi removido do YouTube + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + Canal não mais disponível + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + Traduzir o YTPlayer + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/languages/ru_RU.ts b/translations/ru_RU.ts similarity index 91% rename from languages/ru_RU.ts rename to translations/ru_RU.ts index 62fc4a8..93a6bda 100644 --- a/languages/ru_RU.ts +++ b/translations/ru_RU.ts @@ -1,6 +1,8 @@ - + + + - + Video categories Video categories page title @@ -78,7 +80,7 @@ Не удалось загрузить страницу авторизации OAuth! - YouTube OAuth access denined! + YouTube OAuth access denied! Message informing the user about YouTube OAuth autorization denial Доступ запрещен! @@ -117,9 +119,7 @@ Network Offline - Network offline screen label ----------- -Network offline screen label + Network offline screen label Нет сети @@ -191,16 +191,13 @@ Label for menu option allowing the user to change video quality View license - Button for showing license viewer page ----------- -Button for showing license viewer page + Button for showing license viewer page Лицензия YTPlayer is licensed under 3-clause BSD License Label displaying YTPlayer licensing information - YTPlayer распространяется под лицензией -3-clause BSD + YTPlayer распространяется на условиях 3-clause BSD Third party software @@ -416,9 +413,7 @@ Label for channel name text field Current usage - Label for current cache usage label ----------- -Label for current cache usage label + Label for current cache usage label Сейчас используется @@ -433,9 +428,7 @@ Label for current cache usage label Remove - Menu action to remove the element from the list ----------- -Menu action to remove the element from the list + Menu action to remove the element from the list Удалить @@ -508,7 +501,7 @@ Label informing the user there are no watched recently videos Автоматически продолжать загрузки - On startup, resume all downloads which were either quened or in progress when YTPlayer was closed. + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. Description of video download auto resume switch in settings Автоматически продолжать все незавершенные загрузки или загрузки в очереди при старте. @@ -583,16 +576,12 @@ Label informing the user there are no watched recently videos Cancelling download - Remorse popup message telling the user video download will be cancelled ----------- -Remorse popup message telling the user video download will be cancelled + Remorse popup message telling the user video download will be cancelled Отмена загрузки Removing download - Remorse popup message telling the user video download will be removed ----------- -Remorse popup message telling the user video download will be removed + Remorse popup message telling the user video download will be removed Удаление загрузки @@ -613,12 +602,12 @@ Remorse popup message telling the user video download will be removed YouTube account integration Label of switch activating/deactivating YouTube account integration - Интеграция с аккаунтом YouTube + Использовать учётную запись YouTube Allow YTPlayer to manage YouTube user account. Description of switch activating/deactivating YouTube account integration - Разрешить YTPlayer управлять аккаунтом YouTube. + Разрешить YTPlayer управлять учётной записью YouTube. Channel subscribed @@ -662,7 +651,6 @@ Remorse popup message telling the user video download will be removed No video streams available - Direct video playback not possible Notification summary informing the user direct video playback is not possible Видео недоступно @@ -714,22 +702,22 @@ Remorse popup message telling the user video download will be removed Save log Menu action allowing the user to save application log - Сохранить лог + Сохранить журнал Saving log Remorse popup message telling the user log file will be saved - Сохранение лога + Сохранение журнала Log saved Body of notification informing the user application log was saved - Лог сохранен + Журнал сохранен View logs Label for menu option showing application log viewer - Просмотр логов + Просмотр журнала Language settings @@ -788,10 +776,8 @@ Remorse popup message telling the user video download will be removed Hide search - Menu option allowing the user to hide search field ----------- -Menu option allowing the user to hide search field - Спрятать строку поиска + Menu option allowing the user to hide search field + Убрать строку поиска Removing favorite @@ -835,7 +821,7 @@ Menu option allowing the user to hide search field Controls hide delay - Lael for slider changing video player controls hide delay + Label for slider changing video player controls hide delay Показывать меню @@ -845,7 +831,6 @@ Menu option allowing the user to hide search field Automatically pause video playback when application is deactivated. - Automatically pause video playback when application is deactivated Description of video auto pause option switch. Автоматически поставить на паузу при сворачивании приложения. @@ -891,7 +876,7 @@ Menu option allowing the user to hide search field No image - Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. Нет заставки @@ -901,13 +886,11 @@ Menu option allowing the user to hide search field Video no longer available - Video no longer available! Notification summary informing the user video is no longer available. Видео больше недоступно Video was removed from YouTube - Video was removed from YouTube. Notification body explaining why video is no longer available. Видео удалено с YouTube @@ -921,5 +904,61 @@ Menu option allowing the user to hide search field Menu option opening a link to YTPlayer translation page on Transifex. Перевести YTPlayer + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + - \ No newline at end of file + diff --git a/languages/sv.ts b/translations/sv.ts similarity index 91% rename from languages/sv.ts rename to translations/sv.ts index 6c7e55e..887b4f7 100644 --- a/languages/sv.ts +++ b/translations/sv.ts @@ -1,6 +1,8 @@ - + + + - + Video categories Video categories page title @@ -77,7 +79,7 @@ Kunde inte läsa in inloggningssidan! - YouTube OAuth access denined! + YouTube OAuth access denied! Message informing the user about YouTube OAuth autorization denial YouTube-åtkomst nekades! @@ -116,9 +118,7 @@ Network Offline - Network offline screen label ----------- -Network offline screen label + Network offline screen label Nätverk nedkopplat @@ -190,9 +190,7 @@ Label for menu option allowing the user to change video quality View license - Button for showing license viewer page ----------- -Button for showing license viewer page + Button for showing license viewer page Visa licens @@ -414,9 +412,7 @@ Label for channel name text field Current usage - Label for current cache usage label ----------- -Label for current cache usage label + Label for current cache usage label Aktuell användning @@ -431,9 +427,7 @@ Label for current cache usage label Remove - Menu action to remove the element from the list ----------- -Menu action to remove the element from the list + Menu action to remove the element from the list Ta bort @@ -506,7 +500,7 @@ Label informing the user there are no watched recently videos Återuppta nedladdningar automatiskt - On startup, resume all downloads which were either quened or in progress when YTPlayer was closed. + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. Description of video download auto resume switch in settings Vid uppstart återupptas alla nedladdningar som var antingen köade eller under nedladdning när YTPlayer stängdes. @@ -581,16 +575,12 @@ Label informing the user there are no watched recently videos Cancelling download - Remorse popup message telling the user video download will be cancelled ----------- -Remorse popup message telling the user video download will be cancelled + Remorse popup message telling the user video download will be cancelled Avbryter nedladdning Removing download - Remorse popup message telling the user video download will be removed ----------- -Remorse popup message telling the user video download will be removed + Remorse popup message telling the user video download will be removed Tar bort nedladdning @@ -660,7 +650,6 @@ Remorse popup message telling the user video download will be removed No video streams available - Direct video playback not possible Notification summary informing the user direct video playback is not possible Inga filmtrömmar tillgängliga @@ -786,9 +775,7 @@ Remorse popup message telling the user video download will be removed Hide search - Menu option allowing the user to hide search field ----------- -Menu option allowing the user to hide search field + Menu option allowing the user to hide search field Dölj sökfält @@ -833,7 +820,7 @@ Menu option allowing the user to hide search field Controls hide delay - Lael for slider changing video player controls hide delay + Label for slider changing video player controls hide delay Kontrollfördröjning @@ -843,7 +830,6 @@ Menu option allowing the user to hide search field Automatically pause video playback when application is deactivated. - Automatically pause video playback when application is deactivated Description of video auto pause option switch. Pausa uppspelning automatiskt när programmet inaktiveras. @@ -889,7 +875,7 @@ Menu option allowing the user to hide search field No image - Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. Ingen bild @@ -899,13 +885,11 @@ Menu option allowing the user to hide search field Video no longer available - Video no longer available! Notification summary informing the user video is no longer available. Filmen inte tillgänglig längre Video was removed from YouTube - Video was removed from YouTube. Notification body explaining why video is no longer available. Filmen har tagist bort från YouTube @@ -919,5 +903,61 @@ Menu option allowing the user to hide search field Menu option opening a link to YTPlayer translation page on Transifex. Översätt YTPlayer + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + Kontrollerar lokal version... + + + Checking remote version... + Shown while checking for remote version of youtube-dl + Kontrollerar fjärrversion... + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + Kunde inte söka uppdateringar + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + Laddar ner youtube-dl... + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + Youtube-dl är uppdaterad + + + Updating youtube-dl failed + Shown after youtube-dl update failed + Uppdatering av youtube-dl misslyckades + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + Uppdatering av youtube-dl slutfördes + + + Update youtube-dl + MenuItem text for updating youtube-dl + Uppdatera youtube-dl + - \ No newline at end of file + diff --git a/translations/tr.ts b/translations/tr.ts new file mode 100644 index 0000000..bfcdc65 --- /dev/null +++ b/translations/tr.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + Video kategorileri + + + Search + Label of video search text field + Ara + + + Search + Menu option to show search page + Ara + + + Settings + Settings page title + Ayarlar + + + Settings + Menu option to show settings page + Ayarlar + + + About YTPlayer + Title of about page + YTPlayer Hakkında + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Sailfish OS için resmi olmayan YouTube istemcisi + + + Version: %1 + Version label value + Sürüm: %1 + + + Region code: %1 + Region code field value + + + + Published on + Label for video upload date field + Yayınlanma zamanı + + + Duration + Label for video duration field + Süre + + + Created on + Label for youtube channel creation date field + Oluşturulma zamanı + + + Video count + Label for channel video count field + Video sayısı + + + Latest videos + Label/Title for the list of latest videos in certain category + Son Eklenen Videolar + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + OAuth yetkilendirme sayfa yüklemesi başarısız! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + YouTube OAuth erişim reddedildi! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + Başarılı bir şekilde giriş yapıldı + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + OAuth Erişim izni reddedildi! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + Aboneliği bitir + + + Subscribe + Abone ol + + + Categories + Menu option to show video categories page + Kategoriler + + + No results + Background label informing the user there are no search results + Hiç bir sonuç bulunamadı + + + Log viewer + Log görüntüleyici + + + Network Offline + Network offline screen label + Ağ Çevrimdışı + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + Video kalitesi + + + Likes + YouTube likes page title + Beğeniler + + + Dislikes + YouTube dislikes page title + Beğenilmeyenler + + + Recommendations + Menu option fo show YouTube recommendations page + + + + Subscriptions + Menu option responsible for showing user subscriptions page + Abonelikler + + + Likes + Menu option responsible for showing user likes page + Beğeniler + + + Dislikes + Menu option responsible for showing user dislikes page + Beğenilmeyenler + + + Recommended for you + YouTube recommendations page title + Sizin için tavsiye edilen + + + Subscribed channels + YouTube subscribed channels page title + Abone Olduğum kanallar + + + Latest videos + YouTube latest subscribed videos page title + Son eklenen videolar + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + Son eklenen videolar + + + Retry + Label of network connection retry button + Tekrar dene + + + About + Menu option to show about page + Hakkında + + + View license + Button for showing license viewer page + Lisans bilgisi + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer 3-clause BSD Lisansı altındadır + + + Third party software + Label for button showing third party software listing page + Üçüncü parti yazılım + + + License + License viewer page title + Lisans bilgisi + + + Third party software + Third party software license page title + Üçüncü parti yazılım + + + Signing in + Information label informing the user YouTube sign in process is in progress + Oturum aç + + + Search options + Search options page title + Arama seçenekleri + + + Advanced + Generic options menu/button label + Gelişmiş + + + Result type + Label for YouTube content type search combo box + Sonuç türü + + + Any + Label for generic option menu matching any content type + Her türlü + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + Kanal + + + Video + Label for menu option indicating YouTube video content type + Video + + + High definition + Label for high video quality menu option + Yüksek çözünürlükü + + + Standard definition + Label for standard video quality menu option + Standart çözünürlüklü + + + Video duration + Label for video duration combo box + Video süresi + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + 20 dakikadan daha uzun + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + 4 ile 20 dakika arası + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + 4 Dakikadan az + + + Video type + Label for video type combo box + Video türü + + + Episode + Label for episode video type + Bölüm + + + Movie + Label for movie video type + Film + + + Video license + Label for video license combo box + Video lisansı + + + Creative Commons + Label for Creative Commons license type + Creative Commons + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + Etkinlik türü + + + Completed + Label for completed event type option + Tamamlanan + + + Live + Label for live event type option + Canlı + + + Upcoming + Label for upcoming event type option + Yaklaşan + + + Order by + Label for search result ordering combo box + Şuna göre sırala + + + Relevance + Label for relevance ordering menu option + Öne çıkanlar + + + Date + Label for date ordering menu option + Tarih + + + Rating + Label for rating ordering menu option + Reyting + + + Title + Label for title ordering menu option + Başlık + + + Video count + Label for video count ordering menu option + Video sayısı + + + View count + Label for view count ordering menu option + İzlenme sayısı + + + Safe search + Label for safe search combo box + Güvenli arama + + + Moderate + Label for moderate content search filtering option + Orta dereceli + + + None + Label for no search content filtering menu option + Yok + + + Strict + Label for strict search content filtering menu option + Sıkı + + + Published before + Label for published before search option menu + Daha önce yayınlanan + + + Published after + Label for published after search option MenuItem + En son yayınlanan + + + Play + Label for video play button. + Oynat + + + Clear cache + Menu option to clear application caches + Önbelleği temizle + + + Image cache size + Label for image cache size slider + Görüntü önbellek boyutu + + + Current usage + Label for current cache usage label + Geçerli kullanım + + + YouTube API response cache size + Label for YouTube API response cache size slider + + + + Download queued + "Label indicating video was queued for preload" + + + + Remove + Menu action to remove the element from the list + Kaldır + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + + + + Downloaded + Label indicating the video was downloaded to local device storage + İndirilenler + + + Cache settings + Title of cache settings page + Önbellek ayarları + + + Download paused + "Label indicating video download was paused" + İndirme duraklatıldı + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + %1% İndirildi + + + Video download finished + Notification summary informing the user video download has been finished + Video indirildi + + + Video download failed + Notification summary informing the user video download has failed + Video indirme başarısız + + + Downloads + Menu option showing downloaded videos page + İndirilen + + + Downloaded videos + Title of downloaded videos page + İndirilen videolar + + + Download settings + Title of video download settings pge + İndirme ayarları + + + Preferred video quality + Label for preferred video quality selection combobox + Tercih edilen video kalitesi + + + Connection type + Label for video download connection type combobox + Bağlantı türü + + + Automatically resume downloads + Label for video download auto resume switch in settings + + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + + + + Paused + Label for video download staus indicator telling the user download is paused + Duraklatıldı + + + Queued + Kuyruğa eklendi + + + Resume + Menu action to resume paused video download + Devam et + + + Pause + Menu action to pause in progress video download + Duraklat + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + Sadece WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + WiFi + Mobil veri + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + Sadece mobil veri + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + + + + Cancel + Menu action to cancel paused/queued video download + + + + Download video + Menu option triggering video preload + + + + Cancel download + Menu option canceling pending/in progress video preload + + + + Pause download + Menu option allowing the user to pause video download + + + + Resume download + Menu option allowing the user to resume video download + + + + Remove download + Menu option allowing the user to remove downloaded video + + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + + + + Removing download + Remorse popup message telling the user video download will be removed + + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + + + + Cache + Label for menu option showing cache settings page + + + + Download + Label for menu option showing video download settings page + + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + + + + Copy link to clipboard + Menu option copying video link to clipboard + + + + Link copied + Notification summary informing the user link was copied to clipboard + + + + Open link from clipboard + Menu opion for opening video links from clipboard + + + + Open in browser + Menu option opening YouTube video page in a web browser + Tarayıcıda açaç + + + Browser channel + menu option allowing the user to browser YouTube channel + + + + No video streams available + Notification summary informing the user direct video playback is not possible + + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + + + + Launching browser + Message informing the user web browser is being launched + + + + Clear history + Menu option allowing the user to clear search history + + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + + + + Search settings + Search settings page title + + + + Suggestion source + Label for the search suggestion engine combo box + + + + Google + Label for Google based search suggestion engine + + + + Search history + Label for history based search suggestion engine + + + + Search + Label for menu option showing search settings page + Ara + + + Save log + Menu action allowing the user to save application log + + + + Saving log + Remorse popup message telling the user log file will be saved + + + + Log saved + Body of notification informing the user application log was saved + + + + View logs + Label for menu option showing application log viewer + + + + Language settings + Title of language settings page + + + + Language + Label for menu option showing application language settings page + Dil + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + + + + Translations + Label for button showing application translation credits page + + + + Translations + Title of translation credits page + + + + Channels + Label for channels section indicator in main menu + + + + Videos + Main menu label indicating videos section of the page + + + + Watched recently + Menu opion showing recently watched videos page + + + + Watched recently + Title for recently watched videos page + + + + Favorites + Menu option showing video favorites page + + + + Favorites + Title for favorite videos page + + + + Hide search + Menu option allowing the user to hide search field + + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + + + + Player settings + Title of video player settings page + + + + Player + Label for menu option showing video player settings page + + + + Looking for streams + Status message indicating video player is looking for audio/video streams + + + + Buffering: %1% + Media player status indicating content is buffering + + + + Loading + Media player status indicating content is loading + Yükleniyor + + + Stalled + Media player status indicating content loading has stalled + + + + Invalid media + Media player status indicating invalid content type + + + + Controls hide delay + Label for slider changing video player controls hide delay + + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + + + + Always + Menu option allowing the player to always preaload video data. + Her zaman + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + sadece WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + sadece Mobil + + + Never + Menu option disallowing the player to always preaload video data. + Hiçbir zaman + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + Görüntü yok + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + Yayın yok! + + + Video no longer available + Notification summary informing the user video is no longer available. + Video artık mevcut değil + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + Video YouTube tarafından silinmiştir + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + Kanal artık mevcut değil + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + YTPlayer'i tercüme et + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + + diff --git a/translations/translations.json b/translations/translations.json new file mode 100644 index 0000000..b537223 --- /dev/null +++ b/translations/translations.json @@ -0,0 +1,149 @@ +{ + "default" : "en_GB", + "items" : [ + { + "name" : "Català", + "code" : "ca", + "authors" : [ + "Agustí Clara" + ] + }, + { + "name" : "Deutsch", + "code" : "de", + "authors" : [ + "Björn Bidar ", + "Pascal Schmid", + "8bitp" + ] + }, + { + "name" : "English (UK)", + "code" : "en_GB", + "authors" : [ + "Piotr Tworek " + ] + }, + { + "name" : "Español", + "code" : "es", + "authors" : [ + "Carmen Fernández B." + ] + }, + { + "name" : "Français (France)", + "code" : "fr_FR", + "authors" : [ + "Rudy Nappée", + "lutinotmalin" + ] + }, + { + "name" : "Italiano (Italia)", + "code" : "it_IT", + "authors" : [ + "Gio Scino" + ] + }, + { + "name" : "Magyar (Magyarország)", + "code" : "hu_HU", + "authors" : [ + "Veronika Simonkay", + "leoka" + ] + }, + { + "name" : "Nederlands (Nederland)", + "code" : "nl_NL", + "authors" : [ + "Heimen Stoffels" + ] + }, + { + "name" : "Polski (Polska)", + "code" : "pl_PL", + "authors": [ + "pemekcz" + ] + }, + { + "name" : "Português (Brasil)", + "code" : "pt_BR", + "authors": [ + "Rafael Vinicius Leite Mendes", + "Ivanor Paula" + ] + }, + { + "name" : "Suomi (Suomi)", + "code" : "fi_FI", + "authors" : [ + "Murtsi", + "Ari Järviö", + "Eero Sytelä", + "Matti Viljanen", + "Pauli Suomu", + "Simo Ruoho" + ] + }, + { + "name" : "Svenska", + "code" : "sv", + "authors" : [ + "Åke Engelbrektson " + ] + }, + { + "name" : "Türkçe", + "code" : "tr", + "authors" : [ + "myusdat" + ] + }, + { + "name" : "Čeština (Česká republika)", + "code" : "cs_CZ", + "authors" : [ + "Bobsik" + ] + }, + { + "name" : "Ελληνικά", + "code" : "el", + "authors" : [ + "Dimitrios Glentadakis" + ] + }, + { + "name" : "Русский", + "code" : "ru_RU", + "authors" : [ + "Петр Цымбарович ", + "Dmitrij D. Czarkoff " + ] + }, + { + "name" : "日本語", + "code" : "ja", + "authors" : [ + "Yamada Takashi" + ] + }, + { + "name" : "简体中文 (中国)", + "code" : "zh_CN", + "authors" : [ + "JIMMY CHEN" + ] + }, + { + "name" : "繁體中文 (台灣)", + "code" : "zh_TW", + "authors" : [ + "JIMMY CHEN" + ] + } + ] +} diff --git a/translations/translations.pri b/translations/translations.pri new file mode 100644 index 0000000..bca639e --- /dev/null +++ b/translations/translations.pri @@ -0,0 +1,41 @@ +# Copyright (c) 2015 Piotr Tworek. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE.YTPlayer file. + +TRANSLATIONS += \ + translations/ca.ts \ + translations/cs_CZ.ts \ + translations/de.ts \ + translations/el.ts \ + translations/en_GB.ts \ + translations/es.ts \ + translations/fi_FI.ts \ + translations/fr_FR.ts \ + translations/hu_HU.ts \ + translations/it_IT.ts \ + translations/ja.ts \ + translations/nl_NL.ts \ + translations/pl_PL.ts \ + translations/pt_BR.ts \ + translations/ru_RU.ts \ + translations/sv.ts \ + translations/tr.ts \ + translations/zh_CN.ts \ + translations/zh_TW.ts + +OTHER_FILES += translations/translations.json + +updateqm.input = TRANSLATIONS +updateqm.output = $$top_builddir/translations/${QMAKE_FILE_BASE}.qm +updateqm.commands = \ + lrelease -idbased ${QMAKE_FILE_IN} \ + -qm $$top_builddir/translations/${QMAKE_FILE_BASE}.qm +updateqm.CONFIG += no_link +QMAKE_EXTRA_COMPILERS += updateqm + +PRE_TARGETDEPS += compiler_updateqm_make_all + +localization.files = $$files($$top_builddir/translations/*.qm) +localization.path = /usr/share/$${TARGET}/translations + +INSTALLS += localization diff --git a/translations/zh_CN.ts b/translations/zh_CN.ts new file mode 100644 index 0000000..67d535f --- /dev/null +++ b/translations/zh_CN.ts @@ -0,0 +1,962 @@ + + + + + + + Video categories + Video categories page title + 视频类别 + + + Search + Label of video search text field + 搜索 + + + Search + Menu option to show search page + 搜索 + + + Settings + Settings page title + 设置 + + + Settings + Menu option to show settings page + 设置 + + + About YTPlayer + Title of about page + 关于 YTPlater + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + 旗鱼系统非官方 YouTube 客户端 + + + Version: %1 + Version label value + 版本: %1 + + + Region code: %1 + Region code field value + 地区代码:: %1 + + + Published on + Label for video upload date field + 发布于 + + + Duration + Label for video duration field + 片长 + + + Created on + Label for youtube channel creation date field + 建立于 + + + Video count + Label for channel video count field + 观看次数 + + + Latest videos + Label/Title for the list of latest videos in certain category + 最新视频 + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + 无法加载 OAuth 授权页面! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + YouTube OAuth 访问被拒绝! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + 登录成功 + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + OAuth 授权失败! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + 退订 + + + Subscribe + 订阅 + + + Categories + Menu option to show video categories page + 类别 + + + No results + Background label informing the user there are no search results + 无搜索结果 + + + Log viewer + 日志查看器 + + + Network Offline + Network offline screen label + 网络离线 + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + 画质 + + + Likes + YouTube likes page title + 顶过的视频 + + + Dislikes + YouTube dislikes page title + 踩过的视频 + + + Recommendations + Menu option fo show YouTube recommendations page + 推荐视频 + + + Subscriptions + Menu option responsible for showing user subscriptions page + 订阅内容 + + + Likes + Menu option responsible for showing user likes page + 顶过的视频 + + + Dislikes + Menu option responsible for showing user dislikes page + 踩过的视频 + + + Recommended for you + YouTube recommendations page title + 为您推荐 + + + Subscribed channels + YouTube subscribed channels page title + 已订阅 + + + Latest videos + YouTube latest subscribed videos page title + 最新视频 + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + 最新视频 + + + Retry + Label of network connection retry button + 重试 + + + About + Menu option to show about page + 关于 + + + View license + Button for showing license viewer page + 查看许可协议 + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer 采用 3-clause BSD 许可协议进行许可 + + + Third party software + Label for button showing third party software listing page + 第三方软件 + + + License + License viewer page title + 许可协议 + + + Third party software + Third party software license page title + 第三方软件 + + + Signing in + Information label informing the user YouTube sign in process is in progress + 登录中 + + + Search options + Search options page title + 搜索选项 + + + Advanced + Generic options menu/button label + 高级选项 + + + Result type + Label for YouTube content type search combo box + 结果类型 + + + Any + Label for generic option menu matching any content type + 任何 + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + 频道 + + + Video + Label for menu option indicating YouTube video content type + 视频 + + + High definition + Label for high video quality menu option + 高清 + + + Standard definition + Label for standard video quality menu option + 标清 + + + Video duration + Label for video duration combo box + 片长 + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + 超过20分钟 + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + 4至20分钟之间 + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + 少于4分钟 + + + Video type + Label for video type combo box + 视频类型 + + + Episode + Label for episode video type + + + + Movie + Label for movie video type + 电影 + + + Video license + Label for video license combo box + 视频许可协议 + + + Creative Commons + Label for Creative Commons license type + 创作共用 + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + 事件类型 + + + Completed + Label for completed event type option + 已完成 + + + Live + Label for live event type option + 直播 + + + Upcoming + Label for upcoming event type option + 即将到来 + + + Order by + Label for search result ordering combo box + 排序方式 + + + Relevance + Label for relevance ordering menu option + 关联 + + + Date + Label for date ordering menu option + 日期 + + + Rating + Label for rating ordering menu option + 评分 + + + Title + Label for title ordering menu option + 标题 + + + Video count + Label for video count ordering menu option + 视频数 + + + View count + Label for view count ordering menu option + 观看次数 + + + Safe search + Label for safe search combo box + 安全搜索 + + + Moderate + Label for moderate content search filtering option + 中等 + + + None + Label for no search content filtering menu option + + + + Strict + Label for strict search content filtering menu option + 严格 + + + Published before + Label for published before search option menu + 之前发布 + + + Published after + Label for published after search option MenuItem + 之后发布 + + + Play + Label for video play button. + 播放 + + + Clear cache + Menu option to clear application caches + 清除缓存 + + + Image cache size + Label for image cache size slider + 图像缓存大小 + + + Current usage + Label for current cache usage label + 目前用量 + + + YouTube API response cache size + Label for YouTube API response cache size slider + YouTube API响应缓存大小 + + + Download queued + "Label indicating video was queued for preload" + 下载排队 + + + Remove + Menu action to remove the element from the list + 删除 + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + 无视频 + + + Downloaded + Label indicating the video was downloaded to local device storage + 已下载 + + + Cache settings + Title of cache settings page + 缓存设置 + + + Download paused + "Label indicating video download was paused" + 下载暂停 + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + 下载中: %1% + + + Video download finished + Notification summary informing the user video download has been finished + 视频下载完成 + + + Video download failed + Notification summary informing the user video download has failed + 视频下载失败 + + + Downloads + Menu option showing downloaded videos page + 下载 + + + Downloaded videos + Title of downloaded videos page + 下载 + + + Download settings + Title of video download settings pge + 下载设置 + + + Preferred video quality + Label for preferred video quality selection combobox + 下载优先画质 + + + Connection type + Label for video download connection type combobox + 连接类型 + + + Automatically resume downloads + Label for video download auto resume switch in settings + 自动继续下载 + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + 启动时自动继续下载之前未完成的影片 + + + Paused + Label for video download staus indicator telling the user download is paused + 已暂停 + + + Queued + 等候中 + + + Resume + Menu action to resume paused video download + 继续 + + + Pause + Menu action to pause in progress video download + 暂停 + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + 仅当连接到 WLAN 时 + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + 通过任意网络 + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + 仅当连接到移动网络时 + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + 最大同时下载数 + + + Cancel + Menu action to cancel paused/queued video download + 取消 + + + Download video + Menu option triggering video preload + 下载视频 + + + Cancel download + Menu option canceling pending/in progress video preload + 取消下载 + + + Pause download + Menu option allowing the user to pause video download + 暂停下载 + + + Resume download + Menu option allowing the user to resume video download + 继续下载 + + + Remove download + Menu option allowing the user to remove downloaded video + 删除下载 + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + 正在取消下载 + + + Removing download + Remorse popup message telling the user video download will be removed + 正在删除下载 + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + 正在清除缓存 + + + Cache + Label for menu option showing cache settings page + 缓存 + + + Download + Label for menu option showing video download settings page + 下载 + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + 登录 YouTube 帐户 + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + 允许 YTPlayer 管理 YouTube 用户帐户。 + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + 已添加订阅 + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + 正在退订 + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + 已删除订阅 + + + Copy link to clipboard + Menu option copying video link to clipboard + 正在链接复制到剪贴板 + + + Link copied + Notification summary informing the user link was copied to clipboard + 已复制链接 + + + Open link from clipboard + Menu opion for opening video links from clipboard + 从剪贴板打开链接 + + + Open in browser + Menu option opening YouTube video page in a web browser + 在浏览器中打开 + + + Browser channel + menu option allowing the user to browser YouTube channel + 浏览频道 + + + No video streams available + Notification summary informing the user direct video playback is not possible + 没有可用的视频串流 + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + YTPlayer无法找到可用的视频串流 + + + Launching browser + Message informing the user web browser is being launched + 启动浏览器 + + + Clear history + Menu option allowing the user to clear search history + 清除搜索记录 + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + 正在清除搜索记录 + + + Search settings + Search settings page title + 搜索设置 + + + Suggestion source + Label for the search suggestion engine combo box + 建议来源 + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + 搜索纪录 + + + Search + Label for menu option showing search settings page + 搜索 + + + Save log + Menu action allowing the user to save application log + 保存日志 + + + Saving log + Remorse popup message telling the user log file will be saved + 保存日志中 + + + Log saved + Body of notification informing the user application log was saved + 日志已保存 + + + View logs + Label for menu option showing application log viewer + 查看日志 + + + Language settings + Title of language settings page + 语言设置 + + + Language + Label for menu option showing application language settings page + 语言 + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + 是否将语言更改为 %1 ? + + + Translations + Label for button showing application translation credits page + 翻译 + + + Translations + Title of translation credits page + 翻译 + + + Channels + Label for channels section indicator in main menu + 频道 + + + Videos + Main menu label indicating videos section of the page + 视频 + + + Watched recently + Menu opion showing recently watched videos page + 观看记录 + + + Watched recently + Title for recently watched videos page + 观看记录 + + + Favorites + Menu option showing video favorites page + 我的收藏 + + + Favorites + Title for favorite videos page + 我的收藏 + + + Hide search + Menu option allowing the user to hide search field + 关闭搜索框 + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + 正在删除我的收藏 + + + Player settings + Title of video player settings page + 播放设置 + + + Player + Label for menu option showing video player settings page + 播放器 + + + Looking for streams + Status message indicating video player is looking for audio/video streams + 寻找串流 + + + Buffering: %1% + Media player status indicating content is buffering + 缓冲中:%1% + + + Loading + Media player status indicating content is loading + 加载中 + + + Stalled + Media player status indicating content loading has stalled + 失速 + + + Invalid media + Media player status indicating invalid content type + 媒体无效 + + + Controls hide delay + Label for slider changing video player controls hide delay + 控件隐藏延迟时间 + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + 自动暂停播放 + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + 软件处于后台运行时自动暂停播放。 + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + 连接 WLAN 时的预设画质 + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + 使用移动数据时的默认画质 + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + 预加载视频 + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + 在播放页面启动前预先加载视频 + + + Always + Menu option allowing the player to always preaload video data. + 通过任意网络 + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + 仅当连接到 WLAN 时 + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + 仅当连接到移动网络时 + + + Never + Menu option disallowing the player to always preaload video data. + 绝不 + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + 找不到图像 + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + 找不到串流 + + + Video no longer available + Notification summary informing the user video is no longer available. + 视频不再可用 + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + 视频已从 YouTube 删除 + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + 频道不再可用 + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + 翻译 YTPlayer + + + Checking local version... + Shown while checking for local version of youtube-dl + 正在检测本地版本…… + + + Checking remote version... + Shown while checking for remote version of youtube-dl + 正在检测远程版本…… + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + 无法更新 + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + 正在下载 youtube-dl…… + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + Youtube-dl已更新到最新 + + + Updating youtube-dl failed + Shown after youtube-dl update failed + 更新 Youtube-dl 失败 + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + 已更新 Youtube-dl + + + Update youtube-dl + MenuItem text for updating youtube-dl + 更新 youtube-dl + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + diff --git a/translations/zh_TW.ts b/translations/zh_TW.ts new file mode 100644 index 0000000..dd866d4 --- /dev/null +++ b/translations/zh_TW.ts @@ -0,0 +1,963 @@ + + + + + + + Video categories + Video categories page title + 影片類別 + + + Search + Label of video search text field + 搜尋 + + + Search + Menu option to show search page + 搜尋 + + + Settings + Settings page title + 設定 + + + Settings + Menu option to show settings page + 設定 + + + About YTPlayer + Title of about page + 關於YTPlayer + + + Unofficial YouTube client for Sailfish OS + YTPlayer application description in about page + Sailfish OS的非官方YouTube客戶端 + + + Version: %1 + Version label value + 版本: %1 + + + Region code: %1 + Region code field value + 區碼: %1 + + + Published on + Label for video upload date field + 發布於 + + + Duration + Label for video duration field + 長度 + + + Created on + Label for youtube channel creation date field + 建立於 + + + Video count + Label for channel video count field + 影片數 + + + Latest videos + Label/Title for the list of latest videos in certain category + 最新影片 + + + Failed to load OAuth authorization page! + YouTube OAuth page loading failure message + OAuth授權頁面載入失敗! + + + YouTube OAuth access denied! + Message informing the user about YouTube OAuth autorization denial + YouTube OAuth存取被拒絕! + + + Sign in successful + Notification informing the user that YouTube sign in succeeded + 登入成功 + + + OAuth authorization failed! + Error message informing the user about OAuth authorization failure + OAuth授權失敗! + + + Unsubscribe + Menu option to unsubscribe from YouTube channel + 取消訂閱 + + + Subscribe + 訂閱 + + + Categories + Menu option to show video categories page + 類別 + + + No results + Background label informing the user there are no search results + 找不到結果 + + + Log viewer + 紀錄檢視器 + + + Network Offline + Network offline screen label + 網路離線 + + + Video quality + Label for video quality selection combo box +---------- +Label for menu option allowing the user to change video quality + 影片畫質 + + + Likes + YouTube likes page title + 喜歡的影片 + + + Dislikes + YouTube dislikes page title + 不喜歡的影片 + + + Recommendations + Menu option fo show YouTube recommendations page + 推薦影片 + + + Subscriptions + Menu option responsible for showing user subscriptions page + 訂閱內容 + + + Likes + Menu option responsible for showing user likes page + 喜歡的影片 + + + Dislikes + Menu option responsible for showing user dislikes page + 不喜歡的影片 + + + Recommended for you + YouTube recommendations page title + 推薦給您 + + + Subscribed channels + YouTube subscribed channels page title + 已訂閱的頻道 + + + Latest videos + YouTube latest subscribed videos page title + 最新影片 + + + Latest videos + Sub-Menu option responsible for showing latest subsribed videos page + 最新影片 + + + Retry + Label of network connection retry button + 重試 + + + About + Menu option to show about page + 關於 + + + View license + Button for showing license viewer page + 檢視授權條款 + + + YTPlayer is licensed under 3-clause BSD License + Label displaying YTPlayer licensing information + YTPlayer是採用3-clause BSD授權條款授權 + + + Third party software + Label for button showing third party software listing page + 第三方軟體 + + + License + License viewer page title + 授權條款 + + + Third party software + Third party software license page title + 第三方軟體 + + + Signing in + Information label informing the user YouTube sign in process is in progress + 登入中 + + + Search options + Search options page title + 搜尋條件 + + + Advanced + Generic options menu/button label + 進階 + + + Result type + Label for YouTube content type search combo box + 結果類型 + + + Any + Label for generic option menu matching any content type + 任何 + + + Channel + Label for menu option indicating YouTube channel content type +---------- +Label for channel name text field + 頻道 + + + Video + Label for menu option indicating YouTube video content type + 影片 + + + High definition + Label for high video quality menu option + 高解析度HD + + + Standard definition + Label for standard video quality menu option + 標準解析度SD + + + Video duration + Label for video duration combo box + 影片長度 + + + Longer than 20 minutes + Label for long (more than 20 minutes) video option menu + 超過20分鐘 + + + Between 4 and 20 minutes + Label for medium (4-20 miniutes) video option menu + 介於4到20分鐘 + + + Less than 4 minutes + Label for short (less than 4 minutes) video option MenuItem + 小於4分鐘 + + + Video type + Label for video type combo box + 影片類型 + + + Episode + Label for episode video type + + + + Movie + Label for movie video type + 電影 + + + Video license + Label for video license combo box + 影片授權條款 + + + Creative Commons + Label for Creative Commons license type + 創作共用 + + + YouTube + Label for YouTube license type + YouTube + + + Event Type + Label for video event type combo box + 事件類型 + + + Completed + Label for completed event type option + 已完成 + + + Live + Label for live event type option + 直播 + + + Upcoming + Label for upcoming event type option + 即將來臨 + + + Order by + Label for search result ordering combo box + 排序方式 + + + Relevance + Label for relevance ordering menu option + 關聯 + + + Date + Label for date ordering menu option + 日期 + + + Rating + Label for rating ordering menu option + 評分 + + + Title + Label for title ordering menu option + 標題 + + + Video count + Label for video count ordering menu option + 影片數 + + + View count + Label for view count ordering menu option + 觀看次數 + + + Safe search + Label for safe search combo box + 安全搜尋 + + + Moderate + Label for moderate content search filtering option + 適中 + + + None + Label for no search content filtering menu option + + + + Strict + Label for strict search content filtering menu option + 嚴格 + + + Published before + Label for published before search option menu + 發布於某個日期前 + + + Published after + Label for published after search option MenuItem + 發布於某個日前後 + + + Play + Label for video play button. + 播放 + + + Clear cache + Menu option to clear application caches + 清除快取 + + + Image cache size + Label for image cache size slider + 影像快取大小 + + + Current usage + Label for current cache usage label + 目前使用量 + + + YouTube API response cache size + Label for YouTube API response cache size slider + YouTube API響應快取大小 + + + Download queued + "Label indicating video was queued for preload" + 等待下載中 + + + Remove + Menu action to remove the element from the list + 刪除 + + + No videos + "Label informing the user there are no preloaded videos" +---------- +Label informing the user there are not favorite videos +---------- +Label informing the user there are no watched recently videos + 找不到影片 + + + Downloaded + Label indicating the video was downloaded to local device storage + 已下載 + + + Cache settings + Title of cache settings page + 快取設定 + + + Download paused + "Label indicating video download was paused" + 下載已暫停 + + + Downloading: %1% + "Label indicating video download progress with actual percentage value" + 下載中: %1% + + + Video download finished + Notification summary informing the user video download has been finished + 影片下載完成 + + + Video download failed + Notification summary informing the user video download has failed + 影片下載失敗 + + + Downloads + Menu option showing downloaded videos page + 下載 + + + Downloaded videos + Title of downloaded videos page + 下載 + + + Download settings + Title of video download settings pge + 下載設定 + + + Preferred video quality + Label for preferred video quality selection combobox + 下載優先畫質 + + + Connection type + Label for video download connection type combobox + 連線類型 + + + Automatically resume downloads + Label for video download auto resume switch in settings + 自動繼續下載 + + + On startup, resume all downloads which were either queued or in progress when YTPlayer was closed. + Description of video download auto resume switch in settings + 啟動時自動繼續下載之前未完成的影片 + + + Paused + Label for video download staus indicator telling the user download is paused + 已暫停 + + + Queued + 等待中 + + + Resume + Menu action to resume paused video download + 繼續 + + + Pause + Menu action to pause in progress video download + 暫停 + + + WiFi only + Menu option indicating downloads are allowed only when using WiFi + 僅透過WiFi + + + WiFi + Cellular + Menu option indicating downloads are allowed on both WiFi and 3G + 透過WiFi或行動網路 + + + Cellular only + Menu option indicating downloads are allowed only when using 3G + 僅透過行動網路 + + + Max. concurrent downloads + Label for slider changing the maximum number of concurrent downloads + 最大同時下載數 + + + Cancel + Menu action to cancel paused/queued video download + 取消 + + + Download video + Menu option triggering video preload + 下載影片 + + + Cancel download + Menu option canceling pending/in progress video preload + 取消下載 + + + Pause download + Menu option allowing the user to pause video download + 暫停下載 + + + Resume download + Menu option allowing the user to resume video download + 繼續下載 + + + Remove download + Menu option allowing the user to remove downloaded video + 刪除已下載的影片 + + + Cancelling download + Remorse popup message telling the user video download will be cancelled + 將取消下載於 + + + Removing download + Remorse popup message telling the user video download will be removed + 將刪除已下載的影片於 + + + Clearing cache + Remorse popup message telling the user the cache will be cleaned + 將清除快取於 + + + Cache + Label for menu option showing cache settings page + 快取 + + + Download + Label for menu option showing video download settings page + 下載 + + + YouTube account integration + Label of switch activating/deactivating YouTube account integration + YouTube帳號整合 + + + Allow YTPlayer to manage YouTube user account. + Description of switch activating/deactivating YouTube account integration + 允許YTPlayer管理YouTube使用者帳號 + + + Channel subscribed + Notification summary telling the user channel was succesfully subscribed + 頻道已訂閱 + + + Unsubscribing channel + Remorse popup message telling the user channel is about to be unsubscribed + 將取消頻道訂閱於 + + + Channel unsubscribed + Notification summary telling the user channel was succesfully unsubscribed + 頻道已取消訂閱 + + + Copy link to clipboard + Menu option copying video link to clipboard + 複製連結到剪貼本 + + + Link copied + Notification summary informing the user link was copied to clipboard + 連結已複製 + + + Open link from clipboard + Menu opion for opening video links from clipboard + 打開剪貼本中的連結 + + + Open in browser + Menu option opening YouTube video page in a web browser + 在瀏覽器中開啟 + + + Browser channel + menu option allowing the user to browser YouTube channel + 瀏覽頻道 + + + No video streams available + Notification summary informing the user direct video playback is not possible + 找不當可使用的影片串流 + + + YTPLayer failed to find usable video streams + Notification body explaining why direct video playback is not possible + YTPlayer無法找到可用的影片串流 + + + Launching browser + Message informing the user web browser is being launched + 開啟瀏覽器 + + + Clear history + Menu option allowing the user to clear search history + 清除搜尋紀錄 + + + Clearing history + "Remorse popup message telling the user search history is about to be cleared" + 將清除搜尋紀錄於 + + + Search settings + Search settings page title + 搜尋設定 + + + Suggestion source + Label for the search suggestion engine combo box + 建議來源 + + + Google + Label for Google based search suggestion engine + Google + + + Search history + Label for history based search suggestion engine + 搜尋紀錄 + + + Search + Label for menu option showing search settings page + 搜尋 + + + Save log + Menu action allowing the user to save application log + 儲存紀錄 + + + Saving log + Remorse popup message telling the user log file will be saved + 紀錄儲存中 + + + Log saved + Body of notification informing the user application log was saved + 紀錄已儲存 + + + View logs + Label for menu option showing application log viewer + 檢視紀錄 + + + Language settings + Title of language settings page + 語言設定 + + + Language + Label for menu option showing application language settings page + 語言 + + + Change language to %1? + Dialog text asking the user if UI language change should be performed + 變更語言成%1? + + + Translations + Label for button showing application translation credits page + 翻譯 + + + Translations + Title of translation credits page + 翻譯 + + + Channels + Label for channels section indicator in main menu + 頻道 + + + Videos + Main menu label indicating videos section of the page + 影片 + + + Watched recently + Menu opion showing recently watched videos page + 觀看紀錄 + + + Watched recently + Title for recently watched videos page + 觀看紀錄 + + + Favorites + Menu option showing video favorites page + 我的最愛 + + + Favorites + Title for favorite videos page + 我的最愛 + + + Hide search + Menu option allowing the user to hide search field + 隱藏搜尋 + + + Removing favorite + Remorse popup message telling the use favorite is about to be removed + 將從我的最愛中刪除此影片於 + + + Player settings + Title of video player settings page + 播放器設定 + + + Player + Label for menu option showing video player settings page + 播放器 + + + Looking for streams + Status message indicating video player is looking for audio/video streams + 尋找串流中 + + + Buffering: %1% + Media player status indicating content is buffering + 緩衝中%1% + + + Loading + Media player status indicating content is loading + 載入中 + + + Stalled + Media player status indicating content loading has stalled + 停滯 + + + Invalid media + Media player status indicating invalid content type + 無效的媒體 + + + Controls hide delay + Label for slider changing video player controls hide delay + 全螢幕播放時控制列顯示時間 + + + Auto pause when deactivated + Label for video auto pause option on/off switch. + 自動暫停播放 + + + Automatically pause video playback when application is deactivated. + Description of video auto pause option switch. + 切換App於背景執行時自動暫停播放。 + + + Default video quality on WiFi + Label for combo box allowing the user to change default video quality when using WiFi connection. + 透過WiFi連線的預設畫質 + + + Default video quality on cellular + Label for combo box allowing the user to change default video quality when using cellular connection. + 透過行動網路連線的預設畫質 + + + Early video loading + Label for combo box allowing the user to change video autoload behavior. + 預載影片 + + + Start preloading video data before player page is activated. + Descripton for combo box allowing the user to change video autload behavior. + 在播放頁面啟動前預先載入影片 + + + Always + Menu option allowing the player to always preaload video data. + 總是 + + + WiFi only + Menu option allowing the player to preaload video data only when using WiFi connection. + 僅透過WiFi + + + Cellular only + Menu option allowing the player to preaload video data only when using cellular connection. + 僅透過行動網路 + + + Never + Menu option disallowing the player to always preaload video data. + 從不 + + + No image + Label shown where video thumbnail is not valid, can't be loaded. Should be very short 8-10 characters max. + 找不到影像 + + + No streams! + Label indicating current video has no valid streams. It replaces Play button in the video overview page header. + 找不到串流! + + + Video no longer available + Notification summary informing the user video is no longer available. + 影片無法再使用 + + + Video was removed from YouTube + Notification body explaining why video is no longer available. + 影片已從Youtube刪除 + + + Channel no longer available + Label for placeholder informing the user the channel is no longer available. + 頻道無法再使用 + + + Translate YTPlayer + Menu option opening a link to YTPlayer translation page on Transifex. + 翻譯YTPlayer + + + The original creator, tworaz, deserves all the credit for this awesome app. If, however, you would like to give your support to the maintainer, you can buy him a nice cup of coffee! + Description for Ko-Fi donation link image + + + + Could not parse %1 or %2 + Error while parsing user-supplied json and key files + + + + Files %1 and %2 not found in Downloads folder + Files youtube-client-id.json and youtube-data-api-v3.key not found in Downloads folder + User hasn't provided the .json and .key files in Downloads directory + + + + Checking local version... + Shown while checking for local version of youtube-dl + + + + Checking remote version... + Shown while checking for remote version of youtube-dl + + + + Could not check for updates + Shown when checking youtube-dl version from the Internet failed + + + + Downloading youtube-dl... + Shown while downloading the youtube-dl update from the Internet + + + + Youtube-dl is up to date + Shown when youtube-dl is up to date and no update is needed + + + + Updating youtube-dl failed + Shown after youtube-dl update failed + + + + Updated youtube-dl succesfully + Shown after youtube-dl update succeeded + + + + Update youtube-dl + MenuItem text for updating youtube-dl + + + +