From 7ad7221052a725e945d2da501234a2f51a93cb91 Mon Sep 17 00:00:00 2001 From: A S Lewis <aslewis@cpan.org> Date: Sun, 28 Feb 2021 13:21:40 +0000 Subject: [PATCH] Update to v2.3.110 --- CHANGES | 35 + README.rst | 153 ++-- VERSION | 2 +- locale/en_US/LC_MESSAGES/base.po | 1460 ++++++++++++++--------------- locale/ko_KR/LC_MESSAGES/base.mo | Bin 153261 -> 152722 bytes locale/ko_KR/LC_MESSAGES/base.po | 1471 +++++++++++++++--------------- locale/nl_NL/LC_MESSAGES/base.mo | Bin 145283 -> 144799 bytes locale/nl_NL/LC_MESSAGES/base.po | 1471 +++++++++++++++--------------- nsis/tartube_install_32bit.nsi | 6 +- nsis/tartube_install_64bit.nsi | 6 +- pack/bin/no_download/tartube | 4 +- pack/bin/pkg/tartube | 4 +- pack/bin/strict/tartube | 4 +- pack/tartube.1 | 2 +- pack/tartube.desktop | 2 +- setup.py | 9 +- tartube/config.py | 70 +- tartube/downloads.py | 17 +- tartube/ffmpeg_tartube.py | 18 +- tartube/mainapp.py | 56 +- tartube/options.py | 19 +- tartube/po/messages.pot | 1460 ++++++++++++++--------------- tartube/tartube | 4 +- tartube/updates.py | 2 +- tartube/wizwin.py | 21 +- 25 files changed, 3256 insertions(+), 3040 deletions(-) diff --git a/CHANGES b/CHANGES index 0c26300..b860990 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,38 @@ +v2.3.110 (28 Feb 2021) +------------------------------------------------------------------------------- + +MAJOR NEW FEATURES +- Added the Korean translation compiled by mirusu400 (thanks!) (Git #258) +- Tartube now officially supports the downloader yt-dlp, replacing its support + for youtube-dlc (which has been abandoned) (Git #254) + +MINOR NEW FEATURES +- The FFmpeg options window now provides comboboxes for the user to specify + GPU encoding and hardware acceleration (Git #264) +- In the download options edit window, under the 'Files > Keep files' tab, the + text has been improved to more accurately describe the handling of + description, metadata, annotation and thumbnail files (Git #263) +- In Tartube's setup.py, replaced the obsolete dependency pgi with pygobject + (Git #242) + +MAJOR FIXES +- In the download options edit window, in the Subtitles > Options tab, the + button marked 'Download subtitles file for these languages' was completely + broken. Fixed (Git #263) +- Users who installed Tartube using one of the 'strict' packages reported that + the preferences window could not be opened. The problem has probably been + fixed (Git #256) + +MINOR FIXES +- In the Videos tab, the 'Download all' button can be disabled. Other buttons/ + menu items are disabled at the same time. Download buttons in the Classic + Mode tab were disabled, but should not have been. Fixed +- When installing yt-dlp via pip, the version number was not recognised. Fixed +- In the download options edit window, in the 'Files > File names' tab, there + was a duplicate label in the 'Video properties' combobox. Fixed (Git #263) +- Fixed a rare crash caused by an incorrectly detected videos +- Various fixes for Git #243, Git #249 + v2.3.085 (13 Jan 2021) ------------------------------------------------------------------------------- diff --git a/README.rst b/README.rst index 713a02a..d0e5c4e 100644 --- a/README.rst +++ b/README.rst @@ -22,7 +22,7 @@ Works with YouTube, BitChute, and hundreds of other websites 1 Introduction ============== -**Tartube** is a GUI front-end for `youtube-dlc <https://pypi.org/project/youtube-dlc/>`__, `youtube-dl <https://youtube-dl.org/>`__ and other compatible video downloaders. +**Tartube** is a GUI front-end for `youtube-dl <https://youtube-dl.org/>`__, `yt-dlp <https://github.com/yt-dlp/yt-dlp/>`__ and other compatible video downloaders. It is partly based on `youtube-dl-gui <https://mrs0m30n3.github.io/youtube-dl-gui/>`__ and is written in Python 3 / Gtk 3. Tartube runs on MS Windows, Linux, BSD and MacOS. @@ -59,16 +59,16 @@ For a full list of new features and fixes, see `recent changes <CHANGES>`__. 3 Downloads =========== -Latest version: **v2.3.085 (13 Jan 2020)** +Latest version: **v2.3.110 (21 Feb 2021)** Official packages (also available from the `Github release page <https://github.com/axcore/tartube/releases>`__): -- `MS Windows (64-bit) installer <https://sourceforge.net/projects/tartube/files/v2.3.085/install-tartube-2.3.085-64bit.exe/download>`__ and `portable edition <https://sourceforge.net/projects/tartube/files/v2.3.085/tartube-portable-64bit.zip/download>`__ from Sourceforge -- `MS Windows (32-bit) installer <https://sourceforge.net/projects/tartube/files/v2.3.085/install-tartube-2.3.085-32bit.exe/download>`__ and `portable edition <https://sourceforge.net/projects/tartube/files/v2.3.085/tartube-portable-32bit.zip/download>`__ from Sourceforge -- `DEB package (for Debian-based distros, e.g. Ubuntu, Linux Mint) <https://sourceforge.net/projects/tartube/files/v2.3.085/python3-tartube_2.3.085.deb/download>`__ from Sourceforge -- `RPM package (for RHEL-based distros, e.g. Fedora) <https://sourceforge.net/projects/tartube/files/v2.3.085/tartube-2.3.085.rpm/download>`__ from Sourceforge +- `MS Windows (64-bit) installer <https://sourceforge.net/projects/tartube/files/v2.3.110/install-tartube-2.3.110-64bit.exe/download>`__ and `portable edition <https://sourceforge.net/projects/tartube/files/v2.3.110/tartube-portable-64bit.zip/download>`__ from Sourceforge +- `MS Windows (32-bit) installer <https://sourceforge.net/projects/tartube/files/v2.3.110/install-tartube-2.3.110-32bit.exe/download>`__ and `portable edition <https://sourceforge.net/projects/tartube/files/v2.3.110/tartube-portable-32bit.zip/download>`__ from Sourceforge (but see `7.23 Doesn't work on 32-bit Windows`_) +- `DEB package (for Debian-based distros, e.g. Ubuntu, Linux Mint) <https://sourceforge.net/projects/tartube/files/v2.3.110/python3-tartube_2.3.110.deb/download>`__ from Sourceforge +- `RPM package (for RHEL-based distros, e.g. Fedora) <https://sourceforge.net/projects/tartube/files/v2.3.110/tartube-2.3.110.rpm/download>`__ from Sourceforge -There are also some DEB/RPM packages marked STRICT. In these packages, updates to **youtube-dl(c)** from within **Tartube** have been disabled. If **Tartube** is uploaded to a repository with lots of rules, such as the official Debian repository, then you should probably use the STRICT packages. +There are also some DEB/RPM packages marked STRICT. In these packages, updates to **youtube-dl** from within **Tartube** have been disabled. If **Tartube** is uploaded to a repository with lots of rules, such as the official Debian repository, then you should probably use the STRICT packages. Semi-official packages: @@ -192,12 +192,12 @@ MacOS users should use the following procedure (with thanks to JeremyShih): **pip install requests** -- Install either `youtube-dlc <https://pypi.org/project/youtube-dlc/>`__ or `youtube-dl <https://youtube-dl.org/>`__ - - **pip install youtube-dlc** +- Install either `youtube-dl <https://youtube-dl.org/>`__ or `yt-dlp <https://github.com/yt-dlp/yt-dlp/>`__ **pip install youtube-dl** + **pip install yt-dlp** + - Install the Adwaita theme for icons used by Tartube (optional) **brew install adwaita-icon-theme** @@ -222,7 +222,7 @@ Linux/BSD users can use any of the following installation methods. Linux distributions based on Debian, such as Ubuntu and Linux Mint, can install **Tartube** using the DEB package (see the links above). -**Tartube** requires either `youtube-dlc <https://pypi.org/project/youtube-dlc/>`__ or `youtube-dl <https://youtube-dl.org/>`__. If it's already installed on your system, then you can start **Tartube** immediately. Otherwise, do this: +**Tartube** requires either `youtube-dl <https://youtube-dl.org/>`__ or `yt-dlp <https://github.com/yt-dlp/yt-dlp/>`__. If it's already installed on your system, then you can start **Tartube** immediately. Otherwise, do this: 1. Run **Tartube** 2. **Tartube** asks you to choose a data directory, so do that @@ -237,7 +237,7 @@ It is strongly recommended that you install `Ffmpeg <https://ffmpeg.org/>`__, to Linux distributions based on RHEL, such as Fedora, can install **Tartube** using the RPM package (see the links above). -**Tartube** requires either `youtube-dlc <https://pypi.org/project/youtube-dlc/>`__ or `youtube-dl <https://youtube-dl.org/>`__. If it's already installed on your system, then you can start **Tartube** immediately. +**Tartube** requires either `youtube-dl <https://youtube-dl.org/>`__ or `yt-dlp <https://github.com/yt-dlp/yt-dlp/>`__. If it's already installed on your system, then you can start **Tartube** immediately. Otherwise, do this: Otherwise, if **pip** is already installed on your system, do this: @@ -245,13 +245,13 @@ Otherwise, if **pip** is already installed on your system, do this: 2. **Tartube** asks you to choose a data directory, so do that 3. Click **Operations > Update youtube-dl** -If neither **youtube-dl(c)** nor **pip** are installed on your system, then the recommended way to install **youtube-dl(c)** is from the command line, using **pip**. (Software managers usually don't offer the most recent version of **youtube-dl**.) +If neither **youtube-dl** nor **pip** are installed on your system, then the recommended way to install **youtube-dl** is from the command line, using **pip**. (Software managers usually don't offer the most recent version of **youtube-dl**.) On Fedora, the procedure is: 1. Open a terminal window 2. Type: ``dnf -y install python3-pip`` -3. Type: ``pip3 install youtube-dlc`` or ``pip3 install youtube-dl`` +3. Type: ``pip3 install youtube-dl`` or ``pip3 install yt-dlp`` 4. You can now run **Tartube**. It is strongly recommended that you install `Ffmpeg <https://ffmpeg.org/>`__, too. On most RHEL-based systems (for example, Fedora 29-32), you can open a terminal window and run these commands: @@ -296,9 +296,9 @@ Here is the procedure for Debian-based distributions, like Ubuntu and Linux Mint 5.3.6 Install using PyPI (with root privileges) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -1. Make sure **youtube-dl(c)** has been completely removed from your system +1. Make sure **youtube-dl** has been completely removed from your system 2. Type: ``sudo apt install python3-pip`` -3. Type: ``sudo pip3 install youtube-dlc tartube`` or ``sudo pip3 install youtube-dl tartube`` +3. Type: ``sudo pip3 install youtube-dl tartube`` or ``sudo pip3 install yt-dlp tartube`` 4. Type: ``tartube`` 5.3.7 Install using PyPI (without root privileges) @@ -322,11 +322,11 @@ For any other method of installation on Linux/BSD, the following dependencies ar - `Python 3 <https://www.python.org/downloads>`__ - `Gtk 3 <https://python-gtk-3-tutorial.readthedocs.io/en/latest/>`__ - `Python Requests module <https://3.python-requests.org/>`__ -- Either `youtube-dlc <https://pypi.org/project/youtube-dlc/>`__ or `youtube-dl <https://youtube-dl.org/>`__ +- Either `youtube-dl <https://youtube-dl.org/>`__ or `yt-dlp <https://github.com/yt-dlp/yt-dlp/>`__ These dependencies are optional, but recommended: -- `Python pip <https://pypi.org/project/pip/>`__ - keeping youtube-dl(c) up to date is much simpler when pip is installed +- `Python pip <https://pypi.org/project/pip/>`__ - keeping youtube-dl up to date is much simpler when pip is installed - `Python feedparser module <https://pypi.org/project/feedparser/>`__ - enables **Tartube** to detect livestreams - `Python moviepy module <https://pypi.org/project/moviepy/>`__ - if the website doesn't tell **Tartube** about the length of its videos, moviepy can work it out - `Python playsound module <https://pypi.org/project/playsound/>`__ - enables **Tartube** to play an alarm when a livestream starts @@ -360,8 +360,8 @@ After installing dependencies (see above): Tartube packages are usually created using one of the available environment variables: - **TARTUBE_PKG** for packages without restrictions -- **TARTUBE_PKG_STRICT** for a package which should not download or update **youtube-dl(c)** or **FFmpeg**; the user is required to install those packages separately -- **TARTUBE_PKG_NO_DOWNLOAD** for a package which should not download any videos (and also will not download/update **youtube-dl(c)** or **FFmpeg**) +- **TARTUBE_PKG_STRICT** for a package which should not download or update **youtube-dl** or **FFmpeg**; the user is required to install those packages separately +- **TARTUBE_PKG_NO_DOWNLOAD** for a package which should not download any videos (and also will not download/update **youtube-dl** or **FFmpeg**) Some packaging systems might forbid installing other packages. If that's the case, you can disable that functionality. @@ -426,7 +426,7 @@ The procedure used to create the MS Windows installers is described in full in t * `6.22.4 Compatible websites`_ * `6.23 Detecting missing videos`_ * `6.24 More information about FFmpeg and AVConv`_ -* `6.24.1 Using FFmpeg / AVConv with youtube-dl(c)`_ +* `6.24.1 Using FFmpeg / AVConv with youtube-dl`_ * `6.24.2 Using FFmpeg directly`_ * `6.24.3 Using FFmpeg options`_ * `6.24.4 Advanced FFmpeg options`_ @@ -447,9 +447,10 @@ All of these settings can be changed later, if you want. For example, to change 6.2 Updating the downloader --------------------------- -*If you installed Tartube via a repository such as the official Debian repository, then Tartube may not be allowed to update youtube-dl(c). In that case, this section does not apply; update youtube-dl(c) using your system's package manager.* +*If you installed Tartube via a repository such as the official Debian repository, then Tartube may not be allowed to update youtube-dl. In that case, this section does not apply; update youtube-dl using your system's package manager.* -**Tartube** uses a downloader to interact with websites like **YouTube**. **Tartube** officially supports two downloaders, `youtube-dlc <https://pypi.org/project/youtube-dlc/>`__ and `youtube-dl <https://youtube-dl.org/>`__. (Other forks of **youtube-dl** will probably work as well.) +**Tartube** uses a downloader to interact with websites like **YouTube**. **Tartube** officially supports two downloaders, +`youtube-dl <https://youtube-dl.org/>`__ and `yt-dlp <https://github.com/yt-dlp/yt-dlp/>`__. (Other forks of **youtube-dl** will probably work as well.) Websites changes their code frequently, and therefore the downloaders must be updated frequently. @@ -464,10 +465,10 @@ Websites changes their code frequently, and therefore the downloaders must be up If the update operation fails on MS Windows, you should `ask the authors for help <https://github.com/axcore/tartube/>`__. -On other systems, users can modify **Tartube**'s settings. There are several locations on your filesystem where **youtube-dl(c)** might have been installed. +On other systems, users can modify **Tartube**'s settings. There are several locations on your filesystem where **youtube-dl** might have been installed. .. image:: screenshots/example3.png - :alt: Updating youtube-dl(c) + :alt: Updating youtube-dl - Click **Edit > System preferences... > Downloaders > File paths** - Try changing the setting **Path to executable** @@ -486,7 +487,7 @@ On other systems, users can modify **Tartube**'s settings. There are several loc - Download certain other video formats - Convert video files to audio -**youtube-dl(c)** uses FFmpeg by default, but it can use AVConv for certain tasks. +**youtube-dl** uses FFmpeg by default, but it can use AVConv for certain tasks. For more information about **Tartube**'s use of Ffmpeg and AVConv, see `6.24 More information about FFmpeg and AVConv`_. @@ -500,7 +501,7 @@ There is no known method of installing a compatible version of AVConv. 6.4.2 On Linux/BSD/MacOS ~~~~~~~~~~~~~~~~~~~~~~~~ -On all other operating systems, **Tartube** and **youtube-dl(c)** should be able to use **FFmpeg** (and **AVConv**, if it is also installed) without any help from you. +On all other operating systems, **Tartube** and **youtube-dl** should be able to use **FFmpeg** (and **AVConv**, if it is also installed) without any help from you. If the **FFmpeg** / **AVConv** executables have been installed to an unusual location, you can tell **Tartube** where to find them. @@ -530,7 +531,7 @@ When you start **Tartube** for the first time, there are several folders already - The **Livestreams** folder shows livestreams. Videos are automatically removed from this folder (but not from other folders) when the livestream is finished - The **Missing videos** folder (see `6.23 Detecting missing videos`_ ) shows videos that you've downloaded, but which have since been removed from the website by their creator - The **New Videos** folder shows videos that have been downloaded, but not yet watched -- The **Recent Videos** folder shows videos that were checked or downloaded, the last time you used **youtube-dl(c)** +- The **Recent Videos** folder shows videos that were checked or downloaded, the last time you used **youtube-dl** - The **Waiting Videos** folder shows videos that you want to watch soon. When you watch the video, it's automatically removed from the folder (but not from **Tartube**'s database) - Videos saved to the **Temporary Videos** folder will be deleted when **Tartube** next starts - The **Unsorted Videos** folder is a useful place to put videos that don't belong to a particular channel or playlist @@ -625,7 +626,7 @@ Refreshing the filesystem: Updating packages: -- **Update** - Installs or updates **youtube-dl(c)**, as described in `6.2 Updating the downloader`_. Also installs FFmpeg (on MS Windows only); see `6.4 Installing FFmpeg / AVConv`_ +- **Update** - Installs or updates **youtube-dl**, as described in `6.2 Updating the downloader`_. Also installs FFmpeg (on MS Windows only); see `6.4 Installing FFmpeg / AVConv`_ - *Protip*: Do an **'Update'** operation before you do a **'Check'** or **'Download'** operation Fetching information: @@ -652,7 +653,7 @@ Processing videos with **FFmpeg**: 6.11 Download options --------------------- -**youtube-dl(c)** offers a large number of download options. This is how to set them. +**youtube-dl** offers a large number of download options. This is how to set them. .. image:: screenshots/example12.png :alt: Opening the download options window @@ -768,7 +769,7 @@ A **Custom download** enables you to modify this behaviour, if desired. It's imp 6.13.1 Independent downloads ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -By default, **Tartube** instructs **youtube-dl(c)** to download a channel or a playlist. **youtube-dl(c)** only needs a link to the channel or playlist, so **Tartube** doesn't send it a link to every single video. +By default, **Tartube** instructs **youtube-dl** to download a channel or a playlist. **youtube-dl** only needs a link to the channel or playlist, so **Tartube** doesn't send it a link to every single video. If you need to download each individual video directly, for any reason, you can do this: @@ -981,7 +982,7 @@ It's fine to add new videos to the database, or to remove them. Just be careful 6.19.1 Importing videos from other applications ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**Tartube** is a GUI front-end for **youtube-dl(c)**, but it is not the only one. If you've downloaded videos using another application, this is how to add them to **Tartube**'s database. +**Tartube** is a GUI front-end for **youtube-dl**, but it is not the only one. If you've downloaded videos using another application, this is how to add them to **Tartube**'s database. - In **Tartube**'s main window, add each channel and playlist in the normal way - When you're ready, click the **Check all** button. This adds a list of videos to **Tartube**'s database, without actually downloading the videos themselves @@ -1172,7 +1173,7 @@ Most users will prefer to leave all of these checkboxes unselected, and instead To disable any of these actions, simply click the same label again. -**NOTE:** At the time of writing (December 2020), **youtube-dl(c)** often fails to download **YouTube** livestreams while they are broadcasting. For an alternative download method, see `6.22.5 Youtube Stream Capture`_. **youtube-dl(c)** will often download livestreams from other websites successfully. +**NOTE:** At the time of writing (December 2020), **youtube-dl** often fails to download **YouTube** livestreams while they are broadcasting. For an alternative download method, see `6.22.5 Youtube Stream Capture`_. **youtube-dl** will often download livestreams from other websites successfully. 6.22.4 Compatible websites ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1188,7 +1189,7 @@ Now click the **RSS feed** tab. Enter the link (URL) to the RSS feed in the box. 6.22.5 Youtube Stream Capture ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**Tartube** v2.3.0 adds support for `Youtube Stream Capture <https://github.com/mrwnwttk/youtube_stream_capture>`__ (YTSC), a script that can download livestreams from **YouTube** independently of **youtube-dl(c)**. +**Tartube** v2.3.0 adds support for `Youtube Stream Capture <https://github.com/mrwnwttk/youtube_stream_capture>`__ (YTSC), a script that can download livestreams from **YouTube** independently of **youtube-dl**. Support for YTSC is EXPERIMENTAL. It does not work at all on MS Windows (under MSYS2), or on any website besides **YouTube**. It does not work at all for livestreams that broadcast continuously, 24/7. It is not guaranteed to work with every livestream. Before using YTSC, you must install both `FFmpeg <https://ffmpeg.org/>`__ and `aria2 <https://aria2.github.io/>`__ on your system. @@ -1218,10 +1219,10 @@ Having enabled detection, removed videos will appear in the **Missing Videos** f 6.24 More information about FFmpeg and AVConv --------------------------------------------- -6.24.1 Using FFmpeg / AVConv with youtube-dl(c) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +6.24.1 Using FFmpeg / AVConv with youtube-dl +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you explicitly set the location of the **FFmpeg** and/or **AVConv** executables, then those locations are passed on to **youtube-dl(c)** when you check or download videos. +If you explicitly set the location of the **FFmpeg** and/or **AVConv** executables, then those locations are passed on to **youtube-dl** when you check or download videos. If *both* locations are set, only one of them is passed on. Usually, that's the location of **FFmpeg**. However, if you specify the **prefer_avconv** download option, then **AVConv** is passed on, instead. @@ -1284,21 +1285,21 @@ The *source file* can be a video, or a thumbnail. If you select **Video thumbnai The *output file* setting defines whatever you're trying to achieve. If you want **FFmpeg** to produce a video, then **H.264** is the most useful setting (but you could also choose **GIF**). -When youtube-dl(c) downloads a video, it often downloads the video and audio components seperately. The two pieces are then merged by FFmpeg. Usually, all of this happens automatically, but if the merge didn't succeed (or wasn't attempted), you can try again by selecting **Merge video/audio**. This settings expects to find a video file and an audio file with the same name (but with different file extensions). +When youtube-dl downloads a video, it often downloads the video and audio components seperately. The two pieces are then merged by FFmpeg. Usually, all of this happens automatically, but if the merge didn't succeed (or wasn't attempted), you can try again by selecting **Merge video/audio**. This settings expects to find a video file and an audio file with the same name (but with different file extensions). If the *source file* is a thumbnail, then the *output file* must also be a thumbnail. 6.25 Using youtube-dl forks --------------------------- -`youtube-dl <https://youtube-dl.org/>`__ is open-source software, and there are a number of forks available. Tartube officially supports both the original version and `youtube-dlc <https://github.com/blackjack4494/youtube-dlc>`__. +`youtube-dl <https://youtube-dl.org/>`__ is open-source software, and there are a number of forks available. Tartube officially supports both the original version and `yt-dlp <https://github.com/yt-dlp/yt-dlp>`__. If a youtube-dl fork is still compatible with the original, then **Tartube** can use it instead of the original. - Click **Edit > System preferences... > Downloader > Forks** - In the box **Use a different fork of youtube-dl**, enter the name of the fork - Click **OK** to close the preferences window -- Now click **Operations > Update youtube-dl(c)**, which will download (or update) the fork on your system +- Now click **Operations > Update youtube-dl**, which will download (or update) the fork on your system 7 Frequently-Asked Questions ============================ @@ -1325,17 +1326,18 @@ If a youtube-dl fork is still compatible with the original, then **Tartube** can * `7.20 Georestriction workarounds don't work`_ * `7.21 Video website blocks me`_ * `7.22 MS Windows installer is too big`_ -* `7.23 Tartube can't detect livestreams`_ -* `7.24 Livestream is already finished`_ -* `7.25 Can't hear livestream alarms`_ -* `7.26 Some icons not visible`_ -* `7.27 Video thumbnails not visible`_ -* `7.28 Graphs not visible`_ -* `7.29 Tartube is not visible in the system tray`_ -* `7.30 Tartube is not portable`_ -* `7.31 Run out of disk space`_ -* `7.32 British spelling`_ -* `7.33 No puedo hablar inglés`_ +* `7.23 Doesn't work on 32-bit Windows`_ +* `7.24 Tartube can't detect livestreams`_ +* `7.25 Livestream is already finished`_ +* `7.26 Can't hear livestream alarms`_ +* `7.27 Some icons not visible`_ +* `7.28 Video thumbnails not visible`_ +* `7.29 Graphs not visible`_ +* `7.30 Tartube is not visible in the system tray`_ +* `7.31 Tartube is not portable`_ +* `7.32 Run out of disk space`_ +* `7.33 British spelling`_ +* `7.34 No puedo hablar inglés`_ 7.1 Tartube won't install/won't run/doesn't work ------------------------------------------------ @@ -1394,7 +1396,7 @@ A: See `6.3 Setting the downloader's location`_ *Q: I can't download my favourite video!* -A: Make sure **youtube-dl(c)** is updated; see `6.2 Updating the downloader`_ +A: Make sure **youtube-dl** is updated; see `6.2 Updating the downloader`_ Before submitting a `bug report <https://github.com/axcore/tartube/issues>`__, find out whether **Tartube** is responsible for the problem, or not. You can do this by opening a terminal window, and typing something like this: @@ -1406,10 +1408,10 @@ Because most people don't like typing, **Tartube** offers a shortcut. - Click **Operations > Test youtube-dl**, or right-click a video, and select **Downloads > Test system command** - In the dialogue window, enter the link (URL) to the video -- You can add more **youtube-dl(c)** download options, if you want. See `here <https://github.com/ytdl-org/youtube-dl/>`__ for a complete list of them +- You can add more **youtube-dl** download options, if you want. See `here <https://github.com/ytdl-org/youtube-dl/>`__ for a complete list of them - Click the **OK** button to close the window and begin the test - Click the **Output** Tab to watch the test as it progresses -- When the test is finished, a temporary directory (folder) opens, containing anything that **youtube-dl(c)** was able to download +- When the test is finished, a temporary directory (folder) opens, containing anything that **youtube-dl** was able to download 7.5 Downloads never finish -------------------------- @@ -1474,7 +1476,7 @@ Your new database now contains information about all the videos, but it doesn't *Q: I clicked the 'Check all' button, but the operation takes so long! It only found two new videos!* -A: By default, the underlying **youtube-dl(c)** software checks an entire channel, even if it contains thousands of videos. +A: By default, the underlying **youtube-dl** software checks an entire channel, even if it contains thousands of videos. You can drastically reduce the time this takes by telling **Tartube** to stop checking/downloading videos, if it receives (for example) details about three videos it has already checked/downloaded. @@ -1491,7 +1493,7 @@ This works well on sites like YouTube, which send information about videos in th *Q: I clicked the 'Download all' button, but the operation takes so long! It only downloaded two new videos!* -A: **youtube-dl(c)** can create an archive file especially for this purpose (namely that some channels have no new videos to download, but others have many new videos). +A: **youtube-dl** can create an archive file especially for this purpose (namely that some channels have no new videos to download, but others have many new videos). To enable this functionality, click **Edit > System preferences... > Operations > Downloads** and click **Allow downloader to create its own archive file...** to select it. @@ -1557,7 +1559,7 @@ Firstly, make sure FFmpeg is installed on your system - see `6.4 Installing FFmp Secondly, set your desired output format. Open the Download options window (for example, click **Edit > General download options... > Formats > Preferred**). Add a format like **mp4** to the **List of preferred formats**, then add the same format to **If a merge is required after post-processing, output to this format**. -For some reason, youtube-dl(c) ignores the download option unless the format is specified in both places. (You will see a warning if you forget.) +For some reason, youtube-dl ignores the download option unless the format is specified in both places. (You will see a warning if you forget.) .. image:: screenshots/example32.png :alt: The Download options window @@ -1609,7 +1611,7 @@ A: Click **Edit > System preferences... > Windows > Main window**, and then clic A: The questioner is talking about the settings in **Edit > General download options... > Advanced**. -This is a **youtube-dl(c)** issue. A general solution is described in `this post <https://github.com/ytdl-org/youtube-dl/issues/21313#issuecomment-499496235>`__. +This is a **youtube-dl** issue. A general solution is described in `this post <https://github.com/ytdl-org/youtube-dl/issues/21313#issuecomment-499496235>`__. The solution describes how to create a cookies.txt file, which can be specified as a download option. @@ -1624,7 +1626,7 @@ See also the **Tartube** thread `here <https://github.com/axcore/tartube/issues/ *Q: I want to download a video, but it's blocked in my region. I set the geostriction workarounds, but I still can't download the video!* -A: **youtube-dl(c)** provides some options for bypassing region-blocking. To show them, click **Edit > General download options...**, then click the **Show advanced download options** button if it's visible, then click the tabs **Advanced > Geo-restriction**. +A: **youtube-dl** provides some options for bypassing region-blocking. To show them, click **Edit > General download options...**, then click the **Show advanced download options** button if it's visible, then click the tabs **Advanced > Geo-restriction**. Unfortunately, although these options exist, websites are not compelled to respect them. **YouTube**, in particular, may completely ignore them. @@ -1641,7 +1643,7 @@ A: Subscribe to a `VPN <https://en.wikipedia.org/wiki/Virtual_private_network>`_ A: You can specify a list of proxies (Edit > System preferences... > Operations > Proxies). During a download operation, **Tartube** will cycle between these proxies. -Unfortunately, it is not possible to switch between proxies while downloading a channel (youtube-dl(c) does not offer that functionality). But the proxy list will work well if you're trying to download ten different channels. +Unfortunately, it is not possible to switch between proxies while downloading a channel (youtube-dl does not offer that functionality). But the proxy list will work well if you're trying to download ten different channels. 7.22 MS Windows installer is too big ------------------------------------ @@ -1664,7 +1666,14 @@ The NSIS scripts used to create the installers can be found here: The scripts contain full instructions, so you should be able to create your own installer, which can be compared with the official one. -7.23 Tartube can't detect livestreams +7.23 Doesn't work on 32-bit Windows +----------------------------------- + +*Q: Tartube does not install/work on 32-bit Windows* + +A: Cygwin and MSYS2 have `dropped support for 32-bit Windows <https://www.msys2.org/news/#2020-05-17-32-bit-msys2-no-longer-actively-supported>`__. This means that some Tartube features do not work on 32-bit systems and, at some point, Tartube will no longer be supported on 32-bit systems as well. + +7.24 Tartube can't detect livestreams ------------------------------------- *Q: Tartube can't detect upcoming livestreams at all!* @@ -1677,14 +1686,14 @@ If the `Python feedparser module <https://pypi.org/project/feedparser/>`__ is no The Tartube installer for 64-bit MS Windows already contains a copy of **feedparser**, so there is no need to install it again. At the time of writing, **Tartube** cannot detect livestreams on 32-bit MS Windows. -7.24 Livestream is already finished +7.25 Livestream is already finished ----------------------------------- *Q: Tartube is showing a livestream that finished hours/days/centuries ago!* A: Right-click the video and select **Livestream > Not a livestream**. -7.25 Can't hear livestream alarms +7.26 Can't hear livestream alarms --------------------------------- *Q: I set an alarm for an upcoming livestream, but I didn't hear anything!* @@ -1697,7 +1706,7 @@ If the `Python playsound module <https://pypi.org/project/playsound/>`__ is not The Tartube installer for 64-bit MS Windows already contains a copy of **playsound**, so there is no need to install it again. At the time of writing, **playsound** cannot ne installed on 32-bit MS Windows. -7.26 Some icons not visible +7.27 Some icons not visible --------------------------- *Q: Icons in the Videos tab are broken! They all look the same!* @@ -1708,21 +1717,21 @@ A: **Tartube** uses a set of stock icons wherever possible. If those icons are n **Tartube** provides a set of custom icons to replace the stock ones (in an emergency). To enable them, click **Edit > System preferences... > Windows > Main window** and then click **Replace stock icons with custom icons (in case stock icons are not visible)** to select it. Click the **OK** button to close the window, then restart **Tartube**. -7.27 Video thumbnails not visible +7.28 Video thumbnails not visible --------------------------------- *Q: Tartube doesn't download video thumbnails any more! It used to work fine!* A: In June 2020, **YouTube** changed its image format from **.jpg** to **.webp**. Unfortunately, most software (including the graphics libraries used by **Tartube**) don't support **.webp** images yet. Worse still, **YouTube** begain sending **.webp** thumbnails mislabelled as **.jpg**. -In September 2020, **Tartube** and **youtube-dl(c)** added separate fixes for this problem. These fixes both depend on `FFmpeg <https://ffmpeg.org/>`__, so they won't work if FFmpeg is not installed on your system - see `6.4 Installing FFmpeg / AVConv`_. +In September 2020, **Tartube** and **youtube-dl** added separate fixes for this problem. These fixes both depend on `FFmpeg <https://ffmpeg.org/>`__, so they won't work if FFmpeg is not installed on your system - see `6.4 Installing FFmpeg / AVConv`_. If you have already downloaded a lot of **.webp** images, you can ask **Tartube** to convert them back to **.jpg**. Once converted, they will be visible in the main window. * Click **Operations > Tidy up files...** * In the dialogue window, click **Convert .webp files to .jpg using FFmpeg** to select it, then click the **OK** button -7.28 Graphs not visible +7.29 Graphs not visible ----------------------- *Q: My buddy installed Tartube, and he showed me some download history graphs. But when I looked for that on my computer, I couldn't find them!* @@ -1733,7 +1742,7 @@ The graphs are created by `matplotlib <https://matplotlib.org/>`__, but none of On Linux/BSD, use your system's software manager. On MS Windows, run the application **C:\Users\YOURNAME\AppData\Local\Tartube\msys64\mingw64.exe**, and in the new window type **pacman -S mingw-w64-x86_64-python-matplotlib**. -7.29 Tartube is not visible in the system tray +7.30 Tartube is not visible in the system tray ---------------------------------------------- *Q: Tartube is not visible in the system tray! There is just an empty space where the Tartube icon should be!* @@ -1742,7 +1751,7 @@ A: This problem exists on certain Linux desktop environments (e.g. `Cinnamon <ht Other desktop environments (e.g. `MATE <https://mate-desktop.org/>`__) display the **Tartube** icon correctly. -7.30 Tartube is not portable +7.31 Tartube is not portable ---------------------------- *Q: I want to install Tartube on a USB stick. How do I make Tartube portable?* @@ -1753,7 +1762,7 @@ On other operating systems, just download the source code and run it. Installati On other operating systems, **Tartube** will attempt to create a config file in the default location for your system. You should create an empty **settings.json** file in the source code directory (i.e. the one containing a **setup.py** file). This will force Tartube to save its config file there, rather than in the system's default location. -7.31 Run out of disk space +7.32 Run out of disk space -------------------------- *Q: When I try to download videos, Tartube refuses, complaining "You have only X / Y Mb remaining on your device". But I'm using an external hard drive with over a trillion terabytes of empty space!* @@ -1764,14 +1773,14 @@ This seems to be an issue with the virtualisation software itself (we have confi The only thing that can be done is to disable the checks and warnings altogether. Click **Edit > System preferences > Files > Device**, and deselect both **Warn user if disk space is less than** and **Halt downloads if disk space is less than**. -7.32 British spelling +7.33 British spelling --------------------- *Q: These British spellings are getting on my nerves!* A: Click **Edit > System preferences... > General > Language**, then click the drop-down box to select American English, and then restart **Tartube** -7.33 No puedo hablar inglés +7.34 No puedo hablar inglés --------------------------- *Q: ¡No puedo usar YouTube porque no hablo inglés!* diff --git a/VERSION b/VERSION index f225958..18161cf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.3.097 +2.3.110 diff --git a/locale/en_US/LC_MESSAGES/base.po b/locale/en_US/LC_MESSAGES/base.po index db726f0..55c3ae4 100644 --- a/locale/en_US/LC_MESSAGES/base.po +++ b/locale/en_US/LC_MESSAGES/base.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 2.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 16:51+0000\n" +"POT-Creation-Date: 2021-02-28 10:41+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: A S Lewis <aslewis@cpan.org>\n" "Language-Team: en_US\n" @@ -36,7 +36,7 @@ msgstr "" msgid "Enormous" msgstr "" -#: .././mainapp.py:945 +#: .././mainapp.py:944 msgid "" "Failed to convert a thumbnail from .webp to .jpg. No more conversions will " "be attempted until you install FFmpeg on your system, or (if FFmpeg is " @@ -45,651 +45,651 @@ msgid "" "conversions" msgstr "" -#: .././mainapp.py:2665 +#: .././mainapp.py:2664 msgid "" "Tartube can't create the folder in which its configuration file is saved" msgstr "" #. Load/save has been disabled. Show the error message in a dialogue #. window, then shut down -#: .././mainapp.py:2712 +#: .././mainapp.py:2711 msgid "Tartube failed to start because:" msgstr "" -#: .././mainapp.py:2720 +#: .././mainapp.py:2719 msgid "If you don't know how to resolve this error, please contact the authors" msgstr "" -#: .././mainapp.py:2948 +#: .././mainapp.py:2947 msgid "Because of an error, file load/save has been disabled" msgstr "" -#: .././mainapp.py:2957 +#: .././mainapp.py:2956 msgid "Because of the error, file load/save has been disabled" msgstr "" -#: .././mainapp.py:3041 +#: .././mainapp.py:3040 msgid "There is a download operation in progress." msgstr "" -#: .././mainapp.py:3043 +#: .././mainapp.py:3042 msgid "There is an update operation in progress." msgstr "" -#: .././mainapp.py:3045 +#: .././mainapp.py:3044 msgid "There is a refresh operation in progress." msgstr "" -#: .././mainapp.py:3047 +#: .././mainapp.py:3046 msgid "There is an info operation in progress." msgstr "" -#: .././mainapp.py:3049 +#: .././mainapp.py:3048 msgid "There is a tidy operation in progress." msgstr "" -#: .././mainapp.py:3051 +#: .././mainapp.py:3050 msgid "There is a process operation in progress." msgstr "" -#: .././mainapp.py:3056 +#: .././mainapp.py:3055 msgid "Are you sure you want to quit Tartube?" msgstr "" -#: .././mainapp.py:3261 +#: .././mainapp.py:3260 msgid "Failed to load the Tartube config file (failed sanity check)" msgstr "" -#: .././mainapp.py:3284 +#: .././mainapp.py:3283 msgid "Failed to load the Tartube config file (file is locked)" msgstr "" -#: .././mainapp.py:3314 +#: .././mainapp.py:3313 msgid "Failed to load the Tartube config file (JSON load failure)" msgstr "" -#: .././mainapp.py:3332 +#: .././mainapp.py:3331 msgid "Failed to load the Tartube config file (file is invalid)" msgstr "" -#: .././mainapp.py:3350 +#: .././mainapp.py:3349 msgid "" "Failed to load the Tartube config file (file cannot be read by this version)" msgstr "" -#: .././mainapp.py:3365 +#: .././mainapp.py:3364 msgid "Failed to load the Tartube config file (missing file type)" msgstr "" -#: .././mainapp.py:4222 +#: .././mainapp.py:4221 msgid "Failed to save the Tartube config file (failed sanity check)" msgstr "" -#: .././mainapp.py:4542 +#: .././mainapp.py:4541 msgid "Failed to save the Tartube config file (file is locked)" msgstr "" -#: .././mainapp.py:4544 .././mainapp.py:4584 .././mainapp.py:5920 -#: .././mainapp.py:5976 .././mainapp.py:5982 +#: .././mainapp.py:4543 .././mainapp.py:4583 .././mainapp.py:5941 +#: .././mainapp.py:5997 .././mainapp.py:6003 msgid "File load/save has been disabled" msgstr "" -#: .././mainapp.py:4563 +#: .././mainapp.py:4562 msgid "Failed to save the Tartube config file (file already in use)" msgstr "" -#: .././mainapp.py:4583 +#: .././mainapp.py:4582 msgid "Failed to save the Tartube config file" msgstr "" -#: .././mainapp.py:4695 .././mainapp.py:4711 .././mainapp.py:4741 +#: .././mainapp.py:4694 .././mainapp.py:4710 .././mainapp.py:4740 msgid "Failed to load the Tartube database file" msgstr "" -#: .././mainapp.py:4756 +#: .././mainapp.py:4755 msgid "The Tartube database file is invalid" msgstr "" -#: .././mainapp.py:4772 +#: .././mainapp.py:4771 msgid "Database file can't be read by this version of Tartube" msgstr "" -#: .././mainapp.py:5117 +#: .././mainapp.py:5116 msgid "Tartube is applying an essential database update" msgstr "" -#: .././mainapp.py:5119 +#: .././mainapp.py:5118 msgid "This might take a few minutes, so please be patient" msgstr "" -#: .././mainapp.py:5914 .././mainapp.py:5972 .././mainapp.py:5981 +#: .././mainapp.py:5935 .././mainapp.py:5993 .././mainapp.py:6002 msgid "Failed to save the Tartube database file" msgstr "" -#: .././mainapp.py:5917 +#: .././mainapp.py:5938 msgid "(Could not make a backup copy of the existing file)" msgstr "" -#: .././mainapp.py:5953 +#: .././mainapp.py:5974 msgid "Failed to save the Tartube database file (file already in use)" msgstr "" -#: .././mainapp.py:5974 +#: .././mainapp.py:5995 msgid "A backup of the previous file can be found at:" msgstr "" -#: .././mainapp.py:6155 .././mainapp.py:6165 +#: .././mainapp.py:6176 .././mainapp.py:6186 msgid "Database file created" msgstr "" -#: .././mainapp.py:6559 +#: .././mainapp.py:6580 msgid "Tartube's database can't be checked while an operation is in progress" msgstr "" -#: .././mainapp.py:6795 +#: .././mainapp.py:6816 msgid "Database check complete, no inconsistencies found" msgstr "" -#: .././mainapp.py:6827 +#: .././mainapp.py:6848 msgid "Database check complete, problems found:" msgstr "" -#: .././mainapp.py:6830 +#: .././mainapp.py:6851 msgid "" "Do you want to repair these problems? (The database will be fixed, but no " "files will be deleted)" msgstr "" -#: .././mainapp.py:7003 +#: .././mainapp.py:7024 msgid "Database inconsistencies repaired" msgstr "" -#: .././mainapp.py:7895 .././config.py:16026 +#: .././mainapp.py:7918 .././config.py:16057 msgid "Please select Tartube's data folder" msgstr "" -#: .././mainapp.py:8258 +#: .././mainapp.py:8281 msgid "" "A download operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:8282 .././mainapp.py:8307 +#: .././mainapp.py:8305 .././mainapp.py:8330 #, python-brace-format msgid "You only have {0} / {1} Mb remaining on your device" msgstr "" -#: .././mainapp.py:8310 .././mainapp.py:13970 .././mainapp.py:14086 -#: .././mainapp.py:14268 .././mainwin.py:17484 +#: .././mainapp.py:8333 .././mainapp.py:14006 .././mainapp.py:14122 +#: .././mainapp.py:14304 .././mainwin.py:17484 msgid "Are you sure you want to continue?" msgstr "" -#: .././mainapp.py:8397 +#: .././mainapp.py:8420 msgid "There is nothing to check!" msgstr "" -#: .././mainapp.py:8399 +#: .././mainapp.py:8422 msgid "There is nothing to download!" msgstr "" -#: .././mainapp.py:8642 +#: .././mainapp.py:8665 msgid "Download operation complete" msgstr "" -#: .././mainapp.py:8644 +#: .././mainapp.py:8667 msgid "Download operation halted" msgstr "" -#: .././mainapp.py:8648 +#: .././mainapp.py:8671 msgid "Videos downloaded:" msgstr "" -#: .././mainapp.py:8649 +#: .././mainapp.py:8672 msgid "Videos checked:" msgstr "" -#: .././mainapp.py:8652 .././mainapp.py:9253 .././mainapp.py:9747 -#: .././mainapp.py:10147 +#: .././mainapp.py:8675 .././mainapp.py:9276 .././mainapp.py:9770 +#: .././mainapp.py:10170 msgid "Time taken:" msgstr "" -#: .././mainapp.py:8757 +#: .././mainapp.py:8780 msgid "" "An update operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:8943 +#: .././mainapp.py:8966 msgid "Installation failed" msgstr "" -#: .././mainapp.py:8945 +#: .././mainapp.py:8968 msgid "Installation complete" msgstr "" -#: .././mainapp.py:8949 +#: .././mainapp.py:8972 msgid "Update operation failed" msgstr "" -#: .././mainapp.py:8951 +#: .././mainapp.py:8974 msgid "Update operation halted" msgstr "" -#: .././mainapp.py:8953 +#: .././mainapp.py:8976 msgid "Update operation complete" msgstr "" -#: .././mainapp.py:8955 +#: .././mainapp.py:8978 msgid "version:" msgstr "" -#: .././mainapp.py:8959 +#: .././mainapp.py:8982 msgid "(unknown)" msgstr "" -#: .././mainapp.py:9046 +#: .././mainapp.py:9069 msgid "" "A refresh operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:9059 +#: .././mainapp.py:9082 msgid "" "During a refresh operation, Tartube analyses its data folder, looking for " "videos that haven't yet been added to its database" msgstr "" -#: .././mainapp.py:9063 +#: .././mainapp.py:9086 msgid "" "You only need to perform a refresh operation if you have manually copied " "videos into Tartube's data folder" msgstr "" -#: .././mainapp.py:9070 +#: .././mainapp.py:9093 msgid "" "Before starting a refresh operation, you should click the 'Check all' button " "in the main window" msgstr "" -#: .././mainapp.py:9077 +#: .././mainapp.py:9100 msgid "" "Before starting a refresh operation, you should right-click the channel and " "select 'Check channel'" msgstr "" -#: .././mainapp.py:9084 +#: .././mainapp.py:9107 msgid "" "Before starting a refresh operation, you should right-click the playlist and " "select 'Check playlist'" msgstr "" -#: .././mainapp.py:9091 +#: .././mainapp.py:9114 msgid "" "Before starting a refresh operation, you should right-click the folder and " "select 'Check folder'" msgstr "" -#: .././mainapp.py:9096 +#: .././mainapp.py:9119 msgid "Are you sure you want to proceed with the refresh operation?" msgstr "" -#: .././mainapp.py:9248 +#: .././mainapp.py:9271 msgid "Refresh operation complete" msgstr "" -#: .././mainapp.py:9250 +#: .././mainapp.py:9273 msgid "Refresh operation halted" msgstr "" -#: .././mainapp.py:9355 +#: .././mainapp.py:9378 msgid "" "An info operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:9471 +#: .././mainapp.py:9494 msgid "Operation failed" msgstr "" -#: .././mainapp.py:9473 .././downloads.py:400 +#: .././mainapp.py:9496 .././downloads.py:400 msgid "Operation complete" msgstr "" -#: .././mainapp.py:9475 +#: .././mainapp.py:9498 msgid "Click the Output Tab to see the results" msgstr "" -#: .././mainapp.py:9488 +#: .././mainapp.py:9511 msgid "A new release is available!" msgstr "" -#: .././mainapp.py:9490 +#: .././mainapp.py:9513 msgid "Your installation is up to date!" msgstr "" -#: .././mainapp.py:9492 +#: .././mainapp.py:9515 msgid "Installed version:" msgstr "" -#: .././mainapp.py:9497 +#: .././mainapp.py:9520 msgid "Stable release:" msgstr "" -#: .././mainapp.py:9502 +#: .././mainapp.py:9525 msgid "Stable release: not found" msgstr "" -#: .././mainapp.py:9505 +#: .././mainapp.py:9528 msgid "Development release:" msgstr "" -#: .././mainapp.py:9507 +#: .././mainapp.py:9530 msgid "Development release: not found" msgstr "" -#: .././mainapp.py:9614 +#: .././mainapp.py:9637 msgid "" "A tidy operation cannot start if one or more configuration windows are still " "open" msgstr "" -#: .././mainapp.py:9742 +#: .././mainapp.py:9765 msgid "Tidy operation complete" msgstr "" -#: .././mainapp.py:9744 +#: .././mainapp.py:9767 msgid "Tidy operation halted" msgstr "" -#: .././mainapp.py:9911 .././mainwin.py:18169 +#: .././mainapp.py:9934 .././mainwin.py:18169 msgid "Livestream has started" msgstr "" -#: .././mainapp.py:10136 +#: .././mainapp.py:10159 msgid "Process operation complete" msgstr "" -#: .././mainapp.py:10138 +#: .././mainapp.py:10161 msgid "Process operation halted" msgstr "" -#: .././mainapp.py:10142 +#: .././mainapp.py:10165 msgid "Files processed:" msgstr "" -#: .././mainapp.py:10143 +#: .././mainapp.py:10166 msgid "Errors:" msgstr "" -#: .././mainapp.py:11403 .././mainapp.py:11578 +#: .././mainapp.py:11435 .././mainapp.py:11610 msgid "Cannot move anything to:" msgstr "" -#: .././mainapp.py:11405 .././mainapp.py:11580 +#: .././mainapp.py:11437 .././mainapp.py:11612 msgid "" "because a file or folder with the same name already exists (although " "Tartube's database doesn't know anything about it)" msgstr "" -#: .././mainapp.py:11409 +#: .././mainapp.py:11441 msgid "" "You probably created that file/folder accidentally, in which case you should " "delete it manually before trying again" msgstr "" -#: .././mainapp.py:11423 .././mainapp.py:11598 +#: .././mainapp.py:11455 .././mainapp.py:11630 msgid "Are you sure you want to move this channel:" msgstr "" -#: .././mainapp.py:11425 .././mainapp.py:11600 +#: .././mainapp.py:11457 .././mainapp.py:11632 msgid "Are you sure you want to move this playlist:" msgstr "" -#: .././mainapp.py:11427 .././mainapp.py:11602 +#: .././mainapp.py:11459 .././mainapp.py:11634 msgid "Are you sure you want to move this folder:" msgstr "" -#: .././mainapp.py:11432 +#: .././mainapp.py:11464 msgid "" "This procedure will move all downloaded files to the top level of Tartube's " "data folder" msgstr "" -#: .././mainapp.py:11532 +#: .././mainapp.py:11564 msgid "Channels, playlists and folders can only be dragged into a folder" msgstr "" -#: .././mainapp.py:11545 +#: .././mainapp.py:11577 #, python-brace-format msgid "The fixed folder '{0}' cannot be moved (but it can still be hidden)" msgstr "" -#: .././mainapp.py:11558 +#: .././mainapp.py:11590 #, python-brace-format msgid "The folder '{0}' can only contain videos" msgstr "" -#: .././mainapp.py:11585 +#: .././mainapp.py:11617 msgid "" "You probably created that file/folder accidentally, in which case, you " "should delete it manually before trying again" msgstr "" -#: .././mainapp.py:11604 +#: .././mainapp.py:11636 msgid "into this folder:" msgstr "" -#: .././mainapp.py:11608 +#: .././mainapp.py:11640 msgid "This procedure will move all downloaded files to the new location" msgstr "" -#: .././mainapp.py:11614 +#: .././mainapp.py:11646 msgid "" "WARNING: The destination folder is marked as temporary, so everything inside " "it will be DELETED when Tartube restarts!" msgstr "" -#: .././mainapp.py:12078 +#: .././mainapp.py:12114 msgid "" "Are you SURE you want to delete files? This procedure cannot be reversed!" msgstr "" -#: .././mainapp.py:13954 .././mainapp.py:14070 .././mainapp.py:14252 +#: .././mainapp.py:13990 .././mainapp.py:14106 .././mainapp.py:14288 #, python-brace-format msgid "The channel contains {0} item(s), so this action may take a while" msgstr "" -#: .././mainapp.py:13960 .././mainapp.py:14076 .././mainapp.py:14258 +#: .././mainapp.py:13996 .././mainapp.py:14112 .././mainapp.py:14294 #, python-brace-format msgid "The playlist contains {0} item(s), so this action may take a while" msgstr "" -#: .././mainapp.py:13966 .././mainapp.py:14082 .././mainapp.py:14264 +#: .././mainapp.py:14002 .././mainapp.py:14118 .././mainapp.py:14300 #, python-brace-format msgid "The folder contains {0} item(s), so this action may take a while" msgstr "" -#: .././mainapp.py:14332 .././mainapp.py:18504 .././mainapp.py:18636 -#: .././mainapp.py:18767 +#: .././mainapp.py:14368 .././mainapp.py:18540 .././mainapp.py:18672 +#: .././mainapp.py:18803 #, python-brace-format msgid "The name '{0}' is not allowed" msgstr "" -#: .././mainapp.py:14341 +#: .././mainapp.py:14377 #, python-brace-format msgid "The name '{0}' is already in use" msgstr "" -#: .././mainapp.py:14354 +#: .././mainapp.py:14390 #, python-brace-format msgid "Failed to rename '{0}'" msgstr "" -#: .././mainapp.py:14701 +#: .././mainapp.py:14737 msgid "Select where to save the database export" msgstr "" -#: .././mainapp.py:14822 +#: .././mainapp.py:14858 msgid "There is nothing to export!" msgstr "" -#: .././mainapp.py:14862 .././mainapp.py:14928 +#: .././mainapp.py:14898 .././mainapp.py:14964 msgid "Failed to save the database export file:" msgstr "" -#: .././mainapp.py:14936 +#: .././mainapp.py:14972 msgid "Database export file saved to:" msgstr "" -#: .././mainapp.py:14973 +#: .././mainapp.py:15009 msgid "Select the database export" msgstr "" -#: .././mainapp.py:14994 .././mainapp.py:15008 +#: .././mainapp.py:15030 .././mainapp.py:15044 msgid "Failed to load the database export file" msgstr "" -#: .././mainapp.py:15025 +#: .././mainapp.py:15061 msgid "The database export file is invalid" msgstr "" -#: .././mainapp.py:15036 +#: .././mainapp.py:15072 msgid "The database export file is invalid (or empty)" msgstr "" -#: .././mainapp.py:15080 +#: .././mainapp.py:15116 msgid "Nothing was imported from the database export file" msgstr "" #. Show a confirmation -#: .././mainapp.py:15094 +#: .././mainapp.py:15130 msgid "Imported" msgstr "" -#: .././mainapp.py:15095 .././mainwin.py:1287 .././config.py:888 -#: .././config.py:9274 .././config.py:11492 +#: .././mainapp.py:15131 .././mainwin.py:1287 .././config.py:888 +#: .././config.py:9305 .././config.py:11523 msgid "Videos" msgstr "" -#: .././mainapp.py:15096 .././config.py:9307 .././config.py:11525 +#: .././mainapp.py:15132 .././config.py:9338 .././config.py:11556 msgid "Channels" msgstr "" -#: .././mainapp.py:15097 .././config.py:9318 .././config.py:11536 +#: .././mainapp.py:15133 .././config.py:9349 .././config.py:11567 msgid "Playlists" msgstr "" -#: .././mainapp.py:15098 +#: .././mainapp.py:15134 msgid "Folders" msgstr "" -#: .././mainapp.py:15482 +#: .././mainapp.py:15518 msgid "" "The video file is missing from Tartube's data folder (try downloading the " "video again!)" msgstr "" -#: .././mainapp.py:16007 .././mainapp.py:16389 +#: .././mainapp.py:16043 .././mainapp.py:16425 msgid "Select where to save the options export" msgstr "" -#: .././mainapp.py:16055 .././mainapp.py:16437 +#: .././mainapp.py:16091 .././mainapp.py:16473 msgid "Failed to save the options export file:" msgstr "" -#: .././mainapp.py:16063 +#: .././mainapp.py:16099 msgid "Download options exported to to:" msgstr "" -#: .././mainapp.py:16094 .././mainapp.py:16476 +#: .././mainapp.py:16130 .././mainapp.py:16512 msgid "Select the options export file" msgstr "" -#: .././mainapp.py:16113 .././mainapp.py:16495 +#: .././mainapp.py:16149 .././mainapp.py:16531 msgid "Failed to load the options export file" msgstr "" -#: .././mainapp.py:16130 .././mainapp.py:16512 +#: .././mainapp.py:16166 .././mainapp.py:16548 msgid "The options export file is invalid" msgstr "" -#: .././mainapp.py:16141 .././mainapp.py:16523 +#: .././mainapp.py:16177 .././mainapp.py:16559 msgid "The options export file is invalid (or empty)" msgstr "" -#: .././mainapp.py:16445 +#: .././mainapp.py:16481 msgid "FFmpeg options exported to to:" msgstr "" -#: .././mainapp.py:17419 +#: .././mainapp.py:17455 msgid "Please select a destination folder" msgstr "" #. Prompt for confirmation -#: .././mainapp.py:17491 +#: .././mainapp.py:17527 msgid "Are you sure you want to clear this list?" msgstr "" #. Prompt for confirmation -#: .././mainapp.py:17538 +#: .././mainapp.py:17574 msgid "Are you sure you want to clear downloaded videos?" msgstr "" -#: .././mainapp.py:17631 .././mainwin.py:14535 +#: .././mainapp.py:17667 .././mainwin.py:14535 msgid "Only checked/downloaded videos can be processed by FFmpeg" msgstr "" -#: .././mainapp.py:17748 +#: .././mainapp.py:17784 msgid "No video(s) have been downloaded" msgstr "" #. Prompt for confirmation -#: .././mainapp.py:17846 +#: .././mainapp.py:17882 msgid "Are you sure you want to remove the selected item(s)?" msgstr "" -#: .././mainapp.py:18495 +#: .././mainapp.py:18531 msgid "You must give the channel a name" msgstr "" -#: .././mainapp.py:18513 .././mainapp.py:18776 +#: .././mainapp.py:18549 .././mainapp.py:18812 msgid "You must enter a valid URL" msgstr "" -#: .././mainapp.py:18628 +#: .././mainapp.py:18664 msgid "You must give the folder a name" msgstr "" -#: .././mainapp.py:18758 +#: .././mainapp.py:18794 msgid "You must give the playlist a name" msgstr "" -#: .././mainapp.py:18913 +#: .././mainapp.py:18949 msgid "The following videos are duplicates:" msgstr "" -#: .././mainapp.py:18977 +#: .././mainapp.py:19013 msgid "There were no livestream alerts to cancel" msgstr "" -#: .././mainapp.py:18979 +#: .././mainapp.py:19015 msgid "Livestream alerts for 1 video were cancelled" msgstr "Livestream alerts for 1 video were canceled" -#: .././mainapp.py:18982 +#: .././mainapp.py:19018 #, python-brace-format msgid "Livestream alerts for {0} videos were cancelled" msgstr "Livestream alerts for {0} videos were canceled" -#: .././mainapp.py:19352 +#: .././mainapp.py:19388 msgid "All Tartube data has been saved" msgstr "" -#: .././mainapp.py:19382 +#: .././mainapp.py:19418 msgid "Database saved" msgstr "" -#: .././mainapp.py:19637 .././mainwin.py:13487 +#: .././mainapp.py:19673 .././mainwin.py:13487 msgid "" "Files cannot be recovered, after being deleted. Are you sure you want to " "continue?" @@ -698,39 +698,39 @@ msgstr "" #. Because livestream operations run silently in the background, when #. the user goes to the trouble of clicking a menu item in the #. main window's menu, tell them why nothing is happening -#: .././mainapp.py:19677 +#: .././mainapp.py:19713 msgid "Cannot update existing livestreams because" msgstr "" -#: .././mainapp.py:19679 +#: .././mainapp.py:19715 msgid "there is another operation running" msgstr "" -#: .././mainapp.py:19681 +#: .././mainapp.py:19717 msgid "they are currently being updated" msgstr "" -#: .././mainapp.py:19683 +#: .././mainapp.py:19719 msgid "one or more configuration windows are open" msgstr "" -#: .././mainapp.py:19685 +#: .././mainapp.py:19721 msgid "there are no livestreams to update" msgstr "" -#: .././mainapp.py:19759 +#: .././mainapp.py:19795 msgid "There is already a channel with that name" msgstr "" -#: .././mainapp.py:19761 +#: .././mainapp.py:19797 msgid "There is already a playlist with that name" msgstr "" -#: .././mainapp.py:19763 +#: .././mainapp.py:19799 msgid "There is already a folder with that name" msgstr "" -#: .././mainapp.py:19766 +#: .././mainapp.py:19802 msgid "(so please choose a different name)" msgstr "" @@ -739,7 +739,7 @@ msgid "Tartube cannot start because it cannot find its icons folder" msgstr "" #. File column -#: .././mainwin.py:943 .././config.py:6357 +#: .././mainwin.py:943 .././config.py:6359 msgid "_File" msgstr "" @@ -782,7 +782,7 @@ msgid "_General download options..." msgstr "" #. Media column -#: .././mainwin.py:1009 .././config.py:9834 +#: .././mainwin.py:1009 .././config.py:9865 msgid "_Media" msgstr "" @@ -840,7 +840,7 @@ msgstr "" #. Operations column #. Add this tab... -#: .././mainwin.py:1115 .././config.py:12776 +#: .././mainwin.py:1115 .././config.py:12807 msgid "_Operations" msgstr "" @@ -883,7 +883,7 @@ msgid "_Stop current operation" msgstr "" #. Livestreams column -#: .././mainwin.py:1195 .././config.py:13480 +#: .././mainwin.py:1195 .././config.py:13511 msgid "_Livestreams" msgstr "" @@ -966,7 +966,7 @@ msgstr "" #: .././mainwin.py:1393 .././mainwin.py:19371 .././mainwin.py:19376 #: .././mainwin.py:19384 .././mainwin.py:19633 .././mainwin.py:19645 #: .././mainwin.py:20380 .././mainwin.py:21727 .././mainwin.py:21753 -#: .././config.py:12481 +#: .././config.py:12512 msgid "Download" msgstr "" @@ -983,7 +983,7 @@ msgstr "" msgid "Stop the current operation" msgstr "" -#: .././mainwin.py:1443 .././config.py:11068 +#: .././mainwin.py:1443 .././config.py:11099 msgid "Switch" msgstr "" @@ -1015,8 +1015,8 @@ msgstr "" msgid "Close Tartube" msgstr "" -#: .././mainwin.py:1532 .././config.py:7115 .././config.py:11292 -#: .././config.py:11890 +#: .././mainwin.py:1532 .././config.py:7146 .././config.py:11323 +#: .././config.py:11921 msgid "_Videos" msgstr "" @@ -1032,7 +1032,7 @@ msgstr "" msgid "_Output" msgstr "" -#: .././mainwin.py:1566 .././config.py:8450 .././config.py:8956 +#: .././mainwin.py:1566 .././config.py:8481 .././config.py:8987 msgid "_Errors / Warnings" msgstr "" @@ -1093,12 +1093,12 @@ msgstr "" msgid "Sort" msgstr "" -#: .././mainwin.py:1875 .././config.py:8235 +#: .././mainwin.py:1875 .././config.py:8266 msgid "Upload time" msgstr "" -#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7138 -#: .././config.py:12481 .././config.py:14402 .././config.py:14669 +#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7169 +#: .././config.py:12512 .././config.py:14433 .././config.py:14700 msgid "Name" msgstr "" @@ -1190,11 +1190,11 @@ msgstr "" msgid "ETA" msgstr "" -#: .././mainwin.py:2219 .././config.py:8821 +#: .././mainwin.py:2219 .././config.py:8852 msgid "New videos" msgstr "" -#: .././mainwin.py:2219 .././config.py:404 .././config.py:8191 +#: .././mainwin.py:2219 .././config.py:404 .././config.py:8222 msgid "Duration" msgstr "" @@ -1202,7 +1202,7 @@ msgstr "" msgid "Date" msgstr "" -#: .././mainwin.py:2220 .././config.py:8147 +#: .././mainwin.py:2220 .././config.py:8178 msgid "File" msgstr "" @@ -1272,7 +1272,7 @@ msgstr "" msgid "Format:" msgstr "" -#: .././mainwin.py:2591 .././config.py:14402 +#: .././mainwin.py:2591 .././config.py:14433 msgid "Default" msgstr "" @@ -1301,14 +1301,14 @@ msgid "Play video" msgstr "" #. (Signal connect appears below) -#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11105 -#: .././config.py:12546 +#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11136 +#: .././config.py:12577 msgid "Move up" msgstr "" #. (Signal connect appears below) -#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11113 -#: .././config.py:12555 +#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11144 +#: .././config.py:12586 msgid "Move down" msgstr "" @@ -1344,7 +1344,7 @@ msgstr "" msgid "Maximum page size" msgstr "" -#: .././mainwin.py:3017 .././config.py:12481 +#: .././mainwin.py:3017 .././config.py:12512 msgid "Time" msgstr "" @@ -1372,7 +1372,7 @@ msgstr "" msgid "Show server warnings" msgstr "" -#: .././mainwin.py:3113 .././config.py:9936 +#: .././mainwin.py:3113 .././config.py:9967 msgid "Clear list" msgstr "" @@ -1725,7 +1725,7 @@ msgstr "" msgid "Not a _livestream" msgstr "" -#: .././mainwin.py:5295 .././config.py:8310 +#: .././mainwin.py:5295 .././config.py:8341 msgid "_Livestream" msgstr "" @@ -2391,8 +2391,8 @@ msgstr "" #. this function returns. Workaround is to make the label unclickable, #. then use a Glib timer to restore it (after some small fraction of a #. second) -#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9296 -#: .././config.py:11514 +#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9327 +#: .././config.py:11545 msgid "Other" msgstr "" @@ -2731,7 +2731,7 @@ msgstr "" msgid "This playlist contains:" msgstr "" -#: .././mainwin.py:24726 .././config.py:9269 +#: .././mainwin.py:24726 .././config.py:9300 msgid "This folder contains:" msgstr "" @@ -2885,7 +2885,7 @@ msgstr "" msgid "Choose which items to import" msgstr "" -#: .././mainwin.py:25104 .././config.py:14454 .././config.py:14719 +#: .././mainwin.py:25104 .././config.py:14485 .././config.py:14750 msgid "Import" msgstr "" @@ -2949,7 +2949,7 @@ msgstr "" #. 'OK' button #: .././mainwin.py:25521 .././config.py:1035 .././config.py:2242 -#: .././config.py:7694 .././config.py:7828 +#: .././config.py:7725 .././config.py:7859 msgid "OK" msgstr "" @@ -3133,7 +3133,7 @@ msgstr "" msgid "Copy to clipboard" msgstr "" -#: .././mainwin.py:26846 .././config.py:13749 +#: .././mainwin.py:26846 .././config.py:13780 msgid "Test" msgstr "" @@ -3227,7 +3227,7 @@ msgstr "" msgid "Uploads" msgstr "" -#: .././config.py:403 .././config.py:8214 +#: .././config.py:403 .././config.py:8245 msgid "File size" msgstr "" @@ -3305,8 +3305,8 @@ msgstr "" #. 'Reset' button #. (Signal connect appears below) -#: .././config.py:1017 .././config.py:3306 .././config.py:14214 -#: .././config.py:14255 .././config.py:14325 +#: .././config.py:1017 .././config.py:3306 .././config.py:14245 +#: .././config.py:14286 .././config.py:14356 msgid "Reset" msgstr "" @@ -3323,7 +3323,7 @@ msgstr "" msgid "Apply changes without closing the window" msgstr "" -#: .././config.py:1038 .././config.py:7697 .././config.py:7831 +#: .././config.py:1038 .././config.py:7728 .././config.py:7862 msgid "Apply changes" msgstr "" @@ -3380,7 +3380,7 @@ msgstr "" msgid "Close this window" msgstr "" -#: .././config.py:2869 .././config.py:6260 +#: .././config.py:2869 .././config.py:6262 msgid "_Name" msgstr "" @@ -3425,7 +3425,7 @@ msgid "Completely reset all download options to their default values" msgstr "" #. Add this tab... -#: .././config.py:3000 .././config.py:10878 +#: .././config.py:3000 .././config.py:10909 msgid "_Files" msgstr "" @@ -3449,7 +3449,7 @@ msgstr "" msgid "Add to template:" msgstr "" -#: .././config.py:3083 .././config.py:8018 +#: .././config.py:3083 .././config.py:8049 msgid "Video properties" msgstr "" @@ -3493,10 +3493,14 @@ msgstr "" msgid "Creator/uploader" msgstr "" -#: .././config.py:3098 .././config.py:3099 +#: .././config.py:3098 msgid "Full name of video uploader" msgstr "" +#: .././config.py:3099 +msgid "Uploader ID" +msgstr "" + #: .././config.py:3100 msgid "Nickname/ID of video uploader" msgstr "" @@ -3605,8 +3609,8 @@ msgstr "" msgid "Number of comments" msgstr "" -#: .././config.py:3170 .././config.py:9916 .././config.py:12528 -#: .././config.py:14445 .././config.py:14710 +#: .././config.py:3170 .././config.py:9947 .././config.py:12559 +#: .././config.py:14476 .././config.py:14741 msgid "Add" msgstr "" @@ -3647,8 +3651,8 @@ msgid "Path to the downloader's cookie jar file" msgstr "" #: .././config.py:3302 .././config.py:4927 .././config.py:4947 -#: .././config.py:4967 .././config.py:14111 .././config.py:14210 -#: .././config.py:14251 .././config.py:14321 +#: .././config.py:4967 .././config.py:14142 .././config.py:14241 +#: .././config.py:14282 .././config.py:14352 msgid "Set" msgstr "" @@ -3711,19 +3715,19 @@ msgid "Options during real (not simulated) downloads" msgstr "" #: .././config.py:3450 .././config.py:3481 -msgid "Keep the description file after Tartube shuts down" +msgid "Keep the description file after the download has finished" msgstr "" #: .././config.py:3456 .././config.py:3487 -msgid "Keep the metadata file after Tartube shuts down" +msgid "Keep the metadata file after the download has finished" msgstr "" #: .././config.py:3462 .././config.py:3493 -msgid "Keep the annotations file after Tartube shuts down" +msgid "Keep the annotations file after the download has finished" msgstr "" #: .././config.py:3468 .././config.py:3499 -msgid "Keep the thumbnail file after Tartube shuts down" +msgid "Keep the thumbnail file after the download has finished" msgstr "" #: .././config.py:3475 @@ -3814,7 +3818,7 @@ msgid "Do not download DASH-related data for YouTube videos" msgstr "" #. Add this tab... -#: .././config.py:3790 .././config.py:3809 .././config.py:13113 +#: .././config.py:3790 .././config.py:3809 .././config.py:13144 msgid "_Downloads" msgstr "" @@ -4246,8 +4250,8 @@ msgstr "" msgid "Arguments to pass to external downloader" msgstr "" -#: .././config.py:5168 .././config.py:5658 .././config.py:7355 -#: .././config.py:7603 +#: .././config.py:5168 .././config.py:5658 .././config.py:7386 +#: .././config.py:7634 msgid "This procedure cannot be reversed. Are you sure you want to continue?" msgstr "" @@ -4286,120 +4290,120 @@ msgid "FFmpeg options" msgstr "" #. Replace the 'OK' button with a 'Process files' button -#: .././config.py:6246 .././config.py:7776 +#: .././config.py:6248 .././config.py:7807 msgid "Process files" msgstr "" -#: .././config.py:6248 .././config.py:7778 +#: .././config.py:6250 .././config.py:7809 msgid "Process the files with FFmpeg" msgstr "" -#: .././config.py:6265 +#: .././config.py:6267 msgid "Name for these FFmpeg options" msgstr "" -#: .././config.py:6275 +#: .././config.py:6277 msgid "Extra command line options (e.g. --help)" msgstr "" -#: .././config.py:6286 +#: .././config.py:6288 msgid "System command, based on all FFmpeg options in this window:" msgstr "" -#: .././config.py:6317 +#: .././config.py:6319 msgid "Show fewer FFmpeg options" msgstr "" -#: .././config.py:6319 +#: .././config.py:6321 msgid "Show more FFmpeg options" msgstr "" -#: .././config.py:6329 +#: .././config.py:6331 msgid "Import current FFmpeg options into this window" msgstr "" -#: .././config.py:6344 +#: .././config.py:6346 msgid "Completely reset all FFmpeg options to their default values" msgstr "" -#: .././config.py:6360 +#: .././config.py:6362 msgid "Add to end of filename:" msgstr "" -#: .././config.py:6370 +#: .././config.py:6372 msgid "If regex matches filename:" msgstr "" -#: .././config.py:6384 +#: .././config.py:6386 msgid "...then apply substitution:" msgstr "" -#: .././config.py:6397 +#: .././config.py:6399 msgid "" "If the video/audio file is renamed, also rename the thumbnail (but not vice-" "versa)" msgstr "" -#: .././config.py:6408 +#: .././config.py:6410 msgid "Change file extension:" msgstr "" -#: .././config.py:6422 +#: .././config.py:6424 msgid "After changing the file extension, delete the original file" msgstr "" -#: .././config.py:6448 +#: .././config.py:6450 msgid "_Settings" msgstr "" -#: .././config.py:6455 +#: .././config.py:6457 msgid "Source file" msgstr "" -#: .././config.py:6462 +#: .././config.py:6464 msgid "Downloaded video/audio" msgstr "" -#: .././config.py:6471 +#: .././config.py:6473 msgid "with audio" msgstr "" -#: .././config.py:6484 +#: .././config.py:6486 msgid "Video thumbnail" msgstr "" -#: .././config.py:6503 +#: .././config.py:6505 msgid "Output file" msgstr "" -#: .././config.py:6630 +#: .././config.py:6632 msgid "Audio bitrate" msgstr "" -#: .././config.py:6644 +#: .././config.py:6646 msgid "How to set the quality" msgstr "" -#: .././config.py:6649 +#: .././config.py:6651 msgid "" "FFmpeg always encodes according to a Rate Factor that specifies the quality " "of the result." msgstr "" -#: .././config.py:6652 +#: .././config.py:6654 msgid "" "Instead of directly specifying the Rate Factor, an average bit rate can be " "specified. FFmpeg will then determine the optimal Rate Factor in a first " "pass." msgstr "" -#: .././config.py:6656 +#: .././config.py:6658 msgid "" "In fact the first pass is only used for determining the Rate Factor, no " "other data is carried over into the second pass." msgstr "" -#: .././config.py:6659 +#: .././config.py:6661 msgid "" "Specifying an average bitrate but running only one pass is possible, but not " "recommended. FFmpeg would then encode the beginning of the video with a " @@ -4407,1916 +4411,1924 @@ msgid "" "eventually reach the target bitrate." msgstr "" -#: .././config.py:6672 +#: .././config.py:6674 msgid "Manual rate factor" msgstr "" -#: .././config.py:6681 +#: .././config.py:6683 msgid "Determine from target bitrate (2-Pass)" msgstr "" -#: .././config.py:6691 +#: .././config.py:6693 msgid "Rate factor" msgstr "" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Lossless" msgstr "" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Large file" msgstr "" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Bad quality" msgstr "" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Small file" msgstr "" -#: .././config.py:6732 +#: .././config.py:6734 msgid "Name of dummy file" msgstr "" -#: .././config.py:6736 +#: .././config.py:6738 msgid "A dummy file is created during the first pass." msgstr "" -#: .././config.py:6740 +#: .././config.py:6742 msgid "Use the output file" msgstr "" -#: .././config.py:6741 +#: .././config.py:6743 msgid "Dummy" msgstr "" -#: .././config.py:6742 +#: .././config.py:6744 msgid "/dev/null (Linux)" msgstr "" -#: .././config.py:6743 +#: .././config.py:6745 msgid "NUL (MS Windows)" msgstr "" -#: .././config.py:6755 +#: .././config.py:6757 msgid "Patience preset" msgstr "" -#: .././config.py:6760 +#: .././config.py:6762 msgid "Ultra fast" msgstr "" -#: .././config.py:6761 +#: .././config.py:6763 msgid "Super fast" msgstr "" -#: .././config.py:6762 +#: .././config.py:6764 msgid "Very fast" msgstr "" -#: .././config.py:6763 .././config.py:6832 +#: .././config.py:6765 .././config.py:6863 msgid "Faster" msgstr "" -#: .././config.py:6764 +#: .././config.py:6766 msgid "Fast" msgstr "" -#: .././config.py:6765 -msgid "Medium (default)" -msgstr "" - -#: .././config.py:6766 -#, python-format -msgid "Slow (file about 5-10% smaller than medium)" -msgstr "" - #: .././config.py:6767 -#, python-format -msgid "Slower (file about 15% smaller than medium)" +msgid "Medium (default)" msgstr "" #: .././config.py:6768 #, python-format +msgid "Slow (file about 5-10% smaller than medium)" +msgstr "" + +#: .././config.py:6769 +#, python-format +msgid "Slower (file about 15% smaller than medium)" +msgstr "" + +#: .././config.py:6770 +#, python-format msgid "Very slow (file about 17% smaller than medium)" msgstr "" -#: .././config.py:6826 +#: .././config.py:6781 +msgid "GPU encoding" +msgstr "" + +#: .././config.py:6797 +msgid "Hardware acceleration" +msgstr "" + +#: .././config.py:6857 msgid "Palette:" msgstr "" -#: .././config.py:6833 +#: .././config.py:6864 msgid "Uses dithering to a standard palette provided by FFmpeg" msgstr "" -#: .././config.py:6834 +#: .././config.py:6865 msgid "Can cause dithering artefacts and slight banding" msgstr "" -#: .././config.py:6843 +#: .././config.py:6874 msgid "Better" msgstr "" -#: .././config.py:6844 +#: .././config.py:6875 msgid "Determines an optimized palette for the video" msgstr "" -#: .././config.py:6845 +#: .././config.py:6876 msgid "Uses two passes and a temporary file for the palette" msgstr "" -#: .././config.py:6898 +#: .././config.py:6929 msgid "" "This merges a video and audio file with the same name into a single video " "file,\n" "using the extension specified in the File tab" msgstr "" -#: .././config.py:6939 +#: .././config.py:6970 msgid "The thumbnail's format can be changed in the File tab" msgstr "" -#: .././config.py:6954 +#: .././config.py:6985 msgid "_Optimisations" msgstr "" -#: .././config.py:6960 +#: .././config.py:6991 msgid "" "Optimise for fast seeking (shorter keyframe interval, about 10% larger file)" msgstr "" "Optimize for fast seeking (shorter keyframe interval, about 10% larger file)" -#: .././config.py:6968 +#: .././config.py:6999 msgid "Input video is a high-quality movie" msgstr "" -#: .././config.py:6974 +#: .././config.py:7005 msgid "Input video is an animated movie" msgstr "" -#: .././config.py:6980 +#: .././config.py:7011 msgid "Input video contains film grain" msgstr "" -#: .././config.py:6986 +#: .././config.py:7017 msgid "Input video is an image slideshow" msgstr "" -#: .././config.py:6992 +#: .././config.py:7023 msgid "Optimise for really weak CPU playback devices" msgstr "Optimize for really weak CPU playback devices" -#: .././config.py:6999 +#: .././config.py:7030 msgid "Optimise for really old devices (requires rate factor above 0)" msgstr "Optimize for really old devices (requires rate factor above 0)" -#: .././config.py:7010 +#: .././config.py:7041 msgid "" "Move headers to beginning of file (so it can play while still downloading)" msgstr "" -#: .././config.py:7018 +#: .././config.py:7049 msgid "Fast encoding and low latency streaming" msgstr "" -#: .././config.py:7024 +#: .././config.py:7055 msgid "Limit bitrate (Mbit/s)" msgstr "" -#: .././config.py:7041 +#: .././config.py:7072 msgid "Assuming a receiving buffer (seconds)" msgstr "" -#: .././config.py:7119 +#: .././config.py:7150 msgid "List of videos to be processed" msgstr "" -#: .././config.py:7138 .././media.py:88 +#: .././config.py:7169 .././media.py:88 msgid "Video" msgstr "" -#: .././config.py:7138 +#: .././config.py:7169 msgid "Thumbnail" msgstr "" -#: .././config.py:7181 +#: .././config.py:7212 msgid "Remove video from list" msgstr "" -#: .././config.py:7647 +#: .././config.py:7678 msgid "" "Fewer FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" msgstr "" -#: .././config.py:7657 +#: .././config.py:7688 msgid "Show more FFmpeg options (when window re-opens)" msgstr "" -#: .././config.py:7674 +#: .././config.py:7705 msgid "" "More FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" msgstr "" -#: .././config.py:7684 +#: .././config.py:7715 msgid "Show fewer FFmpeg options (when window re-opens)" msgstr "" #. Add this tab... -#: .././config.py:8135 .././config.py:8752 .././config.py:9176 -#: .././config.py:9663 .././config.py:10464 +#: .././config.py:8166 .././config.py:8783 .././config.py:9207 +#: .././config.py:9694 .././config.py:10495 msgid "_General" msgstr "" -#: .././config.py:8138 .././config.py:8755 .././config.py:9179 -#: .././config.py:9668 +#: .././config.py:8169 .././config.py:8786 .././config.py:9210 +#: .././config.py:9699 msgid "General properties" msgstr "" -#: .././config.py:8164 +#: .././config.py:8195 msgid "Set the file (if this is the wrong one)" msgstr "" -#: .././config.py:8184 +#: .././config.py:8215 msgid "Always simulate download of this video" msgstr "" -#: .././config.py:8207 +#: .././config.py:8238 msgid "Video has been downloaded" msgstr "" -#: .././config.py:8228 +#: .././config.py:8259 msgid "Video is marked as unwatched" msgstr "" -#: .././config.py:8249 +#: .././config.py:8280 msgid "Video is archived" msgstr "" -#: .././config.py:8256 +#: .././config.py:8287 msgid "Video is bookmarked" msgstr "" -#: .././config.py:8263 +#: .././config.py:8294 msgid "Receive time" msgstr "" -#: .././config.py:8277 +#: .././config.py:8308 msgid "Video is favourite" msgstr "Video is favorite" -#: .././config.py:8284 +#: .././config.py:8315 msgid "Video is in waiting list" msgstr "" -#: .././config.py:8316 +#: .././config.py:8347 msgid "Livestream properties" msgstr "" -#: .././config.py:8321 +#: .././config.py:8352 msgid "Livestream status" msgstr "" -#: .././config.py:8332 +#: .././config.py:8363 msgid "Waiting to start" msgstr "" -#: .././config.py:8334 +#: .././config.py:8365 msgid "Stream has started" msgstr "" -#: .././config.py:8336 +#: .././config.py:8367 msgid "Not a livestream" msgstr "" -#: .././config.py:8339 +#: .././config.py:8370 msgid "Livestream message" msgstr "" -#: .././config.py:8354 +#: .././config.py:8385 msgid "Video is pre-recorded" msgstr "" -#: .././config.py:8361 +#: .././config.py:8392 msgid "Livestream actions" msgstr "" -#: .././config.py:8370 +#: .././config.py:8401 msgid "When the livestream starts, show a desktop notification" msgstr "" -#: .././config.py:8379 +#: .././config.py:8410 msgid "When the livestream starts, play an alarm" msgstr "" -#: .././config.py:8389 +#: .././config.py:8420 msgid "When the livestream starts, open it in the system's web browser" msgstr "" -#: .././config.py:8401 +#: .././config.py:8432 msgid "When the livestream starts, begin downloading it immediately" msgstr "" -#: .././config.py:8412 .././config.py:13782 +#: .././config.py:8443 .././config.py:13813 msgid "When a livestream stops, download it (overwriting any earlier file)" msgstr "" -#: .././config.py:8428 +#: .././config.py:8459 msgid "_Description" msgstr "" -#: .././config.py:8432 +#: .././config.py:8463 msgid "Video description" msgstr "" -#: .././config.py:8453 .././config.py:8959 +#: .././config.py:8484 .././config.py:8990 msgid "Errors / Warnings" msgstr "" -#: .././config.py:8459 +#: .././config.py:8490 msgid "Error messages produced the last time this video was checked/downloaded" msgstr "" -#: .././config.py:8474 +#: .././config.py:8505 msgid "" "Warning messages produced the last time this video was checked/downloaded" msgstr "" -#: .././config.py:8517 +#: .././config.py:8548 msgid "Select the correct video/audio file" msgstr "" -#: .././config.py:8543 +#: .././config.py:8574 msgid "" "The replacement video/audio file must be in the same channel, playlist or " "folder" msgstr "" -#: .././config.py:8561 +#: .././config.py:8592 msgid "You must select a valid video/audio file" msgstr "" -#: .././config.py:8629 +#: .././config.py:8660 msgid "Channel properties" msgstr "" -#: .././config.py:8632 +#: .././config.py:8663 msgid "Playlist properties" msgstr "" -#: .././config.py:8773 +#: .././config.py:8804 msgid "Always simulate download of videos in this channel" msgstr "" -#: .././config.py:8775 +#: .././config.py:8806 msgid "Always simulate download of videos in this playlist" msgstr "" -#: .././config.py:8785 +#: .././config.py:8816 msgid "Disable checking/downloading for this channel" msgstr "" -#: .././config.py:8787 +#: .././config.py:8818 msgid "Disable checking/downloading for this playlist" msgstr "" -#: .././config.py:8797 +#: .././config.py:8828 msgid "This channel is marked as a favourite" msgstr "This channel is marked as a favorite" -#: .././config.py:8799 +#: .././config.py:8830 msgid "This playlist is marked as a favourite" msgstr "This playlist is marked as a favorite" -#: .././config.py:8809 +#: .././config.py:8840 msgid "Total videos" msgstr "" -#: .././config.py:8833 +#: .././config.py:8864 msgid "Favourite videos" msgstr "Favorite videos" -#: .././config.py:8845 +#: .././config.py:8876 msgid "Downloaded videos" msgstr "" -#: .././config.py:8867 .././config.py:9408 .././config.py:11646 +#: .././config.py:8898 .././config.py:9439 .././config.py:11677 msgid "_History" msgstr "" -#: .././config.py:8872 .././config.py:9413 .././config.py:11653 +#: .././config.py:8903 .././config.py:9444 .././config.py:11684 msgid "Download history" msgstr "" -#: .././config.py:8886 .././config.py:9427 .././config.py:11667 +#: .././config.py:8917 .././config.py:9458 .././config.py:11698 msgid "Draw" msgstr "" -#: .././config.py:8914 +#: .././config.py:8945 msgid "_RSS feed" msgstr "" -#: .././config.py:8917 +#: .././config.py:8948 msgid "RSS feed" msgstr "" -#: .././config.py:8923 +#: .././config.py:8954 msgid "" "If Tartube cannot detect the channel's RSS feed, you can enter the URL here" msgstr "" -#: .././config.py:8928 +#: .././config.py:8959 msgid "" "If Tartube cannot detect the playlist's RSS feed, you can enter the URL here" msgstr "" -#: .././config.py:8933 +#: .././config.py:8964 msgid "(The feed is used to detect livestreams on compatible websites)" msgstr "" -#: .././config.py:8965 +#: .././config.py:8996 msgid "" "Error messages produced the last time this channel was checked/downloaded" msgstr "" -#: .././config.py:8970 +#: .././config.py:9001 msgid "" "Error messages produced the last time this playlist was checked/downloaded" msgstr "" -#: .././config.py:8988 +#: .././config.py:9019 msgid "" "Warning messages produced the last time this channel was checked/downloaded" msgstr "" -#: .././config.py:8993 +#: .././config.py:9024 msgid "" "Warning messages produced the last time this playlist was checked/downloaded" msgstr "" -#: .././config.py:9059 +#: .././config.py:9090 msgid "Folder properties" msgstr "" -#: .././config.py:9196 +#: .././config.py:9227 msgid "Always simulate download of videos" msgstr "" -#: .././config.py:9203 +#: .././config.py:9234 msgid "Disable checking/downloading for this folder" msgstr "" -#: .././config.py:9210 +#: .././config.py:9241 msgid "This folder is marked as a favourite" msgstr "This folder is marked as a favorite" -#: .././config.py:9217 +#: .././config.py:9248 msgid "This folder is hidden" msgstr "" -#: .././config.py:9224 +#: .././config.py:9255 msgid "This folder can't be deleted by the user" msgstr "" -#: .././config.py:9231 +#: .././config.py:9262 msgid "This is a system-controlled folder" msgstr "" -#: .././config.py:9238 +#: .././config.py:9269 msgid "Only videos can be added to this folder" msgstr "" -#: .././config.py:9245 +#: .././config.py:9276 msgid "All contents deleted when Tartube shuts down" msgstr "" -#: .././config.py:9259 .././config.py:11475 +#: .././config.py:9290 .././config.py:11506 msgid "_Statistics" msgstr "" -#: .././config.py:9264 .././config.py:11482 +#: .././config.py:9295 .././config.py:11513 msgid "Statistics" msgstr "" -#: .././config.py:9285 .././config.py:11503 +#: .././config.py:9316 .././config.py:11534 msgid "Downloaded" msgstr "" -#: .././config.py:9329 +#: .././config.py:9360 msgid "Sub-folders" msgstr "" -#: .././config.py:9351 +#: .././config.py:9382 msgid "Recalculate" msgstr "" -#: .././config.py:9522 +#: .././config.py:9553 msgid "Scheduled download" msgstr "" -#: .././config.py:9673 .././config.py:12515 +#: .././config.py:9704 .././config.py:12546 msgid "Scheduled download name" msgstr "" -#: .././config.py:9685 +#: .././config.py:9716 msgid "Download mode" msgstr "" -#: .././config.py:9690 +#: .././config.py:9721 msgid "Check channels, playlist and folders" msgstr "" -#: .././config.py:9691 +#: .././config.py:9722 msgid "Download channels, playlists and folders" msgstr "" -#: .././config.py:9692 +#: .././config.py:9723 msgid "Perform a custom download" msgstr "" -#: .././config.py:9703 .././config.py:12481 +#: .././config.py:9734 .././config.py:12512 msgid "Start mode" msgstr "" -#: .././config.py:9708 +#: .././config.py:9739 msgid "Perform this download at regular intervals" msgstr "" -#: .././config.py:9709 +#: .././config.py:9740 msgid "Perform this download when Tartube starts" msgstr "" -#: .././config.py:9710 +#: .././config.py:9741 msgid "Disable this scheduled download" msgstr "" -#: .././config.py:9722 +#: .././config.py:9753 msgid "Time between scheduled downloads" msgstr "" -#: .././config.py:9766 +#: .././config.py:9797 msgid "If another scheduled download is running:" msgstr "" -#: .././config.py:9773 +#: .././config.py:9804 msgid "Add channels, playlists and folders to the end of the queue" msgstr "" -#: .././config.py:9779 +#: .././config.py:9810 msgid "Add channels, playlists and folders to the beginning of the queue" msgstr "" -#: .././config.py:9786 +#: .././config.py:9817 msgid "Do nothing, just wait until the next scheduled download time" msgstr "" -#: .././config.py:9801 +#: .././config.py:9832 msgid "This scheduled download takes priority over others" msgstr "" -#: .././config.py:9804 +#: .././config.py:9835 msgid "Other scheduled downloads won't start until this one is finished" msgstr "" -#: .././config.py:9813 +#: .././config.py:9844 msgid "" "Ignore time-saving preferences, and check/download the whole channel/" "playlist/folder" msgstr "" -#: .././config.py:9821 +#: .././config.py:9852 msgid "Shut down Tartube when this scheduled download has finished" msgstr "" -#: .././config.py:9839 +#: .././config.py:9870 msgid "Media to download" msgstr "" -#: .././config.py:9845 +#: .././config.py:9876 msgid "Check/download everything" msgstr "" -#: .././config.py:9853 +#: .././config.py:9884 msgid "Only check/download the media below" msgstr "" -#: .././config.py:9867 +#: .././config.py:9898 msgid "" "Hint: you can drag and drop channels, playlists and your own folders here" msgstr "" -#: .././config.py:9926 +#: .././config.py:9957 msgid "Remove" msgstr "" -#: .././config.py:10230 +#: .././config.py:10261 msgid "System preferences" msgstr "" -#: .././config.py:10483 +#: .././config.py:10514 msgid "_Language" msgstr "" -#: .././config.py:10488 +#: .././config.py:10519 msgid "Language preferences" msgstr "" -#: .././config.py:10493 +#: .././config.py:10524 msgid "Language" msgstr "" -#: .././config.py:10529 +#: .././config.py:10560 msgid "_Stability" msgstr "" -#: .././config.py:10539 +#: .././config.py:10570 msgid "Gtk library" msgstr "" -#: .././config.py:10544 +#: .././config.py:10575 msgid "Current version of the system's Gtk library" msgstr "" -#: .././config.py:10559 +#: .././config.py:10590 msgid "Gtk stability" msgstr "" -#: .././config.py:10598 +#: .././config.py:10629 msgid "" "Tartube uses the Gtk graphics library. This library is notoriously " "unreliable and may even causes crashes." msgstr "" -#: .././config.py:10605 +#: .././config.py:10636 msgid "" "By default, some cosmetic features are disabled (for example, in the Videos " "tab, the list of videos is not updated until the end of a download " "operation)." msgstr "" -#: .././config.py:10613 +#: .././config.py:10644 msgid "" "If you think that your system Gtk has been fixed (or if you want to test Gtk " "stability), you can re-enable the cosmetic features." msgstr "" -#: .././config.py:10623 +#: .././config.py:10654 msgid "Disable some cosmetic features to prevent crashes and other issues" msgstr "" -#: .././config.py:10641 +#: .././config.py:10672 msgid "_Modules" msgstr "" -#: .././config.py:10646 +#: .././config.py:10677 msgid "Module availability" msgstr "" -#: .././config.py:10652 +#: .././config.py:10683 msgid "feedparser module is available (required for detecting livestreams)" msgstr "" -#: .././config.py:10661 +#: .././config.py:10692 msgid "matplotlib module is available (draws graphs)" msgstr "" -#: .././config.py:10669 +#: .././config.py:10700 msgid "moviepy module is available (finds the length of videos, if unknown)" msgstr "" -#: .././config.py:10679 +#: .././config.py:10710 msgid "playsound module is available (sound an alarm when a livestream starts)" msgstr "" -#: .././config.py:10689 +#: .././config.py:10720 msgid "" "XDG module is available (saves the config file in the standard location)" msgstr "" -#: .././config.py:10699 +#: .././config.py:10730 msgid "" "Notify module is available (shows desktop notifications; Linux/*BSD only)" msgstr "" -#: .././config.py:10709 +#: .././config.py:10740 msgid "Module preferences" msgstr "" -#: .././config.py:10715 +#: .././config.py:10746 msgid "" "Use 'moviepy' module to get a video's duration, if not known (may be slow)" msgstr "" -#: .././config.py:10727 +#: .././config.py:10758 msgid "Timeout applied when moviepy checks a video file" msgstr "" -#: .././config.py:10752 +#: .././config.py:10783 msgid "_Debugging" msgstr "" -#: .././config.py:10760 +#: .././config.py:10791 msgid "Debugging preferences" msgstr "" -#: .././config.py:10766 +#: .././config.py:10797 msgid "" "Debug messages are only visible in the terminal window (these settings are " "not saved)" msgstr "" -#: .././config.py:10773 +#: .././config.py:10804 msgid "Enable application debug messages (code in mainapp.py)" msgstr "" -#: .././config.py:10782 .././config.py:10802 +#: .././config.py:10813 .././config.py:10833 msgid "...but don't show timer debug messages" msgstr "" -#: .././config.py:10793 +#: .././config.py:10824 msgid "Enable main winddow debug messages (code in mainwin.py)" msgstr "" -#: .././config.py:10813 +#: .././config.py:10844 msgid "Enabled downloader debug messages (code in downloads.py)" msgstr "" -#: .././config.py:10856 +#: .././config.py:10887 msgid "" "Debugging messages are also visible if an empty file called debug.txt exists " "here:" msgstr "" -#: .././config.py:10901 +#: .././config.py:10932 msgid "_Device" msgstr "" -#: .././config.py:10906 +#: .././config.py:10937 msgid "Device preferences" msgstr "" -#: .././config.py:10911 +#: .././config.py:10942 msgid "Size of device (in Mb)" msgstr "" -#: .././config.py:10923 +#: .././config.py:10954 msgid "Free space on device (in Mb)" msgstr "" -#: .././config.py:10935 +#: .././config.py:10966 msgid "Warn user if disk space is less than" msgstr "" -#: .././config.py:10953 +#: .././config.py:10984 msgid "Halt downloads if disk space is less than" msgstr "" -#: .././config.py:10992 +#: .././config.py:11023 msgid "Configuration preferences" msgstr "" -#: .././config.py:10997 +#: .././config.py:11028 msgid "Tartube configuration file loaded from:" msgstr "" -#: .././config.py:11016 +#: .././config.py:11047 msgid "D_atabase" msgstr "" -#: .././config.py:11022 +#: .././config.py:11053 msgid "Database preferences" msgstr "" -#: .././config.py:11027 +#: .././config.py:11058 msgid "Tartube data folder" msgstr "" -#: .././config.py:11039 +#: .././config.py:11070 msgid "Add new database" msgstr "" -#: .././config.py:11041 +#: .././config.py:11072 msgid "Change to a different data folder" msgstr "" -#: .././config.py:11048 +#: .././config.py:11079 msgid "Check and repair database" msgstr "" -#: .././config.py:11051 +#: .././config.py:11082 msgid "Check for inconsistencies, and repair them" msgstr "" -#: .././config.py:11056 +#: .././config.py:11087 msgid "Recent data folders" msgstr "" -#: .././config.py:11070 +#: .././config.py:11101 msgid "Switch to the selected data folder" msgstr "" -#: .././config.py:11080 +#: .././config.py:11111 msgid "Forget" msgstr "" -#: .././config.py:11083 +#: .././config.py:11114 msgid "Remove the selected data folder from the list" msgstr "" -#: .././config.py:11092 +#: .././config.py:11123 msgid "Forget all" msgstr "" -#: .././config.py:11095 +#: .././config.py:11126 msgid "Forget every folder in this list (except the current one)" msgstr "" -#: .././config.py:11108 +#: .././config.py:11139 msgid "Move the selected folder up the list" msgstr "" -#: .././config.py:11116 +#: .././config.py:11147 msgid "Move the selected folder down the list" msgstr "" -#: .././config.py:11144 +#: .././config.py:11175 msgid "" "On startup, load the first database on the list (not the most recently-use " "one)" msgstr "" -#: .././config.py:11154 +#: .././config.py:11185 msgid "If one database is in use, try to load others" msgstr "" -#: .././config.py:11162 +#: .././config.py:11193 msgid "Add new data directories to this list" msgstr "" -#: .././config.py:11201 +#: .././config.py:11232 msgid "_Backups" msgstr "" -#: .././config.py:11205 +#: .././config.py:11236 msgid "Backup preferences" msgstr "" -#: .././config.py:11210 +#: .././config.py:11241 msgid "" "When saving a database file, Tartube makes a backup copy of it (in case " "something goes wrong)" msgstr "" -#: .././config.py:11219 +#: .././config.py:11250 msgid "Delete the backup file as soon as the save procedure is finished" msgstr "" -#: .././config.py:11229 +#: .././config.py:11260 msgid "Keep the backup file, replacing any previous backup file" msgstr "" -#: .././config.py:11240 +#: .././config.py:11271 msgid "" "Make a new backup file once per day, after the day's first save procedure" msgstr "" -#: .././config.py:11251 +#: .././config.py:11282 msgid "Make a new backup file for every save procedure" msgstr "" -#: .././config.py:11300 +#: .././config.py:11331 msgid "Automatic video deletion preferences" msgstr "" -#: .././config.py:11305 +#: .././config.py:11336 msgid "Automatically delete downloaded videos after this many days" msgstr "" -#: .././config.py:11319 +#: .././config.py:11350 msgid "...but only delete videos which have been watched" msgstr "" -#: .././config.py:11343 +#: .././config.py:11374 msgid "Video matching preferences" msgstr "" -#: .././config.py:11348 +#: .././config.py:11379 msgid "When matching videos on the filesystem:" msgstr "" -#: .././config.py:11354 +#: .././config.py:11385 msgid "The video names must match exactly" msgstr "" -#: .././config.py:11361 +#: .././config.py:11392 msgid "The first # characters must match exactly" msgstr "" -#: .././config.py:11375 +#: .././config.py:11406 msgid "Ignore the last # characters; the remaining name must match exactly" msgstr "" -#: .././config.py:11421 +#: .././config.py:11452 msgid "_Temporary folders" msgstr "" -#: .././config.py:11427 +#: .././config.py:11458 msgid "Temporary folder preferences" msgstr "" -#: .././config.py:11432 +#: .././config.py:11463 msgid "Empty temporary folders when Tartube shuts down" msgstr "" -#: .././config.py:11441 +#: .././config.py:11472 msgid "(N.B. Temporary folders are always emptied when Tartube starts up)" msgstr "" -#: .././config.py:11449 +#: .././config.py:11480 msgid "Open temporary folders (on the desktop) when Tartube shuts down" msgstr "" -#: .././config.py:11487 +#: .././config.py:11518 msgid "The Tartube database contains:" msgstr "" -#: .././config.py:11547 +#: .././config.py:11578 msgid "Custom folders" msgstr "" -#: .././config.py:11570 +#: .././config.py:11601 msgid "Calculate" msgstr "" #. Add this tab... -#: .././config.py:11696 +#: .././config.py:11727 msgid "_Windows" msgstr "" -#: .././config.py:11719 +#: .././config.py:11750 msgid "_Main window" msgstr "" -#: .././config.py:11725 +#: .././config.py:11756 msgid "Main window preferences" msgstr "" -#: .././config.py:11730 +#: .././config.py:11761 msgid "Remember the size of the main window when shutting down" msgstr "" -#: .././config.py:11738 +#: .././config.py:11769 msgid "Also remember the position of main window sliders" msgstr "" -#: .././config.py:11755 +#: .././config.py:11786 msgid "Don't show the main window toolbar" msgstr "" -#: .././config.py:11763 +#: .././config.py:11794 msgid "Don't show labels in the main window toolbar" msgstr "" -#: .././config.py:11781 +#: .././config.py:11812 msgid "" "Replace stock icons with custom icons (in case stock icons are not visible)" msgstr "" -#: .././config.py:11791 +#: .././config.py:11822 msgid "Show tooltips for videos, channels, playlists and folders" msgstr "" -#: .././config.py:11799 +#: .././config.py:11830 msgid "Show errors/warnings in tooltips (but not in the Videos tab)" msgstr "" -#: .././config.py:11817 +#: .././config.py:11848 msgid "Disable the 'Download all' buttons in the toolbar and the Videos Tab" msgstr "" -#: .././config.py:11828 +#: .././config.py:11859 msgid "In the Progress Tab, hide finished videos / channels / playlists" msgstr "" -#: .././config.py:11837 +#: .././config.py:11868 msgid "In the Progress Tab, show results in reverse order" msgstr "" -#: .././config.py:11845 +#: .././config.py:11876 msgid "When Tartube starts, automatically open the Classic Mode tab" msgstr "" -#: .././config.py:11859 +#: .././config.py:11890 msgid "" "In the Classic Mode Tab, when adding URLs, remove duplicates rather than " "retaining them" msgstr "" -#: .././config.py:11873 +#: .././config.py:11904 msgid "In the Errors/Warnings Tab, don't reset the tab text when it is clicked" msgstr "" -#: .././config.py:11896 +#: .././config.py:11927 msgid "Video Index (left side of the Videos Tab)" msgstr "" -#: .././config.py:11902 +#: .././config.py:11933 msgid "Show smaller icons in the Video Index" msgstr "" -#: .././config.py:11912 +#: .././config.py:11943 msgid "" "In the Video Index, show detailed statistics about the videos in each " "channel / playlist / folder" msgstr "" -#: .././config.py:11923 +#: .././config.py:11954 msgid "" "After clicking on a folder, automatically expand/collapse the tree around it" msgstr "" -#: .././config.py:11934 +#: .././config.py:11965 msgid "Expand the whole tree, not just the level beneath the clicked folder" msgstr "" -#: .././config.py:11955 +#: .././config.py:11986 msgid "Video Catalogue (right side of the Videos Tab)" msgstr "" -#: .././config.py:11962 +#: .././config.py:11993 msgid "Show 'today' and 'yesterday' as the date, when possible" msgstr "" -#: .././config.py:11972 +#: .././config.py:12003 msgid "Draw a frame around each video" msgstr "" -#: .././config.py:11982 +#: .././config.py:12013 msgid "Draw status icons for each video" msgstr "" -#: .././config.py:11991 +#: .././config.py:12022 msgid "Thumbnail size (when videos are displayed on a grid)" msgstr "" -#: .././config.py:12019 +#: .././config.py:12050 msgid "Show livestreams with a different background colour" msgstr "Show livestreams with a different background color" -#: .././config.py:12027 +#: .././config.py:12058 msgid "Use same background colours for livestream and debut videos" msgstr "Use same background colors for livestream and debut videos" -#: .././config.py:12055 +#: .././config.py:12086 msgid "_Drag" msgstr "" -#: .././config.py:12059 +#: .././config.py:12090 msgid "Drag and drop preferences" msgstr "" -#: .././config.py:12065 +#: .././config.py:12096 msgid "When dragging and dropping videos to an external application..." msgstr "" -#: .././config.py:12071 +#: .././config.py:12102 msgid "Transfer the video's full file path" msgstr "" -#: .././config.py:12079 +#: .././config.py:12110 msgid "Transfer the video's source URL" msgstr "" -#: .././config.py:12087 +#: .././config.py:12118 msgid "Transfer the video's name" msgstr "" -#: .././config.py:12095 +#: .././config.py:12126 msgid "Transfer the thumbnail's full file path" msgstr "" -#: .././config.py:12111 +#: .././config.py:12142 msgid "_System tray" msgstr "" -#: .././config.py:12117 +#: .././config.py:12148 msgid "System tray preferences" msgstr "" -#: .././config.py:12122 +#: .././config.py:12153 msgid "Show icon in system tray" msgstr "" -#: .././config.py:12131 +#: .././config.py:12162 msgid "Close to the tray, rather than closing the application" msgstr "" -#: .././config.py:12157 +#: .././config.py:12188 msgid "D_ialogues" msgstr "" -#: .././config.py:12163 +#: .././config.py:12194 msgid "Dialogue window preferences" msgstr "" -#: .././config.py:12168 +#: .././config.py:12199 msgid "When adding channels/playlists, keep the dialogue window open" msgstr "" -#: .././config.py:12178 +#: .././config.py:12209 msgid "When the dialogue window opens, add URLs from the system clipboard" msgstr "" -#: .././config.py:12206 +#: .././config.py:12237 msgid "_Errors/Warnings" msgstr "" -#: .././config.py:12214 +#: .././config.py:12245 msgid "Errors/Warnings tab preferences" msgstr "" -#: .././config.py:12219 +#: .././config.py:12250 msgid "Show Tartube error messages" msgstr "" -#: .././config.py:12227 +#: .././config.py:12258 msgid "Show Tartube warning messages" msgstr "" -#: .././config.py:12235 +#: .././config.py:12266 msgid "Show server error messages" msgstr "" -#: .././config.py:12246 +#: .././config.py:12277 msgid "Show server warning messages" msgstr "" -#: .././config.py:12258 +#: .././config.py:12289 msgid "Downloader error/warning preferences" msgstr "" -#: .././config.py:12263 +#: .././config.py:12294 msgid "TRANSLATOR'S NOTE: These error messages are always in English" msgstr "" -#: .././config.py:12267 +#: .././config.py:12298 msgid "Ignore 'Child process exited with non-zero code' errors" msgstr "" -#: .././config.py:12276 +#: .././config.py:12307 msgid "" "Ignore 'Unable to download video data' and 'Unable to extract video data' " "errors" msgstr "" -#: .././config.py:12286 +#: .././config.py:12317 msgid "Ignore 'Did not get any data blocks' errors" msgstr "" -#: .././config.py:12295 +#: .././config.py:12326 msgid "Ignore 'Requested formats are incompatible for merge' warnings" msgstr "" -#: .././config.py:12304 +#: .././config.py:12335 msgid "Ignore 'No video formats found' errors" msgstr "" -#: .././config.py:12312 +#: .././config.py:12343 msgid "Ignore 'There are no annotations to write' warnings" msgstr "" -#: .././config.py:12320 +#: .././config.py:12351 msgid "Ignore 'Video doesn't have subtitles' warnings" msgstr "" -#: .././config.py:12336 +#: .././config.py:12367 msgid "_Websites" msgstr "" -#: .././config.py:12344 +#: .././config.py:12375 msgid "YouTube error/warning preferences" msgstr "" -#: .././config.py:12349 +#: .././config.py:12380 msgid "Ignore YouTube copyright errors" msgstr "" -#: .././config.py:12357 +#: .././config.py:12388 msgid "Ignore YouTube age-restriction errors" msgstr "" -#: .././config.py:12365 +#: .././config.py:12396 msgid "Ignore YouTube deletion by uploader errors" msgstr "" -#: .././config.py:12373 +#: .././config.py:12404 msgid "Ignore YouTube payment errors" msgstr "" -#: .././config.py:12382 +#: .././config.py:12413 msgid "General preferences" msgstr "" -#: .././config.py:12388 +#: .././config.py:12419 msgid "" "Ignore any errors/warnings which match lines in this list (applies to all " "websites)" msgstr "" -#: .././config.py:12402 +#: .././config.py:12433 msgid "These are ordinary strings" msgstr "" -#: .././config.py:12409 +#: .././config.py:12440 msgid "These are regular expressions (regexes)" msgstr "" #. Add this tab... -#: .././config.py:12438 +#: .././config.py:12469 msgid "_Scheduling" msgstr "" -#: .././config.py:12455 +#: .././config.py:12486 msgid "_Start" msgstr "" -#: .././config.py:12461 +#: .././config.py:12492 msgid "Scheduled download preferences" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Priority" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Whole" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Shutdown" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "D/L All" msgstr "" -#: .././config.py:12483 +#: .././config.py:12514 msgid "Join mode" msgstr "" -#: .././config.py:12537 .././config.py:14468 .././config.py:14733 +#: .././config.py:12568 .././config.py:14499 .././config.py:14764 msgid "Edit" msgstr "" -#: .././config.py:12564 .././config.py:14504 .././config.py:14769 +#: .././config.py:12595 .././config.py:14535 .././config.py:14800 msgid "Delete" msgstr "" -#: .././config.py:12632 +#: .././config.py:12663 msgid "S_top" msgstr "" -#: .././config.py:12638 +#: .././config.py:12669 msgid "Scheduled stop preferences" msgstr "" -#: .././config.py:12643 +#: .././config.py:12674 msgid "Stop all download operations after this much time" msgstr "" -#: .././config.py:12691 +#: .././config.py:12722 msgid "Stop all download operations after this many videos" msgstr "" -#: .././config.py:12718 +#: .././config.py:12749 msgid "Stop all download operations after this much disk space" msgstr "" -#: .././config.py:12761 +#: .././config.py:12792 msgid "" "N.B. Disk space is estimated. This setting does not apply to simulated " "downloads" msgstr "" -#: .././config.py:12799 +#: .././config.py:12830 msgid "_Performance" msgstr "" -#: .././config.py:12807 +#: .././config.py:12838 msgid "Performance limits" msgstr "" -#: .././config.py:12812 +#: .././config.py:12843 msgid "Limit simultaneous downloads to" msgstr "" -#: .././config.py:12830 +#: .././config.py:12861 msgid "Limit download speed to" msgstr "" -#: .././config.py:12856 +#: .././config.py:12887 msgid "Overriding video format options, limit video resolution to" msgstr "" -#: .././config.py:12878 +#: .././config.py:12909 msgid "Time-saving settings" msgstr "" -#: .././config.py:12884 +#: .././config.py:12915 msgid "" "Stop checking/downloading a channel/playlist when it starts sending videos " "you already have" msgstr "" -#: .././config.py:12895 +#: .././config.py:12926 msgid "Stop after this many videos (when checking)" msgstr "" -#: .././config.py:12910 +#: .././config.py:12941 msgid "Stop after this many videos (when downloading)" msgstr "" -#: .././config.py:12941 +#: .././config.py:12972 msgid "P_references" msgstr "" -#: .././config.py:12949 +#: .././config.py:12980 msgid "URL flexibility preferences" msgstr "" -#: .././config.py:12956 +#: .././config.py:12987 msgid "" "If a video's URL represents a channel/playlist, not a video, don't download " "it" msgstr "" -#: .././config.py:12965 +#: .././config.py:12996 msgid "...or, download multiple videos into the containing folder" msgstr "" -#: .././config.py:12975 +#: .././config.py:13006 msgid "...or, create a new channel, and download the videos into that" msgstr "" -#: .././config.py:12986 +#: .././config.py:13017 msgid "...or, create a new playlist, and download the videos into that" msgstr "" -#: .././config.py:13018 +#: .././config.py:13049 msgid "Missing video preferences" msgstr "" -#: .././config.py:13024 +#: .././config.py:13055 msgid "" "Add videos which have been removed from a channel/playlist to the Missing " "Videos folder" msgstr "" -#: .././config.py:13035 +#: .././config.py:13066 msgid "Only add videos that were uploaded within this many days" msgstr "" -#: .././config.py:13076 +#: .././config.py:13107 msgid "Invidious mirror" msgstr "" -#: .././config.py:13082 +#: .././config.py:13113 msgid "To find an updated list of Invidious mirrors, use any search engine!" msgstr "" -#: .././config.py:13095 .././config.py:13407 +#: .././config.py:13126 .././config.py:13438 msgid "Type the exact text that replaces youtube.com e.g." msgstr "" -#: .././config.py:13121 +#: .././config.py:13152 msgid "Download operation preferences" msgstr "" -#: .././config.py:13127 +#: .././config.py:13158 msgid "Automatically update downloader before every download operation" msgstr "" -#: .././config.py:13139 +#: .././config.py:13170 msgid "Automatically save files at the end of all operations" msgstr "" -#: .././config.py:13149 +#: .././config.py:13180 msgid "For simulated downloads, don't check a video in a folder more than once" msgstr "" -#: .././config.py:13160 +#: .././config.py:13191 msgid "If a download stalls, restart it after this many minutes" msgstr "" -#: .././config.py:13181 +#: .././config.py:13212 msgid "If a network problem is detected, restart the download immediately" msgstr "" -#: .././config.py:13193 +#: .././config.py:13224 msgid "Maximum restarts after a stalled download (0 for no maximum)" msgstr "" -#: .././config.py:13234 +#: .././config.py:13265 msgid "" "Allow downloader to create its own archive file (so deleted videos are not " "re-downloaded)" msgstr "" -#: .././config.py:13245 +#: .././config.py:13276 msgid "" "Also create an archive file when downloading from the Classic Mode tab (not " "recommended)" msgstr "" -#: .././config.py:13256 +#: .././config.py:13287 msgid "When checking videos, apply a 60-second timeout" msgstr "" -#: .././config.py:13266 +#: .././config.py:13297 msgid "" "Convert .webp thumbnails into .jpg thumbnails (using FFmpeg) after " "downloading them" msgstr "" -#: .././config.py:13283 +#: .././config.py:13314 msgid "_Custom" msgstr "" -#: .././config.py:13288 +#: .././config.py:13319 msgid "Custom download preferences" msgstr "" -#: .././config.py:13294 +#: .././config.py:13325 msgid "" "In custom downloads, download each video independently of its channel or " "playlist" msgstr "" -#: .././config.py:13305 +#: .././config.py:13336 msgid "" "In custom downloads, apply a delay after each video/channel/playlist is " "download" msgstr "" -#: .././config.py:13315 +#: .././config.py:13346 msgid "Maximum delay to apply (in minutes)" msgstr "" -#: .././config.py:13332 +#: .././config.py:13363 msgid "Minimum delay to apply (in minutes; randomises the actual delay)" msgstr "Minimum delay to apply (in minutes; randomizes the actual delay)" -#: .././config.py:13355 +#: .././config.py:13386 msgid "In custom downloads, obtain a YouTube video from the original website" msgstr "" -#: .././config.py:13365 +#: .././config.py:13396 msgid "In custom downloads, obtain the video from HookTube rather than YouTube" msgstr "" -#: .././config.py:13377 +#: .././config.py:13408 msgid "" "In custom downloads, obtain the video from Invidious rather than YouTube" msgstr "" -#: .././config.py:13389 +#: .././config.py:13420 msgid "" "In custom downloads, obtain the video from the YouTube front-end specified " "below" msgstr "" -#: .././config.py:13489 +#: .././config.py:13520 msgid "Livestream preferences (compatible websites only)" msgstr "" -#: .././config.py:13495 +#: .././config.py:13526 msgid "Detect livestreams announced within this many days" msgstr "" -#: .././config.py:13510 +#: .././config.py:13541 msgid "How often to check the status of livestreams (in minutes)" msgstr "" -#: .././config.py:13529 +#: .././config.py:13560 msgid "Check more frequently when a livestream is due to start" msgstr "" -#: .././config.py:13572 +#: .././config.py:13603 msgid "Broadcast preferences (compatible websites only)" msgstr "" -#: .././config.py:13579 +#: .././config.py:13610 msgid "" "Use Youtube Stream Capture to download broadcasting livestreams (requires " "aria2)" msgstr "" -#: .././config.py:13589 +#: .././config.py:13620 msgid "Timeout after this many minutes of inactivity" msgstr "" -#: .././config.py:13603 +#: .././config.py:13634 msgid "Number of restarts after a timeout" msgstr "" -#: .././config.py:13618 +#: .././config.py:13649 msgid "" "Bypass usual limits on simultaneous downloads, so that all broadcasts can be " "downloaded" msgstr "" -#: .././config.py:13659 +#: .././config.py:13690 msgid "_Proxies" msgstr "" -#: .././config.py:13665 +#: .././config.py:13696 msgid "Proxies" msgstr "" -#: .././config.py:13672 +#: .././config.py:13703 msgid "" "During a download operation, Tartube will cycle betwween the proxies in this " "list" msgstr "" -#: .././config.py:13693 +#: .././config.py:13724 msgid "_Actions" msgstr "" -#: .././config.py:13702 +#: .././config.py:13733 msgid "Livestream actions (can be toggled for individual videos)" msgstr "" -#: .././config.py:13709 +#: .././config.py:13740 msgid "(currently disabled on MS Windows)" msgstr "" -#: .././config.py:13714 +#: .././config.py:13745 msgid "When a livestream starts, show a desktop notification" msgstr "" -#: .././config.py:13728 +#: .././config.py:13759 msgid "When a livestream starts, sound an alarm" msgstr "" -#: .././config.py:13751 +#: .././config.py:13782 msgid "Plays the selected sound effect" msgstr "" -#: .././config.py:13758 +#: .././config.py:13789 msgid "When a livestream starts, open it in the system's web browser" msgstr "" -#: .././config.py:13770 +#: .././config.py:13801 msgid "When a livestream starts, begin downloading it immediately" msgstr "" -#: .././config.py:13796 +#: .././config.py:13827 msgid "Desktop notification preferences" msgstr "" -#: .././config.py:13803 +#: .././config.py:13834 msgid "Show a dialogue window at the end of an operation" msgstr "" -#: .././config.py:13828 +#: .././config.py:13859 msgid "Don't notify the user at the end of an operation" msgstr "" -#: .././config.py:13882 +#: .././config.py:13913 msgid "_Forks" msgstr "" -#: .././config.py:13888 +#: .././config.py:13919 msgid "Forks of youtube-dl" msgstr "" -#: .././config.py:13917 -msgid "Use youtube-dlc" +#: .././config.py:13948 +msgid "Use yt-dlp" msgstr "" -#: .././config.py:13946 +#: .././config.py:13977 msgid "Use youtube-dl" msgstr "" -#: .././config.py:13974 +#: .././config.py:14005 msgid "Use a different fork of youtube-dl:" msgstr "" -#: .././config.py:14051 +#: .././config.py:14082 msgid "_File paths" msgstr "" -#: .././config.py:14058 +#: .././config.py:14089 msgid "Downloader file paths" msgstr "" -#: .././config.py:14064 +#: .././config.py:14095 msgid "Path to the executable" msgstr "" #. (Signal connect appears below) -#: .././config.py:14070 .././config.py:14218 .././config.py:14259 -#: .././config.py:14329 .././config.py:20068 +#: .././config.py:14101 .././config.py:14249 .././config.py:14290 +#: .././config.py:14360 .././config.py:20098 msgid "Use default path" msgstr "" -#: .././config.py:14075 .././config.py:20080 +#: .././config.py:14106 .././config.py:20110 msgid "Use local path" msgstr "" -#: .././config.py:14079 +#: .././config.py:14110 msgid "Use custom path" msgstr "" -#: .././config.py:14087 .././config.py:20094 +#: .././config.py:14118 .././config.py:20124 msgid "Use PyPI path" msgstr "" -#: .././config.py:14138 +#: .././config.py:14169 msgid "Command for update operations" msgstr "" -#: .././config.py:14186 +#: .././config.py:14217 msgid "_FFmpeg / AVConv" msgstr "" -#: .././config.py:14194 +#: .././config.py:14225 msgid "Post-processing file paths" msgstr "" -#: .././config.py:14199 +#: .././config.py:14230 msgid "" "You only need to set these paths if Tartube cannot find FFmpeg / AVConv " "automatically" msgstr "" -#: .././config.py:14206 +#: .././config.py:14237 msgid "Path to the FFmpeg executable" msgstr "" -#: .././config.py:14233 +#: .././config.py:14264 msgid "Install from main menu" msgstr "" -#: .././config.py:14247 +#: .././config.py:14278 msgid "Path to the AVConv executable" msgstr "" -#: .././config.py:14274 +#: .././config.py:14305 msgid "Not supported on MS Windows" msgstr "" -#: .././config.py:14297 +#: .././config.py:14328 msgid "_Stream Capture" msgstr "" -#: .././config.py:14305 +#: .././config.py:14336 msgid "Youtube Stream Capture file path" msgstr "" -#: .././config.py:14310 +#: .././config.py:14341 msgid "" "Tartube includes a copy of this script, but you can use a different copy, if " "you want" msgstr "" -#: .././config.py:14317 +#: .././config.py:14348 msgid "Path to the YT Stream Capture executable" msgstr "" -#: .././config.py:14375 +#: .././config.py:14406 msgid "_Download options" msgstr "" -#: .././config.py:14382 +#: .././config.py:14413 msgid "List of download options managers" msgstr "" -#: .././config.py:14402 +#: .././config.py:14433 msgid "Classic Mode" msgstr "" -#: .././config.py:14403 +#: .././config.py:14434 msgid "Applied to media" msgstr "" -#: .././config.py:14477 .././config.py:14742 +#: .././config.py:14508 .././config.py:14773 msgid "Export" msgstr "" -#: .././config.py:14486 .././config.py:14751 +#: .././config.py:14517 .././config.py:14782 msgid "Clone" msgstr "" -#: .././config.py:14495 +#: .././config.py:14526 msgid "Use in Classic Mode tab" msgstr "" -#: .././config.py:14520 .././config.py:14785 +#: .././config.py:14551 .././config.py:14816 msgid "Refresh list" msgstr "" -#: .././config.py:14601 +#: .././config.py:14632 msgid "_Preferences" msgstr "" -#: .././config.py:14608 +#: .././config.py:14639 msgid "Download options preferences" msgstr "" -#: .././config.py:14614 +#: .././config.py:14645 msgid "" "When applying download options to something, clone the general download " "options" msgstr "" -#: .././config.py:14625 +#: .././config.py:14656 msgid "After downloading a video, destroy its download options" msgstr "" -#: .././config.py:14642 +#: .././config.py:14673 msgid "_FFmpeg options" msgstr "" -#: .././config.py:14649 +#: .././config.py:14680 msgid "List of FFmpeg options managers" msgstr "" -#: .././config.py:14669 +#: .././config.py:14700 msgid "Current" msgstr "" -#: .././config.py:14760 +#: .././config.py:14791 msgid "Use these options" msgstr "" #. Add this tab... -#: .././config.py:14851 +#: .././config.py:14882 msgid "O_utput" msgstr "" -#: .././config.py:14870 +#: .././config.py:14901 msgid "_Output Tab" msgstr "" -#: .././config.py:14878 +#: .././config.py:14909 msgid "Output Tab preferences" msgstr "" -#: .././config.py:14883 +#: .././config.py:14914 msgid "Display downloader system commands in the Output Tab" msgstr "" -#: .././config.py:14892 +#: .././config.py:14923 msgid "Display output from downloader's STDOUT in the Output Tab" msgstr "" -#: .././config.py:14901 .././config.py:15063 +#: .././config.py:14932 .././config.py:15094 msgid "...but don't write each video's JSON data" msgstr "" -#: .././config.py:14912 .././config.py:15074 +#: .././config.py:14943 .././config.py:15105 msgid "...but don't write each video's download progress" msgstr "" -#: .././config.py:14931 +#: .././config.py:14962 msgid "Display output from downloader's STDERR in the Output Tab" msgstr "" -#: .././config.py:14940 +#: .././config.py:14971 msgid "Limit the size of Output Tab pages to" msgstr "" -#: .././config.py:14961 +#: .././config.py:14992 msgid "Empty pages in the Output Tab at the start of every operation" msgstr "" -#: .././config.py:14971 +#: .././config.py:15002 msgid "" "Show a summary of active threads (changes are applied when Tartube restarts)" msgstr "" -#: .././config.py:14983 +#: .././config.py:15014 msgid "During an update operation, automatically switch to the Output tab" msgstr "" -#: .././config.py:14994 +#: .././config.py:15025 msgid "During a refresh operation, show all matching videos in the Output Tab" msgstr "" -#: .././config.py:15005 +#: .././config.py:15036 msgid "...also show all non-matching videos" msgstr "" -#: .././config.py:15034 +#: .././config.py:15065 msgid "_Terminal window" msgstr "" -#: .././config.py:15040 +#: .././config.py:15071 msgid "Terminal window preferences" msgstr "" -#: .././config.py:15045 +#: .././config.py:15076 msgid "Write downloader system commands to the terminal window" msgstr "" -#: .././config.py:15054 +#: .././config.py:15085 msgid "Write output from downloader's STDOUT to the terminal window" msgstr "" -#: .././config.py:15096 +#: .././config.py:15127 msgid "Write output from downloader's STDERR to the terminal window" msgstr "" -#: .././config.py:15115 +#: .././config.py:15146 msgid "_Both" msgstr "" -#: .././config.py:15120 +#: .././config.py:15151 msgid "" "Special preferences (applies to both the Output Tab and the terminal window)" msgstr "" -#: .././config.py:15127 +#: .././config.py:15158 msgid "Downloader writes verbose output (youtube-dl debugging mode)" msgstr "" -#: .././config.py:15136 +#: .././config.py:15167 msgid "Youtube Stream Capture writes verbose output" msgstr "" -#: .././config.py:16053 +#: .././config.py:16084 msgid "Are you sure you want to create a new database at this location?" msgstr "" -#: .././config.py:16160 +#: .././config.py:16191 msgid "Are you sure you want to forget this database?" msgstr "" -#: .././config.py:16195 +#: .././config.py:16226 msgid "Are you sure you want to forget all databases except the current one?" msgstr "" -#: .././config.py:16399 +#: .././config.py:16430 msgid "No database exists at this location:" msgstr "" -#: .././config.py:16401 +#: .././config.py:16432 msgid "Do you want to create a new one?" msgstr "" -#: .././config.py:17041 +#: .././config.py:17072 msgid "The current options manager cannot be deleted" msgstr "" -#: .././config.py:17049 .././config.py:18049 +#: .././config.py:17080 .././config.py:18080 msgid "Are you sure you want to delete this options manager?" msgstr "" -#: .././config.py:17243 .././config.py:17590 .././config.py:19074 +#: .././config.py:17274 .././config.py:17621 .././config.py:19105 msgid "The new setting will be applied when Tartube restarts" msgstr "" -#: .././config.py:18041 +#: .././config.py:18072 msgid "The default options manager cannot be deleted" msgstr "" -#: .././config.py:18736 +#: .././config.py:18767 msgid "There is already a scheduled download with that name" msgstr "" -#: .././config.py:18783 +#: .././config.py:18814 msgid "Are you sure you want to delete this scheduled download?" msgstr "" -#: .././config.py:18951 +#: .././config.py:18982 msgid "Please select the AVConv executable" msgstr "" -#: .././config.py:18984 +#: .././config.py:19015 msgid "Please select the FFmpeg executable" msgstr "" -#: .././config.py:19017 +#: .././config.py:19048 msgid "Please select the Youtube Stream Capture executable" msgstr "" -#: .././config.py:19807 +#: .././config.py:19837 msgid "Select the youtube-dl-compatible executable" msgstr "" -#: .././config.py:19991 +#: .././config.py:20021 msgid "Database file not loaded" msgstr "" -#: .././config.py:20011 +#: .././config.py:20041 msgid "Did not try to load the database file" msgstr "" -#: .././config.py:20036 +#: .././config.py:20066 msgid "Database file loaded" msgstr "" @@ -6385,97 +6397,97 @@ msgstr "" msgid "Cannot download videos in a private folder" msgstr "" -#: .././downloads.py:2986 .././downloads.py:5243 +#: .././downloads.py:2986 .././downloads.py:5256 msgid "Download did not start" msgstr "" -#: .././downloads.py:2994 .././downloads.py:5255 .././info.py:364 +#: .././downloads.py:2994 .././downloads.py:5268 .././info.py:364 #: .././updates.py:278 .././updates.py:476 msgid "Child process exited with non-zero code: {}" msgstr "" -#: .././downloads.py:3108 .././downloads.py:4060 +#: .././downloads.py:3108 .././downloads.py:4072 msgid "" "This video has a URL that points to a channel or a playlist, not a video" msgstr "" -#: .././downloads.py:3937 .././downloads.py:3951 +#: .././downloads.py:3949 .././downloads.py:3963 msgid "Simulated download of:" msgstr "" -#: .././downloads.py:3959 +#: .././downloads.py:3971 msgid "Simulated download of video with unprintable characters" msgstr "" #. This object creates more messages for the Output Tab and/or terminal, #. than downloads.VideoDownloader would do, as the output generated by #. Youtube Stream Capture is not easy for the user to interpret -#: .././downloads.py:5134 +#: .././downloads.py:5147 msgid "Tartube is starting the stream capture..." msgstr "" -#: .././downloads.py:5152 +#: .././downloads.py:5165 msgid "Could not create a destination directory, capture halted" msgstr "" -#: .././downloads.py:5173 .././downloads.py:5198 +#: .././downloads.py:5186 .././downloads.py:5211 msgid "Youtube Stream Capture script not found:" msgstr "" -#: .././downloads.py:5247 +#: .././downloads.py:5260 msgid "Failed to capture the livestream" msgstr "" -#: .././downloads.py:5251 +#: .././downloads.py:5264 msgid "Stream capture terminated" msgstr "" -#: .././downloads.py:5261 +#: .././downloads.py:5274 msgid "" "Stream captured terminated without downloading any video segments " "(indicating an error with the stream)" msgstr "" #. Capture successful -#: .././downloads.py:5277 +#: .././downloads.py:5290 msgid "Stream capture successful" msgstr "" #. Show a confirmation message -#: .././downloads.py:5307 +#: .././downloads.py:5320 msgid "Merging file segments..." msgstr "" -#: .././downloads.py:5327 +#: .././downloads.py:5340 msgid "Segment merge did not start" msgstr "" -#: .././downloads.py:5338 +#: .././downloads.py:5351 msgid "Segment merge completed, but path not detected" msgstr "" -#: .././downloads.py:5348 +#: .././downloads.py:5361 msgid "Segment merge completed, but output file not found" msgstr "" -#: .././downloads.py:5369 +#: .././downloads.py:5382 msgid "File moved to:" msgstr "" -#: .././downloads.py:5374 +#: .././downloads.py:5387 msgid "Livestream download is complete" msgstr "" -#: .././downloads.py:5379 +#: .././downloads.py:5392 msgid "Failed to move output file" msgstr "" -#: .././downloads.py:5548 +#: .././downloads.py:5561 #, python-brace-format msgid "Stream capture is frozen, trying again (restart #{0})" msgstr "" -#: .././downloads.py:5555 +#: .././downloads.py:5568 msgid "Stream capture is frozen, giving up" msgstr "" diff --git a/locale/ko_KR/LC_MESSAGES/base.mo b/locale/ko_KR/LC_MESSAGES/base.mo index 1f1e8bdbf8daf2d7f09952b8f7dcd4ffc2088430..c8f3ace486a62fe153b36dc985406abb1e034d21 100644 GIT binary patch delta 34310 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 ObFk&kzIlAZgZ~fgB7aK& delta 34733 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 diff --git a/locale/ko_KR/LC_MESSAGES/base.po b/locale/ko_KR/LC_MESSAGES/base.po index 886a710..c847be9 100644 --- a/locale/ko_KR/LC_MESSAGES/base.po +++ b/locale/ko_KR/LC_MESSAGES/base.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 16:51+0000\n" +"POT-Creation-Date: 2021-02-28 10:41+0000\n" "PO-Revision-Date: 2021-02-12 15:23+0900\n" "Last-Translator: mirusu400<mirusu400@naver.com>\n" "Language-Team: mirusu400\n" @@ -37,7 +37,7 @@ msgstr "크게" msgid "Enormous" msgstr "엄청 크게" -#: .././mainapp.py:945 +#: .././mainapp.py:944 msgid "" "Failed to convert a thumbnail from .webp to .jpg. No more conversions will " "be attempted until you install FFmpeg on your system, or (if FFmpeg is " @@ -50,158 +50,158 @@ msgstr "" "이 시도되지 않습니다. 경로 설정을 진행했다면 Tartube를 다시 시작해 주세요. 이" "러한 메시지를 표시하지 않을려면, 썸네일 변환 기능을 꺼주세요" -#: .././mainapp.py:2665 +#: .././mainapp.py:2664 msgid "" "Tartube can't create the folder in which its configuration file is saved" msgstr "Tartube는 구성 파일이 저장되는 폴더를 만들 수 없습니다" #. Load/save has been disabled. Show the error message in a dialogue #. window, then shut down -#: .././mainapp.py:2712 +#: .././mainapp.py:2711 msgid "Tartube failed to start because:" msgstr "Tartube는 다음과 같은 이유로 시작하지 못했습니다:" -#: .././mainapp.py:2720 +#: .././mainapp.py:2719 msgid "If you don't know how to resolve this error, please contact the authors" msgstr "이 문제를 해결할 방법을 모르겠으면, 개발자에게 문의해주세요" -#: .././mainapp.py:2948 +#: .././mainapp.py:2947 msgid "Because of an error, file load/save has been disabled" msgstr "오류에 의해, 파일 저장/불러오기 기능이 비활성화 되었습니다" -#: .././mainapp.py:2957 +#: .././mainapp.py:2956 msgid "Because of the error, file load/save has been disabled" msgstr "오류에 의해, 파일 저장/불러오기 기능이 비활성화 되었습니다" -#: .././mainapp.py:3041 +#: .././mainapp.py:3040 msgid "There is a download operation in progress." msgstr "진행중인 다운로드 작업이 있습니다." -#: .././mainapp.py:3043 +#: .././mainapp.py:3042 msgid "There is an update operation in progress." msgstr "진행중인 업데이트 작업이 있습니다." -#: .././mainapp.py:3045 +#: .././mainapp.py:3044 msgid "There is a refresh operation in progress." msgstr "진행중인 새로고침 작업이 있습니다." -#: .././mainapp.py:3047 +#: .././mainapp.py:3046 msgid "There is an info operation in progress." msgstr "진행중인 설정 작업이 있습니다." -#: .././mainapp.py:3049 +#: .././mainapp.py:3048 msgid "There is a tidy operation in progress." msgstr "진행중인 깔끔한 작업이 있습니다." -#: .././mainapp.py:3051 +#: .././mainapp.py:3050 msgid "There is a process operation in progress." msgstr "진행중인 처리 작업이 있습니다." -#: .././mainapp.py:3056 +#: .././mainapp.py:3055 msgid "Are you sure you want to quit Tartube?" msgstr "정말로 Tartube를 종료하시겠습니까?" -#: .././mainapp.py:3261 +#: .././mainapp.py:3260 msgid "Failed to load the Tartube config file (failed sanity check)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (완전성 검사 실패)" -#: .././mainapp.py:3284 +#: .././mainapp.py:3283 msgid "Failed to load the Tartube config file (file is locked)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (파일이 잠겨있음)" -#: .././mainapp.py:3314 +#: .././mainapp.py:3313 msgid "Failed to load the Tartube config file (JSON load failure)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (JSON 로드 실패)" -#: .././mainapp.py:3332 +#: .././mainapp.py:3331 msgid "Failed to load the Tartube config file (file is invalid)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (파일이 잘못됨)" -#: .././mainapp.py:3350 +#: .././mainapp.py:3349 msgid "" "Failed to load the Tartube config file (file cannot be read by this version)" msgstr "" "Tartube 구성 파일을 로드하지 못했습니다 (파일이 이 버전에선 읽을수 없음)" -#: .././mainapp.py:3365 +#: .././mainapp.py:3364 msgid "Failed to load the Tartube config file (missing file type)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (파일 유형 누락)" -#: .././mainapp.py:4222 +#: .././mainapp.py:4221 msgid "Failed to save the Tartube config file (failed sanity check)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (완전성 검사 실패)" -#: .././mainapp.py:4542 +#: .././mainapp.py:4541 msgid "Failed to save the Tartube config file (file is locked)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (파일이 잠겨있음)" -#: .././mainapp.py:4544 .././mainapp.py:4584 .././mainapp.py:5920 -#: .././mainapp.py:5976 .././mainapp.py:5982 +#: .././mainapp.py:4543 .././mainapp.py:4583 .././mainapp.py:5941 +#: .././mainapp.py:5997 .././mainapp.py:6003 msgid "File load/save has been disabled" msgstr "파일 저장/불러오기 기능이 비활성화 되었습니다" -#: .././mainapp.py:4563 +#: .././mainapp.py:4562 msgid "Failed to save the Tartube config file (file already in use)" msgstr "Tartube 구성 파일을 로드하지 못했습니다 (파일이 사용중임)" -#: .././mainapp.py:4583 +#: .././mainapp.py:4582 msgid "Failed to save the Tartube config file" msgstr "Tartube 구성 파일을 로드하지 못했습니다" -#: .././mainapp.py:4695 .././mainapp.py:4711 .././mainapp.py:4741 +#: .././mainapp.py:4694 .././mainapp.py:4710 .././mainapp.py:4740 msgid "Failed to load the Tartube database file" msgstr "Tartube 데이터베이스 파일을 로드하지 못했습니다" -#: .././mainapp.py:4756 +#: .././mainapp.py:4755 msgid "The Tartube database file is invalid" msgstr "Tartube 데이터베이스 파일이 잘못되었습니다" -#: .././mainapp.py:4772 +#: .././mainapp.py:4771 msgid "Database file can't be read by this version of Tartube" msgstr "데이터베이스 파일을 이 Tartube 버전에서 읽을 수 없습니다" -#: .././mainapp.py:5117 +#: .././mainapp.py:5116 msgid "Tartube is applying an essential database update" msgstr "Tartube가 중요한 데이터베이스 업데이트를 적용중입니다" -#: .././mainapp.py:5119 +#: .././mainapp.py:5118 msgid "This might take a few minutes, so please be patient" msgstr "이 작업은 몇 분 정도 시간이 걸릴 수 있으므로, 잠시 기다려 주십시오" -#: .././mainapp.py:5914 .././mainapp.py:5972 .././mainapp.py:5981 +#: .././mainapp.py:5935 .././mainapp.py:5993 .././mainapp.py:6002 msgid "Failed to save the Tartube database file" msgstr "Tartube 데이터베이스 파일을 저장하지 못했습니다" -#: .././mainapp.py:5917 +#: .././mainapp.py:5938 msgid "(Could not make a backup copy of the existing file)" msgstr "(존재하는 파일의 백업 복사본을 만들지 못했습니다)" -#: .././mainapp.py:5953 +#: .././mainapp.py:5974 msgid "Failed to save the Tartube database file (file already in use)" msgstr "" "Tartube 데이터베이스 파일을 저장하는 데 실패했습니다 (파일이 이미 사용중)" -#: .././mainapp.py:5974 +#: .././mainapp.py:5995 msgid "A backup of the previous file can be found at:" msgstr "이전 파일의 백업본을 발견했습니다:" -#: .././mainapp.py:6155 .././mainapp.py:6165 +#: .././mainapp.py:6176 .././mainapp.py:6186 msgid "Database file created" msgstr "데이터베이스 파일이 생성됨" -#: .././mainapp.py:6559 +#: .././mainapp.py:6580 msgid "Tartube's database can't be checked while an operation is in progress" msgstr "Tartube의 데이터베이스는 작업이 진행중일 때 확인할 수 없습니다" -#: .././mainapp.py:6795 +#: .././mainapp.py:6816 msgid "Database check complete, no inconsistencies found" msgstr "데이터베이스 확인이 완료되었습니다. 불일치 사항이 없습니다" -#: .././mainapp.py:6827 +#: .././mainapp.py:6848 msgid "Database check complete, problems found:" msgstr "데이터베이스 확인이 완료되었습니다. 문제가 있습니다:" -#: .././mainapp.py:6830 +#: .././mainapp.py:6851 msgid "" "Do you want to repair these problems? (The database will be fixed, but no " "files will be deleted)" @@ -209,100 +209,100 @@ msgstr "" "이 문제사항들을 복구하겠습니까? (데이터베이스가 수정되지만, 파일이 삭제되진 " "않습니다)" -#: .././mainapp.py:7003 +#: .././mainapp.py:7024 msgid "Database inconsistencies repaired" msgstr "데이터베이스 불일치 사항 복구됨" -#: .././mainapp.py:7895 .././config.py:16026 +#: .././mainapp.py:7918 .././config.py:16057 msgid "Please select Tartube's data folder" msgstr "Tartube의 데이터 폴더를 선택해 주세요" -#: .././mainapp.py:8258 +#: .././mainapp.py:8281 msgid "" "A download operation cannot start if one or more configuration windows are " "still open" msgstr "하나 이상의 설정 창이 열려 있으면 다운로드 작업이 시작되지 않습니다" -#: .././mainapp.py:8282 .././mainapp.py:8307 +#: .././mainapp.py:8305 .././mainapp.py:8330 #, python-brace-format msgid "You only have {0} / {1} Mb remaining on your device" msgstr "디바이스 장치에 남은 용량이 {0} / {1} Mb 밖에 없습니다" -#: .././mainapp.py:8310 .././mainapp.py:13970 .././mainapp.py:14086 -#: .././mainapp.py:14268 .././mainwin.py:17484 +#: .././mainapp.py:8333 .././mainapp.py:14006 .././mainapp.py:14122 +#: .././mainapp.py:14304 .././mainwin.py:17484 msgid "Are you sure you want to continue?" msgstr "계속 진행하시겠습니까?" -#: .././mainapp.py:8397 +#: .././mainapp.py:8420 msgid "There is nothing to check!" msgstr "확인할 항목이 없습니다!" -#: .././mainapp.py:8399 +#: .././mainapp.py:8422 msgid "There is nothing to download!" msgstr "다운로드 할 항 목이 없습니다!" -#: .././mainapp.py:8642 +#: .././mainapp.py:8665 msgid "Download operation complete" msgstr "다운로드 작업 완료" -#: .././mainapp.py:8644 +#: .././mainapp.py:8667 msgid "Download operation halted" msgstr "다운로드 작업 중지됨" -#: .././mainapp.py:8648 +#: .././mainapp.py:8671 msgid "Videos downloaded:" msgstr "다운로드한 비디오:" -#: .././mainapp.py:8649 +#: .././mainapp.py:8672 msgid "Videos checked:" msgstr "확인한 비디오:" -#: .././mainapp.py:8652 .././mainapp.py:9253 .././mainapp.py:9747 -#: .././mainapp.py:10147 +#: .././mainapp.py:8675 .././mainapp.py:9276 .././mainapp.py:9770 +#: .././mainapp.py:10170 msgid "Time taken:" msgstr "소요된 시간:" -#: .././mainapp.py:8757 +#: .././mainapp.py:8780 msgid "" "An update operation cannot start if one or more configuration windows are " "still open" msgstr "하나 이상의 설정 창이 열려 있으면 업데이트 작업이 시작되지 않습니다" -#: .././mainapp.py:8943 +#: .././mainapp.py:8966 msgid "Installation failed" msgstr "설치 실패" -#: .././mainapp.py:8945 +#: .././mainapp.py:8968 msgid "Installation complete" msgstr "설치 완료" -#: .././mainapp.py:8949 +#: .././mainapp.py:8972 msgid "Update operation failed" msgstr "업데이트 작업 실패" -#: .././mainapp.py:8951 +#: .././mainapp.py:8974 msgid "Update operation halted" msgstr "업데이트 작업 중지" -#: .././mainapp.py:8953 +#: .././mainapp.py:8976 msgid "Update operation complete" msgstr "업데이트 작업 성공" -#: .././mainapp.py:8955 +#: .././mainapp.py:8978 msgid "version:" msgstr "버전:" -#: .././mainapp.py:8959 +#: .././mainapp.py:8982 msgid "(unknown)" msgstr "(알수없음)" -#: .././mainapp.py:9046 +#: .././mainapp.py:9069 msgid "" "A refresh operation cannot start if one or more configuration windows are " "still open" msgstr "하나 이상의 설정 창이 열려 있으면 새로고침 작업이 시작되지 않습니다" -#: .././mainapp.py:9059 +#: .././mainapp.py:9082 msgid "" "During a refresh operation, Tartube analyses its data folder, looking for " "videos that haven't yet been added to its database" @@ -310,7 +310,7 @@ msgstr "" "새로고침 작업을 하는 동안, Tartube는 데이터 폴더를 분석하고, 데이터베이스에 " "추가되지 않은 비디오를 탐색합니다" -#: .././mainapp.py:9063 +#: .././mainapp.py:9086 msgid "" "You only need to perform a refresh operation if you have manually copied " "videos into Tartube's data folder" @@ -318,21 +318,21 @@ msgstr "" "Tartube의 데이터 폴더에 수동으로 비디오를 복사했다면 새로고침 작업을 해야 합" "니다" -#: .././mainapp.py:9070 +#: .././mainapp.py:9093 msgid "" "Before starting a refresh operation, you should click the 'Check all' button " "in the main window" msgstr "" "새로고침 작업을 시작하기 전에, 메인 화면의 '모두 선택' 버튼을 클릭해야 합니다" -#: .././mainapp.py:9077 +#: .././mainapp.py:9100 msgid "" "Before starting a refresh operation, you should right-click the channel and " "select 'Check channel'" msgstr "" "새로고침 작업을 시작하기 전에, 채널을 우클릭하고 '채널 검사'를 선택해주세요" -#: .././mainapp.py:9084 +#: .././mainapp.py:9107 msgid "" "Before starting a refresh operation, you should right-click the playlist and " "select 'Check playlist'" @@ -340,110 +340,110 @@ msgstr "" "새로고침 작업을 시작하기 전에, 플레이르스트를 우클릭하고 '플레이리스트 검" "사'를 선택해주세요" -#: .././mainapp.py:9091 +#: .././mainapp.py:9114 msgid "" "Before starting a refresh operation, you should right-click the folder and " "select 'Check folder'" msgstr "" "새로고침 작업을 시작하기 전에, 폴더를 우클릭하고 '폴더 검사'를 선택해주세요" -#: .././mainapp.py:9096 +#: .././mainapp.py:9119 msgid "Are you sure you want to proceed with the refresh operation?" msgstr "새로고침 작업을 계속하시겠습니까?" -#: .././mainapp.py:9248 +#: .././mainapp.py:9271 msgid "Refresh operation complete" msgstr "새로고침 작업 완료됨" -#: .././mainapp.py:9250 +#: .././mainapp.py:9273 msgid "Refresh operation halted" msgstr "새로고침 작업 중지됨" -#: .././mainapp.py:9355 +#: .././mainapp.py:9378 msgid "" "An info operation cannot start if one or more configuration windows are " "still open" msgstr "하나 이상의 설정 창이 열려있으면 설정 작업이 시작되지 않습니다" -#: .././mainapp.py:9471 +#: .././mainapp.py:9494 msgid "Operation failed" msgstr "작업 실패" -#: .././mainapp.py:9473 .././downloads.py:400 +#: .././mainapp.py:9496 .././downloads.py:400 msgid "Operation complete" msgstr "작업 성공" -#: .././mainapp.py:9475 +#: .././mainapp.py:9498 msgid "Click the Output Tab to see the results" msgstr "결과를 보려면 출력 탭을 클릭하세요" -#: .././mainapp.py:9488 +#: .././mainapp.py:9511 msgid "A new release is available!" msgstr "새 버전이 업데이트 되었습니다!" -#: .././mainapp.py:9490 +#: .././mainapp.py:9513 msgid "Your installation is up to date!" msgstr "설치된 버전이 최신 버전입니다!" -#: .././mainapp.py:9492 +#: .././mainapp.py:9515 msgid "Installed version:" msgstr "설치된 버전:" -#: .././mainapp.py:9497 +#: .././mainapp.py:9520 msgid "Stable release:" msgstr "안정 버전:" -#: .././mainapp.py:9502 +#: .././mainapp.py:9525 msgid "Stable release: not found" msgstr "안정 버전: 존재하지 않음" -#: .././mainapp.py:9505 +#: .././mainapp.py:9528 msgid "Development release:" msgstr "개발 버전:" -#: .././mainapp.py:9507 +#: .././mainapp.py:9530 msgid "Development release: not found" msgstr "개발 버전 존재하지 않음" -#: .././mainapp.py:9614 +#: .././mainapp.py:9637 msgid "" "A tidy operation cannot start if one or more configuration windows are still " "open" msgstr "하나 이상의 설정 창이 열려있으면 마무리 작업이 시작되지 않습니다" -#: .././mainapp.py:9742 +#: .././mainapp.py:9765 msgid "Tidy operation complete" msgstr "마무리 작업 완료" -#: .././mainapp.py:9744 +#: .././mainapp.py:9767 msgid "Tidy operation halted" msgstr "마무리 작업 중지됨" -#: .././mainapp.py:9911 .././mainwin.py:18169 +#: .././mainapp.py:9934 .././mainwin.py:18169 msgid "Livestream has started" msgstr "생방송이 시작됨" -#: .././mainapp.py:10136 +#: .././mainapp.py:10159 msgid "Process operation complete" msgstr "처리 작업 완료됨" -#: .././mainapp.py:10138 +#: .././mainapp.py:10161 msgid "Process operation halted" msgstr "처리 작업이 중지됨" -#: .././mainapp.py:10142 +#: .././mainapp.py:10165 msgid "Files processed:" msgstr "처리된 파일:" -#: .././mainapp.py:10143 +#: .././mainapp.py:10166 msgid "Errors:" msgstr "오류:" -#: .././mainapp.py:11403 .././mainapp.py:11578 +#: .././mainapp.py:11435 .././mainapp.py:11610 msgid "Cannot move anything to:" msgstr "옮길 수 없습니다:" -#: .././mainapp.py:11405 .././mainapp.py:11580 +#: .././mainapp.py:11437 .././mainapp.py:11612 msgid "" "because a file or folder with the same name already exists (although " "Tartube's database doesn't know anything about it)" @@ -451,7 +451,7 @@ msgstr "" "(Tartube의 데이터베이스에선 확인할 수 없지만) 같은 이름의 파일이나 폴더가 존" "재하기 때문입니다" -#: .././mainapp.py:11409 +#: .././mainapp.py:11441 msgid "" "You probably created that file/folder accidentally, in which case you should " "delete it manually before trying again" @@ -459,19 +459,19 @@ msgstr "" "해당 파일이나 폴더를 실수로 만들었을 수 있으므로, 이 경우 재시도 전에 수동으" "로 삭제해야 합니다" -#: .././mainapp.py:11423 .././mainapp.py:11598 +#: .././mainapp.py:11455 .././mainapp.py:11630 msgid "Are you sure you want to move this channel:" msgstr "이 채널을 이동하시겠습니까?:" -#: .././mainapp.py:11425 .././mainapp.py:11600 +#: .././mainapp.py:11457 .././mainapp.py:11632 msgid "Are you sure you want to move this playlist:" msgstr "이 플레이리스트를 이동하시겠습니까?:" -#: .././mainapp.py:11427 .././mainapp.py:11602 +#: .././mainapp.py:11459 .././mainapp.py:11634 msgid "Are you sure you want to move this folder:" msgstr "이 폴더를 이동하시겠습니까?:" -#: .././mainapp.py:11432 +#: .././mainapp.py:11464 msgid "" "This procedure will move all downloaded files to the top level of Tartube's " "data folder" @@ -479,21 +479,21 @@ msgstr "" "이 작업은 모든 다운로드 받은 파일을 Tartube 데이터 폴더의 최상위 위치로 이동" "합니다" -#: .././mainapp.py:11532 +#: .././mainapp.py:11564 msgid "Channels, playlists and folders can only be dragged into a folder" msgstr "채널, 플레이리스트, 폴더만 폴더 안으로 드래그 할 수 있습ㄴ디ㅏ" -#: .././mainapp.py:11545 +#: .././mainapp.py:11577 #, python-brace-format msgid "The fixed folder '{0}' cannot be moved (but it can still be hidden)" msgstr "고정된 폴더 '{0}'(은)는 이동할 수 없습니다 (하지만 숨길 순 있습니다)" -#: .././mainapp.py:11558 +#: .././mainapp.py:11590 #, python-brace-format msgid "The folder '{0}' can only contain videos" msgstr "폴더 '{0}'은(는) 비디오만 넣을 수 있습니다" -#: .././mainapp.py:11585 +#: .././mainapp.py:11617 msgid "" "You probably created that file/folder accidentally, in which case, you " "should delete it manually before trying again" @@ -501,15 +501,15 @@ msgstr "" "해당 파일이나 폴더를 실수로 만들었을 수 있으므로, 이 경우 재시도 전에 수동으" "로 삭제해야 합니다" -#: .././mainapp.py:11604 +#: .././mainapp.py:11636 msgid "into this folder:" msgstr "이 폴더로:" -#: .././mainapp.py:11608 +#: .././mainapp.py:11640 msgid "This procedure will move all downloaded files to the new location" msgstr "이 작업은 모든 다운로드 받은 파일을 새 위치로 이동합니다" -#: .././mainapp.py:11614 +#: .././mainapp.py:11646 msgid "" "WARNING: The destination folder is marked as temporary, so everything inside " "it will be DELETED when Tartube restarts!" @@ -517,101 +517,101 @@ msgstr "" "경고: 이 목적지 폴더는 임시 폴더이므로, Tartube가 재시작되면 해당 폴더 안의 " "모든게 삭제됩니다!!!" -#: .././mainapp.py:12078 +#: .././mainapp.py:12114 msgid "" "Are you SURE you want to delete files? This procedure cannot be reversed!" msgstr "정말로 파일을 삭제하겠습니까? 이 작업은 되돌릴 수 없습니다!" -#: .././mainapp.py:13954 .././mainapp.py:14070 .././mainapp.py:14252 +#: .././mainapp.py:13990 .././mainapp.py:14106 .././mainapp.py:14288 #, python-brace-format msgid "The channel contains {0} item(s), so this action may take a while" msgstr "이 채널은 {0}개의 항목이 있으므로, 시간이 걸릴 수 있습니다" -#: .././mainapp.py:13960 .././mainapp.py:14076 .././mainapp.py:14258 +#: .././mainapp.py:13996 .././mainapp.py:14112 .././mainapp.py:14294 #, python-brace-format msgid "The playlist contains {0} item(s), so this action may take a while" msgstr "이 플레이리스트는 {0}개의 항목이 있으므로, 시간이 걸릴 수 있습니다" -#: .././mainapp.py:13966 .././mainapp.py:14082 .././mainapp.py:14264 +#: .././mainapp.py:14002 .././mainapp.py:14118 .././mainapp.py:14300 #, python-brace-format msgid "The folder contains {0} item(s), so this action may take a while" msgstr "이 폴더는 {0}개의 항목이 있으므로, 시간이 걸릴 수 있습니다" -#: .././mainapp.py:14332 .././mainapp.py:18504 .././mainapp.py:18636 -#: .././mainapp.py:18767 +#: .././mainapp.py:14368 .././mainapp.py:18540 .././mainapp.py:18672 +#: .././mainapp.py:18803 #, python-brace-format msgid "The name '{0}' is not allowed" msgstr "파일 이름 '{0}'은(는) 허용되지 않았습니다" -#: .././mainapp.py:14341 +#: .././mainapp.py:14377 #, python-brace-format msgid "The name '{0}' is already in use" msgstr "파일 이름 '{0}'은(는) 이미 사용중입니다" -#: .././mainapp.py:14354 +#: .././mainapp.py:14390 #, python-brace-format msgid "Failed to rename '{0}'" msgstr "'{0}'로 이름변경에 실패했습니다." -#: .././mainapp.py:14701 +#: .././mainapp.py:14737 msgid "Select where to save the database export" msgstr "내보낸 데이터베이스를 저장할 위치를 선택하세요" -#: .././mainapp.py:14822 +#: .././mainapp.py:14858 msgid "There is nothing to export!" msgstr "내보낼 항목이 없습니다!" -#: .././mainapp.py:14862 .././mainapp.py:14928 +#: .././mainapp.py:14898 .././mainapp.py:14964 msgid "Failed to save the database export file:" msgstr "내보낸 데이터베이스 파일을 저장하는데 실패했습니다:" -#: .././mainapp.py:14936 +#: .././mainapp.py:14972 msgid "Database export file saved to:" msgstr "내보낸 데이터베이스 파일이 저장되었습니다:" -#: .././mainapp.py:14973 +#: .././mainapp.py:15009 msgid "Select the database export" msgstr "내보낼 데이터베이스 파일을 선택하세요" -#: .././mainapp.py:14994 .././mainapp.py:15008 +#: .././mainapp.py:15030 .././mainapp.py:15044 msgid "Failed to load the database export file" msgstr "내보낸 데이터에피스 파일을 로드하는데 실패했습니다" -#: .././mainapp.py:15025 +#: .././mainapp.py:15061 msgid "The database export file is invalid" msgstr "내보낸 데이터베이스 파일이 잘못되었습니다" -#: .././mainapp.py:15036 +#: .././mainapp.py:15072 msgid "The database export file is invalid (or empty)" msgstr "내보낸 데이터베이스 파일이 잘못되었습니다 (혹은 비어있습니다)" -#: .././mainapp.py:15080 +#: .././mainapp.py:15116 msgid "Nothing was imported from the database export file" msgstr "내보낸 데이터베이스 파일에서 가져올 것이 없습니다" #. Show a confirmation -#: .././mainapp.py:15094 +#: .././mainapp.py:15130 msgid "Imported" msgstr "가져온것" -#: .././mainapp.py:15095 .././mainwin.py:1287 .././config.py:888 -#: .././config.py:9274 .././config.py:11492 +#: .././mainapp.py:15131 .././mainwin.py:1287 .././config.py:888 +#: .././config.py:9305 .././config.py:11523 msgid "Videos" msgstr "비디오" -#: .././mainapp.py:15096 .././config.py:9307 .././config.py:11525 +#: .././mainapp.py:15132 .././config.py:9338 .././config.py:11556 msgid "Channels" msgstr "채널" -#: .././mainapp.py:15097 .././config.py:9318 .././config.py:11536 +#: .././mainapp.py:15133 .././config.py:9349 .././config.py:11567 msgid "Playlists" msgstr "플레이리스트" -#: .././mainapp.py:15098 +#: .././mainapp.py:15134 msgid "Folders" msgstr "폴더" -#: .././mainapp.py:15482 +#: .././mainapp.py:15518 msgid "" "The video file is missing from Tartube's data folder (try downloading the " "video again!)" @@ -619,107 +619,107 @@ msgstr "" "비디오 파일이 Tartube의 데이터 폴더에 존재하지 않습니다 (다시 다운로드 시도" "해 보세요!)" -#: .././mainapp.py:16007 .././mainapp.py:16389 +#: .././mainapp.py:16043 .././mainapp.py:16425 msgid "Select where to save the options export" msgstr "내보낸 설정을 저장할 위치를 선택하세요" -#: .././mainapp.py:16055 .././mainapp.py:16437 +#: .././mainapp.py:16091 .././mainapp.py:16473 msgid "Failed to save the options export file:" msgstr "내보낸 설정을 저장하는데 실패했습니다:" -#: .././mainapp.py:16063 +#: .././mainapp.py:16099 msgid "Download options exported to to:" msgstr "다운로드 옵션이 내보내졌습니다:" -#: .././mainapp.py:16094 .././mainapp.py:16476 +#: .././mainapp.py:16130 .././mainapp.py:16512 msgid "Select the options export file" msgstr "내보낼 설정 파일을 선택하세요" -#: .././mainapp.py:16113 .././mainapp.py:16495 +#: .././mainapp.py:16149 .././mainapp.py:16531 msgid "Failed to load the options export file" msgstr "내보낸 설정 파일을 불러오지 못했습니다" -#: .././mainapp.py:16130 .././mainapp.py:16512 +#: .././mainapp.py:16166 .././mainapp.py:16548 msgid "The options export file is invalid" msgstr "내보낸 설정 파일이 잘못되었습니다" -#: .././mainapp.py:16141 .././mainapp.py:16523 +#: .././mainapp.py:16177 .././mainapp.py:16559 msgid "The options export file is invalid (or empty)" msgstr "내보낸 설정 파일이 잘못되었습니다 (혹은 비어있습니다)" -#: .././mainapp.py:16445 +#: .././mainapp.py:16481 msgid "FFmpeg options exported to to:" msgstr "FFmpeg 설정이 내보내졌습니다:" -#: .././mainapp.py:17419 +#: .././mainapp.py:17455 msgid "Please select a destination folder" msgstr "목적지 폴더를 선택해주세요" #. Prompt for confirmation -#: .././mainapp.py:17491 +#: .././mainapp.py:17527 msgid "Are you sure you want to clear this list?" msgstr "정말로 이 리스트를 비우시겠습니까?" #. Prompt for confirmation -#: .././mainapp.py:17538 +#: .././mainapp.py:17574 msgid "Are you sure you want to clear downloaded videos?" msgstr "정말로 다운로드 받은 비디오들을 지우시겠습니까?" -#: .././mainapp.py:17631 .././mainwin.py:14535 +#: .././mainapp.py:17667 .././mainwin.py:14535 msgid "Only checked/downloaded videos can be processed by FFmpeg" msgstr "체크하거나 다운로드 받은 비디오들만 FFmpeg에 의해 처리됩니다" -#: .././mainapp.py:17748 +#: .././mainapp.py:17784 msgid "No video(s) have been downloaded" msgstr "아무 비디오도 다운로드 되지 않았습니다" #. Prompt for confirmation -#: .././mainapp.py:17846 +#: .././mainapp.py:17882 msgid "Are you sure you want to remove the selected item(s)?" msgstr "정말로 선택한 항목들을 삭제하시겠습니까?" -#: .././mainapp.py:18495 +#: .././mainapp.py:18531 msgid "You must give the channel a name" msgstr "채널에 이름을 입력해야 합니다" -#: .././mainapp.py:18513 .././mainapp.py:18776 +#: .././mainapp.py:18549 .././mainapp.py:18812 msgid "You must enter a valid URL" msgstr "올바른 URL을 입력해야 합니다" -#: .././mainapp.py:18628 +#: .././mainapp.py:18664 msgid "You must give the folder a name" msgstr "폴더에 이름을 입력해야 합니다" -#: .././mainapp.py:18758 +#: .././mainapp.py:18794 msgid "You must give the playlist a name" msgstr "플레이리스트에 이름을 입력해야 합니다" -#: .././mainapp.py:18913 +#: .././mainapp.py:18949 msgid "The following videos are duplicates:" msgstr "해당하는 비디오들이 복제되었습니다:" -#: .././mainapp.py:18977 +#: .././mainapp.py:19013 msgid "There were no livestream alerts to cancel" msgstr "취소할 생방송 알림이 없습니다" -#: .././mainapp.py:18979 +#: .././mainapp.py:19015 msgid "Livestream alerts for 1 video were cancelled" msgstr "비디오 1개에 대한 생방송 알림이 취소되었습니다" -#: .././mainapp.py:18982 +#: .././mainapp.py:19018 #, python-brace-format msgid "Livestream alerts for {0} videos were cancelled" msgstr "비디오 {0}개에 대한 생방송 알림이 취소되었습니다" -#: .././mainapp.py:19352 +#: .././mainapp.py:19388 msgid "All Tartube data has been saved" msgstr "모든 Tartube 데이터가 저장되었습니다" -#: .././mainapp.py:19382 +#: .././mainapp.py:19418 msgid "Database saved" msgstr "데이터베이스 저장됨" -#: .././mainapp.py:19637 .././mainwin.py:13487 +#: .././mainapp.py:19673 .././mainwin.py:13487 msgid "" "Files cannot be recovered, after being deleted. Are you sure you want to " "continue?" @@ -728,39 +728,39 @@ msgstr "파일은 삭제된 뒤 복구가 불가능합니다. 계속하시겠습 #. Because livestream operations run silently in the background, when #. the user goes to the trouble of clicking a menu item in the #. main window's menu, tell them why nothing is happening -#: .././mainapp.py:19677 +#: .././mainapp.py:19713 msgid "Cannot update existing livestreams because" msgstr "존재하는 생방송을 업데이트 하지 못했습니다" -#: .././mainapp.py:19679 +#: .././mainapp.py:19715 msgid "there is another operation running" msgstr "다른 작업이 진행중입니다" -#: .././mainapp.py:19681 +#: .././mainapp.py:19717 msgid "they are currently being updated" msgstr "이미 업데이트를 진행중입니다" -#: .././mainapp.py:19683 +#: .././mainapp.py:19719 msgid "one or more configuration windows are open" msgstr "하나 이상의 설정 창이 열려있습니다" -#: .././mainapp.py:19685 +#: .././mainapp.py:19721 msgid "there are no livestreams to update" msgstr "업데이트 할 생방송이 없습니다" -#: .././mainapp.py:19759 +#: .././mainapp.py:19795 msgid "There is already a channel with that name" msgstr "동일한 이름을 가진 채널이 이미 존재합니다" -#: .././mainapp.py:19761 +#: .././mainapp.py:19797 msgid "There is already a playlist with that name" msgstr "동일한 이름을 가진 플레이리스트가 이미 존재합니다" -#: .././mainapp.py:19763 +#: .././mainapp.py:19799 msgid "There is already a folder with that name" msgstr "동일한 이름을 가진 폴더가 이미 존재합니다" -#: .././mainapp.py:19766 +#: .././mainapp.py:19802 msgid "(so please choose a different name)" msgstr "(다른 이름을 설정해 주세요)" @@ -769,7 +769,7 @@ msgid "Tartube cannot start because it cannot find its icons folder" msgstr "아이콘 폴더를 찾지 못해 Tartube를 켜지 못했습니다" #. File column -#: .././mainwin.py:943 .././config.py:6357 +#: .././mainwin.py:943 .././config.py:6359 msgid "_File" msgstr "_파일" @@ -812,7 +812,7 @@ msgid "_General download options..." msgstr "_일반 다운로드 설정..." #. Media column -#: .././mainwin.py:1009 .././config.py:9834 +#: .././mainwin.py:1009 .././config.py:9865 msgid "_Media" msgstr "_미디어" @@ -870,7 +870,7 @@ msgstr "_테스트 코드 실행하기" #. Operations column #. Add this tab... -#: .././mainwin.py:1115 .././config.py:12776 +#: .././mainwin.py:1115 .././config.py:12807 msgid "_Operations" msgstr "_작업" @@ -913,7 +913,7 @@ msgid "_Stop current operation" msgstr "_현재 작업 멈추기" #. Livestreams column -#: .././mainwin.py:1195 .././config.py:13480 +#: .././mainwin.py:1195 .././config.py:13511 msgid "_Livestreams" msgstr "_생방송" @@ -996,7 +996,7 @@ msgstr "모든 비디오, 채널, 플레이리스트, 폴더 선택" #: .././mainwin.py:1393 .././mainwin.py:19371 .././mainwin.py:19376 #: .././mainwin.py:19384 .././mainwin.py:19633 .././mainwin.py:19645 #: .././mainwin.py:20380 .././mainwin.py:21727 .././mainwin.py:21753 -#: .././config.py:12481 +#: .././config.py:12512 msgid "Download" msgstr "다운로드" @@ -1013,7 +1013,7 @@ msgstr "정지" msgid "Stop the current operation" msgstr "현재 작업 정지" -#: .././mainwin.py:1443 .././config.py:11068 +#: .././mainwin.py:1443 .././config.py:11099 msgid "Switch" msgstr "변경" @@ -1045,8 +1045,8 @@ msgstr "종료" msgid "Close Tartube" msgstr "Tartube 닫기" -#: .././mainwin.py:1532 .././config.py:7115 .././config.py:11292 -#: .././config.py:11890 +#: .././mainwin.py:1532 .././config.py:7146 .././config.py:11323 +#: .././config.py:11921 msgid "_Videos" msgstr "_비디오들" @@ -1062,7 +1062,7 @@ msgstr "_클래식 모드" msgid "_Output" msgstr "_출력" -#: .././mainwin.py:1566 .././config.py:8450 .././config.py:8956 +#: .././mainwin.py:1566 .././config.py:8481 .././config.py:8987 msgid "_Errors / Warnings" msgstr "_오류 / 경고" @@ -1123,12 +1123,12 @@ msgstr "더 많은 설정" msgid "Sort" msgstr "정렬" -#: .././mainwin.py:1875 .././config.py:8235 +#: .././mainwin.py:1875 .././config.py:8266 msgid "Upload time" msgstr "업로드 시간" -#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7138 -#: .././config.py:12481 .././config.py:14402 .././config.py:14669 +#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7169 +#: .././config.py:12512 .././config.py:14433 .././config.py:14700 msgid "Name" msgstr "이름" @@ -1220,11 +1220,11 @@ msgstr "속도" msgid "ETA" msgstr "예상 시간" -#: .././mainwin.py:2219 .././config.py:8821 +#: .././mainwin.py:2219 .././config.py:8852 msgid "New videos" msgstr "새 비디오" -#: .././mainwin.py:2219 .././config.py:404 .././config.py:8191 +#: .././mainwin.py:2219 .././config.py:404 .././config.py:8222 msgid "Duration" msgstr "기간" @@ -1232,7 +1232,7 @@ msgstr "기간" msgid "Date" msgstr "날짜" -#: .././mainwin.py:2220 .././config.py:8147 +#: .././mainwin.py:2220 .././config.py:8178 msgid "File" msgstr "파일" @@ -1303,7 +1303,7 @@ msgstr "목적지 폴더 열기" msgid "Format:" msgstr "포맷:" -#: .././mainwin.py:2591 .././config.py:14402 +#: .././mainwin.py:2591 .././config.py:14433 msgid "Default" msgstr "기본" @@ -1332,14 +1332,14 @@ msgid "Play video" msgstr "비디오 재생" #. (Signal connect appears below) -#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11105 -#: .././config.py:12546 +#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11136 +#: .././config.py:12577 msgid "Move up" msgstr "위로 올리기" #. (Signal connect appears below) -#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11113 -#: .././config.py:12555 +#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11144 +#: .././config.py:12586 msgid "Move down" msgstr "아래로 내리기" @@ -1375,7 +1375,7 @@ msgstr "다운로드된 항목 비우기" msgid "Maximum page size" msgstr "최대 페이지 크기" -#: .././mainwin.py:3017 .././config.py:12481 +#: .././mainwin.py:3017 .././config.py:12512 msgid "Time" msgstr "시간" @@ -1403,7 +1403,7 @@ msgstr "서버 오류 표시하기" msgid "Show server warnings" msgstr "서버 경고 표시하기" -#: .././mainwin.py:3113 .././config.py:9936 +#: .././mainwin.py:3113 .././config.py:9967 msgid "Clear list" msgstr "리스트 초기화" @@ -1756,7 +1756,7 @@ msgstr "_중지 시 다운로드" msgid "Not a _livestream" msgstr "_생방송이 아님" -#: .././mainwin.py:5295 .././config.py:8310 +#: .././mainwin.py:5295 .././config.py:8341 msgid "_Livestream" msgstr "_생방송" @@ -2429,8 +2429,8 @@ msgstr "Invidious" #. this function returns. Workaround is to make the label unclickable, #. then use a Glib timer to restore it (after some small fraction of a #. second) -#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9296 -#: .././config.py:11514 +#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9327 +#: .././config.py:11545 msgid "Other" msgstr "기타" @@ -2771,7 +2771,7 @@ msgstr "채널에 포함된 항목:" msgid "This playlist contains:" msgstr "플레이리스트에 포함된 항목:" -#: .././mainwin.py:24726 .././config.py:9269 +#: .././mainwin.py:24726 .././config.py:9300 msgid "This folder contains:" msgstr "폴더에 포함된 항목:" @@ -2941,7 +2941,7 @@ msgstr "데이터베이스로 가져오기" msgid "Choose which items to import" msgstr "가져올 항목 선택하기" -#: .././mainwin.py:25104 .././config.py:14454 .././config.py:14719 +#: .././mainwin.py:25104 .././config.py:14485 .././config.py:14750 msgid "Import" msgstr "가져오기" @@ -3005,7 +3005,7 @@ msgstr "취소" #. 'OK' button #: .././mainwin.py:25521 .././config.py:1035 .././config.py:2242 -#: .././config.py:7694 .././config.py:7828 +#: .././config.py:7725 .././config.py:7859 msgid "OK" msgstr "확인" @@ -3203,7 +3203,7 @@ msgstr "업데이트" msgid "Copy to clipboard" msgstr "클립보드에 복사" -#: .././mainwin.py:26846 .././config.py:13749 +#: .././mainwin.py:26846 .././config.py:13780 msgid "Test" msgstr "테스트" @@ -3298,7 +3298,7 @@ msgstr "다운로드" msgid "Uploads" msgstr "업로드" -#: .././config.py:403 .././config.py:8214 +#: .././config.py:403 .././config.py:8245 msgid "File size" msgstr "파일 크기" @@ -3376,8 +3376,8 @@ msgstr "흰색" #. 'Reset' button #. (Signal connect appears below) -#: .././config.py:1017 .././config.py:3306 .././config.py:14214 -#: .././config.py:14255 .././config.py:14325 +#: .././config.py:1017 .././config.py:3306 .././config.py:14245 +#: .././config.py:14286 .././config.py:14356 msgid "Reset" msgstr "초기화" @@ -3394,7 +3394,7 @@ msgstr "적용" msgid "Apply changes without closing the window" msgstr "창을 닫지않고 변경사항 적용" -#: .././config.py:1038 .././config.py:7697 .././config.py:7831 +#: .././config.py:1038 .././config.py:7728 .././config.py:7862 msgid "Apply changes" msgstr "변경사항 적용" @@ -3451,7 +3451,7 @@ msgstr "다운로드 설정 지우기" msgid "Close this window" msgstr "이 창 닫기" -#: .././config.py:2869 .././config.py:6260 +#: .././config.py:2869 .././config.py:6262 msgid "_Name" msgstr "_이름" @@ -3496,7 +3496,7 @@ msgid "Completely reset all download options to their default values" msgstr "모든 다운로드 설정을 완전히 기본값으로 초기화하기" #. Add this tab... -#: .././config.py:3000 .././config.py:10878 +#: .././config.py:3000 .././config.py:10909 msgid "_Files" msgstr "_파일" @@ -3520,7 +3520,7 @@ msgstr "파일 출력 템플릿" msgid "Add to template:" msgstr "템플릿 추가:" -#: .././config.py:3083 .././config.py:8018 +#: .././config.py:3083 .././config.py:8049 msgid "Video properties" msgstr "비디오 속성" @@ -3564,10 +3564,14 @@ msgstr "자동 번호 비디오 (0부터 시작함)" msgid "Creator/uploader" msgstr "제작자/업로더" -#: .././config.py:3098 .././config.py:3099 +#: .././config.py:3098 msgid "Full name of video uploader" msgstr "비디오 업로더의 실제 이름" +#: .././config.py:3099 +msgid "Uploader ID" +msgstr "" + #: .././config.py:3100 msgid "Nickname/ID of video uploader" msgstr "비디오 업로더의 닉네임/ID" @@ -3676,8 +3680,8 @@ msgstr "신고 개수" msgid "Number of comments" msgstr "댓글 개수" -#: .././config.py:3170 .././config.py:9916 .././config.py:12528 -#: .././config.py:14445 .././config.py:14710 +#: .././config.py:3170 .././config.py:9947 .././config.py:12559 +#: .././config.py:14476 .././config.py:14741 msgid "Add" msgstr "추가" @@ -3718,8 +3722,8 @@ msgid "Path to the downloader's cookie jar file" msgstr "다운로더의 Cookie jar 파일 경로" #: .././config.py:3302 .././config.py:4927 .././config.py:4947 -#: .././config.py:4967 .././config.py:14111 .././config.py:14210 -#: .././config.py:14251 .././config.py:14321 +#: .././config.py:4967 .././config.py:14142 .././config.py:14241 +#: .././config.py:14282 .././config.py:14352 msgid "Set" msgstr "설정" @@ -3783,20 +3787,20 @@ msgid "Options during real (not simulated) downloads" msgstr "(시뮬레이션이 아닌) 실제 다운로드 설정" #: .././config.py:3450 .././config.py:3481 -msgid "Keep the description file after Tartube shuts down" -msgstr "설명 파일을 Tartube가 꺼져도 유지하기" +msgid "Keep the description file after the download has finished" +msgstr "" #: .././config.py:3456 .././config.py:3487 -msgid "Keep the metadata file after Tartube shuts down" -msgstr "메타데이터 파일을 Tartube가 꺼져도 유지하기" +msgid "Keep the metadata file after the download has finished" +msgstr "" #: .././config.py:3462 .././config.py:3493 -msgid "Keep the annotations file after Tartube shuts down" -msgstr "어노테이션 파일을 Tartube가 꺼져도 유지하기" +msgid "Keep the annotations file after the download has finished" +msgstr "" #: .././config.py:3468 .././config.py:3499 -msgid "Keep the thumbnail file after Tartube shuts down" -msgstr "섬네일 파일을 Tartube가 꺼져도 유지하기" +msgid "Keep the thumbnail file after the download has finished" +msgstr "" #: .././config.py:3475 msgid "Options during simulated (not real) downloads" @@ -3888,7 +3892,7 @@ msgid "Do not download DASH-related data for YouTube videos" msgstr "유튜브 비디오의 DASH 관련 데이터 다운로드 안함" #. Add this tab... -#: .././config.py:3790 .././config.py:3809 .././config.py:13113 +#: .././config.py:3790 .././config.py:3809 .././config.py:13144 msgid "_Downloads" msgstr "_다운로드" @@ -4322,8 +4326,8 @@ msgstr "이 외부 다운로더 사용" msgid "Arguments to pass to external downloader" msgstr "외부 다운로더에 전달할 인자" -#: .././config.py:5168 .././config.py:5658 .././config.py:7355 -#: .././config.py:7603 +#: .././config.py:5168 .././config.py:5658 .././config.py:7386 +#: .././config.py:7634 msgid "This procedure cannot be reversed. Are you sure you want to continue?" msgstr "이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?" @@ -4367,55 +4371,55 @@ msgid "FFmpeg options" msgstr "FFmpeg 설정" #. Replace the 'OK' button with a 'Process files' button -#: .././config.py:6246 .././config.py:7776 +#: .././config.py:6248 .././config.py:7807 msgid "Process files" msgstr "파일 처리" -#: .././config.py:6248 .././config.py:7778 +#: .././config.py:6250 .././config.py:7809 msgid "Process the files with FFmpeg" msgstr "FFmpeg로 파일 처리" -#: .././config.py:6265 +#: .././config.py:6267 msgid "Name for these FFmpeg options" msgstr "FFmpeg 설정 이름" -#: .././config.py:6275 +#: .././config.py:6277 msgid "Extra command line options (e.g. --help)" msgstr "추가 커맨드 라인 설정 (예. --help)" -#: .././config.py:6286 +#: .././config.py:6288 msgid "System command, based on all FFmpeg options in this window:" msgstr "이 창에 있는 FFmpeg 설정에 기반한 시스템 커맨드:" -#: .././config.py:6317 +#: .././config.py:6319 msgid "Show fewer FFmpeg options" msgstr "더 적은 FFmpeg 설정" -#: .././config.py:6319 +#: .././config.py:6321 msgid "Show more FFmpeg options" msgstr "더 많은 FFmpeg 설정" -#: .././config.py:6329 +#: .././config.py:6331 msgid "Import current FFmpeg options into this window" msgstr "현재 FFmpeg 설정을 이 창에 가져오기" -#: .././config.py:6344 +#: .././config.py:6346 msgid "Completely reset all FFmpeg options to their default values" msgstr "모든 FFmpeg 설정을 완전히 기본값으로 초기화하기" -#: .././config.py:6360 +#: .././config.py:6362 msgid "Add to end of filename:" msgstr "파일명의 맨 마지막에 추가하기:" -#: .././config.py:6370 +#: .././config.py:6372 msgid "If regex matches filename:" msgstr "정규식과 일치하는 파일명:" -#: .././config.py:6384 +#: .././config.py:6386 msgid "...then apply substitution:" msgstr "...그리고 대체 적용하기:" -#: .././config.py:6397 +#: .././config.py:6399 msgid "" "If the video/audio file is renamed, also rename the thumbnail (but not vice-" "versa)" @@ -4423,53 +4427,53 @@ msgstr "" "만약 비디오/오디오 파일 이름이 변경되었다면, 섬네일 이름도 변경해 주십시오 " "(반대로는 아님)" -#: .././config.py:6408 +#: .././config.py:6410 msgid "Change file extension:" msgstr "변경 파일 확장자:" -#: .././config.py:6422 +#: .././config.py:6424 msgid "After changing the file extension, delete the original file" msgstr "파일 확장자를 변경한 이후엔, 원본 파일을 삭제해 주세요" -#: .././config.py:6448 +#: .././config.py:6450 msgid "_Settings" msgstr "_설정" -#: .././config.py:6455 +#: .././config.py:6457 msgid "Source file" msgstr "소스 파일" -#: .././config.py:6462 +#: .././config.py:6464 msgid "Downloaded video/audio" msgstr "다운받은 비디오/오디오" -#: .././config.py:6471 +#: .././config.py:6473 msgid "with audio" msgstr "오디오와 함께" -#: .././config.py:6484 +#: .././config.py:6486 msgid "Video thumbnail" msgstr "비디오 섬네일" -#: .././config.py:6503 +#: .././config.py:6505 msgid "Output file" msgstr "출력 파일" -#: .././config.py:6630 +#: .././config.py:6632 msgid "Audio bitrate" msgstr "오디오 진동" -#: .././config.py:6644 +#: .././config.py:6646 msgid "How to set the quality" msgstr "품질 설정 방법" -#: .././config.py:6649 +#: .././config.py:6651 msgid "" "FFmpeg always encodes according to a Rate Factor that specifies the quality " "of the result." msgstr "FFmpeg는 항상 결과의 화질을 지정하는 속도 계수에 따라 인코딩됩니다." -#: .././config.py:6652 +#: .././config.py:6654 msgid "" "Instead of directly specifying the Rate Factor, an average bit rate can be " "specified. FFmpeg will then determine the optimal Rate Factor in a first " @@ -4478,7 +4482,7 @@ msgstr "" "속도 계수를 직접 지정하는 대신 평균 비트레이트를 지정할 수 있습니다. 그런 다" "음 FFmpeg가 첫 번째 패스 도중 최적의 속도 계수를 결정합니다." -#: .././config.py:6656 +#: .././config.py:6658 msgid "" "In fact the first pass is only used for determining the Rate Factor, no " "other data is carried over into the second pass." @@ -4486,7 +4490,7 @@ msgstr "" "실제로 첫 번째 패스는 속도 계수를 결정하는 데만 사용되며, 다른 데이터는 두번" "째 패스로 전달되지 않습니다." -#: .././config.py:6659 +#: .././config.py:6661 msgid "" "Specifying an average bitrate but running only one pass is possible, but not " "recommended. FFmpeg would then encode the beginning of the video with a " @@ -4498,126 +4502,134 @@ msgstr "" "비디오 끝부분에 와서 목표 비트레이트를 도달하기 위해 속도계수를 변경할 것입니" "다." -#: .././config.py:6672 +#: .././config.py:6674 msgid "Manual rate factor" msgstr "속도 계수 수동 지정" -#: .././config.py:6681 +#: .././config.py:6683 msgid "Determine from target bitrate (2-Pass)" msgstr "목표 비트레이트 결정하기 (2-패스)" -#: .././config.py:6691 +#: .././config.py:6693 msgid "Rate factor" msgstr "속도 계수" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Lossless" msgstr "무손실" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Large file" msgstr "큰 파일" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Bad quality" msgstr "저 화질" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Small file" msgstr "작은 파일" -#: .././config.py:6732 +#: .././config.py:6734 msgid "Name of dummy file" msgstr "더미 파일 이름" -#: .././config.py:6736 +#: .././config.py:6738 msgid "A dummy file is created during the first pass." msgstr "더미 파일은 첫번째 패스 중 만들어지는 파일입니다." -#: .././config.py:6740 +#: .././config.py:6742 msgid "Use the output file" msgstr "출력 파일 사용" -#: .././config.py:6741 +#: .././config.py:6743 msgid "Dummy" msgstr "더미" -#: .././config.py:6742 +#: .././config.py:6744 msgid "/dev/null (Linux)" msgstr "/dev/null (Linux)" -#: .././config.py:6743 +#: .././config.py:6745 msgid "NUL (MS Windows)" msgstr "NUL (MS Windows)" -#: .././config.py:6755 +#: .././config.py:6757 msgid "Patience preset" msgstr "인내 프리셋" -#: .././config.py:6760 +#: .././config.py:6762 msgid "Ultra fast" msgstr "울트라 빠름" -#: .././config.py:6761 +#: .././config.py:6763 msgid "Super fast" msgstr "슈퍼 빠름" -#: .././config.py:6762 +#: .././config.py:6764 msgid "Very fast" msgstr "매우 빠름" -#: .././config.py:6763 .././config.py:6832 +#: .././config.py:6765 .././config.py:6863 msgid "Faster" msgstr "빠르게" -#: .././config.py:6764 +#: .././config.py:6766 msgid "Fast" msgstr "빠름" -#: .././config.py:6765 +#: .././config.py:6767 msgid "Medium (default)" msgstr "중간 (기본값)" -#: .././config.py:6766 +#: .././config.py:6768 #, python-format msgid "Slow (file about 5-10% smaller than medium)" msgstr "느리게 (파일 크기가 중간보다 5-10% 더 작음)" -#: .././config.py:6767 +#: .././config.py:6769 #, python-format msgid "Slower (file about 15% smaller than medium)" msgstr "더 느리게 (파일 크기가 중간보다 15% 더 작음)" -#: .././config.py:6768 +#: .././config.py:6770 #, python-format msgid "Very slow (file about 17% smaller than medium)" msgstr "엄청 느리게 (파일 크기가 중간보다 17% 더 작음)" -#: .././config.py:6826 +#: .././config.py:6781 +msgid "GPU encoding" +msgstr "" + +#: .././config.py:6797 +msgid "Hardware acceleration" +msgstr "" + +#: .././config.py:6857 msgid "Palette:" msgstr "팔레트:" -#: .././config.py:6833 +#: .././config.py:6864 msgid "Uses dithering to a standard palette provided by FFmpeg" msgstr "FFmpeg에서 제공하는 표준 팔레트로 디더링 사용" -#: .././config.py:6834 +#: .././config.py:6865 msgid "Can cause dithering artefacts and slight banding" msgstr "디더링 아티팩트와 약간의 밴딩이 생길 수 있습니다" -#: .././config.py:6843 +#: .././config.py:6874 msgid "Better" msgstr "최적화" -#: .././config.py:6844 +#: .././config.py:6875 msgid "Determines an optimized palette for the video" msgstr "비디오에 최적화된 팔레트를 결정합니다" -#: .././config.py:6845 +#: .././config.py:6876 msgid "Uses two passes and a temporary file for the palette" msgstr "팔레트를 위해 투 패스와 임시 파일을 사용합니다" -#: .././config.py:6898 +#: .././config.py:6929 msgid "" "This merges a video and audio file with the same name into a single video " "file,\n" @@ -4626,77 +4638,77 @@ msgstr "" "파일 탭에서 지정된 확장자를 사용해\n" "동일한 이름의 비디오 및 오디오 파일을 단일 비디오 파일로 병합합니다" -#: .././config.py:6939 +#: .././config.py:6970 msgid "The thumbnail's format can be changed in the File tab" msgstr "파일 탭에서 섬네일 포맷을 변경할 수 있습니다" -#: .././config.py:6954 +#: .././config.py:6985 msgid "_Optimisations" msgstr "_최적화" -#: .././config.py:6960 +#: .././config.py:6991 msgid "" "Optimise for fast seeking (shorter keyframe interval, about 10% larger file)" msgstr "빠른 탐색을 위한 최적화 (키프레임 간격 단축, 파일 크기가 10% 더 커짐)" -#: .././config.py:6968 +#: .././config.py:6999 msgid "Input video is a high-quality movie" msgstr "입력 비디오가 고화질 영화임" -#: .././config.py:6974 +#: .././config.py:7005 msgid "Input video is an animated movie" msgstr "입력 비디오가 애니매이션 영화임" -#: .././config.py:6980 +#: .././config.py:7011 msgid "Input video contains film grain" msgstr "입력 비디오가 필름 그레인을 포함함" -#: .././config.py:6986 +#: .././config.py:7017 msgid "Input video is an image slideshow" msgstr "입력 비디오가 이미지 슬라이드쇼임" -#: .././config.py:6992 +#: .././config.py:7023 msgid "Optimise for really weak CPU playback devices" msgstr "낮은 CPU 성능을 가진 디바이스를 위한 최적화" -#: .././config.py:6999 +#: .././config.py:7030 msgid "Optimise for really old devices (requires rate factor above 0)" msgstr "정말 구형 디바이스를 위한 최적화 (0 이상의 속도 계수 필요)" -#: .././config.py:7010 +#: .././config.py:7041 msgid "" "Move headers to beginning of file (so it can play while still downloading)" msgstr "파일 시작 부분으로 헤더 이동 (다운로드 중 재생이 가능해짐)" -#: .././config.py:7018 +#: .././config.py:7049 msgid "Fast encoding and low latency streaming" msgstr "빠른 인코딩 및 짧은 레이턴시 스트리밍" -#: .././config.py:7024 +#: .././config.py:7055 msgid "Limit bitrate (Mbit/s)" msgstr "비트레이트 제한 (Mbit/s)" -#: .././config.py:7041 +#: .././config.py:7072 msgid "Assuming a receiving buffer (seconds)" msgstr "수신 버퍼 가정 (초)" -#: .././config.py:7119 +#: .././config.py:7150 msgid "List of videos to be processed" msgstr "처리될 비디오 목록" -#: .././config.py:7138 .././media.py:88 +#: .././config.py:7169 .././media.py:88 msgid "Video" msgstr "비디오" -#: .././config.py:7138 +#: .././config.py:7169 msgid "Thumbnail" msgstr "섬네일" -#: .././config.py:7181 +#: .././config.py:7212 msgid "Remove video from list" msgstr "리스트에서 비디오 제거" -#: .././config.py:7647 +#: .././config.py:7678 msgid "" "Fewer FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" @@ -4704,11 +4716,11 @@ msgstr "" "'적용' 또는 '재설정' 버튼을 클리하면 (혹은 창을 닫았다 다시 열면) 더 적은 " "FFmpeg 설정이 표시됩니다." -#: .././config.py:7657 +#: .././config.py:7688 msgid "Show more FFmpeg options (when window re-opens)" msgstr "고급 FFmpeg 설정 표시하기 (윈도우를 다시 열면)" -#: .././config.py:7674 +#: .././config.py:7705 msgid "" "More FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" @@ -4716,135 +4728,135 @@ msgstr "" "'적용' 또는 '재설정' 버튼을 클리하면 (혹은 창을 닫았다 다시 열면) 더 많은 " "FFmpeg 설정이 표시됩니다." -#: .././config.py:7684 +#: .././config.py:7715 msgid "Show fewer FFmpeg options (when window re-opens)" msgstr "고급 FFmpeg 설정 숨기기 (윈도우를 다시 열면)" #. Add this tab... -#: .././config.py:8135 .././config.py:8752 .././config.py:9176 -#: .././config.py:9663 .././config.py:10464 +#: .././config.py:8166 .././config.py:8783 .././config.py:9207 +#: .././config.py:9694 .././config.py:10495 msgid "_General" msgstr "_일반" -#: .././config.py:8138 .././config.py:8755 .././config.py:9179 -#: .././config.py:9668 +#: .././config.py:8169 .././config.py:8786 .././config.py:9210 +#: .././config.py:9699 msgid "General properties" msgstr "일반 환경설정" -#: .././config.py:8164 +#: .././config.py:8195 msgid "Set the file (if this is the wrong one)" msgstr "파일 설정하기 (잘못된 경우에)" -#: .././config.py:8184 +#: .././config.py:8215 msgid "Always simulate download of this video" msgstr "언제나 비디오 다운로드 시뮬레이트됨" -#: .././config.py:8207 +#: .././config.py:8238 msgid "Video has been downloaded" msgstr "비디오가 다운로드됨" -#: .././config.py:8228 +#: .././config.py:8259 msgid "Video is marked as unwatched" msgstr "비디오가 시청하지 않은것으로 표기됨" -#: .././config.py:8249 +#: .././config.py:8280 msgid "Video is archived" msgstr "비디오가 아카이브됨" -#: .././config.py:8256 +#: .././config.py:8287 msgid "Video is bookmarked" msgstr "비디오가 북마크됨" -#: .././config.py:8263 +#: .././config.py:8294 msgid "Receive time" msgstr "받은 시간" -#: .././config.py:8277 +#: .././config.py:8308 msgid "Video is favourite" msgstr "비디오가 즐겨찾기임" -#: .././config.py:8284 +#: .././config.py:8315 msgid "Video is in waiting list" msgstr "비디오가 대기 리스트에 있음" -#: .././config.py:8316 +#: .././config.py:8347 msgid "Livestream properties" msgstr "생방송 속성" -#: .././config.py:8321 +#: .././config.py:8352 msgid "Livestream status" msgstr "생방송 상태" -#: .././config.py:8332 +#: .././config.py:8363 msgid "Waiting to start" msgstr "시작 대기중" -#: .././config.py:8334 +#: .././config.py:8365 msgid "Stream has started" msgstr "방송이 시작됨" -#: .././config.py:8336 +#: .././config.py:8367 msgid "Not a livestream" msgstr "생방송이 아님" -#: .././config.py:8339 +#: .././config.py:8370 msgid "Livestream message" msgstr "생방송 메시지" -#: .././config.py:8354 +#: .././config.py:8385 msgid "Video is pre-recorded" msgstr "비디오가 미리 녹화됨" -#: .././config.py:8361 +#: .././config.py:8392 msgid "Livestream actions" msgstr "생방송 액션" -#: .././config.py:8370 +#: .././config.py:8401 msgid "When the livestream starts, show a desktop notification" msgstr "생방송이 시작되면, 데스크탑 알림으로 알림" -#: .././config.py:8379 +#: .././config.py:8410 msgid "When the livestream starts, play an alarm" msgstr "생방송이 시작되면, 알람 울림" -#: .././config.py:8389 +#: .././config.py:8420 msgid "When the livestream starts, open it in the system's web browser" msgstr "생방송이 시작되면, 시스템의 웹브라우저로 실행" -#: .././config.py:8401 +#: .././config.py:8432 msgid "When the livestream starts, begin downloading it immediately" msgstr "생방송이 시작되면, 즉시 다운로드" -#: .././config.py:8412 .././config.py:13782 +#: .././config.py:8443 .././config.py:13813 msgid "When a livestream stops, download it (overwriting any earlier file)" msgstr "생방송이 종료되면, 다운로드 시작 (이전의 파일을 덮어씀)" -#: .././config.py:8428 +#: .././config.py:8459 msgid "_Description" msgstr "_설명" -#: .././config.py:8432 +#: .././config.py:8463 msgid "Video description" msgstr "비디오 설명" -#: .././config.py:8453 .././config.py:8959 +#: .././config.py:8484 .././config.py:8990 msgid "Errors / Warnings" msgstr "오류 / 경고" -#: .././config.py:8459 +#: .././config.py:8490 msgid "Error messages produced the last time this video was checked/downloaded" msgstr "이 비디오를 마지막으로 확인/다운로드 했을 때 생성된 오류 메시지" -#: .././config.py:8474 +#: .././config.py:8505 msgid "" "Warning messages produced the last time this video was checked/downloaded" msgstr "이 비디오를 마지막으로 확인/다운로드 했을 때 생성된 경고 메시지" -#: .././config.py:8517 +#: .././config.py:8548 msgid "Select the correct video/audio file" msgstr "올바른 비디오/오디오 파일 선택" -#: .././config.py:8543 +#: .././config.py:8574 msgid "" "The replacement video/audio file must be in the same channel, playlist or " "folder" @@ -4852,300 +4864,300 @@ msgstr "" "교체할 비디오/오디오 파일은 반드시 같은 채널, 플레이리스트, 폴더 안에 있어야 " "합니다" -#: .././config.py:8561 +#: .././config.py:8592 msgid "You must select a valid video/audio file" msgstr "반드시 적합한 비디오/오디오 파일을 선택해야 합니다" -#: .././config.py:8629 +#: .././config.py:8660 msgid "Channel properties" msgstr "채널 속성" -#: .././config.py:8632 +#: .././config.py:8663 msgid "Playlist properties" msgstr "플레이리스트 속성" -#: .././config.py:8773 +#: .././config.py:8804 msgid "Always simulate download of videos in this channel" msgstr "언제나 이 채널 안의 비디오들을 다운로드 시뮬레이트됨" -#: .././config.py:8775 +#: .././config.py:8806 msgid "Always simulate download of videos in this playlist" msgstr "언제나 이 플레이리스트 안의 비디오들을 다운로드 시뮬레이트됨" -#: .././config.py:8785 +#: .././config.py:8816 msgid "Disable checking/downloading for this channel" msgstr "이 채널에 대해서 확인/다운로드 사용 안 함" -#: .././config.py:8787 +#: .././config.py:8818 msgid "Disable checking/downloading for this playlist" msgstr "이 플레이리스트에 대해서 확인/다운로드 사용 안 함" -#: .././config.py:8797 +#: .././config.py:8828 msgid "This channel is marked as a favourite" msgstr "이 채널은 즐겨찾기로 표기됨" -#: .././config.py:8799 +#: .././config.py:8830 msgid "This playlist is marked as a favourite" msgstr "이 플레이리스트는 즐겨찾기로 표기됨" -#: .././config.py:8809 +#: .././config.py:8840 msgid "Total videos" msgstr "총 비디오들" -#: .././config.py:8833 +#: .././config.py:8864 msgid "Favourite videos" msgstr "즐겨찾기 된 비디오들" -#: .././config.py:8845 +#: .././config.py:8876 msgid "Downloaded videos" msgstr "다운로드 된 비디오들" -#: .././config.py:8867 .././config.py:9408 .././config.py:11646 +#: .././config.py:8898 .././config.py:9439 .././config.py:11677 msgid "_History" msgstr "_히스토리" -#: .././config.py:8872 .././config.py:9413 .././config.py:11653 +#: .././config.py:8903 .././config.py:9444 .././config.py:11684 msgid "Download history" msgstr "히스토리 다운로드" -#: .././config.py:8886 .././config.py:9427 .././config.py:11667 +#: .././config.py:8917 .././config.py:9458 .././config.py:11698 msgid "Draw" msgstr "드로우" -#: .././config.py:8914 +#: .././config.py:8945 msgid "_RSS feed" msgstr "_RSS 피드" -#: .././config.py:8917 +#: .././config.py:8948 msgid "RSS feed" msgstr "RSS 피드" -#: .././config.py:8923 +#: .././config.py:8954 msgid "" "If Tartube cannot detect the channel's RSS feed, you can enter the URL here" msgstr "Tartube가 채널의 RSS 피드를 인식하지 못한다면, URL을 여기에 입력하세요" -#: .././config.py:8928 +#: .././config.py:8959 msgid "" "If Tartube cannot detect the playlist's RSS feed, you can enter the URL here" msgstr "" "Tartube가 플레이리스트의 RSS 피드를 인식하지 못한다면, URL을 여기에 입력하세" "요" -#: .././config.py:8933 +#: .././config.py:8964 msgid "(The feed is used to detect livestreams on compatible websites)" msgstr "(피드는 호환되는 웹 사이트 안에서 생방송을 감지할 때 사용됩니다)" -#: .././config.py:8965 +#: .././config.py:8996 msgid "" "Error messages produced the last time this channel was checked/downloaded" msgstr "이 채널을 마지막으로 확인/다운로드 했을 때 생성된 오류 메시지" -#: .././config.py:8970 +#: .././config.py:9001 msgid "" "Error messages produced the last time this playlist was checked/downloaded" msgstr "이 플레이리스트를 마지막으로 확인/다운로드 했을 때 생성된 오류 메시지" -#: .././config.py:8988 +#: .././config.py:9019 msgid "" "Warning messages produced the last time this channel was checked/downloaded" msgstr "이 채널을 마지막으로 확인/다운로드 했을 때 생성된 경고 메시지" -#: .././config.py:8993 +#: .././config.py:9024 msgid "" "Warning messages produced the last time this playlist was checked/downloaded" msgstr "이 플레이리스트를 마지막으로 확인/다운로드 했을 때 생성된 경고 메시지" -#: .././config.py:9059 +#: .././config.py:9090 msgid "Folder properties" msgstr "폴더 속성" -#: .././config.py:9196 +#: .././config.py:9227 msgid "Always simulate download of videos" msgstr "언제나 비디오 다운로드 시뮬레이트됨" -#: .././config.py:9203 +#: .././config.py:9234 msgid "Disable checking/downloading for this folder" msgstr "이 폴더에 대해서 확인/다운로드 사용 안 함" -#: .././config.py:9210 +#: .././config.py:9241 msgid "This folder is marked as a favourite" msgstr "이 폴더는 즐겨찾기로 마크되어 있음" -#: .././config.py:9217 +#: .././config.py:9248 msgid "This folder is hidden" msgstr "이 폴더는 숨겨짐" -#: .././config.py:9224 +#: .././config.py:9255 msgid "This folder can't be deleted by the user" msgstr "이 폴더는 유저에 의해 삭제할 수 없음" -#: .././config.py:9231 +#: .././config.py:9262 msgid "This is a system-controlled folder" msgstr "이 폴더는 시스템 제어 폴더임" -#: .././config.py:9238 +#: .././config.py:9269 msgid "Only videos can be added to this folder" msgstr "이 폴더엔 비디오만 추가할 수 있음" -#: .././config.py:9245 +#: .././config.py:9276 msgid "All contents deleted when Tartube shuts down" msgstr "Tartube가 종료되면 모든 컨텐츠가 삭제됨" -#: .././config.py:9259 .././config.py:11475 +#: .././config.py:9290 .././config.py:11506 msgid "_Statistics" msgstr "_통계" -#: .././config.py:9264 .././config.py:11482 +#: .././config.py:9295 .././config.py:11513 msgid "Statistics" msgstr "통계" -#: .././config.py:9285 .././config.py:11503 +#: .././config.py:9316 .././config.py:11534 msgid "Downloaded" msgstr "다운로드" -#: .././config.py:9329 +#: .././config.py:9360 msgid "Sub-folders" msgstr "서브 폴더" -#: .././config.py:9351 +#: .././config.py:9382 msgid "Recalculate" msgstr "다시 계산" -#: .././config.py:9522 +#: .././config.py:9553 msgid "Scheduled download" msgstr "예약 다운로드" -#: .././config.py:9673 .././config.py:12515 +#: .././config.py:9704 .././config.py:12546 msgid "Scheduled download name" msgstr "예약 다운로드 이름" -#: .././config.py:9685 +#: .././config.py:9716 msgid "Download mode" msgstr "다운로드 모드" -#: .././config.py:9690 +#: .././config.py:9721 msgid "Check channels, playlist and folders" msgstr "채널, 플레이리스트, 폴더 선택" -#: .././config.py:9691 +#: .././config.py:9722 msgid "Download channels, playlists and folders" msgstr "채널, 플레이리스트, 폴더 다운로드" -#: .././config.py:9692 +#: .././config.py:9723 msgid "Perform a custom download" msgstr "커스텀 다운로드 수행" -#: .././config.py:9703 .././config.py:12481 +#: .././config.py:9734 .././config.py:12512 msgid "Start mode" msgstr "시작 모드" -#: .././config.py:9708 +#: .././config.py:9739 msgid "Perform this download at regular intervals" msgstr "정기적으로 이 다운로드 수행" -#: .././config.py:9709 +#: .././config.py:9740 msgid "Perform this download when Tartube starts" msgstr "Tartube가 시작되면 이 다운로드 수행" -#: .././config.py:9710 +#: .././config.py:9741 msgid "Disable this scheduled download" msgstr "이 예약 다운로드 비활성화" -#: .././config.py:9722 +#: .././config.py:9753 msgid "Time between scheduled downloads" msgstr "예약 다운로드 시간" -#: .././config.py:9766 +#: .././config.py:9797 msgid "If another scheduled download is running:" msgstr "만약 다른 예약 다운로드가 수행중이면:" -#: .././config.py:9773 +#: .././config.py:9804 msgid "Add channels, playlists and folders to the end of the queue" msgstr "대기열 끝에 채널, 플레이리스트, 폴더 추가" -#: .././config.py:9779 +#: .././config.py:9810 msgid "Add channels, playlists and folders to the beginning of the queue" msgstr "대기열 맨 앞에 채널, 플레이리스트, 폴더 추가" -#: .././config.py:9786 +#: .././config.py:9817 msgid "Do nothing, just wait until the next scheduled download time" msgstr "아무것도 하지 않고 다음 예약 다운로드 시간까지 기다리기" -#: .././config.py:9801 +#: .././config.py:9832 msgid "This scheduled download takes priority over others" msgstr "이 예약된 다운로드가 다른것보다 우선시됩니다" -#: .././config.py:9804 +#: .././config.py:9835 msgid "Other scheduled downloads won't start until this one is finished" msgstr "" "다른 예약 다운로드는 이 예약 다운로드가 종료되기 전까지 시작하지 않습니다" -#: .././config.py:9813 +#: .././config.py:9844 msgid "" "Ignore time-saving preferences, and check/download the whole channel/" "playlist/folder" msgstr "" "시간 절약 환경 설정을 무시하고, 전체 채널/플레이리스트/폴더 확인/다운로드" -#: .././config.py:9821 +#: .././config.py:9852 msgid "Shut down Tartube when this scheduled download has finished" msgstr "예약 작업이 종료되면 Tartube 종료" -#: .././config.py:9839 +#: .././config.py:9870 msgid "Media to download" msgstr "다운로드 할 미디어" -#: .././config.py:9845 +#: .././config.py:9876 msgid "Check/download everything" msgstr "모든걸 확인/다운로드" -#: .././config.py:9853 +#: .././config.py:9884 msgid "Only check/download the media below" msgstr "하단의 미디어만 확인/다운로드" -#: .././config.py:9867 +#: .././config.py:9898 msgid "" "Hint: you can drag and drop channels, playlists and your own folders here" msgstr "힌트: 여기에 채널, 플레이리스트, 폴더를 드래그 앤 드랍할 수 있습니다" -#: .././config.py:9926 +#: .././config.py:9957 msgid "Remove" msgstr "제거" -#: .././config.py:10230 +#: .././config.py:10261 msgid "System preferences" msgstr "시스템 환경 설정" -#: .././config.py:10483 +#: .././config.py:10514 msgid "_Language" msgstr "_언어" -#: .././config.py:10488 +#: .././config.py:10519 msgid "Language preferences" msgstr "언어 환경 설정" -#: .././config.py:10493 +#: .././config.py:10524 msgid "Language" msgstr "언어" -#: .././config.py:10529 +#: .././config.py:10560 msgid "_Stability" msgstr "_안정성" -#: .././config.py:10539 +#: .././config.py:10570 msgid "Gtk library" msgstr "Gtk 라이브러리" -#: .././config.py:10544 +#: .././config.py:10575 msgid "Current version of the system's Gtk library" msgstr "시스템의 현재 Gtk 라이브러리 버전" -#: .././config.py:10559 +#: .././config.py:10590 msgid "Gtk stability" msgstr "Gtk 안정성" -#: .././config.py:10598 +#: .././config.py:10629 msgid "" "Tartube uses the Gtk graphics library. This library is notoriously " "unreliable and may even causes crashes." @@ -5153,7 +5165,7 @@ msgstr "" "Tartube는 Gtk 그래픽 라이브러리를 사용합니다. Gtk 라이브러리는 믿을수 없을 정" "도로 악명깊고 심지어 충돌이 일어날 수도 있습니다." -#: .././config.py:10605 +#: .././config.py:10636 msgid "" "By default, some cosmetic features are disabled (for example, in the Videos " "tab, the list of videos is not updated until the end of a download " @@ -5162,7 +5174,7 @@ msgstr "" "기본적으로, 일부 그래픽 기능은 비활성화 되어있습니다 (예를 들어, 비디오 탭의 " "비디오 목록은 다운로드 작업이 끝날 때 까지 업데이트 되지 않습니다)." -#: .././config.py:10613 +#: .././config.py:10644 msgid "" "If you think that your system Gtk has been fixed (or if you want to test Gtk " "stability), you can re-enable the cosmetic features." @@ -5170,192 +5182,192 @@ msgstr "" "만약 시스템의 Gtk 라이브러리가 수정되었다고 생각하는 경우 (혹은 Gtk 안정성을 " "테스트하고 싶은 경우) 그래픽 기능을 다시 활성화 할 수 있습니다." -#: .././config.py:10623 +#: .././config.py:10654 msgid "Disable some cosmetic features to prevent crashes and other issues" msgstr "몇몇 그래픽 기능을 비활성화 해서 충돌 및 기타 문제 방지하기" -#: .././config.py:10641 +#: .././config.py:10672 msgid "_Modules" msgstr "_모듈" -#: .././config.py:10646 +#: .././config.py:10677 msgid "Module availability" msgstr "모듈 가용성" -#: .././config.py:10652 +#: .././config.py:10683 msgid "feedparser module is available (required for detecting livestreams)" msgstr "feedparser 모듈을 사용할 수 있습니다 (생방송 감지 시 필요)" -#: .././config.py:10661 +#: .././config.py:10692 msgid "matplotlib module is available (draws graphs)" msgstr "matplotlib 모듈을 사용할 수 있습니다 (그래프를 그릴 때 사용)" -#: .././config.py:10669 +#: .././config.py:10700 msgid "moviepy module is available (finds the length of videos, if unknown)" msgstr "" "moviepy 모듈을 사용할 수 있습니다 (비디오의 길이를 모를 경우 이를 찾는데 사" "용)" -#: .././config.py:10679 +#: .././config.py:10710 msgid "playsound module is available (sound an alarm when a livestream starts)" msgstr "playsound 모듈을 사용할 수 있습니다 (생방송이 시작될 경우 알람을 재생)" -#: .././config.py:10689 +#: .././config.py:10720 msgid "" "XDG module is available (saves the config file in the standard location)" msgstr "XDG 모듈을 사용할 수 있습니다 (구성 파일을 표준 위치에 저장해줌)" -#: .././config.py:10699 +#: .././config.py:10730 msgid "" "Notify module is available (shows desktop notifications; Linux/*BSD only)" msgstr "" "Notify 모듈을 사용할 수 있습니다 (데스크탑 알림을 보여줌; Linux/*BSD만 사용가" "능)" -#: .././config.py:10709 +#: .././config.py:10740 msgid "Module preferences" msgstr "모듈 환경 설정" -#: .././config.py:10715 +#: .././config.py:10746 msgid "" "Use 'moviepy' module to get a video's duration, if not known (may be slow)" msgstr "" "알려지지 않은 비디오 길이를 'moviepy' 모듈을 사용해 측정합니다 (느릴 수 있음)" -#: .././config.py:10727 +#: .././config.py:10758 msgid "Timeout applied when moviepy checks a video file" msgstr "비디오 파일을 moviepy로 체크할 때 타임아웃 적용" -#: .././config.py:10752 +#: .././config.py:10783 msgid "_Debugging" msgstr "_디버깅" -#: .././config.py:10760 +#: .././config.py:10791 msgid "Debugging preferences" msgstr "디버깅 환경 설정" -#: .././config.py:10766 +#: .././config.py:10797 msgid "" "Debug messages are only visible in the terminal window (these settings are " "not saved)" msgstr "" "디버그 메시지는 터미널 윈도우에서만 보입니다 (이 설정들은 저장되지 않습니다)" -#: .././config.py:10773 +#: .././config.py:10804 msgid "Enable application debug messages (code in mainapp.py)" msgstr "애플리케이션 디버그 메시지 활성화 (code in mainapp.py)" -#: .././config.py:10782 .././config.py:10802 +#: .././config.py:10813 .././config.py:10833 msgid "...but don't show timer debug messages" msgstr "...하지만 디버그 메시지 타이머는 표시하지 않기" -#: .././config.py:10793 +#: .././config.py:10824 msgid "Enable main winddow debug messages (code in mainwin.py)" msgstr "메인 디버그 메시지 활성화 (code in mainapp.py)" -#: .././config.py:10813 +#: .././config.py:10844 msgid "Enabled downloader debug messages (code in downloads.py)" msgstr "다운로더 디버그 메시지 활성화 (code in mainapp.py)" -#: .././config.py:10856 +#: .././config.py:10887 msgid "" "Debugging messages are also visible if an empty file called debug.txt exists " "here:" msgstr "디버깅 메시지는 이 위치의 debug.txt 파일이 비어있는 경우에도 보입니다:" -#: .././config.py:10901 +#: .././config.py:10932 msgid "_Device" msgstr "_디바이스" -#: .././config.py:10906 +#: .././config.py:10937 msgid "Device preferences" msgstr "디바이스 환경 설정" -#: .././config.py:10911 +#: .././config.py:10942 msgid "Size of device (in Mb)" msgstr "디바이스 파일 크기 (Mb)" -#: .././config.py:10923 +#: .././config.py:10954 msgid "Free space on device (in Mb)" msgstr "디바이스 남은 공간 (Mb)" -#: .././config.py:10935 +#: .././config.py:10966 msgid "Warn user if disk space is less than" msgstr "디스크 공간이 적으면 경고해주기" -#: .././config.py:10953 +#: .././config.py:10984 msgid "Halt downloads if disk space is less than" msgstr "디스크 공간이 적으면 중지하기" -#: .././config.py:10992 +#: .././config.py:11023 msgid "Configuration preferences" msgstr "구성 환경 설정" -#: .././config.py:10997 +#: .././config.py:11028 msgid "Tartube configuration file loaded from:" msgstr "Tartube 환경 설정 파일은 여기서 불러옵니다:" -#: .././config.py:11016 +#: .././config.py:11047 msgid "D_atabase" msgstr "_데이터베이스" -#: .././config.py:11022 +#: .././config.py:11053 msgid "Database preferences" msgstr "데이터베이스 환경 설정" -#: .././config.py:11027 +#: .././config.py:11058 msgid "Tartube data folder" msgstr "Tartube 데이터 폴더" -#: .././config.py:11039 +#: .././config.py:11070 msgid "Add new database" msgstr "새 데이터베이스 추가" -#: .././config.py:11041 +#: .././config.py:11072 msgid "Change to a different data folder" msgstr "다른 데이터 폴더로 변경" -#: .././config.py:11048 +#: .././config.py:11079 msgid "Check and repair database" msgstr "데이터베이스 확인 후 수리" -#: .././config.py:11051 +#: .././config.py:11082 msgid "Check for inconsistencies, and repair them" msgstr "불일치 확인 후 수리" -#: .././config.py:11056 +#: .././config.py:11087 msgid "Recent data folders" msgstr "최근 데이터 폴더" -#: .././config.py:11070 +#: .././config.py:11101 msgid "Switch to the selected data folder" msgstr "선택한 데이터 폴더로 변경" -#: .././config.py:11080 +#: .././config.py:11111 msgid "Forget" msgstr "잊어버리기" -#: .././config.py:11083 +#: .././config.py:11114 msgid "Remove the selected data folder from the list" msgstr "리스트에서 선택한 데이터 폴더 지우기" -#: .././config.py:11092 +#: .././config.py:11123 msgid "Forget all" msgstr "모두 잊어버리기" -#: .././config.py:11095 +#: .././config.py:11126 msgid "Forget every folder in this list (except the current one)" msgstr "이 목록의 모든 폴더 잊어버리기 (현재 폴더 제외)" -#: .././config.py:11108 +#: .././config.py:11139 msgid "Move the selected folder up the list" msgstr "선택한 폴더를 위로 이동" -#: .././config.py:11116 +#: .././config.py:11147 msgid "Move the selected folder down the list" msgstr "선택한 폴더를 아래로 이동" -#: .././config.py:11144 +#: .././config.py:11175 msgid "" "On startup, load the first database on the list (not the most recently-use " "one)" @@ -5363,23 +5375,23 @@ msgstr "" "시작시, 목록의 첫 번째 데이터베이스 로드 (가장 최근에 사용한 데이터베이스 아" "님)" -#: .././config.py:11154 +#: .././config.py:11185 msgid "If one database is in use, try to load others" msgstr "만약 한 데이터베이스가 사용중이면, 다른 것을 로드하기" -#: .././config.py:11162 +#: .././config.py:11193 msgid "Add new data directories to this list" msgstr "새 데이터 디렉토리를 리스트에 추가하기" -#: .././config.py:11201 +#: .././config.py:11232 msgid "_Backups" msgstr "_백업" -#: .././config.py:11205 +#: .././config.py:11236 msgid "Backup preferences" msgstr "백업 환경 설정" -#: .././config.py:11210 +#: .././config.py:11241 msgid "" "When saving a database file, Tartube makes a backup copy of it (in case " "something goes wrong)" @@ -5387,165 +5399,165 @@ msgstr "" "데이터베이스 파일을 저장할 때 Tartube에서 백업 사본을 만들어 두기 (만약을 위" "해서)" -#: .././config.py:11219 +#: .././config.py:11250 msgid "Delete the backup file as soon as the save procedure is finished" msgstr "저장 절차가 완료되는 즉시 백업 파일 삭제" -#: .././config.py:11229 +#: .././config.py:11260 msgid "Keep the backup file, replacing any previous backup file" msgstr "백업 파일을 유지하고 이전 백업 파일만 대체" -#: .././config.py:11240 +#: .././config.py:11271 msgid "" "Make a new backup file once per day, after the day's first save procedure" msgstr "매일매일 첫번째 저장 시에 새로운 백업 파일 생성" -#: .././config.py:11251 +#: .././config.py:11282 msgid "Make a new backup file for every save procedure" msgstr "매 저장 시에 새로운 백업 파일 생성" -#: .././config.py:11300 +#: .././config.py:11331 msgid "Automatic video deletion preferences" msgstr "자동 비디오 삭제 환경 설정" -#: .././config.py:11305 +#: .././config.py:11336 msgid "Automatically delete downloaded videos after this many days" msgstr "이 기간이 지나면 다운로드한 비디오 자동 삭제" -#: .././config.py:11319 +#: .././config.py:11350 msgid "...but only delete videos which have been watched" msgstr "...하지만 시청한 비디오만 삭제" -#: .././config.py:11343 +#: .././config.py:11374 msgid "Video matching preferences" msgstr "비디오 매칭 환경 설정" -#: .././config.py:11348 +#: .././config.py:11379 msgid "When matching videos on the filesystem:" msgstr "파일 시스템에서 비디오를 매칭할 때:" -#: .././config.py:11354 +#: .././config.py:11385 msgid "The video names must match exactly" msgstr "비디오 이름이 완벽히 일치" -#: .././config.py:11361 +#: .././config.py:11392 msgid "The first # characters must match exactly" msgstr "첫번째 # 글자만 완벽히 일치" -#: .././config.py:11375 +#: .././config.py:11406 msgid "Ignore the last # characters; the remaining name must match exactly" msgstr "마지막 # 글자를 무시하고 나머지 글자만 완벽히 일치" -#: .././config.py:11421 +#: .././config.py:11452 msgid "_Temporary folders" msgstr "_임시 폴더" -#: .././config.py:11427 +#: .././config.py:11458 msgid "Temporary folder preferences" msgstr "임시 폴더 환경 설정" -#: .././config.py:11432 +#: .././config.py:11463 msgid "Empty temporary folders when Tartube shuts down" msgstr "Tartube가 종료되면 임시 폴더 비우기" -#: .././config.py:11441 +#: .././config.py:11472 msgid "(N.B. Temporary folders are always emptied when Tartube starts up)" msgstr "(주의. Tartube가 시작되면 임시 폴더가 항상 비워집니다)" -#: .././config.py:11449 +#: .././config.py:11480 msgid "Open temporary folders (on the desktop) when Tartube shuts down" msgstr "Tartube가 종료되면 임시 폴더를 열기 (바탕화면에)" -#: .././config.py:11487 +#: .././config.py:11518 msgid "The Tartube database contains:" msgstr "Tartube 데이터베이스가 갖고 있는 정보:" -#: .././config.py:11547 +#: .././config.py:11578 msgid "Custom folders" msgstr "커스텀 폴더" -#: .././config.py:11570 +#: .././config.py:11601 msgid "Calculate" msgstr "계산" #. Add this tab... -#: .././config.py:11696 +#: .././config.py:11727 msgid "_Windows" msgstr "_윈도우" -#: .././config.py:11719 +#: .././config.py:11750 msgid "_Main window" msgstr "_메인 윈도우" -#: .././config.py:11725 +#: .././config.py:11756 msgid "Main window preferences" msgstr "메인 윈도우 환경설정" -#: .././config.py:11730 +#: .././config.py:11761 msgid "Remember the size of the main window when shutting down" msgstr "메인 윈도우를 종료 시 창 크기 기억" -#: .././config.py:11738 +#: .././config.py:11769 msgid "Also remember the position of main window sliders" msgstr "메인 윈도우의 슬라이더 위치 또한 기억" -#: .././config.py:11755 +#: .././config.py:11786 msgid "Don't show the main window toolbar" msgstr "메인 메뉴 툴바 보이지 않기" -#: .././config.py:11763 +#: .././config.py:11794 msgid "Don't show labels in the main window toolbar" msgstr "메인 메뉴 툴바 레이블 보이지 않기" -#: .././config.py:11781 +#: .././config.py:11812 msgid "" "Replace stock icons with custom icons (in case stock icons are not visible)" msgstr "" "스톡 아이콘을 커스텀 아이콘으로 교체 (스톡 아이콘이 표시되지 않는 경우)" -#: .././config.py:11791 +#: .././config.py:11822 msgid "Show tooltips for videos, channels, playlists and folders" msgstr "비디오, 채널, 플레이리스트, 폴더에 대한 툴팁 표시" -#: .././config.py:11799 +#: .././config.py:11830 msgid "Show errors/warnings in tooltips (but not in the Videos tab)" msgstr "툴팁에 오류/경고 표시 (비디오 탭에선 아님)" -#: .././config.py:11817 +#: .././config.py:11848 msgid "Disable the 'Download all' buttons in the toolbar and the Videos Tab" msgstr "툴바와 비디오 탭에서 '모두 다운로드' 버튼 비활성화" -#: .././config.py:11828 +#: .././config.py:11859 msgid "In the Progress Tab, hide finished videos / channels / playlists" msgstr "작업 탭에서 완료한 비디오 / 채널 / 플레이리스트 숨기기" -#: .././config.py:11837 +#: .././config.py:11868 msgid "In the Progress Tab, show results in reverse order" msgstr "작업 탭에서, 결과를 반대로 보여주기" -#: .././config.py:11845 +#: .././config.py:11876 msgid "When Tartube starts, automatically open the Classic Mode tab" msgstr "Tartube가 시작하면, 자동으로 클래식 모드 탭으로 열기" -#: .././config.py:11859 +#: .././config.py:11890 msgid "" "In the Classic Mode Tab, when adding URLs, remove duplicates rather than " "retaining them" msgstr "클래식 모드 탭에서, URL을 추가할 때, 중복 항목을 유지하지 않고 제거" -#: .././config.py:11873 +#: .././config.py:11904 msgid "In the Errors/Warnings Tab, don't reset the tab text when it is clicked" msgstr "오류/경고 탭에서, 탭 텍스트를 클릭 시 재설정하지 않음" -#: .././config.py:11896 +#: .././config.py:11927 msgid "Video Index (left side of the Videos Tab)" msgstr "비디오 색인 (비디오 탭의 왼쪽)" -#: .././config.py:11902 +#: .././config.py:11933 msgid "Show smaller icons in the Video Index" msgstr "비디오 색인에서 작은 아이콘 표시하기" -#: .././config.py:11912 +#: .././config.py:11943 msgid "" "In the Video Index, show detailed statistics about the videos in each " "channel / playlist / folder" @@ -5553,140 +5565,140 @@ msgstr "" "비디오 색인 내 각 채널 / 플레이리스트 / 폴더에서 비디오에 대한 자세한 통계 표" "시하기" -#: .././config.py:11923 +#: .././config.py:11954 msgid "" "After clicking on a folder, automatically expand/collapse the tree around it" msgstr "폴더를 클릭하면, 자동으로 관련 트리를 확장/축소하기" -#: .././config.py:11934 +#: .././config.py:11965 msgid "Expand the whole tree, not just the level beneath the clicked folder" msgstr "클릭한 폴더 아래뿐 아니라 전체 트리 확장하기" -#: .././config.py:11955 +#: .././config.py:11986 msgid "Video Catalogue (right side of the Videos Tab)" msgstr "비디오 카탈로그 (비디오 탭의 오른쪽)" -#: .././config.py:11962 +#: .././config.py:11993 msgid "Show 'today' and 'yesterday' as the date, when possible" msgstr "가능하면 '오늘'과 '어제' 사용하기" -#: .././config.py:11972 +#: .././config.py:12003 msgid "Draw a frame around each video" msgstr "각 비디오 주위에 프레임 그리기" -#: .././config.py:11982 +#: .././config.py:12013 msgid "Draw status icons for each video" msgstr "각 비디오에 상태 아이콘 그리기" -#: .././config.py:11991 +#: .././config.py:12022 msgid "Thumbnail size (when videos are displayed on a grid)" msgstr "섬네일 크기 (비디오가 그리드로 표시될 때)" -#: .././config.py:12019 +#: .././config.py:12050 msgid "Show livestreams with a different background colour" msgstr "생방송을 다른 배경 색으로 표시하기" -#: .././config.py:12027 +#: .././config.py:12058 msgid "Use same background colours for livestream and debut videos" msgstr "생방송과 데뷔 비디오를 동일한 배경 색으로 표시하기" -#: .././config.py:12055 +#: .././config.py:12086 msgid "_Drag" msgstr "_드래그" -#: .././config.py:12059 +#: .././config.py:12090 msgid "Drag and drop preferences" msgstr "드래그 앤 드랍 환경 설정" -#: .././config.py:12065 +#: .././config.py:12096 msgid "When dragging and dropping videos to an external application..." msgstr "비디오를 외부 프로그램으로 드래그 앤 드랍 할때..." -#: .././config.py:12071 +#: .././config.py:12102 msgid "Transfer the video's full file path" msgstr "비디오의 전체 경로 전송하기" -#: .././config.py:12079 +#: .././config.py:12110 msgid "Transfer the video's source URL" msgstr "비디오의 원본 URL 전송하기" -#: .././config.py:12087 +#: .././config.py:12118 msgid "Transfer the video's name" msgstr "비디오의 이름 전송하기" -#: .././config.py:12095 +#: .././config.py:12126 msgid "Transfer the thumbnail's full file path" msgstr "비디오 섬네일의 전체 경로 전송하기" -#: .././config.py:12111 +#: .././config.py:12142 msgid "_System tray" msgstr "_시스템 트레이" -#: .././config.py:12117 +#: .././config.py:12148 msgid "System tray preferences" msgstr "시스템 트레이 환경 설정" -#: .././config.py:12122 +#: .././config.py:12153 msgid "Show icon in system tray" msgstr "시스템 트레이에 아이콘 표시하기" -#: .././config.py:12131 +#: .././config.py:12162 msgid "Close to the tray, rather than closing the application" msgstr "프로그램을 닫는 대신 트레이에 닫기" -#: .././config.py:12157 +#: .././config.py:12188 msgid "D_ialogues" msgstr "_다이얼로그" -#: .././config.py:12163 +#: .././config.py:12194 msgid "Dialogue window preferences" msgstr "다이얼로그 윈도우 환경 설정" -#: .././config.py:12168 +#: .././config.py:12199 msgid "When adding channels/playlists, keep the dialogue window open" msgstr "채널/플레이리스트 추가 시 다이얼로그 윈도우 열기" -#: .././config.py:12178 +#: .././config.py:12209 msgid "When the dialogue window opens, add URLs from the system clipboard" msgstr "다이얼로그 윈도우가 열릴ㄸ 때, URL을 클립보드에 추가하기" -#: .././config.py:12206 +#: .././config.py:12237 msgid "_Errors/Warnings" msgstr "_오류/경고" -#: .././config.py:12214 +#: .././config.py:12245 msgid "Errors/Warnings tab preferences" msgstr "오류/경고 탭 환경 설정" -#: .././config.py:12219 +#: .././config.py:12250 msgid "Show Tartube error messages" msgstr "Tartube 오류 메시지 표시하기" -#: .././config.py:12227 +#: .././config.py:12258 msgid "Show Tartube warning messages" msgstr "Tartube 경고 메시지 표시하기" -#: .././config.py:12235 +#: .././config.py:12266 msgid "Show server error messages" msgstr "서버 에러 메시지 표시하기" -#: .././config.py:12246 +#: .././config.py:12277 msgid "Show server warning messages" msgstr "서버 경고 메시지 표시하기" -#: .././config.py:12258 +#: .././config.py:12289 msgid "Downloader error/warning preferences" msgstr "다운로드 오류/경고 환경설정" -#: .././config.py:12263 +#: .././config.py:12294 msgid "TRANSLATOR'S NOTE: These error messages are always in English" msgstr "TRANSLATOR'S NOTE: These error messages are always in English" -#: .././config.py:12267 +#: .././config.py:12298 msgid "Ignore 'Child process exited with non-zero code' errors" msgstr "Ignore 'Child process exited with non-zero code' errors" -#: .././config.py:12276 +#: .././config.py:12307 msgid "" "Ignore 'Unable to download video data' and 'Unable to extract video data' " "errors" @@ -5694,130 +5706,130 @@ msgstr "" "Ignore 'Unable to download video data' and 'Unable to extract video data' " "errors" -#: .././config.py:12286 +#: .././config.py:12317 msgid "Ignore 'Did not get any data blocks' errors" msgstr "Ignore 'Did not get any data blocks' errors" -#: .././config.py:12295 +#: .././config.py:12326 msgid "Ignore 'Requested formats are incompatible for merge' warnings" msgstr "Ignore 'Requested formats are incompatible for merge' warnings" -#: .././config.py:12304 +#: .././config.py:12335 msgid "Ignore 'No video formats found' errors" msgstr "Ignore 'No video formats found' errors" -#: .././config.py:12312 +#: .././config.py:12343 msgid "Ignore 'There are no annotations to write' warnings" msgstr "Ignore 'There are no annotations to write' warnings" -#: .././config.py:12320 +#: .././config.py:12351 msgid "Ignore 'Video doesn't have subtitles' warnings" msgstr "Ignore 'Video doesn't have subtitles' warnings" -#: .././config.py:12336 +#: .././config.py:12367 msgid "_Websites" msgstr "_웹사이트" -#: .././config.py:12344 +#: .././config.py:12375 msgid "YouTube error/warning preferences" msgstr "유튜브 오류/경고 설정" -#: .././config.py:12349 +#: .././config.py:12380 msgid "Ignore YouTube copyright errors" msgstr "유튜브 저작권 오류 무시하기" -#: .././config.py:12357 +#: .././config.py:12388 msgid "Ignore YouTube age-restriction errors" msgstr "유튜브 나이제한 오류 무시하기" -#: .././config.py:12365 +#: .././config.py:12396 msgid "Ignore YouTube deletion by uploader errors" msgstr "유튜브 업로더 삭제 오류 무시하기" -#: .././config.py:12373 +#: .././config.py:12404 msgid "Ignore YouTube payment errors" msgstr "유튜브 결제 오류 무시하기" -#: .././config.py:12382 +#: .././config.py:12413 msgid "General preferences" msgstr "일반 속성" -#: .././config.py:12388 +#: .././config.py:12419 msgid "" "Ignore any errors/warnings which match lines in this list (applies to all " "websites)" msgstr "이 목록의 행과 일치하는 오류/경고 무시하기(모든 웹사이트에 적용)" -#: .././config.py:12402 +#: .././config.py:12433 msgid "These are ordinary strings" msgstr "이것들은 보통 문자열임" -#: .././config.py:12409 +#: .././config.py:12440 msgid "These are regular expressions (regexes)" msgstr "이것들은 정규식임 (regexes)" #. Add this tab... -#: .././config.py:12438 +#: .././config.py:12469 msgid "_Scheduling" msgstr "_예약" -#: .././config.py:12455 +#: .././config.py:12486 msgid "_Start" msgstr "_시작" -#: .././config.py:12461 +#: .././config.py:12492 msgid "Scheduled download preferences" msgstr "예약 다운로드 속성" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Priority" msgstr "우선순위" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Whole" msgstr "전체" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Shutdown" msgstr "강제 종료" -#: .././config.py:12482 +#: .././config.py:12513 msgid "D/L All" msgstr "모두 다운로드" -#: .././config.py:12483 +#: .././config.py:12514 msgid "Join mode" msgstr "조인 모드" -#: .././config.py:12537 .././config.py:14468 .././config.py:14733 +#: .././config.py:12568 .././config.py:14499 .././config.py:14764 msgid "Edit" msgstr "편집" -#: .././config.py:12564 .././config.py:14504 .././config.py:14769 +#: .././config.py:12595 .././config.py:14535 .././config.py:14800 msgid "Delete" msgstr "삭제" -#: .././config.py:12632 +#: .././config.py:12663 msgid "S_top" msgstr "_중지" -#: .././config.py:12638 +#: .././config.py:12669 msgid "Scheduled stop preferences" msgstr "예약 중지 속성" -#: .././config.py:12643 +#: .././config.py:12674 msgid "Stop all download operations after this much time" msgstr "이 시간 이후 모든 다운로드 작업 중지" -#: .././config.py:12691 +#: .././config.py:12722 msgid "Stop all download operations after this many videos" msgstr "비디오 개수 이후 모든 다운로드 작업 중지" -#: .././config.py:12718 +#: .././config.py:12749 msgid "Stop all download operations after this much disk space" msgstr "다운로드 용량 차지시 모든 다운로드 작업 중지" -#: .././config.py:12761 +#: .././config.py:12792 msgid "" "N.B. Disk space is estimated. This setting does not apply to simulated " "downloads" @@ -5825,163 +5837,163 @@ msgstr "" "주의. 디스크 용량은 추정치입니다. 이 설정은 시뮬레이션 다운로드 시 적용되지 " "않습니다" -#: .././config.py:12799 +#: .././config.py:12830 msgid "_Performance" msgstr "_퍼포먼스" -#: .././config.py:12807 +#: .././config.py:12838 msgid "Performance limits" msgstr "퍼포먼스 제한" -#: .././config.py:12812 +#: .././config.py:12843 msgid "Limit simultaneous downloads to" msgstr "동시 다운로드 개수 제한" -#: .././config.py:12830 +#: .././config.py:12861 msgid "Limit download speed to" msgstr "다운로드 속도 제한" -#: .././config.py:12856 +#: .././config.py:12887 msgid "Overriding video format options, limit video resolution to" msgstr "비디오 포맷 옵션 무시, 비디오 해상도 제한" -#: .././config.py:12878 +#: .././config.py:12909 msgid "Time-saving settings" msgstr "시간절약 설정" -#: .././config.py:12884 +#: .././config.py:12915 msgid "" "Stop checking/downloading a channel/playlist when it starts sending videos " "you already have" msgstr "" "이미 가지고 있는 비디오 전송을 시작할 때 채널/플레이리스트 확인/다운로드 중지" -#: .././config.py:12895 +#: .././config.py:12926 msgid "Stop after this many videos (when checking)" msgstr "비디오 개수 이후 작업 중지 (확인 중에)" -#: .././config.py:12910 +#: .././config.py:12941 msgid "Stop after this many videos (when downloading)" msgstr "비디오 개수 이후 작업 중지 (다운로드 중에)" -#: .././config.py:12941 +#: .././config.py:12972 msgid "P_references" msgstr "_환경 설정" -#: .././config.py:12949 +#: .././config.py:12980 msgid "URL flexibility preferences" msgstr "URL 유연성 기본 설정" -#: .././config.py:12956 +#: .././config.py:12987 msgid "" "If a video's URL represents a channel/playlist, not a video, don't download " "it" msgstr "비디오 URL이 채널이나 플레이리스트라면 다운로드받지 않기" -#: .././config.py:12965 +#: .././config.py:12996 msgid "...or, download multiple videos into the containing folder" msgstr "...혹은, 포함된 폴더로 여러 동영상을 다운로드 받기" -#: .././config.py:12975 +#: .././config.py:13006 msgid "...or, create a new channel, and download the videos into that" msgstr "...혹은, 새로운 채널을 만들어서, 거기에 비디오 받기" -#: .././config.py:12986 +#: .././config.py:13017 msgid "...or, create a new playlist, and download the videos into that" msgstr "...혹은, 새로운 플레이리스트를 만들어서, 거기에 비디오 받기" -#: .././config.py:13018 +#: .././config.py:13049 msgid "Missing video preferences" msgstr "사라진 비디오 환경 설정" -#: .././config.py:13024 +#: .././config.py:13055 msgid "" "Add videos which have been removed from a channel/playlist to the Missing " "Videos folder" msgstr "채널/플레이리스트에서 사라진 비디오를 '사라진 비디오' 폴더에 추가하기" -#: .././config.py:13035 +#: .././config.py:13066 msgid "Only add videos that were uploaded within this many days" msgstr "이 기간 내에 업로드 된 동영상만 추가(일)" -#: .././config.py:13076 +#: .././config.py:13107 msgid "Invidious mirror" msgstr "Invidious 미러" -#: .././config.py:13082 +#: .././config.py:13113 msgid "To find an updated list of Invidious mirrors, use any search engine!" msgstr "Invidious 미러 최신 버전 링크를 확인할려면 검색 엔진을 사용하세요!" -#: .././config.py:13095 .././config.py:13407 +#: .././config.py:13126 .././config.py:13438 msgid "Type the exact text that replaces youtube.com e.g." msgstr "youtube.com을 대체하는 정확한 텍스트를 입력하세요." -#: .././config.py:13121 +#: .././config.py:13152 msgid "Download operation preferences" msgstr "다운로드 작업 환경 설정" -#: .././config.py:13127 +#: .././config.py:13158 msgid "Automatically update downloader before every download operation" msgstr "매일 다운로드 작업 전에 자동으로 다운로더 업데이트" -#: .././config.py:13139 +#: .././config.py:13170 msgid "Automatically save files at the end of all operations" msgstr "모든 작업 이후 자동으로 저장" -#: .././config.py:13149 +#: .././config.py:13180 msgid "For simulated downloads, don't check a video in a folder more than once" msgstr "시뮬레이션 다운로드에서, 비디오를 두번 이상 확인하지 않기" -#: .././config.py:13160 +#: .././config.py:13191 msgid "If a download stalls, restart it after this many minutes" msgstr "만약 다운로드가 지연된 경우 이 시간 이후 재시작하기 (분)" -#: .././config.py:13181 +#: .././config.py:13212 msgid "If a network problem is detected, restart the download immediately" msgstr "네트워크 문제가 감지된 경우, 즉시 재시작하기" -#: .././config.py:13193 +#: .././config.py:13224 msgid "Maximum restarts after a stalled download (0 for no maximum)" msgstr "지연된 다운로드 최대 재시작 횟수 (0인 경우 무제한)" -#: .././config.py:13234 +#: .././config.py:13265 msgid "" "Allow downloader to create its own archive file (so deleted videos are not " "re-downloaded)" msgstr "" "다운로더가 아카이브 파일 생성하도록 허용 (삭제된 비디오 재 다운로드 방지)" -#: .././config.py:13245 +#: .././config.py:13276 msgid "" "Also create an archive file when downloading from the Classic Mode tab (not " "recommended)" msgstr "클래식 모드 탭에서 다운로드 시에도 아카이브 파일 생성 (권장하지 않음)" -#: .././config.py:13256 +#: .././config.py:13287 msgid "When checking videos, apply a 60-second timeout" msgstr "비디오를 확인할 때, 60초 타임아웃 적용" -#: .././config.py:13266 +#: .././config.py:13297 msgid "" "Convert .webp thumbnails into .jpg thumbnails (using FFmpeg) after " "downloading them" msgstr "다운로드 후 .webp 섬네일을 FFmpeg를 이용해 .jpg로 변환" -#: .././config.py:13283 +#: .././config.py:13314 msgid "_Custom" msgstr "_커스텀" -#: .././config.py:13288 +#: .././config.py:13319 msgid "Custom download preferences" msgstr "커스텀 다운로드 환경 설정" -#: .././config.py:13294 +#: .././config.py:13325 msgid "" "In custom downloads, download each video independently of its channel or " "playlist" msgstr "커스텀 다운로드에서 채널이나 플레이리스트를 독립적으로 다운로드 받기" -#: .././config.py:13305 +#: .././config.py:13336 msgid "" "In custom downloads, apply a delay after each video/channel/playlist is " "download" @@ -5989,69 +6001,69 @@ msgstr "" "커스텀 다운로드에서 각각의 비디오/채널/플레이리스트가 다운로드 될 때 딜레이 " "적용하기" -#: .././config.py:13315 +#: .././config.py:13346 msgid "Maximum delay to apply (in minutes)" msgstr "적용할 최대 딜레이 (분)" -#: .././config.py:13332 +#: .././config.py:13363 msgid "Minimum delay to apply (in minutes; randomises the actual delay)" msgstr "적용할 최소 딜레이 (분; 실제 딜레이는 랜덤화됨)" -#: .././config.py:13355 +#: .././config.py:13386 msgid "In custom downloads, obtain a YouTube video from the original website" msgstr "커스텀 다운로드 시 원본 웹 사이트에서 유튜브 비디오를 가져오기" -#: .././config.py:13365 +#: .././config.py:13396 msgid "In custom downloads, obtain the video from HookTube rather than YouTube" msgstr "커스텀 다운로드 시 유튜브 대신 HookTube 가져오기" -#: .././config.py:13377 +#: .././config.py:13408 msgid "" "In custom downloads, obtain the video from Invidious rather than YouTube" msgstr "커스텀 다운로드 시 유튜브 대신 Invidious 가져오기" -#: .././config.py:13389 +#: .././config.py:13420 msgid "" "In custom downloads, obtain the video from the YouTube front-end specified " "below" msgstr "커스텀 다운로드 시 유튜브 대신 아래 유튜브 프론트엔드 링크로 가져오기" -#: .././config.py:13489 +#: .././config.py:13520 msgid "Livestream preferences (compatible websites only)" msgstr "생방송 환경 설정 (호환 가능한 사이트만 가능)" -#: .././config.py:13495 +#: .././config.py:13526 msgid "Detect livestreams announced within this many days" msgstr "이 기간 내 예약된 생방송 탐지 (일)" -#: .././config.py:13510 +#: .././config.py:13541 msgid "How often to check the status of livestreams (in minutes)" msgstr "생방송을 탐지할 주기 (분)" -#: .././config.py:13529 +#: .././config.py:13560 msgid "Check more frequently when a livestream is due to start" msgstr "생방송이 시작해야될 때 더 자주 확인" -#: .././config.py:13572 +#: .././config.py:13603 msgid "Broadcast preferences (compatible websites only)" msgstr "브로드캐스트 환경 설정 (호환 가능한 사이트만 가능)" -#: .././config.py:13579 +#: .././config.py:13610 msgid "" "Use Youtube Stream Capture to download broadcasting livestreams (requires " "aria2)" msgstr "" "브로드캐스트 생방송을 다운로드 할때 유튜브 스트림 캡처 사용하기 (aria2 필요)" -#: .././config.py:13589 +#: .././config.py:13620 msgid "Timeout after this many minutes of inactivity" msgstr "비활성 시 타임아웃 시간 설정 (분)" -#: .././config.py:13603 +#: .././config.py:13634 msgid "Number of restarts after a timeout" msgstr "타임아웃 시 재시도 횟수" -#: .././config.py:13618 +#: .././config.py:13649 msgid "" "Bypass usual limits on simultaneous downloads, so that all broadcasts can be " "downloaded" @@ -6059,127 +6071,127 @@ msgstr "" "모든 브로드캐스트를 다운로드 할 수 있도록 동시 다운로드에 대한 일반적인 제한" "사항 우회" -#: .././config.py:13659 +#: .././config.py:13690 msgid "_Proxies" msgstr "_프록시" -#: .././config.py:13665 +#: .././config.py:13696 msgid "Proxies" msgstr "프록시" -#: .././config.py:13672 +#: .././config.py:13703 msgid "" "During a download operation, Tartube will cycle betwween the proxies in this " "list" msgstr "다운로드 작업 중, Tartube가 리스트에 있는 프록시를 경유합니다" -#: .././config.py:13693 +#: .././config.py:13724 msgid "_Actions" msgstr "_행동" -#: .././config.py:13702 +#: .././config.py:13733 msgid "Livestream actions (can be toggled for individual videos)" msgstr "생방송 행동 (개별 비디오에 대해 토글 가능)" -#: .././config.py:13709 +#: .././config.py:13740 msgid "(currently disabled on MS Windows)" msgstr "(현재 MS Windows에서는 비활성화됨)" -#: .././config.py:13714 +#: .././config.py:13745 msgid "When a livestream starts, show a desktop notification" msgstr "생방송이 시작되면, 데스크탑 알림으로 알림" -#: .././config.py:13728 +#: .././config.py:13759 msgid "When a livestream starts, sound an alarm" msgstr "생방송이 시작되면, 알람을 소리로 울림" -#: .././config.py:13751 +#: .././config.py:13782 msgid "Plays the selected sound effect" msgstr "선택한 사운드 효과 재생" -#: .././config.py:13758 +#: .././config.py:13789 msgid "When a livestream starts, open it in the system's web browser" msgstr "생방송이 시작되면, 시스템의 웹브라우저로 실행" -#: .././config.py:13770 +#: .././config.py:13801 msgid "When a livestream starts, begin downloading it immediately" msgstr "생방송이 시작되면, 즉시 다운로드 시작" -#: .././config.py:13796 +#: .././config.py:13827 msgid "Desktop notification preferences" msgstr "데스크탑 알림 환경 설정" -#: .././config.py:13803 +#: .././config.py:13834 msgid "Show a dialogue window at the end of an operation" msgstr "작업 종료 후에 다이얼로그 윈도우 표시" -#: .././config.py:13828 +#: .././config.py:13859 msgid "Don't notify the user at the end of an operation" msgstr "작업이 끝나도 유저에게 알리지 않기" -#: .././config.py:13882 +#: .././config.py:13913 msgid "_Forks" msgstr "_포크" -#: .././config.py:13888 +#: .././config.py:13919 msgid "Forks of youtube-dl" msgstr "youtube-dl의 포크" -#: .././config.py:13917 -msgid "Use youtube-dlc" -msgstr "youtube-dlc 사용" +#: .././config.py:13948 +msgid "Use yt-dlp" +msgstr "" -#: .././config.py:13946 +#: .././config.py:13977 msgid "Use youtube-dl" msgstr "youtube-dl 사용" -#: .././config.py:13974 +#: .././config.py:14005 msgid "Use a different fork of youtube-dl:" msgstr "yotube-dl의 다른 포크 사용" -#: .././config.py:14051 +#: .././config.py:14082 msgid "_File paths" msgstr "_파일 경로" -#: .././config.py:14058 +#: .././config.py:14089 msgid "Downloader file paths" msgstr "다운로더 파일 경로" -#: .././config.py:14064 +#: .././config.py:14095 msgid "Path to the executable" msgstr "실행 파일 경로" #. (Signal connect appears below) -#: .././config.py:14070 .././config.py:14218 .././config.py:14259 -#: .././config.py:14329 .././config.py:20068 +#: .././config.py:14101 .././config.py:14249 .././config.py:14290 +#: .././config.py:14360 .././config.py:20098 msgid "Use default path" msgstr "기본 경로 사용" -#: .././config.py:14075 .././config.py:20080 +#: .././config.py:14106 .././config.py:20110 msgid "Use local path" msgstr "로컬 경로 사용" -#: .././config.py:14079 +#: .././config.py:14110 msgid "Use custom path" msgstr "커스텀 경로 사용" -#: .././config.py:14087 .././config.py:20094 +#: .././config.py:14118 .././config.py:20124 msgid "Use PyPI path" msgstr "PyPI 경로 사용" -#: .././config.py:14138 +#: .././config.py:14169 msgid "Command for update operations" msgstr "업데이트 작업 명령" -#: .././config.py:14186 +#: .././config.py:14217 msgid "_FFmpeg / AVConv" msgstr "_FFmpeg / AVConv" -#: .././config.py:14194 +#: .././config.py:14225 msgid "Post-processing file paths" msgstr "후처리 파일 경로" -#: .././config.py:14199 +#: .././config.py:14230 msgid "" "You only need to set these paths if Tartube cannot find FFmpeg / AVConv " "automatically" @@ -6187,31 +6199,31 @@ msgstr "" "Tartube가 FFmpeg / AVConv 경로를 자동으로 찾을 수 없는 경우에만 경로 설정을 " "진행하면 됩니다" -#: .././config.py:14206 +#: .././config.py:14237 msgid "Path to the FFmpeg executable" msgstr "FFmpeg 실행 파일 경로" -#: .././config.py:14233 +#: .././config.py:14264 msgid "Install from main menu" msgstr "메인 메뉴에서 설치" -#: .././config.py:14247 +#: .././config.py:14278 msgid "Path to the AVConv executable" msgstr "AVConv 실행 파일 경로" -#: .././config.py:14274 +#: .././config.py:14305 msgid "Not supported on MS Windows" msgstr "MS Windows에서는 지원하지 않음" -#: .././config.py:14297 +#: .././config.py:14328 msgid "_Stream Capture" msgstr "_스트림 캡처" -#: .././config.py:14305 +#: .././config.py:14336 msgid "Youtube Stream Capture file path" msgstr "유튜브 스트림 캡처 파일 경로" -#: .././config.py:14310 +#: .././config.py:14341 msgid "" "Tartube includes a copy of this script, but you can use a different copy, if " "you want" @@ -6219,241 +6231,241 @@ msgstr "" "Tartube는 기본적으로 이 스크립트의 복사본을 포함하지만, 다른 복사본을 사용할 " "수도 있습니다" -#: .././config.py:14317 +#: .././config.py:14348 msgid "Path to the YT Stream Capture executable" msgstr "YT 스트림 캡처 실행파일 경로" -#: .././config.py:14375 +#: .././config.py:14406 msgid "_Download options" msgstr "_다운로드 설정" -#: .././config.py:14382 +#: .././config.py:14413 msgid "List of download options managers" msgstr "다운로드 설정 매니저 리스트" -#: .././config.py:14402 +#: .././config.py:14433 msgid "Classic Mode" msgstr "클래식 모드" -#: .././config.py:14403 +#: .././config.py:14434 msgid "Applied to media" msgstr "적용된 미디어" -#: .././config.py:14477 .././config.py:14742 +#: .././config.py:14508 .././config.py:14773 msgid "Export" msgstr "내보내기" -#: .././config.py:14486 .././config.py:14751 +#: .././config.py:14517 .././config.py:14782 msgid "Clone" msgstr "복제" -#: .././config.py:14495 +#: .././config.py:14526 msgid "Use in Classic Mode tab" msgstr "클래식 모드 탭에서 사용" -#: .././config.py:14520 .././config.py:14785 +#: .././config.py:14551 .././config.py:14816 msgid "Refresh list" msgstr "리스트 새로고침" -#: .././config.py:14601 +#: .././config.py:14632 msgid "_Preferences" msgstr "_환경 설정" -#: .././config.py:14608 +#: .././config.py:14639 msgid "Download options preferences" msgstr "다운로드 환경 설정" -#: .././config.py:14614 +#: .././config.py:14645 msgid "" "When applying download options to something, clone the general download " "options" msgstr "다운로드 설정을 적용할 때, 일반 다운로드 설정 복제" -#: .././config.py:14625 +#: .././config.py:14656 msgid "After downloading a video, destroy its download options" msgstr "비디오 다운로드 후, 그것의 다운로드 설정 삭제" -#: .././config.py:14642 +#: .././config.py:14673 msgid "_FFmpeg options" msgstr "_FFmpeg 설정" -#: .././config.py:14649 +#: .././config.py:14680 msgid "List of FFmpeg options managers" msgstr "FFmpeg 설정 매니저 리스트" -#: .././config.py:14669 +#: .././config.py:14700 msgid "Current" msgstr "사용" -#: .././config.py:14760 +#: .././config.py:14791 msgid "Use these options" msgstr "이 옵션 사용" #. Add this tab... -#: .././config.py:14851 +#: .././config.py:14882 msgid "O_utput" msgstr "_출력" -#: .././config.py:14870 +#: .././config.py:14901 msgid "_Output Tab" msgstr "_출력 탭" -#: .././config.py:14878 +#: .././config.py:14909 msgid "Output Tab preferences" msgstr "출력 탭 환경 설정" -#: .././config.py:14883 +#: .././config.py:14914 msgid "Display downloader system commands in the Output Tab" msgstr "출력 탭에 다운로드 시스템 커맨드 표시" -#: .././config.py:14892 +#: .././config.py:14923 msgid "Display output from downloader's STDOUT in the Output Tab" msgstr "출력 탭에 다운로더의 STDOUT 출력 표시" -#: .././config.py:14901 .././config.py:15063 +#: .././config.py:14932 .././config.py:15094 msgid "...but don't write each video's JSON data" msgstr "...하지만 각각의 JSON 데이터는 쓰지 않기" -#: .././config.py:14912 .././config.py:15074 +#: .././config.py:14943 .././config.py:15105 msgid "...but don't write each video's download progress" msgstr "...하지만 각각의 비디오 다운로드 진행 상황은 쓰지 않기" -#: .././config.py:14931 +#: .././config.py:14962 msgid "Display output from downloader's STDERR in the Output Tab" msgstr "출력 탭에 다운로더의 STDERR 출력 표시" -#: .././config.py:14940 +#: .././config.py:14971 msgid "Limit the size of Output Tab pages to" msgstr "출력 탭의 페이지 사이즈 제한하기" -#: .././config.py:14961 +#: .././config.py:14992 msgid "Empty pages in the Output Tab at the start of every operation" msgstr "모든 작업을 시작 할 때 출력 탭 비우기" -#: .././config.py:14971 +#: .././config.py:15002 msgid "" "Show a summary of active threads (changes are applied when Tartube restarts)" msgstr "활성 스레드 요약 표시 (Tartube를 재시작 시 변경 사항 적용)" -#: .././config.py:14983 +#: .././config.py:15014 msgid "During an update operation, automatically switch to the Output tab" msgstr "업데이트 작업 중, 자동으로 출력 탭으로 전환" -#: .././config.py:14994 +#: .././config.py:15025 msgid "During a refresh operation, show all matching videos in the Output Tab" msgstr "새로고침 작업 중, 자동으로 출력 탭으로 전환" -#: .././config.py:15005 +#: .././config.py:15036 msgid "...also show all non-matching videos" msgstr "...또한 모든 비 매칭 비디오도 표시" -#: .././config.py:15034 +#: .././config.py:15065 msgid "_Terminal window" msgstr "_터미널 윈도우" -#: .././config.py:15040 +#: .././config.py:15071 msgid "Terminal window preferences" msgstr "터미널 윈도우 환경 설정" -#: .././config.py:15045 +#: .././config.py:15076 msgid "Write downloader system commands to the terminal window" msgstr "다운로더 시스템 커맨드를 터미널 윈도우에 쓰기" -#: .././config.py:15054 +#: .././config.py:15085 msgid "Write output from downloader's STDOUT to the terminal window" msgstr "다운로더의 STDOUT 출력을 터미널 윈도우에 쓰기" -#: .././config.py:15096 +#: .././config.py:15127 msgid "Write output from downloader's STDERR to the terminal window" msgstr "다운로더의 STDERR 출력을 터미널 윈도우에 쓰기" -#: .././config.py:15115 +#: .././config.py:15146 msgid "_Both" msgstr "_둘 다" -#: .././config.py:15120 +#: .././config.py:15151 msgid "" "Special preferences (applies to both the Output Tab and the terminal window)" msgstr "특별한 환경 설정 (출력 탭과 터미널 윈도우에 둘다 적용됨)" -#: .././config.py:15127 +#: .././config.py:15158 msgid "Downloader writes verbose output (youtube-dl debugging mode)" msgstr "다운로더가 상세한 출력 쓰도록 하기 (youtube-dl 디버깅 모드)" -#: .././config.py:15136 +#: .././config.py:15167 msgid "Youtube Stream Capture writes verbose output" msgstr "유튜브 스트림 캡처가 상세한 출력 쓰도록 하기" -#: .././config.py:16053 +#: .././config.py:16084 msgid "Are you sure you want to create a new database at this location?" msgstr "정말로 이 위치에 새로운 데이터베이스를 만드시겠습니까?" -#: .././config.py:16160 +#: .././config.py:16191 msgid "Are you sure you want to forget this database?" msgstr "정말로 이 데이터베이스를 잊어버리시겠습니까?" -#: .././config.py:16195 +#: .././config.py:16226 msgid "Are you sure you want to forget all databases except the current one?" msgstr "" "정말로 이 데이터베이스를 제외한 모든 데이터베이스를 잊어버리시겠습니까?" -#: .././config.py:16399 +#: .././config.py:16430 msgid "No database exists at this location:" msgstr "이 위치에 아무 데이터베이스도 없습니다:" -#: .././config.py:16401 +#: .././config.py:16432 msgid "Do you want to create a new one?" msgstr "정말로 새것을 만듭니까?" -#: .././config.py:17041 +#: .././config.py:17072 msgid "The current options manager cannot be deleted" msgstr "현재 설정 관리자를 삭제할 수 없습니다" -#: .././config.py:17049 .././config.py:18049 +#: .././config.py:17080 .././config.py:18080 msgid "Are you sure you want to delete this options manager?" msgstr "정말로 이 설정 관리자를 삭제하시겠습니까?" -#: .././config.py:17243 .././config.py:17590 .././config.py:19074 +#: .././config.py:17274 .././config.py:17621 .././config.py:19105 msgid "The new setting will be applied when Tartube restarts" msgstr "새 설정은 Tartube가 재시작 시 적용됩니다" -#: .././config.py:18041 +#: .././config.py:18072 msgid "The default options manager cannot be deleted" msgstr "기본 설정 매니저를 삭제할 수 없습니다" -#: .././config.py:18736 +#: .././config.py:18767 msgid "There is already a scheduled download with that name" msgstr "이미 동일한 이름의 예약 다운로드가 존재합니다" -#: .././config.py:18783 +#: .././config.py:18814 msgid "Are you sure you want to delete this scheduled download?" msgstr "정말로 이 예약 다운로드를 삭제하시겠습니까?" -#: .././config.py:18951 +#: .././config.py:18982 msgid "Please select the AVConv executable" msgstr "AVConv 실행 파일을 선택해주세요" -#: .././config.py:18984 +#: .././config.py:19015 msgid "Please select the FFmpeg executable" msgstr "FFmpeg 실행 파일을 선택해주세요" -#: .././config.py:19017 +#: .././config.py:19048 msgid "Please select the Youtube Stream Capture executable" msgstr "Youtube Stream Capture 실행 파일을 선택해주세요" -#: .././config.py:19807 +#: .././config.py:19837 msgid "Select the youtube-dl-compatible executable" msgstr "youtube-dl-compatible 실행 파일을 선택해주세요" -#: .././config.py:19991 +#: .././config.py:20021 msgid "Database file not loaded" msgstr "데이터베이스 파일이 로드되지 않음" -#: .././config.py:20011 +#: .././config.py:20041 msgid "Did not try to load the database file" msgstr "데이터베이스 파일을 로드하지 않았습니다" -#: .././config.py:20036 +#: .././config.py:20066 msgid "Database file loaded" msgstr "데이터베이스 파일 불러옴" @@ -6522,52 +6534,52 @@ msgstr "RSS 피드 확인중" msgid "Cannot download videos in a private folder" msgstr "개인 폴더에 있는 비디오를 다운받지 못했습니다" -#: .././downloads.py:2986 .././downloads.py:5243 +#: .././downloads.py:2986 .././downloads.py:5256 msgid "Download did not start" msgstr "다운로드 시작하지 않음" -#: .././downloads.py:2994 .././downloads.py:5255 .././info.py:364 +#: .././downloads.py:2994 .././downloads.py:5268 .././info.py:364 #: .././updates.py:278 .././updates.py:476 msgid "Child process exited with non-zero code: {}" msgstr "하위 프로세스가 0이 아닌 코드로 종료됨: {}" -#: .././downloads.py:3108 .././downloads.py:4060 +#: .././downloads.py:3108 .././downloads.py:4072 msgid "" "This video has a URL that points to a channel or a playlist, not a video" msgstr "이 URL은 비디오가 아닌 채널이나 플레이리스트를 가르키고 있습니다" -#: .././downloads.py:3937 .././downloads.py:3951 +#: .././downloads.py:3949 .././downloads.py:3963 msgid "Simulated download of:" msgstr "다음 시뮬레이션 다운로드:" -#: .././downloads.py:3959 +#: .././downloads.py:3971 msgid "Simulated download of video with unprintable characters" msgstr "출력할 수 없는 문자가 포함된 비디오 시뮬레이션 다운로드" #. This object creates more messages for the Output Tab and/or terminal, #. than downloads.VideoDownloader would do, as the output generated by #. Youtube Stream Capture is not easy for the user to interpret -#: .././downloads.py:5134 +#: .././downloads.py:5147 msgid "Tartube is starting the stream capture..." msgstr "Tartube가 스트림 캡처를 시작합니다..." -#: .././downloads.py:5152 +#: .././downloads.py:5165 msgid "Could not create a destination directory, capture halted" msgstr "목적지 디렉토리를 생성하지 못해, 캡처 중지됨" -#: .././downloads.py:5173 .././downloads.py:5198 +#: .././downloads.py:5186 .././downloads.py:5211 msgid "Youtube Stream Capture script not found:" msgstr "유튜브 스트림 캡처 스크립트를 발견하지 못함:" -#: .././downloads.py:5247 +#: .././downloads.py:5260 msgid "Failed to capture the livestream" msgstr "생방송 캡처 실패" -#: .././downloads.py:5251 +#: .././downloads.py:5264 msgid "Stream capture terminated" msgstr "스트림 캡처 중지" -#: .././downloads.py:5261 +#: .././downloads.py:5274 msgid "" "Stream captured terminated without downloading any video segments " "(indicating an error with the stream)" @@ -6576,45 +6588,45 @@ msgstr "" "오류가 있음을 나타냄)" #. Capture successful -#: .././downloads.py:5277 +#: .././downloads.py:5290 msgid "Stream capture successful" msgstr "스트림 캡처 성공" #. Show a confirmation message -#: .././downloads.py:5307 +#: .././downloads.py:5320 msgid "Merging file segments..." msgstr "파일 세그먼트 병합중..." -#: .././downloads.py:5327 +#: .././downloads.py:5340 msgid "Segment merge did not start" msgstr "세그먼트 병합이 시작되지 않았습니다" -#: .././downloads.py:5338 +#: .././downloads.py:5351 msgid "Segment merge completed, but path not detected" msgstr "세그먼트 병합이 완료되었지만, 경로가 인식되지 않았습니다" -#: .././downloads.py:5348 +#: .././downloads.py:5361 msgid "Segment merge completed, but output file not found" msgstr "세그먼트 병합이 완료되었지만, 출력 파일이 발견되지 않음" -#: .././downloads.py:5369 +#: .././downloads.py:5382 msgid "File moved to:" msgstr "파일 이동됨:" -#: .././downloads.py:5374 +#: .././downloads.py:5387 msgid "Livestream download is complete" msgstr "생방송 다운로드가 완료됨" -#: .././downloads.py:5379 +#: .././downloads.py:5392 msgid "Failed to move output file" msgstr "출력 파일을 이동하는 데 실패" -#: .././downloads.py:5548 +#: .././downloads.py:5561 #, python-brace-format msgid "Stream capture is frozen, trying again (restart #{0})" msgstr "스트림 캡처가 중지됨, 재시도 중 (재시작 #{0})" -#: .././downloads.py:5555 +#: .././downloads.py:5568 msgid "Stream capture is frozen, giving up" msgstr "스트림 캡처가 중지되어 포기함" @@ -7194,5 +7206,20 @@ msgstr "업데이트 설치 작업이 시작됨 " msgid "Update did not start" msgstr "업데이트가 시작하지 않음" +#~ msgid "Keep the description file after Tartube shuts down" +#~ msgstr "설명 파일을 Tartube가 꺼져도 유지하기" + +#~ msgid "Keep the metadata file after Tartube shuts down" +#~ msgstr "메타데이터 파일을 Tartube가 꺼져도 유지하기" + +#~ msgid "Keep the annotations file after Tartube shuts down" +#~ msgstr "어노테이션 파일을 Tartube가 꺼져도 유지하기" + +#~ msgid "Keep the thumbnail file after Tartube shuts down" +#~ msgstr "섬네일 파일을 Tartube가 꺼져도 유지하기" + +#~ msgid "Use youtube-dlc" +#~ msgstr "youtube-dlc 사용" + #~ msgid "Video Catalogue options" #~ msgstr "Video Catalog options" diff --git a/locale/nl_NL/LC_MESSAGES/base.mo b/locale/nl_NL/LC_MESSAGES/base.mo index b53bc9efc02a4afa48d4a182b88d8d758d6ee377..a80d93f95f5a89e21f251e566b4d3ef8eec3282f 100644 GIT binary patch delta 34077 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 T@@-wU$7^G~t-bxdlL!AF+)y;2 delta 34458 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 diff --git a/locale/nl_NL/LC_MESSAGES/base.po b/locale/nl_NL/LC_MESSAGES/base.po index d7fdb67..48f36bc 100644 --- a/locale/nl_NL/LC_MESSAGES/base.po +++ b/locale/nl_NL/LC_MESSAGES/base.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 16:51+0000\n" +"POT-Creation-Date: 2021-02-28 10:41+0000\n" "PO-Revision-Date: 2021-01-08 20:41+0100\n" "Last-Translator: Heimen Stoffels <vistausss@outlook.com>\n" "Language-Team: \n" @@ -37,7 +37,7 @@ msgstr "Groot" msgid "Enormous" msgstr "Enorm" -#: .././mainapp.py:945 +#: .././mainapp.py:944 msgid "" "Failed to convert a thumbnail from .webp to .jpg. No more conversions will " "be attempted until you install FFmpeg on your system, or (if FFmpeg is " @@ -50,177 +50,177 @@ msgstr "" "Herstart Tartube om het converteren opnieuw te proberen. Schakel " "miniatuurconversie uit om dit bericht niet meer te tonen." -#: .././mainapp.py:2665 +#: .././mainapp.py:2664 msgid "" "Tartube can't create the folder in which its configuration file is saved" msgstr "Tartube kan de configuratiemap niet aanmaken" #. Load/save has been disabled. Show the error message in a dialogue #. window, then shut down -#: .././mainapp.py:2712 +#: .././mainapp.py:2711 msgid "Tartube failed to start because:" msgstr "Tartube kan niet worden gestart. Reden:" -#: .././mainapp.py:2720 +#: .././mainapp.py:2719 msgid "If you don't know how to resolve this error, please contact the authors" msgstr "" "Als je niet weet hoe je dit moet oplossen, neem dan contact op met de makers" -#: .././mainapp.py:2948 +#: .././mainapp.py:2947 msgid "Because of an error, file load/save has been disabled" msgstr "Laden/Opslaan is uitgeschakeld omdat er een fout is opgetreden" -#: .././mainapp.py:2957 +#: .././mainapp.py:2956 msgid "Because of the error, file load/save has been disabled" msgstr "Laden/Opslaan is uitgeschakeld omdat er een fout is opgetreden" -#: .././mainapp.py:3041 +#: .././mainapp.py:3040 msgid "There is a download operation in progress." msgstr "Er worden items gedownload." -#: .././mainapp.py:3043 +#: .././mainapp.py:3042 msgid "There is an update operation in progress." msgstr "Er worden items bijgewerkt." -#: .././mainapp.py:3045 +#: .././mainapp.py:3044 msgid "There is a refresh operation in progress." msgstr "Er worden items ververst." -#: .././mainapp.py:3047 +#: .././mainapp.py:3046 msgid "There is an info operation in progress." msgstr "Er wordt een informatiehandeling uitgevoerd." -#: .././mainapp.py:3049 +#: .././mainapp.py:3048 msgid "There is a tidy operation in progress." msgstr "Er wordt een opruimactie uitgevoerd." -#: .././mainapp.py:3051 +#: .././mainapp.py:3050 msgid "There is a process operation in progress." msgstr "Er wordt een voortgangsactie uitgevoerd." -#: .././mainapp.py:3056 +#: .././mainapp.py:3055 msgid "Are you sure you want to quit Tartube?" msgstr "Weet je zeker dat je Tartube wilt afsluiten?" -#: .././mainapp.py:3261 +#: .././mainapp.py:3260 msgid "Failed to load the Tartube config file (failed sanity check)" msgstr "" "Het Tartube-configuratiebestand kan niet worden geladen (mislukte controle)" -#: .././mainapp.py:3284 +#: .././mainapp.py:3283 msgid "Failed to load the Tartube config file (file is locked)" msgstr "" "Het Tartube-configuratiebestand kan niet worden geladen (bestand is " "vergrendeld)" -#: .././mainapp.py:3314 +#: .././mainapp.py:3313 msgid "Failed to load the Tartube config file (JSON load failure)" msgstr "" "Het Tartube-configuratiebestand kan niet worden geladen (json-laadfout)" -#: .././mainapp.py:3332 +#: .././mainapp.py:3331 msgid "Failed to load the Tartube config file (file is invalid)" msgstr "" "Het Tartube-configuratiebestand kan niet worden geladen (bestand is " "beschadigd)" -#: .././mainapp.py:3350 +#: .././mainapp.py:3349 msgid "" "Failed to load the Tartube config file (file cannot be read by this version)" msgstr "" "Het Tartube-configuratiebestand kan niet worden geladen (bestand is " "verouderd)" -#: .././mainapp.py:3365 +#: .././mainapp.py:3364 msgid "Failed to load the Tartube config file (missing file type)" msgstr "" "Het Tartube-configuratiebestand kan niet worden geladen (ontbrekende " "bestandsextensie)" -#: .././mainapp.py:4222 +#: .././mainapp.py:4221 msgid "Failed to save the Tartube config file (failed sanity check)" msgstr "" "Het Tartube-configuratiebestand kan niet worden opgeslagen (mislukte " "controle)" -#: .././mainapp.py:4542 +#: .././mainapp.py:4541 msgid "Failed to save the Tartube config file (file is locked)" msgstr "" "Het Tartube-configuratiebestand kan niet worden opgeslagen (bestand is " "vergrendeld)" -#: .././mainapp.py:4544 .././mainapp.py:4584 .././mainapp.py:5920 -#: .././mainapp.py:5976 .././mainapp.py:5982 +#: .././mainapp.py:4543 .././mainapp.py:4583 .././mainapp.py:5941 +#: .././mainapp.py:5997 .././mainapp.py:6003 msgid "File load/save has been disabled" msgstr "Laden/Opslaan is uitgeschakeld" -#: .././mainapp.py:4563 +#: .././mainapp.py:4562 msgid "Failed to save the Tartube config file (file already in use)" msgstr "" "Het Tartube-configuratiebestand kan niet worden opgeslagen (bestand is in " "gebruik)" -#: .././mainapp.py:4583 +#: .././mainapp.py:4582 msgid "Failed to save the Tartube config file" msgstr "Het Tartube-configuratiebestand kan niet worden opgeslagen" -#: .././mainapp.py:4695 .././mainapp.py:4711 .././mainapp.py:4741 +#: .././mainapp.py:4694 .././mainapp.py:4710 .././mainapp.py:4740 msgid "Failed to load the Tartube database file" msgstr "Het Tartube-databankbestand kan niet worden geladen" -#: .././mainapp.py:4756 +#: .././mainapp.py:4755 msgid "The Tartube database file is invalid" msgstr "Het Tartube-databankbestand is beschadigd" -#: .././mainapp.py:4772 +#: .././mainapp.py:4771 msgid "Database file can't be read by this version of Tartube" msgstr "Het Tartube-databankbestand is verouderd" -#: .././mainapp.py:5117 +#: .././mainapp.py:5116 msgid "Tartube is applying an essential database update" msgstr "Tartube is bezig met het uitvoeren van een essentiële databankupdate" -#: .././mainapp.py:5119 +#: .././mainapp.py:5118 msgid "This might take a few minutes, so please be patient" msgstr "Dit kan een paar minuten duren" -#: .././mainapp.py:5914 .././mainapp.py:5972 .././mainapp.py:5981 +#: .././mainapp.py:5935 .././mainapp.py:5993 .././mainapp.py:6002 msgid "Failed to save the Tartube database file" msgstr "Het Tartube-databankbestand kan niet worden opgeslagen" -#: .././mainapp.py:5917 +#: .././mainapp.py:5938 msgid "(Could not make a backup copy of the existing file)" msgstr "(het bestaande bestand kan niet worden geback-upt)" -#: .././mainapp.py:5953 +#: .././mainapp.py:5974 msgid "Failed to save the Tartube database file (file already in use)" msgstr "" "Het Tartube-databankbestand kan niet worden opgeslagen (bestand is in " "gebruik)" -#: .././mainapp.py:5974 +#: .././mainapp.py:5995 msgid "A backup of the previous file can be found at:" msgstr "Er is een back-up gemaakt van het vorige bestand in:" -#: .././mainapp.py:6155 .././mainapp.py:6165 +#: .././mainapp.py:6176 .././mainapp.py:6186 msgid "Database file created" msgstr "Databankbestand aangemaakt" -#: .././mainapp.py:6559 +#: .././mainapp.py:6580 msgid "Tartube's database can't be checked while an operation is in progress" msgstr "" "Tartube's databank kan niet worden gecontroleerd tijdens uitvoeren van een " "handeling" -#: .././mainapp.py:6795 +#: .././mainapp.py:6816 msgid "Database check complete, no inconsistencies found" msgstr "Databankcontrole voltooid - geen fouten aangetroffen" -#: .././mainapp.py:6827 +#: .././mainapp.py:6848 msgid "Database check complete, problems found:" msgstr "Databankcontrole voltooid - fouten aangetroffen:" -#: .././mainapp.py:6830 +#: .././mainapp.py:6851 msgid "" "Do you want to repair these problems? (The database will be fixed, but no " "files will be deleted)" @@ -228,15 +228,15 @@ msgstr "" "Wil je deze fouten herstellen? (de databank wordt gerepareerd zonder " "bestanden te verwijderen)" -#: .././mainapp.py:7003 +#: .././mainapp.py:7024 msgid "Database inconsistencies repaired" msgstr "Databankfouten hersteld" -#: .././mainapp.py:7895 .././config.py:16026 +#: .././mainapp.py:7918 .././config.py:16057 msgid "Please select Tartube's data folder" msgstr "Kies Tartube's gegevensmap" -#: .././mainapp.py:8258 +#: .././mainapp.py:8281 msgid "" "A download operation cannot start if one or more configuration windows are " "still open" @@ -244,46 +244,46 @@ msgstr "" "Er kan geen download worden gestart zolang er één of meerdere " "instellingenvensters geopend zijn" -#: .././mainapp.py:8282 .././mainapp.py:8307 +#: .././mainapp.py:8305 .././mainapp.py:8330 #, python-brace-format msgid "You only have {0} / {1} Mb remaining on your device" msgstr "Je hebt slechts {0}/{1} MB resterende schijfruimte" -#: .././mainapp.py:8310 .././mainapp.py:13970 .././mainapp.py:14086 -#: .././mainapp.py:14268 .././mainwin.py:17484 +#: .././mainapp.py:8333 .././mainapp.py:14006 .././mainapp.py:14122 +#: .././mainapp.py:14304 .././mainwin.py:17484 msgid "Are you sure you want to continue?" msgstr "Weet je zeker dat je wilt doorgaan?" -#: .././mainapp.py:8397 +#: .././mainapp.py:8420 msgid "There is nothing to check!" msgstr "Er valt niks te controleren!" -#: .././mainapp.py:8399 +#: .././mainapp.py:8422 msgid "There is nothing to download!" msgstr "Er valt niks te downloaden!" -#: .././mainapp.py:8642 +#: .././mainapp.py:8665 msgid "Download operation complete" msgstr "Downloaden voltooid" -#: .././mainapp.py:8644 +#: .././mainapp.py:8667 msgid "Download operation halted" msgstr "Downloaden onderbroken" -#: .././mainapp.py:8648 +#: .././mainapp.py:8671 msgid "Videos downloaded:" msgstr "Gedownloade video's:" -#: .././mainapp.py:8649 +#: .././mainapp.py:8672 msgid "Videos checked:" msgstr "Gecontroleerde video's:" -#: .././mainapp.py:8652 .././mainapp.py:9253 .././mainapp.py:9747 -#: .././mainapp.py:10147 +#: .././mainapp.py:8675 .././mainapp.py:9276 .././mainapp.py:9770 +#: .././mainapp.py:10170 msgid "Time taken:" msgstr "Verstreken tijd:" -#: .././mainapp.py:8757 +#: .././mainapp.py:8780 msgid "" "An update operation cannot start if one or more configuration windows are " "still open" @@ -291,35 +291,35 @@ msgstr "" "Er kan geen update plaatsvinden zolang er één of meerdere " "instellingenvensters geopend zijn" -#: .././mainapp.py:8943 +#: .././mainapp.py:8966 msgid "Installation failed" msgstr "Installatie mislukt" -#: .././mainapp.py:8945 +#: .././mainapp.py:8968 msgid "Installation complete" msgstr "Installatie voltooid" -#: .././mainapp.py:8949 +#: .././mainapp.py:8972 msgid "Update operation failed" msgstr "Bijwerken mislukt" -#: .././mainapp.py:8951 +#: .././mainapp.py:8974 msgid "Update operation halted" msgstr "Bijwerken onderbroken" -#: .././mainapp.py:8953 +#: .././mainapp.py:8976 msgid "Update operation complete" msgstr "Bijwerken voltooid" -#: .././mainapp.py:8955 +#: .././mainapp.py:8978 msgid "version:" msgstr "versie:" -#: .././mainapp.py:8959 +#: .././mainapp.py:8982 msgid "(unknown)" msgstr "(onbekend)" -#: .././mainapp.py:9046 +#: .././mainapp.py:9069 msgid "" "A refresh operation cannot start if one or more configuration windows are " "still open" @@ -327,7 +327,7 @@ msgstr "" "Er kan geen verversactie plaatsvinden zolang er één of meerdere " "instellingenvensters geopend zijn" -#: .././mainapp.py:9059 +#: .././mainapp.py:9082 msgid "" "During a refresh operation, Tartube analyses its data folder, looking for " "videos that haven't yet been added to its database" @@ -335,7 +335,7 @@ msgstr "" "Tijdens het verversen wordt Tartube's gegevensmap doorzocht op video's die " "nog niet zijn toegevoegd aan de databank" -#: .././mainapp.py:9063 +#: .././mainapp.py:9086 msgid "" "You only need to perform a refresh operation if you have manually copied " "videos into Tartube's data folder" @@ -343,7 +343,7 @@ msgstr "" "Je hoeft alleen te verversen als je video's handmatig hebt gekopieerd naar " "Tartube's gegevensmap" -#: .././mainapp.py:9070 +#: .././mainapp.py:9093 msgid "" "Before starting a refresh operation, you should click the 'Check all' button " "in the main window" @@ -351,7 +351,7 @@ msgstr "" "Voordat je het verversen start, moet je op 'Alles controleren' in het " "hoofdvenster klikken" -#: .././mainapp.py:9077 +#: .././mainapp.py:9100 msgid "" "Before starting a refresh operation, you should right-click the channel and " "select 'Check channel'" @@ -359,7 +359,7 @@ msgstr "" "Voordat je het verversen start, moet je op 'Kanaal controleren' in het " "rechtermuisknopmenu van een kanaal klikken" -#: .././mainapp.py:9084 +#: .././mainapp.py:9107 msgid "" "Before starting a refresh operation, you should right-click the playlist and " "select 'Check playlist'" @@ -367,7 +367,7 @@ msgstr "" "Voordat je het verversen start, moet je op 'Afspeellijst controleren' in het " "rechtermuisknopmenu van een afspeellijst klikken" -#: .././mainapp.py:9091 +#: .././mainapp.py:9114 msgid "" "Before starting a refresh operation, you should right-click the folder and " "select 'Check folder'" @@ -375,19 +375,19 @@ msgstr "" "Voordat je het verversen start, moet je op 'Map controleren' in het " "rechtermuisknopmenu van een map klikken" -#: .././mainapp.py:9096 +#: .././mainapp.py:9119 msgid "Are you sure you want to proceed with the refresh operation?" msgstr "Weet je zeker dat je wilt doorgaan?" -#: .././mainapp.py:9248 +#: .././mainapp.py:9271 msgid "Refresh operation complete" msgstr "Verversen voltooid" -#: .././mainapp.py:9250 +#: .././mainapp.py:9273 msgid "Refresh operation halted" msgstr "Verversen onderbroken" -#: .././mainapp.py:9355 +#: .././mainapp.py:9378 msgid "" "An info operation cannot start if one or more configuration windows are " "still open" @@ -395,47 +395,47 @@ msgstr "" "Er kan geen informatiehandeling plaatsvinden zolang er één of meerdere " "instellingenvensters geopend zijn" -#: .././mainapp.py:9471 +#: .././mainapp.py:9494 msgid "Operation failed" msgstr "Handeling mislukt" -#: .././mainapp.py:9473 .././downloads.py:400 +#: .././mainapp.py:9496 .././downloads.py:400 msgid "Operation complete" msgstr "Handeling voltooid" -#: .././mainapp.py:9475 +#: .././mainapp.py:9498 msgid "Click the Output Tab to see the results" msgstr "Klik op het tabblad 'Uitvoer' om de resultaten te bekijken" -#: .././mainapp.py:9488 +#: .././mainapp.py:9511 msgid "A new release is available!" msgstr "Er is een nieuwe versie beschikbaar!" -#: .././mainapp.py:9490 +#: .././mainapp.py:9513 msgid "Your installation is up to date!" msgstr "Je installatie is actueel!" -#: .././mainapp.py:9492 +#: .././mainapp.py:9515 msgid "Installed version:" msgstr "Geïnstalleerde versie:" -#: .././mainapp.py:9497 +#: .././mainapp.py:9520 msgid "Stable release:" msgstr "Stabiele uitgave:" -#: .././mainapp.py:9502 +#: .././mainapp.py:9525 msgid "Stable release: not found" msgstr "Stabiele uitgave: niet gevonden" -#: .././mainapp.py:9505 +#: .././mainapp.py:9528 msgid "Development release:" msgstr "Ontwikkelingsuitgave:" -#: .././mainapp.py:9507 +#: .././mainapp.py:9530 msgid "Development release: not found" msgstr "Ontwikkelingsuitgave: niet gevonden" -#: .././mainapp.py:9614 +#: .././mainapp.py:9637 msgid "" "A tidy operation cannot start if one or more configuration windows are still " "open" @@ -443,39 +443,39 @@ msgstr "" "Er kan geen opruimactie plaatsvinden zolang er één of meerdere " "instellingenvensters geopend zijn" -#: .././mainapp.py:9742 +#: .././mainapp.py:9765 msgid "Tidy operation complete" msgstr "Opruimen voltooid" -#: .././mainapp.py:9744 +#: .././mainapp.py:9767 msgid "Tidy operation halted" msgstr "Opruimen onderbroken" -#: .././mainapp.py:9911 .././mainwin.py:18169 +#: .././mainapp.py:9934 .././mainwin.py:18169 msgid "Livestream has started" msgstr "De livestream is begonnen" -#: .././mainapp.py:10136 +#: .././mainapp.py:10159 msgid "Process operation complete" msgstr "Voortgangsactie voltooid" -#: .././mainapp.py:10138 +#: .././mainapp.py:10161 msgid "Process operation halted" msgstr "Voortgangsactie onderbroken" -#: .././mainapp.py:10142 +#: .././mainapp.py:10165 msgid "Files processed:" msgstr "Verwerkte bestanden:" -#: .././mainapp.py:10143 +#: .././mainapp.py:10166 msgid "Errors:" msgstr "Fouten:" -#: .././mainapp.py:11403 .././mainapp.py:11578 +#: .././mainapp.py:11435 .././mainapp.py:11610 msgid "Cannot move anything to:" msgstr "Kan niks verplaatsen naar:" -#: .././mainapp.py:11405 .././mainapp.py:11580 +#: .././mainapp.py:11437 .././mainapp.py:11612 msgid "" "because a file or folder with the same name already exists (although " "Tartube's database doesn't know anything about it)" @@ -483,7 +483,7 @@ msgstr "" "omdat er al een bestand of map met dezelfde naam is (hoewel Tartube's " "databank daar niks van afweet)" -#: .././mainapp.py:11409 +#: .././mainapp.py:11441 msgid "" "You probably created that file/folder accidentally, in which case you should " "delete it manually before trying again" @@ -491,19 +491,19 @@ msgstr "" "Waarschijnlijk heb je het bestand/de map per ongeluk aangemaakt. Als dat zo " "is, verwijder deze dan voordat je het opnieuw probeert." -#: .././mainapp.py:11423 .././mainapp.py:11598 +#: .././mainapp.py:11455 .././mainapp.py:11630 msgid "Are you sure you want to move this channel:" msgstr "Weet je zeker dat je het volgende kanaal wilt verplaatsen:" -#: .././mainapp.py:11425 .././mainapp.py:11600 +#: .././mainapp.py:11457 .././mainapp.py:11632 msgid "Are you sure you want to move this playlist:" msgstr "Weet je zeker dat je de volgende afspeellijst wilt verplaatsen:" -#: .././mainapp.py:11427 .././mainapp.py:11602 +#: .././mainapp.py:11459 .././mainapp.py:11634 msgid "Are you sure you want to move this folder:" msgstr "Weet je zeker dat je de volgende map wilt verplaatsen:" -#: .././mainapp.py:11432 +#: .././mainapp.py:11464 msgid "" "This procedure will move all downloaded files to the top level of Tartube's " "data folder" @@ -511,24 +511,24 @@ msgstr "" "Deze handeling verplaatst alle gedownloade bestanden naar het bovenste " "niveau van Tartube's gegevensmap" -#: .././mainapp.py:11532 +#: .././mainapp.py:11564 msgid "Channels, playlists and folders can only be dragged into a folder" msgstr "" "Kanalen, afspeellijsten en mappen kunnen alleen worden versleept naar een map" -#: .././mainapp.py:11545 +#: .././mainapp.py:11577 #, python-brace-format msgid "The fixed folder '{0}' cannot be moved (but it can still be hidden)" msgstr "" "De vastgezette map '{0}' kan niet worden verplaatst (maar kan wél worden " "verborgen)" -#: .././mainapp.py:11558 +#: .././mainapp.py:11590 #, python-brace-format msgid "The folder '{0}' can only contain videos" msgstr "De map '{0}' mag alleen video's bevatten" -#: .././mainapp.py:11585 +#: .././mainapp.py:11617 msgid "" "You probably created that file/folder accidentally, in which case, you " "should delete it manually before trying again" @@ -536,16 +536,16 @@ msgstr "" "Waarschijnlijk heb je het bestand/de map per ongeluk aangemaakt. Als dat zo " "is, verwijder deze dan voordat je het opnieuw probeert." -#: .././mainapp.py:11604 +#: .././mainapp.py:11636 msgid "into this folder:" msgstr "naar deze map:" -#: .././mainapp.py:11608 +#: .././mainapp.py:11640 msgid "This procedure will move all downloaded files to the new location" msgstr "" "Deze handeling verplaatst alle gedownloade bestanden naar de nieuwe locatie" -#: .././mainapp.py:11614 +#: .././mainapp.py:11646 msgid "" "WARNING: The destination folder is marked as temporary, so everything inside " "it will be DELETED when Tartube restarts!" @@ -553,103 +553,103 @@ msgstr "" "WAARSCHUWING: de bestemming is aangemerkt als 'tijdelijk', dus alle inhoud " "wordt VERWIJDERD als je Tartube herstart!" -#: .././mainapp.py:12078 +#: .././mainapp.py:12114 msgid "" "Are you SURE you want to delete files? This procedure cannot be reversed!" msgstr "" "Weet je ZEKER dat je deze bestanden wilt verwijderen? Dit kan niet ongedaan " "worden gemaakt!" -#: .././mainapp.py:13954 .././mainapp.py:14070 .././mainapp.py:14252 +#: .././mainapp.py:13990 .././mainapp.py:14106 .././mainapp.py:14288 #, python-brace-format msgid "The channel contains {0} item(s), so this action may take a while" msgstr "Het kanaal bevat {0} item(s), dus het kan even duren" -#: .././mainapp.py:13960 .././mainapp.py:14076 .././mainapp.py:14258 +#: .././mainapp.py:13996 .././mainapp.py:14112 .././mainapp.py:14294 #, python-brace-format msgid "The playlist contains {0} item(s), so this action may take a while" msgstr "De afspeellijst bevat {0} item(s), dus het kan even duren" -#: .././mainapp.py:13966 .././mainapp.py:14082 .././mainapp.py:14264 +#: .././mainapp.py:14002 .././mainapp.py:14118 .././mainapp.py:14300 #, python-brace-format msgid "The folder contains {0} item(s), so this action may take a while" msgstr "De map bevat {0} item(s), dus het kan even duren" -#: .././mainapp.py:14332 .././mainapp.py:18504 .././mainapp.py:18636 -#: .././mainapp.py:18767 +#: .././mainapp.py:14368 .././mainapp.py:18540 .././mainapp.py:18672 +#: .././mainapp.py:18803 #, python-brace-format msgid "The name '{0}' is not allowed" msgstr "De naam '{0}' is niet toegestaan" -#: .././mainapp.py:14341 +#: .././mainapp.py:14377 #, python-brace-format msgid "The name '{0}' is already in use" msgstr "De naam '{0}' is al in gebruik" -#: .././mainapp.py:14354 +#: .././mainapp.py:14390 #, python-brace-format msgid "Failed to rename '{0}'" msgstr "De naam van '{0}' kan niet worden gewijzigd" -#: .././mainapp.py:14701 +#: .././mainapp.py:14737 msgid "Select where to save the database export" msgstr "Kies de map waarnaar de databank moet worden geëxporteerd" -#: .././mainapp.py:14822 +#: .././mainapp.py:14858 msgid "There is nothing to export!" msgstr "Er valt niks te exporteren!" -#: .././mainapp.py:14862 .././mainapp.py:14928 +#: .././mainapp.py:14898 .././mainapp.py:14964 msgid "Failed to save the database export file:" msgstr "Het databank-exportbestand kan niet worden opgeslagen:" -#: .././mainapp.py:14936 +#: .././mainapp.py:14972 msgid "Database export file saved to:" msgstr "Het databank-exportbestand is opgeslagen in:" -#: .././mainapp.py:14973 +#: .././mainapp.py:15009 msgid "Select the database export" msgstr "Kies de databankexport" -#: .././mainapp.py:14994 .././mainapp.py:15008 +#: .././mainapp.py:15030 .././mainapp.py:15044 msgid "Failed to load the database export file" msgstr "Het databank-exportbestand kan niet worden geladen" -#: .././mainapp.py:15025 +#: .././mainapp.py:15061 msgid "The database export file is invalid" msgstr "Het databank-exportbestand is beschadigd" -#: .././mainapp.py:15036 +#: .././mainapp.py:15072 msgid "The database export file is invalid (or empty)" msgstr "Het databank-exportbestand is beschadigd (of blanco)" -#: .././mainapp.py:15080 +#: .././mainapp.py:15116 msgid "Nothing was imported from the database export file" msgstr "Er is niks geïmporteerd uit het databank-exportbestand" #. Show a confirmation -#: .././mainapp.py:15094 +#: .././mainapp.py:15130 msgid "Imported" msgstr "Geïmporteerd" -#: .././mainapp.py:15095 .././mainwin.py:1287 .././config.py:888 -#: .././config.py:9274 .././config.py:11492 +#: .././mainapp.py:15131 .././mainwin.py:1287 .././config.py:888 +#: .././config.py:9305 .././config.py:11523 msgid "Videos" msgstr "Video's" -#: .././mainapp.py:15096 .././config.py:9307 .././config.py:11525 +#: .././mainapp.py:15132 .././config.py:9338 .././config.py:11556 msgid "Channels" msgstr "Kanalen" -#: .././mainapp.py:15097 .././config.py:9318 .././config.py:11536 +#: .././mainapp.py:15133 .././config.py:9349 .././config.py:11567 msgid "Playlists" msgstr "Afspeellijsten" -#: .././mainapp.py:15098 +#: .././mainapp.py:15134 msgid "Folders" msgstr "Mappen" -#: .././mainapp.py:15482 +#: .././mainapp.py:15518 msgid "" "The video file is missing from Tartube's data folder (try downloading the " "video again!)" @@ -657,107 +657,107 @@ msgstr "" "De video is niet aanwezig in Tartube's gegevensmap. Probeer de video opnieuw " "te downloaden." -#: .././mainapp.py:16007 .././mainapp.py:16389 +#: .././mainapp.py:16043 .././mainapp.py:16425 msgid "Select where to save the options export" msgstr "Kies de map waarnaar de opties moeten worden geëxporteerd" -#: .././mainapp.py:16055 .././mainapp.py:16437 +#: .././mainapp.py:16091 .././mainapp.py:16473 msgid "Failed to save the options export file:" msgstr "Het opties-exportbestand kan niet worden opgeslagen:" -#: .././mainapp.py:16063 +#: .././mainapp.py:16099 msgid "Download options exported to to:" msgstr "De downloadopties zijn geëxporteerd naar:" -#: .././mainapp.py:16094 .././mainapp.py:16476 +#: .././mainapp.py:16130 .././mainapp.py:16512 msgid "Select the options export file" msgstr "Kies het opties-exportbestand" -#: .././mainapp.py:16113 .././mainapp.py:16495 +#: .././mainapp.py:16149 .././mainapp.py:16531 msgid "Failed to load the options export file" msgstr "Het opties-exportbestand kan niet worden geladen" -#: .././mainapp.py:16130 .././mainapp.py:16512 +#: .././mainapp.py:16166 .././mainapp.py:16548 msgid "The options export file is invalid" msgstr "Het opties-exportbestand is beschadigd" -#: .././mainapp.py:16141 .././mainapp.py:16523 +#: .././mainapp.py:16177 .././mainapp.py:16559 msgid "The options export file is invalid (or empty)" msgstr "Het opties-exportbestand is beschadigd (of blanco)" -#: .././mainapp.py:16445 +#: .././mainapp.py:16481 msgid "FFmpeg options exported to to:" msgstr "De FFmpeg-opties zijn geëxporteerd naar:" -#: .././mainapp.py:17419 +#: .././mainapp.py:17455 msgid "Please select a destination folder" msgstr "Kies een bestemming" #. Prompt for confirmation -#: .././mainapp.py:17491 +#: .././mainapp.py:17527 msgid "Are you sure you want to clear this list?" msgstr "Weet je zeker dat je deze lijst wilt wissen?" #. Prompt for confirmation -#: .././mainapp.py:17538 +#: .././mainapp.py:17574 msgid "Are you sure you want to clear downloaded videos?" msgstr "Weet je zeker dat je de gedownloade video's wilt verwijderen?" -#: .././mainapp.py:17631 .././mainwin.py:14535 +#: .././mainapp.py:17667 .././mainwin.py:14535 msgid "Only checked/downloaded videos can be processed by FFmpeg" msgstr "FFmpeg kan alleen aangekruiste/gedownloade video's verwerken" -#: .././mainapp.py:17748 +#: .././mainapp.py:17784 msgid "No video(s) have been downloaded" msgstr "Je hebt nog geen video's gedownload" #. Prompt for confirmation -#: .././mainapp.py:17846 +#: .././mainapp.py:17882 msgid "Are you sure you want to remove the selected item(s)?" msgstr "Weet je zeker dat je de geselecteerde items wilt verwijderen?" -#: .././mainapp.py:18495 +#: .././mainapp.py:18531 msgid "You must give the channel a name" msgstr "Geef het kanaal een naam" -#: .././mainapp.py:18513 .././mainapp.py:18776 +#: .././mainapp.py:18549 .././mainapp.py:18812 msgid "You must enter a valid URL" msgstr "Voer een geldige url in" -#: .././mainapp.py:18628 +#: .././mainapp.py:18664 msgid "You must give the folder a name" msgstr "Geef de map een naam" -#: .././mainapp.py:18758 +#: .././mainapp.py:18794 msgid "You must give the playlist a name" msgstr "Geef de afspeellijst een naam" -#: .././mainapp.py:18913 +#: .././mainapp.py:18949 msgid "The following videos are duplicates:" msgstr "De volgende video's zijn dubbel:" -#: .././mainapp.py:18977 +#: .././mainapp.py:19013 msgid "There were no livestream alerts to cancel" msgstr "Er zijn nog geen livestream-meldingen op dit kanaal" -#: .././mainapp.py:18979 +#: .././mainapp.py:19015 msgid "Livestream alerts for 1 video were cancelled" msgstr "De livestream-melding van 1 video is gedempt" -#: .././mainapp.py:18982 +#: .././mainapp.py:19018 #, python-brace-format msgid "Livestream alerts for {0} videos were cancelled" msgstr "De livestream-melding van {0} video's is afgebroken" -#: .././mainapp.py:19352 +#: .././mainapp.py:19388 msgid "All Tartube data has been saved" msgstr "Alle Tartube-gegevens zijn opgeslagen" -#: .././mainapp.py:19382 +#: .././mainapp.py:19418 msgid "Database saved" msgstr "De databank is opgeslagen" -#: .././mainapp.py:19637 .././mainwin.py:13487 +#: .././mainapp.py:19673 .././mainwin.py:13487 msgid "" "Files cannot be recovered, after being deleted. Are you sure you want to " "continue?" @@ -767,39 +767,39 @@ msgstr "" #. Because livestream operations run silently in the background, when #. the user goes to the trouble of clicking a menu item in the #. main window's menu, tell them why nothing is happening -#: .././mainapp.py:19677 +#: .././mainapp.py:19713 msgid "Cannot update existing livestreams because" msgstr "De livestreams kunnen niet worden bijgewerkt omdat" -#: .././mainapp.py:19679 +#: .././mainapp.py:19715 msgid "there is another operation running" msgstr "er een andere handeling wordt uitgevoerd" -#: .././mainapp.py:19681 +#: .././mainapp.py:19717 msgid "they are currently being updated" msgstr "ze al worden bijgewerkt" -#: .././mainapp.py:19683 +#: .././mainapp.py:19719 msgid "one or more configuration windows are open" msgstr "er één of meerdere instellingenvensters geopend zijn" -#: .././mainapp.py:19685 +#: .././mainapp.py:19721 msgid "there are no livestreams to update" msgstr "er geen bij te werken livestreams zijn" -#: .././mainapp.py:19759 +#: .././mainapp.py:19795 msgid "There is already a channel with that name" msgstr "Er is al een kanaal met deze naam" -#: .././mainapp.py:19761 +#: .././mainapp.py:19797 msgid "There is already a playlist with that name" msgstr "Er is al een afspeellijst met deze naam" -#: .././mainapp.py:19763 +#: .././mainapp.py:19799 msgid "There is already a folder with that name" msgstr "Er is al een map met deze naam" -#: .././mainapp.py:19766 +#: .././mainapp.py:19802 msgid "(so please choose a different name)" msgstr "(geef een andere naam op)" @@ -809,7 +809,7 @@ msgstr "" "Tartube kan niet worden gestart omdat de pictogrammenmap niet is aangetroffen" #. File column -#: .././mainwin.py:943 .././config.py:6357 +#: .././mainwin.py:943 .././config.py:6359 msgid "_File" msgstr "_Bestand" @@ -852,7 +852,7 @@ msgid "_General download options..." msgstr "Al_gemene downloadopties..." #. Media column -#: .././mainwin.py:1009 .././config.py:9834 +#: .././mainwin.py:1009 .././config.py:9865 msgid "_Media" msgstr "_Media" @@ -910,7 +910,7 @@ msgstr "Testcode uitvoe_ren" #. Operations column #. Add this tab... -#: .././mainwin.py:1115 .././config.py:12776 +#: .././mainwin.py:1115 .././config.py:12807 msgid "_Operations" msgstr "_Handelingen" @@ -953,7 +953,7 @@ msgid "_Stop current operation" msgstr "Huidige handeling af_breken" #. Livestreams column -#: .././mainwin.py:1195 .././config.py:13480 +#: .././mainwin.py:1195 .././config.py:13511 msgid "_Livestreams" msgstr "_Livestreams" @@ -1036,7 +1036,7 @@ msgstr "Controleer alle video's, kanalen, afspeellijsten en mappen" #: .././mainwin.py:1393 .././mainwin.py:19371 .././mainwin.py:19376 #: .././mainwin.py:19384 .././mainwin.py:19633 .././mainwin.py:19645 #: .././mainwin.py:20380 .././mainwin.py:21727 .././mainwin.py:21753 -#: .././config.py:12481 +#: .././config.py:12512 msgid "Download" msgstr "Downloaden" @@ -1053,7 +1053,7 @@ msgstr "Afbreken" msgid "Stop the current operation" msgstr "Breek de huidige handeling af" -#: .././mainwin.py:1443 .././config.py:11068 +#: .././mainwin.py:1443 .././config.py:11099 msgid "Switch" msgstr "Andere weergave" @@ -1085,8 +1085,8 @@ msgstr "Afsluiten" msgid "Close Tartube" msgstr "Tartube sluiten" -#: .././mainwin.py:1532 .././config.py:7115 .././config.py:11292 -#: .././config.py:11890 +#: .././mainwin.py:1532 .././config.py:7146 .././config.py:11323 +#: .././config.py:11921 msgid "_Videos" msgstr "_Video's" @@ -1102,7 +1102,7 @@ msgstr "_Klassieke modus" msgid "_Output" msgstr "Uitv_oer" -#: .././mainwin.py:1566 .././config.py:8450 .././config.py:8956 +#: .././mainwin.py:1566 .././config.py:8481 .././config.py:8987 msgid "_Errors / Warnings" msgstr "Fout_en/Waarschuwingen" @@ -1163,12 +1163,12 @@ msgstr "Meer instellingen tonen" msgid "Sort" msgstr "Sorteren" -#: .././mainwin.py:1875 .././config.py:8235 +#: .././mainwin.py:1875 .././config.py:8266 msgid "Upload time" msgstr "Uploadtijd" -#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7138 -#: .././config.py:12481 .././config.py:14402 .././config.py:14669 +#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7169 +#: .././config.py:12512 .././config.py:14433 .././config.py:14700 msgid "Name" msgstr "Naam" @@ -1260,11 +1260,11 @@ msgstr "Snelheid" msgid "ETA" msgstr "Verwacht" -#: .././mainwin.py:2219 .././config.py:8821 +#: .././mainwin.py:2219 .././config.py:8852 msgid "New videos" msgstr "Nieuwe video's" -#: .././mainwin.py:2219 .././config.py:404 .././config.py:8191 +#: .././mainwin.py:2219 .././config.py:404 .././config.py:8222 msgid "Duration" msgstr "Duur" @@ -1272,7 +1272,7 @@ msgstr "Duur" msgid "Date" msgstr "Datum" -#: .././mainwin.py:2220 .././config.py:8147 +#: .././mainwin.py:2220 .././config.py:8178 msgid "File" msgstr "Bestand" @@ -1344,7 +1344,7 @@ msgstr "Bestemming openen" msgid "Format:" msgstr "Formaat:" -#: .././mainwin.py:2591 .././config.py:14402 +#: .././mainwin.py:2591 .././config.py:14433 msgid "Default" msgstr "Standaard" @@ -1373,14 +1373,14 @@ msgid "Play video" msgstr "Video afspelen" #. (Signal connect appears below) -#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11105 -#: .././config.py:12546 +#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11136 +#: .././config.py:12577 msgid "Move up" msgstr "Omhoog verplaatsen" #. (Signal connect appears below) -#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11113 -#: .././config.py:12555 +#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11144 +#: .././config.py:12586 msgid "Move down" msgstr "Omlaag verplaatsen" @@ -1416,7 +1416,7 @@ msgstr "Gedownloade bestanden wissen" msgid "Maximum page size" msgstr "Maximale paginagrootte" -#: .././mainwin.py:3017 .././config.py:12481 +#: .././mainwin.py:3017 .././config.py:12512 msgid "Time" msgstr "Tijd" @@ -1444,7 +1444,7 @@ msgstr "Serverfouten tonen" msgid "Show server warnings" msgstr "Serverwaarschuwingen tonen" -#: .././mainwin.py:3113 .././config.py:9936 +#: .././mainwin.py:3113 .././config.py:9967 msgid "Clear list" msgstr "Lijst wissen" @@ -1797,7 +1797,7 @@ msgstr "Downloaden na _stoppen" msgid "Not a _livestream" msgstr "Geen _livestream" -#: .././mainwin.py:5295 .././config.py:8310 +#: .././mainwin.py:5295 .././config.py:8341 msgid "_Livestream" msgstr "_Livestream" @@ -2472,8 +2472,8 @@ msgstr "Invidious" #. this function returns. Workaround is to make the label unclickable, #. then use a Glib timer to restore it (after some small fraction of a #. second) -#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9296 -#: .././config.py:11514 +#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9327 +#: .././config.py:11545 msgid "Other" msgstr "Overig" @@ -2814,7 +2814,7 @@ msgstr "Dit kanaal bevat:" msgid "This playlist contains:" msgstr "Deze afspeellijst bevat:" -#: .././mainwin.py:24726 .././config.py:9269 +#: .././mainwin.py:24726 .././config.py:9300 msgid "This folder contains:" msgstr "Deze map bevat:" @@ -2986,7 +2986,7 @@ msgstr "Importeren naar databank" msgid "Choose which items to import" msgstr "Geef aan welke items moeten worden geïmporteerd" -#: .././mainwin.py:25104 .././config.py:14454 .././config.py:14719 +#: .././mainwin.py:25104 .././config.py:14485 .././config.py:14750 msgid "Import" msgstr "Importeren" @@ -3050,7 +3050,7 @@ msgstr "Annuleren" #. 'OK' button #: .././mainwin.py:25521 .././config.py:1035 .././config.py:2242 -#: .././config.py:7694 .././config.py:7828 +#: .././config.py:7725 .././config.py:7859 msgid "OK" msgstr "Oké" @@ -3254,7 +3254,7 @@ msgstr "Bijwerken" msgid "Copy to clipboard" msgstr "Kopiëren naar klembord" -#: .././mainwin.py:26846 .././config.py:13749 +#: .././mainwin.py:26846 .././config.py:13780 msgid "Test" msgstr "Testen" @@ -3349,7 +3349,7 @@ msgstr "Downloads" msgid "Uploads" msgstr "Uploads" -#: .././config.py:403 .././config.py:8214 +#: .././config.py:403 .././config.py:8245 msgid "File size" msgstr "Bestandsgrootte" @@ -3427,8 +3427,8 @@ msgstr "Wit" #. 'Reset' button #. (Signal connect appears below) -#: .././config.py:1017 .././config.py:3306 .././config.py:14214 -#: .././config.py:14255 .././config.py:14325 +#: .././config.py:1017 .././config.py:3306 .././config.py:14245 +#: .././config.py:14286 .././config.py:14356 msgid "Reset" msgstr "Standaardwaarden" @@ -3445,7 +3445,7 @@ msgstr "Toepassen" msgid "Apply changes without closing the window" msgstr "Pas toe zonder het venster te sluiten" -#: .././config.py:1038 .././config.py:7697 .././config.py:7831 +#: .././config.py:1038 .././config.py:7728 .././config.py:7862 msgid "Apply changes" msgstr "Wijzigingen toepassen" @@ -3502,7 +3502,7 @@ msgstr "Downloadopties wissen" msgid "Close this window" msgstr "Huidig venster sluiten" -#: .././config.py:2869 .././config.py:6260 +#: .././config.py:2869 .././config.py:6262 msgid "_Name" msgstr "_Naam" @@ -3549,7 +3549,7 @@ msgid "Completely reset all download options to their default values" msgstr "Zet alle downloadopties terug op hun standaardwaarden" #. Add this tab... -#: .././config.py:3000 .././config.py:10878 +#: .././config.py:3000 .././config.py:10909 msgid "_Files" msgstr "_Bestanden" @@ -3573,7 +3573,7 @@ msgstr "Bestandsuitvoersjabloon" msgid "Add to template:" msgstr "Toevoegen aan sjabloon:" -#: .././config.py:3083 .././config.py:8018 +#: .././config.py:3083 .././config.py:8049 msgid "Video properties" msgstr "Video-informatie" @@ -3617,10 +3617,14 @@ msgstr "Video's automatisch nummeren, beginnend bij 0" msgid "Creator/uploader" msgstr "Maker/Uploader" -#: .././config.py:3098 .././config.py:3099 +#: .././config.py:3098 msgid "Full name of video uploader" msgstr "Volledige naam van uploader" +#: .././config.py:3099 +msgid "Uploader ID" +msgstr "" + #: .././config.py:3100 msgid "Nickname/ID of video uploader" msgstr "Bijnaam/ID van uploader" @@ -3729,8 +3733,8 @@ msgstr "Aantal keer gedeeld" msgid "Number of comments" msgstr "Aantal reacties" -#: .././config.py:3170 .././config.py:9916 .././config.py:12528 -#: .././config.py:14445 .././config.py:14710 +#: .././config.py:3170 .././config.py:9947 .././config.py:12559 +#: .././config.py:14476 .././config.py:14741 msgid "Add" msgstr "Toevoegen" @@ -3771,8 +3775,8 @@ msgid "Path to the downloader's cookie jar file" msgstr "Pad naar downloader's cookie-jarbestand:" #: .././config.py:3302 .././config.py:4927 .././config.py:4947 -#: .././config.py:4967 .././config.py:14111 .././config.py:14210 -#: .././config.py:14251 .././config.py:14321 +#: .././config.py:4967 .././config.py:14142 .././config.py:14241 +#: .././config.py:14282 .././config.py:14352 msgid "Set" msgstr "Instellen" @@ -3837,20 +3841,20 @@ msgid "Options during real (not simulated) downloads" msgstr "Opties tijdens echte (niet-gesimuleerde) downloads" #: .././config.py:3450 .././config.py:3481 -msgid "Keep the description file after Tartube shuts down" -msgstr "Omschrijvingsbestand behouden na afsluiten" +msgid "Keep the description file after the download has finished" +msgstr "" #: .././config.py:3456 .././config.py:3487 -msgid "Keep the metadata file after Tartube shuts down" -msgstr "Metagegevensbestand behouden na afsluiten" +msgid "Keep the metadata file after the download has finished" +msgstr "" #: .././config.py:3462 .././config.py:3493 -msgid "Keep the annotations file after Tartube shuts down" -msgstr "Aantekeningenbestand behouden na afsluiten" +msgid "Keep the annotations file after the download has finished" +msgstr "" #: .././config.py:3468 .././config.py:3499 -msgid "Keep the thumbnail file after Tartube shuts down" -msgstr "Miniatuurbestand behouden na afsluiten" +msgid "Keep the thumbnail file after the download has finished" +msgstr "" #: .././config.py:3475 msgid "Options during simulated (not real) downloads" @@ -3946,7 +3950,7 @@ msgid "Do not download DASH-related data for YouTube videos" msgstr "Download geen DASH-gerelateerde gegevens bij YouTube-video's" #. Add this tab... -#: .././config.py:3790 .././config.py:3809 .././config.py:13113 +#: .././config.py:3790 .././config.py:3809 .././config.py:13144 msgid "_Downloads" msgstr "_Downloads" @@ -4387,8 +4391,8 @@ msgstr "Extern downloadprogramma gebruiken" msgid "Arguments to pass to external downloader" msgstr "Aanvullende opties voor extern downloadprogramma" -#: .././config.py:5168 .././config.py:5658 .././config.py:7355 -#: .././config.py:7603 +#: .././config.py:5168 .././config.py:5658 .././config.py:7386 +#: .././config.py:7634 msgid "This procedure cannot be reversed. Are you sure you want to continue?" msgstr "" "Dit kan niet ongedaan worden gemaakt. Weet je zeker dat je wilt doorgaan?" @@ -4436,55 +4440,55 @@ msgid "FFmpeg options" msgstr "FFmpeg-opties" #. Replace the 'OK' button with a 'Process files' button -#: .././config.py:6246 .././config.py:7776 +#: .././config.py:6248 .././config.py:7807 msgid "Process files" msgstr "Bestanden verwerken" -#: .././config.py:6248 .././config.py:7778 +#: .././config.py:6250 .././config.py:7809 msgid "Process the files with FFmpeg" msgstr "Verwerk de bestanden met FFmpeg" -#: .././config.py:6265 +#: .././config.py:6267 msgid "Name for these FFmpeg options" msgstr "Naam van FFmpeg-opties" -#: .././config.py:6275 +#: .././config.py:6277 msgid "Extra command line options (e.g. --help)" msgstr "Aanvullende opdrachtregelopties (bijv. --help)" -#: .././config.py:6286 +#: .././config.py:6288 msgid "System command, based on all FFmpeg options in this window:" msgstr "Systeemopdracht, op basis van alle FFmpeg-opties binnen dit venster:" -#: .././config.py:6317 +#: .././config.py:6319 msgid "Show fewer FFmpeg options" msgstr "Minder FFmpeg-opties tonen" -#: .././config.py:6319 +#: .././config.py:6321 msgid "Show more FFmpeg options" msgstr "Meer FFmpeg-opties tonen" -#: .././config.py:6329 +#: .././config.py:6331 msgid "Import current FFmpeg options into this window" msgstr "Importeer huidige FFmpeg-opties naar dit venster" -#: .././config.py:6344 +#: .././config.py:6346 msgid "Completely reset all FFmpeg options to their default values" msgstr "Zet alle FFmpeg-opties terug op hun standaardwaarden" -#: .././config.py:6360 +#: .././config.py:6362 msgid "Add to end of filename:" msgstr "Toevoegen achter bestandsnaam:" -#: .././config.py:6370 +#: .././config.py:6372 msgid "If regex matches filename:" msgstr "Als regex overeenkomt met bestandsnaam:" -#: .././config.py:6384 +#: .././config.py:6386 msgid "...then apply substitution:" msgstr "...pas dan vervanging toe:" -#: .././config.py:6397 +#: .././config.py:6399 msgid "" "If the video/audio file is renamed, also rename the thumbnail (but not vice-" "versa)" @@ -4492,47 +4496,47 @@ msgstr "" "Als het audio- of videobestand van naam wijzigt, wijzig dan ook de naam van " "de miniatuur (maar niet vice-versa)" -#: .././config.py:6408 +#: .././config.py:6410 msgid "Change file extension:" msgstr "Bestandsextensie aanpassen:" -#: .././config.py:6422 +#: .././config.py:6424 msgid "After changing the file extension, delete the original file" msgstr "Oorspronkelijk bestand verwijderen na aanpassen van extensie" -#: .././config.py:6448 +#: .././config.py:6450 msgid "_Settings" msgstr "In_stellingen" -#: .././config.py:6455 +#: .././config.py:6457 msgid "Source file" msgstr "Bronbestand" -#: .././config.py:6462 +#: .././config.py:6464 msgid "Downloaded video/audio" msgstr "Gedownloade audio/video" -#: .././config.py:6471 +#: .././config.py:6473 msgid "with audio" msgstr "met audio" -#: .././config.py:6484 +#: .././config.py:6486 msgid "Video thumbnail" msgstr "Videominiatuur" -#: .././config.py:6503 +#: .././config.py:6505 msgid "Output file" msgstr "Uitvoerbestand" -#: .././config.py:6630 +#: .././config.py:6632 msgid "Audio bitrate" msgstr "Audiobitsnelheid" -#: .././config.py:6644 +#: .././config.py:6646 msgid "How to set the quality" msgstr "Kwaliteit instellen" -#: .././config.py:6649 +#: .././config.py:6651 msgid "" "FFmpeg always encodes according to a Rate Factor that specifies the quality " "of the result." @@ -4540,7 +4544,7 @@ msgstr "" "FFmpeg gebruikt altijd op basis van de snelheidsfactor die de kwaliteit " "aangeeft." -#: .././config.py:6652 +#: .././config.py:6654 msgid "" "Instead of directly specifying the Rate Factor, an average bit rate can be " "specified. FFmpeg will then determine the optimal Rate Factor in a first " @@ -4549,7 +4553,7 @@ msgstr "" "In plaats daarvan kan een gemiddelde bitsnelheid worden ingesteld. FFmpeg " "bepaalt dan de optimale snelheidsfactor bij de eerste overdracht." -#: .././config.py:6656 +#: .././config.py:6658 msgid "" "In fact the first pass is only used for determining the Rate Factor, no " "other data is carried over into the second pass." @@ -4557,7 +4561,7 @@ msgstr "" "De eerste overdracht wordt alleen gebruikt om de factor te bepalen en niet " "om andere gegevens over te dragen." -#: .././config.py:6659 +#: .././config.py:6661 msgid "" "Specifying an average bitrate but running only one pass is possible, but not " "recommended. FFmpeg would then encode the beginning of the video with a " @@ -4568,126 +4572,134 @@ msgstr "" "aanbevolen. FFmpeg werkt dan alleen het begin van de video af met een " "willekeurige snelheidsfactor en past het einde aan om het doel te bereiken." -#: .././config.py:6672 +#: .././config.py:6674 msgid "Manual rate factor" msgstr "Aangepaste snelheidsfactor" -#: .././config.py:6681 +#: .././config.py:6683 msgid "Determine from target bitrate (2-Pass)" msgstr "Bepalen op basis van doelbitsnelheid (2-pass)" -#: .././config.py:6691 +#: .././config.py:6693 msgid "Rate factor" msgstr "Snelheidsfactor" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Lossless" msgstr "Lossless" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Large file" msgstr "Groot bestand" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Bad quality" msgstr "Slechte kwaliteit" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Small file" msgstr "Klein bestand" -#: .././config.py:6732 +#: .././config.py:6734 msgid "Name of dummy file" msgstr "Naam van rekwisietbestand" -#: .././config.py:6736 +#: .././config.py:6738 msgid "A dummy file is created during the first pass." msgstr "Er wordt tijdens de eerste overdracht een rekwisietbestand aangemaakt." -#: .././config.py:6740 +#: .././config.py:6742 msgid "Use the output file" msgstr "Uitvoerbestand gebruiken" -#: .././config.py:6741 +#: .././config.py:6743 msgid "Dummy" msgstr "Rekwisiet" -#: .././config.py:6742 +#: .././config.py:6744 msgid "/dev/null (Linux)" msgstr "/dev/null (Linux)" -#: .././config.py:6743 +#: .././config.py:6745 msgid "NUL (MS Windows)" msgstr "NUL (MS Windows)" -#: .././config.py:6755 +#: .././config.py:6757 msgid "Patience preset" msgstr "Geduldsinstelling" -#: .././config.py:6760 +#: .././config.py:6762 msgid "Ultra fast" msgstr "Ontzettend snel" -#: .././config.py:6761 +#: .././config.py:6763 msgid "Super fast" msgstr "Heel erg snel" -#: .././config.py:6762 +#: .././config.py:6764 msgid "Very fast" msgstr "Erg snel" -#: .././config.py:6763 .././config.py:6832 +#: .././config.py:6765 .././config.py:6863 msgid "Faster" msgstr "Sneller" -#: .././config.py:6764 +#: .././config.py:6766 msgid "Fast" msgstr "Snel" -#: .././config.py:6765 +#: .././config.py:6767 msgid "Medium (default)" msgstr "Gemiddeld (standaard)" -#: .././config.py:6766 +#: .././config.py:6768 #, python-format msgid "Slow (file about 5-10% smaller than medium)" msgstr "Langzaam (ongeveer 5-10% kleiner bestand dan gemiddeld)" -#: .././config.py:6767 +#: .././config.py:6769 #, python-format msgid "Slower (file about 15% smaller than medium)" msgstr "Langzamer (ongeveer 15% kleiner bestand dan gemiddeld)" -#: .././config.py:6768 +#: .././config.py:6770 #, python-format msgid "Very slow (file about 17% smaller than medium)" msgstr "Erg langzaam (ongeveer 17% kleiner bestand dan gemiddeld)" -#: .././config.py:6826 +#: .././config.py:6781 +msgid "GPU encoding" +msgstr "" + +#: .././config.py:6797 +msgid "Hardware acceleration" +msgstr "" + +#: .././config.py:6857 msgid "Palette:" msgstr "Palet:" -#: .././config.py:6833 +#: .././config.py:6864 msgid "Uses dithering to a standard palette provided by FFmpeg" msgstr "Gebruikt ruisonderdrukking op basis van een standaardpalet van FFmpeg" -#: .././config.py:6834 +#: .././config.py:6865 msgid "Can cause dithering artefacts and slight banding" msgstr "Kan vervormingen en lichte verkleuringen veroorzaken" -#: .././config.py:6843 +#: .././config.py:6874 msgid "Better" msgstr "Beter" -#: .././config.py:6844 +#: .././config.py:6875 msgid "Determines an optimized palette for the video" msgstr "Stelt een geoptimaliseerd palet vast voor de video" -#: .././config.py:6845 +#: .././config.py:6876 msgid "Uses two passes and a temporary file for the palette" msgstr "Gebruikt twee overdrachten en een tijdelijk bestand voor het palet" -#: .././config.py:6898 +#: .././config.py:6929 msgid "" "This merges a video and audio file with the same name into a single video " "file,\n" @@ -4696,82 +4708,82 @@ msgstr "" "Hiermee voeg je een audio- en videobestand samen onder dezelfde naam,\n" "met toevoeging van de op het tabblad 'Bestand' opgegeven extensie" -#: .././config.py:6939 +#: .././config.py:6970 msgid "The thumbnail's format can be changed in the File tab" msgstr "Het miniatuurformaat kan worden aangepast op het tabblad 'Bestand'" -#: .././config.py:6954 +#: .././config.py:6985 msgid "_Optimisations" msgstr "_Optimalisaties" -#: .././config.py:6960 +#: .././config.py:6991 msgid "" "Optimise for fast seeking (shorter keyframe interval, about 10% larger file)" msgstr "" "Optimaliseren voor snel doorspoelen (kortere frames, ongeveer 10% groter " "bestand)" -#: .././config.py:6968 +#: .././config.py:6999 msgid "Input video is a high-quality movie" msgstr "Invoervideo is van hoge kwaliteit" -#: .././config.py:6974 +#: .././config.py:7005 msgid "Input video is an animated movie" msgstr "Invoervideo is een tekenfilm" -#: .././config.py:6980 +#: .././config.py:7011 msgid "Input video contains film grain" msgstr "Invoervideo bevat spikkels" -#: .././config.py:6986 +#: .././config.py:7017 msgid "Input video is an image slideshow" msgstr "Invoervideo is een diavoorstelling" -#: .././config.py:6992 +#: .././config.py:7023 msgid "Optimise for really weak CPU playback devices" msgstr "Optimaliseren voor zwakke processoren (cpu's)" -#: .././config.py:6999 +#: .././config.py:7030 msgid "Optimise for really old devices (requires rate factor above 0)" msgstr "" "Optimaliseren voor zeer oude apparaten (vereist een factor hoger dan 0)" -#: .././config.py:7010 +#: .././config.py:7041 msgid "" "Move headers to beginning of file (so it can play while still downloading)" msgstr "" "Koppen verplaatsen naar begin van bestand (om te kijken tijdens het " "downloaden)" -#: .././config.py:7018 +#: .././config.py:7049 msgid "Fast encoding and low latency streaming" msgstr "Snel encoderen en streamen op lage snelheid" -#: .././config.py:7024 +#: .././config.py:7055 msgid "Limit bitrate (Mbit/s)" msgstr "Bitsnelheid beperken (Mbit/s)" -#: .././config.py:7041 +#: .././config.py:7072 msgid "Assuming a receiving buffer (seconds)" msgstr "Ontvangbuffer (in seconden)" -#: .././config.py:7119 +#: .././config.py:7150 msgid "List of videos to be processed" msgstr "Lijst met te verwerken video's" -#: .././config.py:7138 .././media.py:88 +#: .././config.py:7169 .././media.py:88 msgid "Video" msgstr "Video" -#: .././config.py:7138 +#: .././config.py:7169 msgid "Thumbnail" msgstr "Miniatuurvoorbeeld" -#: .././config.py:7181 +#: .././config.py:7212 msgid "Remove video from list" msgstr "Video verwijderen van lijst" -#: .././config.py:7647 +#: .././config.py:7678 msgid "" "Fewer FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" @@ -4779,12 +4791,12 @@ msgstr "" "Als je op 'Toepassen' of 'Standaardwaarden' klikt (of het venster opnieuw " "opent), worden er minder FFmpeg-opties getoond" -#: .././config.py:7657 +#: .././config.py:7688 msgid "Show more FFmpeg options (when window re-opens)" msgstr "" "Uitgebreide FFmpeg-opties tonen (als het venster opnieuw wordt geopend)" -#: .././config.py:7674 +#: .././config.py:7705 msgid "" "More FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" @@ -4792,141 +4804,141 @@ msgstr "" "Als je op 'Toepassen' of 'Standaardwaarden' klikt (of het venster opnieuw " "opent), worden er meer FFmpeg-opties getoond" -#: .././config.py:7684 +#: .././config.py:7715 msgid "Show fewer FFmpeg options (when window re-opens)" msgstr "Minder FFmpeg-opties tonen (als het venster opnieuw wordt geopend)" #. Add this tab... -#: .././config.py:8135 .././config.py:8752 .././config.py:9176 -#: .././config.py:9663 .././config.py:10464 +#: .././config.py:8166 .././config.py:8783 .././config.py:9207 +#: .././config.py:9694 .././config.py:10495 msgid "_General" msgstr "Al_gemeen" -#: .././config.py:8138 .././config.py:8755 .././config.py:9179 -#: .././config.py:9668 +#: .././config.py:8169 .././config.py:8786 .././config.py:9210 +#: .././config.py:9699 msgid "General properties" msgstr "Algemene informatie" -#: .././config.py:8164 +#: .././config.py:8195 msgid "Set the file (if this is the wrong one)" msgstr "Bestand instellen (als dit het verkeerde is)" -#: .././config.py:8184 +#: .././config.py:8215 msgid "Always simulate download of this video" msgstr "Downloaden altijd simuleren" -#: .././config.py:8207 +#: .././config.py:8238 msgid "Video has been downloaded" msgstr "De video is gedownload" -#: .././config.py:8228 +#: .././config.py:8259 msgid "Video is marked as unwatched" msgstr "De video is gemarkeerd als niet-bekeken" -#: .././config.py:8249 +#: .././config.py:8280 msgid "Video is archived" msgstr "De video is gearchiveerd" -#: .././config.py:8256 +#: .././config.py:8287 msgid "Video is bookmarked" msgstr "De video is toegevoegd aan de bladwijzers" -#: .././config.py:8263 +#: .././config.py:8294 msgid "Receive time" msgstr "Ontvangen om" -#: .././config.py:8277 +#: .././config.py:8308 msgid "Video is favourite" msgstr "De video is toegevoegd aan de favorieten" -#: .././config.py:8284 +#: .././config.py:8315 msgid "Video is in waiting list" msgstr "De video staat op de wachtlijst" -#: .././config.py:8316 +#: .././config.py:8347 msgid "Livestream properties" msgstr "Livestreaminformatie" -#: .././config.py:8321 +#: .././config.py:8352 msgid "Livestream status" msgstr "Livestreamstatus" -#: .././config.py:8332 +#: .././config.py:8363 msgid "Waiting to start" msgstr "Bezig met wachten op begin" -#: .././config.py:8334 +#: .././config.py:8365 msgid "Stream has started" msgstr "De stream is begonnen" -#: .././config.py:8336 +#: .././config.py:8367 msgid "Not a livestream" msgstr "Is geen livestream" -#: .././config.py:8339 +#: .././config.py:8370 msgid "Livestream message" msgstr "Livestreambericht" -#: .././config.py:8354 +#: .././config.py:8385 msgid "Video is pre-recorded" msgstr "De video is van tevoren opgenomen" -#: .././config.py:8361 +#: .././config.py:8392 msgid "Livestream actions" msgstr "Livestreamacties" -#: .././config.py:8370 +#: .././config.py:8401 msgid "When the livestream starts, show a desktop notification" msgstr "Melding tonen als de livestream begint" -#: .././config.py:8379 +#: .././config.py:8410 msgid "When the livestream starts, play an alarm" msgstr "Geluid afspelen als de livestream begint" -#: .././config.py:8389 +#: .././config.py:8420 msgid "When the livestream starts, open it in the system's web browser" msgstr "Livestream openen in webbrowser zodra deze begint" -#: .././config.py:8401 +#: .././config.py:8432 msgid "When the livestream starts, begin downloading it immediately" msgstr "Downloaden starten als de livestream begint" -#: .././config.py:8412 .././config.py:13782 +#: .././config.py:8443 .././config.py:13813 msgid "When a livestream stops, download it (overwriting any earlier file)" msgstr "" "Downloaden stoppen als de livestream begint (eerdere bestanden worden " "overschreven)" -#: .././config.py:8428 +#: .././config.py:8459 msgid "_Description" msgstr "_Omschrijving" -#: .././config.py:8432 +#: .././config.py:8463 msgid "Video description" msgstr "Video-omschrijving" -#: .././config.py:8453 .././config.py:8959 +#: .././config.py:8484 .././config.py:8990 msgid "Errors / Warnings" msgstr "Fouten/Waarschuwingen" -#: .././config.py:8459 +#: .././config.py:8490 msgid "Error messages produced the last time this video was checked/downloaded" msgstr "" "Foutmeldingen tijdens de laatste keer dat de video is gecontroleerd/" "gedownload" -#: .././config.py:8474 +#: .././config.py:8505 msgid "" "Warning messages produced the last time this video was checked/downloaded" msgstr "" "Waarschuwingen tijdens de laatste keer dat de video is gecontroleerd/" "gedownload" -#: .././config.py:8517 +#: .././config.py:8548 msgid "Select the correct video/audio file" msgstr "Kies het juiste audio- of videobestand" -#: .././config.py:8543 +#: .././config.py:8574 msgid "" "The replacement video/audio file must be in the same channel, playlist or " "folder" @@ -4934,244 +4946,244 @@ msgstr "" "Het vervangende bestand moet op hetzelfde kanaal of dezelfde afspeellijst of " "map staan" -#: .././config.py:8561 +#: .././config.py:8592 msgid "You must select a valid video/audio file" msgstr "Kies het juiste audio- of videobestand" -#: .././config.py:8629 +#: .././config.py:8660 msgid "Channel properties" msgstr "Kanaalinformatie" -#: .././config.py:8632 +#: .././config.py:8663 msgid "Playlist properties" msgstr "Afspeellijstinformatie" -#: .././config.py:8773 +#: .././config.py:8804 msgid "Always simulate download of videos in this channel" msgstr "Downloaden op dit kanaal altijd simuleren" -#: .././config.py:8775 +#: .././config.py:8806 msgid "Always simulate download of videos in this playlist" msgstr "Downloaden op deze afspeellijst altijd simuleren" -#: .././config.py:8785 +#: .././config.py:8816 msgid "Disable checking/downloading for this channel" msgstr "Controleren/Downloaden op dit kanaal uitschakelen" -#: .././config.py:8787 +#: .././config.py:8818 msgid "Disable checking/downloading for this playlist" msgstr "Controleren/Downloaden op deze afspeellijst uitschakelen" -#: .././config.py:8797 +#: .././config.py:8828 msgid "This channel is marked as a favourite" msgstr "Dit kanaal staat in je favorieten" -#: .././config.py:8799 +#: .././config.py:8830 msgid "This playlist is marked as a favourite" msgstr "Deze afspeellijst staat in je favorieten" -#: .././config.py:8809 +#: .././config.py:8840 msgid "Total videos" msgstr "Totaal aantal video's" -#: .././config.py:8833 +#: .././config.py:8864 msgid "Favourite videos" msgstr "Favoriete video's" -#: .././config.py:8845 +#: .././config.py:8876 msgid "Downloaded videos" msgstr "Gedownloade video's" -#: .././config.py:8867 .././config.py:9408 .././config.py:11646 +#: .././config.py:8898 .././config.py:9439 .././config.py:11677 msgid "_History" msgstr "Gesc_hiedenis" -#: .././config.py:8872 .././config.py:9413 .././config.py:11653 +#: .././config.py:8903 .././config.py:9444 .././config.py:11684 msgid "Download history" msgstr "Downloadgeschiedenis" -#: .././config.py:8886 .././config.py:9427 .././config.py:11667 +#: .././config.py:8917 .././config.py:9458 .././config.py:11698 msgid "Draw" msgstr "Tekenen" -#: .././config.py:8914 +#: .././config.py:8945 msgid "_RSS feed" msgstr "_RSS-feed" -#: .././config.py:8917 +#: .././config.py:8948 msgid "RSS feed" msgstr "RSS-feed" -#: .././config.py:8923 +#: .././config.py:8954 msgid "" "If Tartube cannot detect the channel's RSS feed, you can enter the URL here" msgstr "" "Als Tartube geen rss-feed kan achterhalen, kun je hier de feedurl opgeven" -#: .././config.py:8928 +#: .././config.py:8959 msgid "" "If Tartube cannot detect the playlist's RSS feed, you can enter the URL here" msgstr "" "Als Tartube geen rss-feed kan achterhalen, kun je hier de feedurl opgeven" -#: .././config.py:8933 +#: .././config.py:8964 msgid "(The feed is used to detect livestreams on compatible websites)" msgstr "" "(de feed wordt gebruikt om livestreams van compatibele sites te achterhalen)" -#: .././config.py:8965 +#: .././config.py:8996 msgid "" "Error messages produced the last time this channel was checked/downloaded" msgstr "" "Foutmeldingen tijdens de laatste keer dat dit kanaal is gecontroleerd/" "gedownload" -#: .././config.py:8970 +#: .././config.py:9001 msgid "" "Error messages produced the last time this playlist was checked/downloaded" msgstr "" "Foutmeldingen tijdens de laatste keer dat deze afspeellijst is gecontroleerd/" "gedownload" -#: .././config.py:8988 +#: .././config.py:9019 msgid "" "Warning messages produced the last time this channel was checked/downloaded" msgstr "" "Waarschuwingen tijdens de laatste keer dat dit kanaal is gecontroleerd/" "gedownload" -#: .././config.py:8993 +#: .././config.py:9024 msgid "" "Warning messages produced the last time this playlist was checked/downloaded" msgstr "" "Waarschuwingen tijdens de laatste keer dat deze afspeellijst is " "gecontroleerd/gedownload" -#: .././config.py:9059 +#: .././config.py:9090 msgid "Folder properties" msgstr "Mapinformatie" -#: .././config.py:9196 +#: .././config.py:9227 msgid "Always simulate download of videos" msgstr "Downloaden altijd simuleren" -#: .././config.py:9203 +#: .././config.py:9234 msgid "Disable checking/downloading for this folder" msgstr "Controleren/Downloaden in deze map uitschakelen" -#: .././config.py:9210 +#: .././config.py:9241 msgid "This folder is marked as a favourite" msgstr "Deze map staat in je favorieten" -#: .././config.py:9217 +#: .././config.py:9248 msgid "This folder is hidden" msgstr "Deze map is verborgen" -#: .././config.py:9224 +#: .././config.py:9255 msgid "This folder can't be deleted by the user" msgstr "Deze map kan niet worden verwijderd door de gebruiker" -#: .././config.py:9231 +#: .././config.py:9262 msgid "This is a system-controlled folder" msgstr "Dit is een systeemmap" -#: .././config.py:9238 +#: .././config.py:9269 msgid "Only videos can be added to this folder" msgstr "Je kunt alleen video's toevoegen aan deze map" -#: .././config.py:9245 +#: .././config.py:9276 msgid "All contents deleted when Tartube shuts down" msgstr "Na het afsluiten wordt alle inhoud verwijderd" -#: .././config.py:9259 .././config.py:11475 +#: .././config.py:9290 .././config.py:11506 msgid "_Statistics" msgstr "_Statistieken" -#: .././config.py:9264 .././config.py:11482 +#: .././config.py:9295 .././config.py:11513 msgid "Statistics" msgstr "Statistieken" -#: .././config.py:9285 .././config.py:11503 +#: .././config.py:9316 .././config.py:11534 msgid "Downloaded" msgstr "Gedownload" -#: .././config.py:9329 +#: .././config.py:9360 msgid "Sub-folders" msgstr "Onderliggende mappen" -#: .././config.py:9351 +#: .././config.py:9382 msgid "Recalculate" msgstr "Herberekenen" -#: .././config.py:9522 +#: .././config.py:9553 msgid "Scheduled download" msgstr "Ingeplande download" -#: .././config.py:9673 .././config.py:12515 +#: .././config.py:9704 .././config.py:12546 msgid "Scheduled download name" msgstr "Naam van ingeplande download" -#: .././config.py:9685 +#: .././config.py:9716 msgid "Download mode" msgstr "Downloadmodus" -#: .././config.py:9690 +#: .././config.py:9721 msgid "Check channels, playlist and folders" msgstr "Kanalen, afspeellijsten en mappen controleren" -#: .././config.py:9691 +#: .././config.py:9722 msgid "Download channels, playlists and folders" msgstr "Kanalen, afspeellijsten, mappen downloaden" -#: .././config.py:9692 +#: .././config.py:9723 msgid "Perform a custom download" msgstr "Aangepast downloaden" -#: .././config.py:9703 .././config.py:12481 +#: .././config.py:9734 .././config.py:12512 msgid "Start mode" msgstr "Beginmodus" -#: .././config.py:9708 +#: .././config.py:9739 msgid "Perform this download at regular intervals" msgstr "Download uitvoeren op bepaalde tijdstippen" -#: .././config.py:9709 +#: .././config.py:9740 msgid "Perform this download when Tartube starts" msgstr "Download uitvoeren na het openen van Tartube" -#: .././config.py:9710 +#: .././config.py:9741 msgid "Disable this scheduled download" msgstr "Planning uitschakelen" -#: .././config.py:9722 +#: .././config.py:9753 msgid "Time between scheduled downloads" msgstr "Tijd tussen ingeplande downloads" -#: .././config.py:9766 +#: .././config.py:9797 msgid "If another scheduled download is running:" msgstr "Als er al een ingeplande download actief is:" -#: .././config.py:9773 +#: .././config.py:9804 msgid "Add channels, playlists and folders to the end of the queue" msgstr "Kanalen, afspeellijsten en mappen toevoegen aan einde van wachtrij" -#: .././config.py:9779 +#: .././config.py:9810 msgid "Add channels, playlists and folders to the beginning of the queue" msgstr "Kanalen, afspeellijsten en mappen toevoegen aan begin van wachtrij" -#: .././config.py:9786 +#: .././config.py:9817 msgid "Do nothing, just wait until the next scheduled download time" msgstr "Niks doen tot aan het volgende tijdstip" -#: .././config.py:9801 +#: .././config.py:9832 msgid "This scheduled download takes priority over others" msgstr "Deze ingeplande download heeft hoge prioriteit" -#: .././config.py:9804 +#: .././config.py:9835 msgid "Other scheduled downloads won't start until this one is finished" msgstr "Andere ingeplande downloads beginnen pas als deze is afgerond" -#: .././config.py:9813 +#: .././config.py:9844 msgid "" "Ignore time-saving preferences, and check/download the whole channel/" "playlist/folder" @@ -5179,64 +5191,64 @@ msgstr "" "Tijdbesparende maatregelen negeren en kanaal/afspeellijst/map volledig " "controleren/downloaden" -#: .././config.py:9821 +#: .././config.py:9852 msgid "Shut down Tartube when this scheduled download has finished" msgstr "Tartube afsluiten nadat deze download is afgerond" -#: .././config.py:9839 +#: .././config.py:9870 msgid "Media to download" msgstr "De te downloaden media" -#: .././config.py:9845 +#: .././config.py:9876 msgid "Check/download everything" msgstr "Alles controleren/downloaden" -#: .././config.py:9853 +#: .././config.py:9884 msgid "Only check/download the media below" msgstr "Alleen onderstaande media controleren/downloaden" -#: .././config.py:9867 +#: .././config.py:9898 msgid "" "Hint: you can drag and drop channels, playlists and your own folders here" msgstr "Tip: je kunt kanalen, afspeellijsten en mappen hierheen slepen" -#: .././config.py:9926 +#: .././config.py:9957 msgid "Remove" msgstr "Verwijderen" -#: .././config.py:10230 +#: .././config.py:10261 msgid "System preferences" msgstr "Algemene instellingen" -#: .././config.py:10483 +#: .././config.py:10514 msgid "_Language" msgstr "Taa_l" -#: .././config.py:10488 +#: .././config.py:10519 msgid "Language preferences" msgstr "Taalinstellingen" -#: .././config.py:10493 +#: .././config.py:10524 msgid "Language" msgstr "Taal" -#: .././config.py:10529 +#: .././config.py:10560 msgid "_Stability" msgstr "_Stabiliteit" -#: .././config.py:10539 +#: .././config.py:10570 msgid "Gtk library" msgstr "GTK-bibliotheek" -#: .././config.py:10544 +#: .././config.py:10575 msgid "Current version of the system's Gtk library" msgstr "De huidige versie van de GTK-bibliotheek op dit systeem" -#: .././config.py:10559 +#: .././config.py:10590 msgid "Gtk stability" msgstr "GTK-stabiliteit" -#: .././config.py:10598 +#: .././config.py:10629 msgid "" "Tartube uses the Gtk graphics library. This library is notoriously " "unreliable and may even causes crashes." @@ -5244,7 +5256,7 @@ msgstr "" "Tartube maakt gebruik van de grafische bibliotheek van GTK. Deze staat " "bekend om zijn onbetrouwbaarheid en sporadische crashes." -#: .././config.py:10605 +#: .././config.py:10636 msgid "" "By default, some cosmetic features are disabled (for example, in the Videos " "tab, the list of videos is not updated until the end of a download " @@ -5254,7 +5266,7 @@ msgstr "" "bijwerken van de videolijst totdat het downloaden is afgerond (zie tabblad " "'Video's')" -#: .././config.py:10613 +#: .././config.py:10644 msgid "" "If you think that your system Gtk has been fixed (or if you want to test Gtk " "stability), you can re-enable the cosmetic features." @@ -5262,79 +5274,79 @@ msgstr "" "Als je zeker weet dat je systeem een betrouwbare versie van GTK heeft (of " "als je de stabiliteit wilt testen), kun je enkele functies weer inschakelen." -#: .././config.py:10623 +#: .././config.py:10654 msgid "Disable some cosmetic features to prevent crashes and other issues" msgstr "" "Enkele cosmetische functies uitschakelen om crashes en problemen te voorkomen" -#: .././config.py:10641 +#: .././config.py:10672 msgid "_Modules" msgstr "_Modules" -#: .././config.py:10646 +#: .././config.py:10677 msgid "Module availability" msgstr "Aanwezigheid van modules" -#: .././config.py:10652 +#: .././config.py:10683 msgid "feedparser module is available (required for detecting livestreams)" msgstr "" "De feedparser-module is aanwezig (vereist voor het detecteren van " "livestreams)" -#: .././config.py:10661 +#: .././config.py:10692 msgid "matplotlib module is available (draws graphs)" msgstr "De matplotlib-module is beschikbaar (om grafieken te tonen)" -#: .././config.py:10669 +#: .././config.py:10700 msgid "moviepy module is available (finds the length of videos, if unknown)" msgstr "" "De moviepy-module is aanwezig (vereist voor het achterhalen van de duur van " "video's)" -#: .././config.py:10679 +#: .././config.py:10710 msgid "playsound module is available (sound an alarm when a livestream starts)" msgstr "" "De playsound-module is aanwezig (vereist voor het afspelen van een geluid " "aan het begin van een livestream)" -#: .././config.py:10689 +#: .././config.py:10720 msgid "" "XDG module is available (saves the config file in the standard location)" msgstr "" "De xdg-module is aanwezig (vereist voor het opslaan van het " "configuratiebestand op de standaardlocatie)" -#: .././config.py:10699 +#: .././config.py:10730 msgid "" "Notify module is available (shows desktop notifications; Linux/*BSD only)" msgstr "" "De notify-module is aanwezig (vereist voor het tonen van meldingen op Linux " "en *BSD)" -#: .././config.py:10709 +#: .././config.py:10740 msgid "Module preferences" msgstr "Module-instellingen" -#: .././config.py:10715 +#: .././config.py:10746 msgid "" "Use 'moviepy' module to get a video's duration, if not known (may be slow)" msgstr "" "'moviepy'-module gebruiken om de duur van video's te achterhalen (kan " "langzaam zijn)" -#: .././config.py:10727 +#: .././config.py:10758 msgid "Timeout applied when moviepy checks a video file" msgstr "De time-out die wordt gebruikt bij het achterhalen met moviepy" -#: .././config.py:10752 +#: .././config.py:10783 msgid "_Debugging" msgstr "_Foutopsporing" -#: .././config.py:10760 +#: .././config.py:10791 msgid "Debugging preferences" msgstr "Foutopsporingsinstellingen" -#: .././config.py:10766 +#: .././config.py:10797 msgid "" "Debug messages are only visible in the terminal window (these settings are " "not saved)" @@ -5342,24 +5354,24 @@ msgstr "" "Foutopsporingsberichten worden alleen getoond in het terminalvenster (deze " "instellingen worden niet bewaard)" -#: .././config.py:10773 +#: .././config.py:10804 msgid "Enable application debug messages (code in mainapp.py)" msgstr "" "Foutopsporingsberichten van gehele programma tonen (code in mainapp.py)" -#: .././config.py:10782 .././config.py:10802 +#: .././config.py:10813 .././config.py:10833 msgid "...but don't show timer debug messages" msgstr "...maar geen foutopsporingsberichten van de tijdklok tonen" -#: .././config.py:10793 +#: .././config.py:10824 msgid "Enable main winddow debug messages (code in mainwin.py)" msgstr "Foutopsporingsberichten van hoofdvenster tonen (code in mainwin.py)" -#: .././config.py:10813 +#: .././config.py:10844 msgid "Enabled downloader debug messages (code in downloads.py)" msgstr "Foutopsporingsberichten van downloader tonen (code in downloads.py)" -#: .././config.py:10856 +#: .././config.py:10887 msgid "" "Debugging messages are also visible if an empty file called debug.txt exists " "here:" @@ -5367,122 +5379,122 @@ msgstr "" "Foutopsporingsberichten zijn tevens zichtbaar als er een leeg bestand " "genaamd debug.txt aanwezig is in:" -#: .././config.py:10901 +#: .././config.py:10932 msgid "_Device" msgstr "_Apparaat" -#: .././config.py:10906 +#: .././config.py:10937 msgid "Device preferences" msgstr "Apparaatinstellingen" -#: .././config.py:10911 +#: .././config.py:10942 msgid "Size of device (in Mb)" msgstr "Totale ruimte op apparaat (in mb)" -#: .././config.py:10923 +#: .././config.py:10954 msgid "Free space on device (in Mb)" msgstr "Vrije ruimte op apparaat (in mb)" -#: .././config.py:10935 +#: .././config.py:10966 msgid "Warn user if disk space is less than" msgstr "Waarschuwen als schijfruimte minder is dan" -#: .././config.py:10953 +#: .././config.py:10984 msgid "Halt downloads if disk space is less than" msgstr "Downloads onderbreken als schijfruimte minder is dan" -#: .././config.py:10992 +#: .././config.py:11023 msgid "Configuration preferences" msgstr "Configuratie-instellingen" -#: .././config.py:10997 +#: .././config.py:11028 msgid "Tartube configuration file loaded from:" msgstr "Het Tartube-configuratiebestand wordt geladen uit:" -#: .././config.py:11016 +#: .././config.py:11047 msgid "D_atabase" msgstr "D_atabank" -#: .././config.py:11022 +#: .././config.py:11053 msgid "Database preferences" msgstr "Databankinstellingen" -#: .././config.py:11027 +#: .././config.py:11058 msgid "Tartube data folder" msgstr "Tartube-gegevensmap" -#: .././config.py:11039 +#: .././config.py:11070 msgid "Add new database" msgstr "Nieuwe databank toevoegen" -#: .././config.py:11041 +#: .././config.py:11072 msgid "Change to a different data folder" msgstr "Kies een andere gegevensmap" -#: .././config.py:11048 +#: .././config.py:11079 msgid "Check and repair database" msgstr "Databank controleren en repareren" -#: .././config.py:11051 +#: .././config.py:11082 msgid "Check for inconsistencies, and repair them" msgstr "Controleer op fouten en herstel ze" -#: .././config.py:11056 +#: .././config.py:11087 msgid "Recent data folders" msgstr "Recente gegevensmappen" -#: .././config.py:11070 +#: .././config.py:11101 msgid "Switch to the selected data folder" msgstr "Gekozen gegevensmap gebruiken" -#: .././config.py:11080 +#: .././config.py:11111 msgid "Forget" msgstr "Wissen" -#: .././config.py:11083 +#: .././config.py:11114 msgid "Remove the selected data folder from the list" msgstr "Verwijder de geselecteerde map van de lijst" -#: .././config.py:11092 +#: .././config.py:11123 msgid "Forget all" msgstr "Alle mappen wissen" -#: .././config.py:11095 +#: .././config.py:11126 msgid "Forget every folder in this list (except the current one)" msgstr "Verwijder alle mappen van de lijst (behalve de huidige)" -#: .././config.py:11108 +#: .././config.py:11139 msgid "Move the selected folder up the list" msgstr "Geselecteerde map omhoog verplaatsen" -#: .././config.py:11116 +#: .././config.py:11147 msgid "Move the selected folder down the list" msgstr "Geselecteerde map omlaag verplaatsen" -#: .././config.py:11144 +#: .././config.py:11175 msgid "" "On startup, load the first database on the list (not the most recently-use " "one)" msgstr "" "Laad bij het opstarten de eerste databank op de lijst (niet de meest recente)" -#: .././config.py:11154 +#: .././config.py:11185 msgid "If one database is in use, try to load others" msgstr "Andere databank laden als huidige in gebruik is" -#: .././config.py:11162 +#: .././config.py:11193 msgid "Add new data directories to this list" msgstr "Gegevensmappen toevoegen aan lijst" -#: .././config.py:11201 +#: .././config.py:11232 msgid "_Backups" msgstr "_Back-ups" -#: .././config.py:11205 +#: .././config.py:11236 msgid "Backup preferences" msgstr "Back-upinstellingen" -#: .././config.py:11210 +#: .././config.py:11241 msgid "" "When saving a database file, Tartube makes a backup copy of it (in case " "something goes wrong)" @@ -5490,173 +5502,173 @@ msgstr "" "Tijdens het opslaan van een databankbestand, maakt Tartube er een " "reservekopie van voor als er iets misgaat" -#: .././config.py:11219 +#: .././config.py:11250 msgid "Delete the backup file as soon as the save procedure is finished" msgstr "Back-upbestand verwijderen als opslaan voltooid is" -#: .././config.py:11229 +#: .././config.py:11260 msgid "Keep the backup file, replacing any previous backup file" msgstr "Back-upbestand behouden en vorige overschrijven" -#: .././config.py:11240 +#: .././config.py:11271 msgid "" "Make a new backup file once per day, after the day's first save procedure" msgstr "" "Eenmaal per dag een back-upbestand maken, één dag na de eerste keer opslaan" -#: .././config.py:11251 +#: .././config.py:11282 msgid "Make a new backup file for every save procedure" msgstr "Back-upbestand maken, elke keer na het opslaan" -#: .././config.py:11300 +#: .././config.py:11331 msgid "Automatic video deletion preferences" msgstr "Instellingen omtrent automatische videoverwijdering" -#: .././config.py:11305 +#: .././config.py:11336 msgid "Automatically delete downloaded videos after this many days" msgstr "Gedownloade video's automatisch verwijderen na x aantal dagen" -#: .././config.py:11319 +#: .././config.py:11350 msgid "...but only delete videos which have been watched" msgstr "...maar alleen bekeken video's" -#: .././config.py:11343 +#: .././config.py:11374 msgid "Video matching preferences" msgstr "Instellingen omtrent video-overeenkomsten" -#: .././config.py:11348 +#: .././config.py:11379 msgid "When matching videos on the filesystem:" msgstr "Bij het overeenkomen van video's op het bestandssysteem:" -#: .././config.py:11354 +#: .././config.py:11385 msgid "The video names must match exactly" msgstr "Alleen de videonamen overeen laten komen" -#: .././config.py:11361 +#: .././config.py:11392 msgid "The first # characters must match exactly" msgstr "Alleen eerste x aantal tekens overeen laten komen" -#: .././config.py:11375 +#: .././config.py:11406 msgid "Ignore the last # characters; the remaining name must match exactly" msgstr "Laatste x aantal tekens negeren en de rest overeen laten komen" -#: .././config.py:11421 +#: .././config.py:11452 msgid "_Temporary folders" msgstr "_Tijdelijke mappen" -#: .././config.py:11427 +#: .././config.py:11458 msgid "Temporary folder preferences" msgstr "Instellingen omtrent tijdelijke mappen" -#: .././config.py:11432 +#: .././config.py:11463 msgid "Empty temporary folders when Tartube shuts down" msgstr "Tijdelijke mappen legen na het afsluiten" -#: .././config.py:11441 +#: .././config.py:11472 msgid "(N.B. Temporary folders are always emptied when Tartube starts up)" msgstr "(let op: tijdelijke mappen worden sowieso geleegd bij het openen)" -#: .././config.py:11449 +#: .././config.py:11480 msgid "Open temporary folders (on the desktop) when Tartube shuts down" msgstr "Tijdelijke mappen openen na het afsluiten" -#: .././config.py:11487 +#: .././config.py:11518 msgid "The Tartube database contains:" msgstr "De Tartube-databank bevat:" -#: .././config.py:11547 +#: .././config.py:11578 msgid "Custom folders" msgstr "Aangepaste mappen" -#: .././config.py:11570 +#: .././config.py:11601 msgid "Calculate" msgstr "Berekenen" #. Add this tab... -#: .././config.py:11696 +#: .././config.py:11727 msgid "_Windows" msgstr "_Vensters" -#: .././config.py:11719 +#: .././config.py:11750 msgid "_Main window" msgstr "_Hoofdvenster" -#: .././config.py:11725 +#: .././config.py:11756 msgid "Main window preferences" msgstr "Hoofdvensterinstellingen" -#: .././config.py:11730 +#: .././config.py:11761 msgid "Remember the size of the main window when shutting down" msgstr "Afmetingen van hoofdvenster onthouden bij afsluiten" -#: .././config.py:11738 +#: .././config.py:11769 msgid "Also remember the position of main window sliders" msgstr "Ook positie van schuifknoppen op hoofdvenster onthouden" -#: .././config.py:11755 +#: .././config.py:11786 msgid "Don't show the main window toolbar" msgstr "Geen werkbalk tonen op hoofdvenster" -#: .././config.py:11763 +#: .././config.py:11794 msgid "Don't show labels in the main window toolbar" msgstr "Geen werkbalklabels tonen op hoofdvenster" -#: .././config.py:11781 +#: .././config.py:11812 msgid "" "Replace stock icons with custom icons (in case stock icons are not visible)" msgstr "" "Standaardpictogrammen vervangen door aangepaste (als de " "standaardpictogrammen niet worden getoond)" -#: .././config.py:11791 +#: .././config.py:11822 msgid "Show tooltips for videos, channels, playlists and folders" msgstr "Hulpballonnen tonen bij video's, kanalen, afspeellijsten en mappen" -#: .././config.py:11799 +#: .././config.py:11830 msgid "Show errors/warnings in tooltips (but not in the Videos tab)" msgstr "" "Fouten/Waarschuwingen tonen in hulpballonnen (maar niet op het tabblad " "'Video's')" -#: .././config.py:11817 +#: .././config.py:11848 msgid "Disable the 'Download all' buttons in the toolbar and the Videos Tab" msgstr "" "'Alles downloaden'-knoppen op werkbalk en tabblad 'Video's' uitschakelen" -#: .././config.py:11828 +#: .././config.py:11859 msgid "In the Progress Tab, hide finished videos / channels / playlists" msgstr "" "Afgeronde video's, kanalen en afspeellijsten verbergen op voortgangstabblad" -#: .././config.py:11837 +#: .././config.py:11868 msgid "In the Progress Tab, show results in reverse order" msgstr "Resultaten in omgekeerde volgorde tonen op voortgangstabblad" -#: .././config.py:11845 +#: .././config.py:11876 msgid "When Tartube starts, automatically open the Classic Mode tab" msgstr "Automatisch opstarten in klassieke modus" -#: .././config.py:11859 +#: .././config.py:11890 msgid "" "In the Classic Mode Tab, when adding URLs, remove duplicates rather than " "retaining them" msgstr "Duplicaten verwijderen tijdens toevoegen van url's in klassieke modus" -#: .././config.py:11873 +#: .././config.py:11904 msgid "In the Errors/Warnings Tab, don't reset the tab text when it is clicked" msgstr "" "Herstel de tabbladtekst niet na aanklikken op het tabblad 'Fouten/" "Waarschuwingen'" -#: .././config.py:11896 +#: .././config.py:11927 msgid "Video Index (left side of the Videos Tab)" msgstr "Video-index (links van het tabblad 'Video's')" -#: .././config.py:11902 +#: .././config.py:11933 msgid "Show smaller icons in the Video Index" msgstr "Kleinere pictogrammen tonen in video-index" -#: .././config.py:11912 +#: .././config.py:11943 msgid "" "In the Video Index, show detailed statistics about the videos in each " "channel / playlist / folder" @@ -5664,141 +5676,141 @@ msgstr "" "Uitgebreide statistieken tonen in de video-index, met informatie over elk " "kanaal, elke afspeellijst en elke map" -#: .././config.py:11923 +#: .././config.py:11954 msgid "" "After clicking on a folder, automatically expand/collapse the tree around it" msgstr "Boomstructuur van map automatisch in-/uitklappen na aanklikken" -#: .././config.py:11934 +#: .././config.py:11965 msgid "Expand the whole tree, not just the level beneath the clicked folder" msgstr "Boomstructuur volledig uitklappen na aanklikken" -#: .././config.py:11955 +#: .././config.py:11986 msgid "Video Catalogue (right side of the Videos Tab)" msgstr "Videocatalogus (rechts van het tabblad 'Video's')" -#: .././config.py:11962 +#: .././config.py:11993 msgid "Show 'today' and 'yesterday' as the date, when possible" msgstr "'Vandaag' en 'Gisteren' tonen als datum (indien mogelijk)" -#: .././config.py:11972 +#: .././config.py:12003 msgid "Draw a frame around each video" msgstr "Frame tekenen om elke video" -#: .././config.py:11982 +#: .././config.py:12013 msgid "Draw status icons for each video" msgstr "Statuspictogrammen tonen bij elke video" -#: .././config.py:11991 +#: .././config.py:12022 msgid "Thumbnail size (when videos are displayed on a grid)" msgstr "Miniatuurgrootte (als video's op een rooster worden getoond)" -#: .././config.py:12019 +#: .././config.py:12050 msgid "Show livestreams with a different background colour" msgstr "Andere achtergrondkleur gebruiken bij livestreams" -#: .././config.py:12027 +#: .././config.py:12058 msgid "Use same background colours for livestream and debut videos" msgstr "" "Dezelfde achtergrondkleur gebruiken voor livestream- en aanvangsvideo's" -#: .././config.py:12055 +#: .././config.py:12086 msgid "_Drag" msgstr "Ver_slepen" -#: .././config.py:12059 +#: .././config.py:12090 msgid "Drag and drop preferences" msgstr "Instellingen omtrent slepen-en-neerzetten" -#: .././config.py:12065 +#: .././config.py:12096 msgid "When dragging and dropping videos to an external application..." msgstr "Bij het verslepen van video's naar een extern programma..." -#: .././config.py:12071 +#: .././config.py:12102 msgid "Transfer the video's full file path" msgstr "Volledige videopad delen" -#: .././config.py:12079 +#: .././config.py:12110 msgid "Transfer the video's source URL" msgstr "Video-bronurl delen" -#: .././config.py:12087 +#: .././config.py:12118 msgid "Transfer the video's name" msgstr "Videonaam delen" -#: .././config.py:12095 +#: .././config.py:12126 msgid "Transfer the thumbnail's full file path" msgstr "Volledige videominiatuurpad delen" -#: .././config.py:12111 +#: .././config.py:12142 msgid "_System tray" msgstr "_Systeemvak" -#: .././config.py:12117 +#: .././config.py:12148 msgid "System tray preferences" msgstr "Systeemvakinstellingen" -#: .././config.py:12122 +#: .././config.py:12153 msgid "Show icon in system tray" msgstr "Systeemvakpictogram tonen" -#: .././config.py:12131 +#: .././config.py:12162 msgid "Close to the tray, rather than closing the application" msgstr "Minimaliseren naar systeemvak in plaats van afsluiten" -#: .././config.py:12157 +#: .././config.py:12188 msgid "D_ialogues" msgstr "D_ialoogvensters" -#: .././config.py:12163 +#: .././config.py:12194 msgid "Dialogue window preferences" msgstr "Dialoogvensterinstellingen" -#: .././config.py:12168 +#: .././config.py:12199 msgid "When adding channels/playlists, keep the dialogue window open" msgstr "Dialoogvenster openhouden na toevoegen van kanalen en afspeellijsten" -#: .././config.py:12178 +#: .././config.py:12209 msgid "When the dialogue window opens, add URLs from the system clipboard" msgstr "URL's van klembord toevoegen aan geopend dialoogvenster" -#: .././config.py:12206 +#: .././config.py:12237 msgid "_Errors/Warnings" msgstr "Fout_en/Waarschuwingen" -#: .././config.py:12214 +#: .././config.py:12245 msgid "Errors/Warnings tab preferences" msgstr "Instellingen omtrent fouten en waarschuwingen" -#: .././config.py:12219 +#: .././config.py:12250 msgid "Show Tartube error messages" msgstr "Tartube-foutmeldingen tonen" -#: .././config.py:12227 +#: .././config.py:12258 msgid "Show Tartube warning messages" msgstr "Tartube-waarschuwingen tonen" -#: .././config.py:12235 +#: .././config.py:12266 msgid "Show server error messages" msgstr "Serverfoutmeldingen tonen" -#: .././config.py:12246 +#: .././config.py:12277 msgid "Show server warning messages" msgstr "Serverwaarschuwingen tonen" -#: .././config.py:12258 +#: .././config.py:12289 msgid "Downloader error/warning preferences" msgstr "Instellingen omtrent downloadfouten/-waarschuwingen" -#: .././config.py:12263 +#: .././config.py:12294 msgid "TRANSLATOR'S NOTE: These error messages are always in English" msgstr "TRANSLATOR'S NOTE: These error messages are always in English" -#: .././config.py:12267 +#: .././config.py:12298 msgid "Ignore 'Child process exited with non-zero code' errors" msgstr "'Onderliggend proces is gestopt met niet-nulcode'-fouten negeren" -#: .././config.py:12276 +#: .././config.py:12307 msgid "" "Ignore 'Unable to download video data' and 'Unable to extract video data' " "errors" @@ -5806,55 +5818,55 @@ msgstr "" "'Kan videogegevens niet ophalen' en 'Kan videogegevens niet extraheren' " "negeren" -#: .././config.py:12286 +#: .././config.py:12317 msgid "Ignore 'Did not get any data blocks' errors" msgstr "'Geen gegevensblokken verkregen' negeren" -#: .././config.py:12295 +#: .././config.py:12326 msgid "Ignore 'Requested formats are incompatible for merge' warnings" msgstr "'De opgevraagde formaten kunnen niet worden samengevoegd' negeren" -#: .././config.py:12304 +#: .././config.py:12335 msgid "Ignore 'No video formats found' errors" msgstr "'Geen videoformaten aangetroffen' negeren" -#: .././config.py:12312 +#: .././config.py:12343 msgid "Ignore 'There are no annotations to write' warnings" msgstr "'Geen weg te schrijven aantekeningen' negeren" -#: .././config.py:12320 +#: .././config.py:12351 msgid "Ignore 'Video doesn't have subtitles' warnings" msgstr "'De video bevat geen ondertiteling' negeren" -#: .././config.py:12336 +#: .././config.py:12367 msgid "_Websites" msgstr "_Websites" -#: .././config.py:12344 +#: .././config.py:12375 msgid "YouTube error/warning preferences" msgstr "Instellingen omtrent YouTube-fouten/-waarschuwingen van" -#: .././config.py:12349 +#: .././config.py:12380 msgid "Ignore YouTube copyright errors" msgstr "Copyrightfouten negeren" -#: .././config.py:12357 +#: .././config.py:12388 msgid "Ignore YouTube age-restriction errors" msgstr "Leeftijdsbeperkingen negeren" -#: .././config.py:12365 +#: .././config.py:12396 msgid "Ignore YouTube deletion by uploader errors" msgstr "'Verwijderd door uploader' negeren" -#: .././config.py:12373 +#: .././config.py:12404 msgid "Ignore YouTube payment errors" msgstr "Betaalfouten negeren" -#: .././config.py:12382 +#: .././config.py:12413 msgid "General preferences" msgstr "Algemene instellingen" -#: .././config.py:12388 +#: .././config.py:12419 msgid "" "Ignore any errors/warnings which match lines in this list (applies to all " "websites)" @@ -5862,77 +5874,77 @@ msgstr "" "Alle fouten/waarschuwingen op deze lijst negeren (van toepassing op alle " "websites)" -#: .././config.py:12402 +#: .././config.py:12433 msgid "These are ordinary strings" msgstr "Dit zijn normale tekenreeksen" -#: .././config.py:12409 +#: .././config.py:12440 msgid "These are regular expressions (regexes)" msgstr "Dit zijn reguliere uitdrukkingen (regexes)" #. Add this tab... -#: .././config.py:12438 +#: .././config.py:12469 msgid "_Scheduling" msgstr "_Inplannen" -#: .././config.py:12455 +#: .././config.py:12486 msgid "_Start" msgstr "_Beginnen" -#: .././config.py:12461 +#: .././config.py:12492 msgid "Scheduled download preferences" msgstr "Planinstellingen omtrent downloads" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Priority" msgstr "Prioriteit" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Whole" msgstr "Geheel" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Shutdown" msgstr "Afsluiten" -#: .././config.py:12482 +#: .././config.py:12513 msgid "D/L All" msgstr "Alles downloaden" -#: .././config.py:12483 +#: .././config.py:12514 msgid "Join mode" msgstr "Samenvoegmodus" -#: .././config.py:12537 .././config.py:14468 .././config.py:14733 +#: .././config.py:12568 .././config.py:14499 .././config.py:14764 msgid "Edit" msgstr "Bewerken" -#: .././config.py:12564 .././config.py:14504 .././config.py:14769 +#: .././config.py:12595 .././config.py:14535 .././config.py:14800 msgid "Delete" msgstr "Verwijderen" -#: .././config.py:12632 +#: .././config.py:12663 msgid "S_top" msgstr "A_fbreken" -#: .././config.py:12638 +#: .././config.py:12669 msgid "Scheduled stop preferences" msgstr "Planinstellingen omtrent afbreken" -#: .././config.py:12643 +#: .././config.py:12674 msgid "Stop all download operations after this much time" msgstr "Alle downloads afbreken na opgegeven verstreken tijd" -#: .././config.py:12691 +#: .././config.py:12722 msgid "Stop all download operations after this many videos" msgstr "Alle downloads afbreken na opgegeven aantal video's" -#: .././config.py:12718 +#: .././config.py:12749 msgid "Stop all download operations after this much disk space" msgstr "" "Alle downloads afbreken na opgegeven hoeveelheid gebruikte schijfruimte" -#: .././config.py:12761 +#: .././config.py:12792 msgid "" "N.B. Disk space is estimated. This setting does not apply to simulated " "downloads" @@ -5940,31 +5952,31 @@ msgstr "" "Let op: de gebruikte schijfruimte is een schatting en is niet van toepassing " "op simulaties." -#: .././config.py:12799 +#: .././config.py:12830 msgid "_Performance" msgstr "_Prestaties" -#: .././config.py:12807 +#: .././config.py:12838 msgid "Performance limits" msgstr "Prestatiebeperkingen" -#: .././config.py:12812 +#: .././config.py:12843 msgid "Limit simultaneous downloads to" msgstr "Aantal gelijktijdige downloads beperken tot" -#: .././config.py:12830 +#: .././config.py:12861 msgid "Limit download speed to" msgstr "Downloadsnelheid beperken tot" -#: .././config.py:12856 +#: .././config.py:12887 msgid "Overriding video format options, limit video resolution to" msgstr "Videoresolutie gedwongen beperken tot" -#: .././config.py:12878 +#: .././config.py:12909 msgid "Time-saving settings" msgstr "Tijdbesparende instellingen" -#: .././config.py:12884 +#: .././config.py:12915 msgid "" "Stop checking/downloading a channel/playlist when it starts sending videos " "you already have" @@ -5972,45 +5984,45 @@ msgstr "" "Kanalen/Afspeellijsten niet meer controleren na toevoegen van reeds " "aanwezige video's" -#: .././config.py:12895 +#: .././config.py:12926 msgid "Stop after this many videos (when checking)" msgstr "Afbreken na opgegeven aantal video's (bij controles)" -#: .././config.py:12910 +#: .././config.py:12941 msgid "Stop after this many videos (when downloading)" msgstr "Afbreken na opgegeven aantal video's (tijdens downloaden)" -#: .././config.py:12941 +#: .././config.py:12972 msgid "P_references" msgstr "I_nstellingen" -#: .././config.py:12949 +#: .././config.py:12980 msgid "URL flexibility preferences" msgstr "URL-flexibiliteitsinstellingen" -#: .././config.py:12956 +#: .././config.py:12987 msgid "" "If a video's URL represents a channel/playlist, not a video, don't download " "it" msgstr "Video niet ophalen als url naar een kanaal/afspeellijst leidt" -#: .././config.py:12965 +#: .././config.py:12996 msgid "...or, download multiple videos into the containing folder" msgstr "...of meerdere video's downloaden naar bijbehorende map" -#: .././config.py:12975 +#: .././config.py:13006 msgid "...or, create a new channel, and download the videos into that" msgstr "...of nieuw kanaal toevoegen en video's daarnaartoe downloaden" -#: .././config.py:12986 +#: .././config.py:13017 msgid "...or, create a new playlist, and download the videos into that" msgstr "...of nieuwe afspeellijst toevoegen en video's daarnaartoe downloaden" -#: .././config.py:13018 +#: .././config.py:13049 msgid "Missing video preferences" msgstr "Instellingen omtrent ontbrekende video's" -#: .././config.py:13024 +#: .././config.py:13055 msgid "" "Add videos which have been removed from a channel/playlist to the Missing " "Videos folder" @@ -6018,55 +6030,55 @@ msgstr "" "Van kanaal/afspeellijst verwijderde video's toevoegen aan map 'Ontbrekende " "video's'" -#: .././config.py:13035 +#: .././config.py:13066 msgid "Only add videos that were uploaded within this many days" msgstr "" "Alleen video's toevoegen die zijn geüpload binnen het opgegeven aantal dagen" -#: .././config.py:13076 +#: .././config.py:13107 msgid "Invidious mirror" msgstr "Invidious-spiegelserver" -#: .././config.py:13082 +#: .././config.py:13113 msgid "To find an updated list of Invidious mirrors, use any search engine!" msgstr "" "Gebruik je favoriete zoekmachine om een lijst met Invidious-spiegelservers " "te vinden." -#: .././config.py:13095 .././config.py:13407 +#: .././config.py:13126 .././config.py:13438 msgid "Type the exact text that replaces youtube.com e.g." msgstr "" "Voer de letterlijke tekst in die youtube.com moet vervangen. Voorbeeld:" -#: .././config.py:13121 +#: .././config.py:13152 msgid "Download operation preferences" msgstr "Downloadactie-instellingen" -#: .././config.py:13127 +#: .././config.py:13158 msgid "Automatically update downloader before every download operation" msgstr "Downloader automatisch bijwerken vóór elke downloadactie" -#: .././config.py:13139 +#: .././config.py:13170 msgid "Automatically save files at the end of all operations" msgstr "Bestanden automatisch opslaan na afronden" -#: .././config.py:13149 +#: .././config.py:13180 msgid "For simulated downloads, don't check a video in a folder more than once" msgstr "Video's eenmalig controleren tijdens simulaties" -#: .././config.py:13160 +#: .././config.py:13191 msgid "If a download stalls, restart it after this many minutes" msgstr "Onderbroken downloads herstarten na opgegeven aantal minuten" -#: .././config.py:13181 +#: .././config.py:13212 msgid "If a network problem is detected, restart the download immediately" msgstr "Downloads direct herstarten na netwerkprobleem" -#: .././config.py:13193 +#: .././config.py:13224 msgid "Maximum restarts after a stalled download (0 for no maximum)" msgstr "Maximaal aantal herstartingen na onderbroken download (0 = onbeperkt)" -#: .././config.py:13234 +#: .././config.py:13265 msgid "" "Allow downloader to create its own archive file (so deleted videos are not " "re-downloaded)" @@ -6074,17 +6086,17 @@ msgstr "" "Downloader toestaan eigen archiefbestand te maken (zodat verwijderde video's " "niet nogmaals worden gedownload)" -#: .././config.py:13245 +#: .././config.py:13276 msgid "" "Also create an archive file when downloading from the Classic Mode tab (not " "recommended)" msgstr "Archiefbestand maken bij gebruik van klassieke modus (niet aanbevolen)" -#: .././config.py:13256 +#: .././config.py:13287 msgid "When checking videos, apply a 60-second timeout" msgstr "Time-out van 60 seconden hanteren bij controles" -#: .././config.py:13266 +#: .././config.py:13297 msgid "" "Convert .webp thumbnails into .jpg thumbnails (using FFmpeg) after " "downloading them" @@ -6092,22 +6104,22 @@ msgstr "" ".webp-miniaturen converteren naar .jpg-miniaturen (middels FFmpeg) na het " "downloaden" -#: .././config.py:13283 +#: .././config.py:13314 msgid "_Custom" msgstr "_Aangepast" -#: .././config.py:13288 +#: .././config.py:13319 msgid "Custom download preferences" msgstr "Aangepaste downloadinstellingen" -#: .././config.py:13294 +#: .././config.py:13325 msgid "" "In custom downloads, download each video independently of its channel or " "playlist" msgstr "" "Elke video los van kanaal of afspeellijst downloaden in aangepaste downloads" -#: .././config.py:13305 +#: .././config.py:13336 msgid "" "In custom downloads, apply a delay after each video/channel/playlist is " "download" @@ -6115,74 +6127,74 @@ msgstr "" "Vertraging toepassing na downloaden elk kanaal, elke video of afspeellijst " "in aangepaste downloads" -#: .././config.py:13315 +#: .././config.py:13346 msgid "Maximum delay to apply (in minutes)" msgstr "Maximale vertraging (in minuten)" -#: .././config.py:13332 +#: .././config.py:13363 msgid "Minimum delay to apply (in minutes; randomises the actual delay)" msgstr "" "Minimale vertraging (in minuten - dit leidt tot een willekeurige vertraging)" -#: .././config.py:13355 +#: .././config.py:13386 msgid "In custom downloads, obtain a YouTube video from the original website" msgstr "" "YouTube-video van oorspronkelijke website ophalen in aangepaste downloads" -#: .././config.py:13365 +#: .././config.py:13396 msgid "In custom downloads, obtain the video from HookTube rather than YouTube" msgstr "" "Video van HookTube ophalen in plaats van YouTube in aangepaste downloads" -#: .././config.py:13377 +#: .././config.py:13408 msgid "" "In custom downloads, obtain the video from Invidious rather than YouTube" msgstr "" "Video van Invidious ophalen in plaats van YouTube in aangepaste downloads" -#: .././config.py:13389 +#: .././config.py:13420 msgid "" "In custom downloads, obtain the video from the YouTube front-end specified " "below" msgstr "Video middels ander YouTube-frontend ophalen in aangepaste downloads" -#: .././config.py:13489 +#: .././config.py:13520 msgid "Livestream preferences (compatible websites only)" msgstr "Livestreaminstellingen (alleen compatibele websites)" -#: .././config.py:13495 +#: .././config.py:13526 msgid "Detect livestreams announced within this many days" msgstr "Livestreams binnen opgegeven aantal dagen detecteren" -#: .././config.py:13510 +#: .././config.py:13541 msgid "How often to check the status of livestreams (in minutes)" msgstr "" "Hoe vaak de livestreamstatussen moeten worden gecontroleerd (in minuten)" -#: .././config.py:13529 +#: .././config.py:13560 msgid "Check more frequently when a livestream is due to start" msgstr "Vaker controleren als livestream op het punt staat te beginnen" -#: .././config.py:13572 +#: .././config.py:13603 msgid "Broadcast preferences (compatible websites only)" msgstr "Uitzendinstellingen (alleen compatibele websites)" -#: .././config.py:13579 +#: .././config.py:13610 msgid "" "Use Youtube Stream Capture to download broadcasting livestreams (requires " "aria2)" msgstr "" "YouTube-streamopname gebruiken om livestreams te downloaden (vereist aria2)" -#: .././config.py:13589 +#: .././config.py:13620 msgid "Timeout after this many minutes of inactivity" msgstr "Time-out na opgegeven aantal minuten inactiviteit" -#: .././config.py:13603 +#: .././config.py:13634 msgid "Number of restarts after a timeout" msgstr "Aantal herstartingen na time-out" -#: .././config.py:13618 +#: .././config.py:13649 msgid "" "Bypass usual limits on simultaneous downloads, so that all broadcasts can be " "downloaded" @@ -6190,127 +6202,127 @@ msgstr "" "Gebruikelijke beperkingen omzeilen tijdens gelijktijdige downloads om alle " "livestreams te downloaden" -#: .././config.py:13659 +#: .././config.py:13690 msgid "_Proxies" msgstr "_Proxy's" -#: .././config.py:13665 +#: .././config.py:13696 msgid "Proxies" msgstr "Proxy's" -#: .././config.py:13672 +#: .././config.py:13703 msgid "" "During a download operation, Tartube will cycle betwween the proxies in this " "list" msgstr "Tijdens het downloaden schakelt Tartube tussen proxy's op deze lijst" -#: .././config.py:13693 +#: .././config.py:13724 msgid "_Actions" msgstr "_Acties" -#: .././config.py:13702 +#: .././config.py:13733 msgid "Livestream actions (can be toggled for individual videos)" msgstr "Livestreamacties (deze kunnen per video worden ingesteld)" -#: .././config.py:13709 +#: .././config.py:13740 msgid "(currently disabled on MS Windows)" msgstr "(momenteel uitgeschakeld op Windows)" -#: .././config.py:13714 +#: .././config.py:13745 msgid "When a livestream starts, show a desktop notification" msgstr "Melding tonen als een livestream begint" -#: .././config.py:13728 +#: .././config.py:13759 msgid "When a livestream starts, sound an alarm" msgstr "Geluid afspelen als een livestream begint" -#: .././config.py:13751 +#: .././config.py:13782 msgid "Plays the selected sound effect" msgstr "Gekozen geluidseffect afspelen" -#: .././config.py:13758 +#: .././config.py:13789 msgid "When a livestream starts, open it in the system's web browser" msgstr "Livestream openen in webbrowser zodra deze begint" -#: .././config.py:13770 +#: .././config.py:13801 msgid "When a livestream starts, begin downloading it immediately" msgstr "Downloaden starten als de livestream begint" -#: .././config.py:13796 +#: .././config.py:13827 msgid "Desktop notification preferences" msgstr "Meldingsinstellingen" -#: .././config.py:13803 +#: .././config.py:13834 msgid "Show a dialogue window at the end of an operation" msgstr "Dialoogvenster tonen na afronden van acties" -#: .././config.py:13828 +#: .././config.py:13859 msgid "Don't notify the user at the end of an operation" msgstr "Geen melding tonen na afronden van acties" -#: .././config.py:13882 +#: .././config.py:13913 msgid "_Forks" msgstr "A_fsplitsingen" -#: .././config.py:13888 +#: .././config.py:13919 msgid "Forks of youtube-dl" msgstr "Afsplitsingen van youtube-dl" -#: .././config.py:13917 -msgid "Use youtube-dlc" -msgstr "youtube-dlc gebruiken" +#: .././config.py:13948 +msgid "Use yt-dlp" +msgstr "" -#: .././config.py:13946 +#: .././config.py:13977 msgid "Use youtube-dl" msgstr "youtube-dl gebruiken" -#: .././config.py:13974 +#: .././config.py:14005 msgid "Use a different fork of youtube-dl:" msgstr "Andere afsplitsing van youtube-dl gebruiken:" -#: .././config.py:14051 +#: .././config.py:14082 msgid "_File paths" msgstr "_Bestandspaden" -#: .././config.py:14058 +#: .././config.py:14089 msgid "Downloader file paths" msgstr "Bestandspaden van downloader" -#: .././config.py:14064 +#: .././config.py:14095 msgid "Path to the executable" msgstr "Pad naar uitvoerbaar bestand" #. (Signal connect appears below) -#: .././config.py:14070 .././config.py:14218 .././config.py:14259 -#: .././config.py:14329 .././config.py:20068 +#: .././config.py:14101 .././config.py:14249 .././config.py:14290 +#: .././config.py:14360 .././config.py:20098 msgid "Use default path" msgstr "Standaardpad gebruiken" -#: .././config.py:14075 .././config.py:20080 +#: .././config.py:14106 .././config.py:20110 msgid "Use local path" msgstr "Lokaal pad gebruiken" -#: .././config.py:14079 +#: .././config.py:14110 msgid "Use custom path" msgstr "" -#: .././config.py:14087 .././config.py:20094 +#: .././config.py:14118 .././config.py:20124 msgid "Use PyPI path" msgstr "PyPI-pad gebruiken" -#: .././config.py:14138 +#: .././config.py:14169 msgid "Command for update operations" msgstr "Opdracht voor bijwerkacties" -#: .././config.py:14186 +#: .././config.py:14217 msgid "_FFmpeg / AVConv" msgstr "_FFmpeg/AVConv" -#: .././config.py:14194 +#: .././config.py:14225 msgid "Post-processing file paths" msgstr "Naverwerkingsbestandspaden" -#: .././config.py:14199 +#: .././config.py:14230 msgid "" "You only need to set these paths if Tartube cannot find FFmpeg / AVConv " "automatically" @@ -6318,31 +6330,31 @@ msgstr "" "Je hoeft deze paden alleen in te stellen als Tartube FFmpeg of AVConv niet " "automatisch heeft aangetroffen" -#: .././config.py:14206 +#: .././config.py:14237 msgid "Path to the FFmpeg executable" msgstr "Pad naar uitvoerbaar FFmpeg-bestand" -#: .././config.py:14233 +#: .././config.py:14264 msgid "Install from main menu" msgstr "Installeren vanuit hoofdmenu" -#: .././config.py:14247 +#: .././config.py:14278 msgid "Path to the AVConv executable" msgstr "Pad naar uitvoerbaar AVConv-bestand" -#: .././config.py:14274 +#: .././config.py:14305 msgid "Not supported on MS Windows" msgstr "Wordt niet ondersteund op Windows" -#: .././config.py:14297 +#: .././config.py:14328 msgid "_Stream Capture" msgstr "_Streamopname" -#: .././config.py:14305 +#: .././config.py:14336 msgid "Youtube Stream Capture file path" msgstr "Bestandspad naar YouTube-streamopname" -#: .././config.py:14310 +#: .././config.py:14341 msgid "" "Tartube includes a copy of this script, but you can use a different copy, if " "you want" @@ -6350,246 +6362,246 @@ msgstr "" "Tartube levert een kopie van dit script mee, maar als je wilt kun je een " "andere kopie gebruiken" -#: .././config.py:14317 +#: .././config.py:14348 msgid "Path to the YT Stream Capture executable" msgstr "Pad naar uitvoerbaar bestand van YouTube-streamopname" -#: .././config.py:14375 +#: .././config.py:14406 msgid "_Download options" msgstr "Download_opties" -#: .././config.py:14382 +#: .././config.py:14413 msgid "List of download options managers" msgstr "Lijst met downloadoptiebeheerders" -#: .././config.py:14402 +#: .././config.py:14433 msgid "Classic Mode" msgstr "Klassieke modus" -#: .././config.py:14403 +#: .././config.py:14434 msgid "Applied to media" msgstr "Toegepast op media" -#: .././config.py:14477 .././config.py:14742 +#: .././config.py:14508 .././config.py:14773 msgid "Export" msgstr "Exporteren" -#: .././config.py:14486 .././config.py:14751 +#: .././config.py:14517 .././config.py:14782 msgid "Clone" msgstr "Klonen" -#: .././config.py:14495 +#: .././config.py:14526 msgid "Use in Classic Mode tab" msgstr "Toevoegen aan klassieke modus" -#: .././config.py:14520 .././config.py:14785 +#: .././config.py:14551 .././config.py:14816 msgid "Refresh list" msgstr "Lijst verversen" -#: .././config.py:14601 +#: .././config.py:14632 msgid "_Preferences" msgstr "_Instellingen" -#: .././config.py:14608 +#: .././config.py:14639 msgid "Download options preferences" msgstr "Downloadoptie-instellingen" -#: .././config.py:14614 +#: .././config.py:14645 msgid "" "When applying download options to something, clone the general download " "options" msgstr "Algemene downloadopties klonen bij toepassing van downloadopties" -#: .././config.py:14625 +#: .././config.py:14656 msgid "After downloading a video, destroy its download options" msgstr "Downloadopties vergeten na downloaden van video's" -#: .././config.py:14642 +#: .././config.py:14673 msgid "_FFmpeg options" msgstr "_FFmpeg-opties" -#: .././config.py:14649 +#: .././config.py:14680 msgid "List of FFmpeg options managers" msgstr "Lijst met FFmpeg-optiebeheerders" -#: .././config.py:14669 +#: .././config.py:14700 msgid "Current" msgstr "Huidige" -#: .././config.py:14760 +#: .././config.py:14791 msgid "Use these options" msgstr "Deze opties gebruiken" #. Add this tab... -#: .././config.py:14851 +#: .././config.py:14882 msgid "O_utput" msgstr "_Uitvoer" -#: .././config.py:14870 +#: .././config.py:14901 msgid "_Output Tab" msgstr "_Uitvoertabblad" -#: .././config.py:14878 +#: .././config.py:14909 msgid "Output Tab preferences" msgstr "Instellingen omtrent uitvoertabblad" -#: .././config.py:14883 +#: .././config.py:14914 msgid "Display downloader system commands in the Output Tab" msgstr "Systeemopdrachten van downloader tonen op tabblad 'Uitvoer'" -#: .././config.py:14892 +#: .././config.py:14923 msgid "Display output from downloader's STDOUT in the Output Tab" msgstr "STDOUT-uitvoer van downloader tonen op tabblad 'Uitvoer'" -#: .././config.py:14901 .././config.py:15063 +#: .././config.py:14932 .././config.py:15094 msgid "...but don't write each video's JSON data" msgstr "...maar schrijf geen json-gegevens van elke video weg" -#: .././config.py:14912 .././config.py:15074 +#: .././config.py:14943 .././config.py:15105 msgid "...but don't write each video's download progress" msgstr "...maar schrijf geen downloadvoortgang van elke video weg" -#: .././config.py:14931 +#: .././config.py:14962 msgid "Display output from downloader's STDERR in the Output Tab" msgstr "STDERR-uitvoer van downloader tonen op tabblad 'Uitvoer'" -#: .././config.py:14940 +#: .././config.py:14971 msgid "Limit the size of Output Tab pages to" msgstr "Aantal pagina's op tabblad 'Uitvoer' beperken tot" -#: .././config.py:14961 +#: .././config.py:14992 msgid "Empty pages in the Output Tab at the start of every operation" msgstr "Pagina's op tabblad 'Uitvoer' legen na elke actie" -#: .././config.py:14971 +#: .././config.py:15002 msgid "" "Show a summary of active threads (changes are applied when Tartube restarts)" msgstr "" "Samenvatting van actieve processen tonen (herstart om deze wijziging toe te " "passen)" -#: .././config.py:14983 +#: .././config.py:15014 msgid "During an update operation, automatically switch to the Output tab" msgstr "Automatisch overschakelen naar tabblad 'Uitvoer' tijdens bijwerken" -#: .././config.py:14994 +#: .././config.py:15025 msgid "During a refresh operation, show all matching videos in the Output Tab" msgstr "" "Alle overeenkomende video's tonen op tabblad 'Uitvoer' tijdens bijwerken" -#: .././config.py:15005 +#: .././config.py:15036 msgid "...also show all non-matching videos" msgstr "...en ook niet-overeenkomende video's tonen" -#: .././config.py:15034 +#: .././config.py:15065 msgid "_Terminal window" msgstr "_Terminalvenster" -#: .././config.py:15040 +#: .././config.py:15071 msgid "Terminal window preferences" msgstr "Terminalvensterinstellingen" -#: .././config.py:15045 +#: .././config.py:15076 msgid "Write downloader system commands to the terminal window" msgstr "Systeemopdrachten van downloader tonen in terminalvenster" -#: .././config.py:15054 +#: .././config.py:15085 msgid "Write output from downloader's STDOUT to the terminal window" msgstr "STDOUT-uitvoer van downloader tonen in terminalvenster" -#: .././config.py:15096 +#: .././config.py:15127 msgid "Write output from downloader's STDERR to the terminal window" msgstr "STDERR-uitvoer van downloader tonen in terminalvenster" -#: .././config.py:15115 +#: .././config.py:15146 msgid "_Both" msgstr "_Beide" -#: .././config.py:15120 +#: .././config.py:15151 msgid "" "Special preferences (applies to both the Output Tab and the terminal window)" msgstr "" "Speciale instellingen (van toepassing op het tabblad 'Uitvoer' en het " "terminalvenster)" -#: .././config.py:15127 +#: .././config.py:15158 msgid "Downloader writes verbose output (youtube-dl debugging mode)" msgstr "Uitgebreide uitvoer van downloader (youtube-dl-foutopsporingsmodus)" -#: .././config.py:15136 +#: .././config.py:15167 msgid "Youtube Stream Capture writes verbose output" msgstr "Uitgebreide uitvoer van streamopname" -#: .././config.py:16053 +#: .././config.py:16084 msgid "Are you sure you want to create a new database at this location?" msgstr "" "Weet je zeker dat je een nieuwe databank wilt aanmaken op deze locatie?" -#: .././config.py:16160 +#: .././config.py:16191 msgid "Are you sure you want to forget this database?" msgstr "Weet je zeker dat je deze databank wilt wissen?" -#: .././config.py:16195 +#: .././config.py:16226 msgid "Are you sure you want to forget all databases except the current one?" msgstr "Weet je zeker dat je alle databanken, behalve de huidige, wilt wissen?" -#: .././config.py:16399 +#: .././config.py:16430 msgid "No database exists at this location:" msgstr "Er is geen databank op deze locatie:" -#: .././config.py:16401 +#: .././config.py:16432 msgid "Do you want to create a new one?" msgstr "Wil je een nieuwe aanmaken?" -#: .././config.py:17041 +#: .././config.py:17072 msgid "The current options manager cannot be deleted" msgstr "De huidige optiebeheerder kan niet worden verwijderd" -#: .././config.py:17049 .././config.py:18049 +#: .././config.py:17080 .././config.py:18080 msgid "Are you sure you want to delete this options manager?" msgstr "Weet je zeker dat je deze optiebeheerder wilt verwijderen?" -#: .././config.py:17243 .././config.py:17590 .././config.py:19074 +#: .././config.py:17274 .././config.py:17621 .././config.py:19105 msgid "The new setting will be applied when Tartube restarts" msgstr "Herstart Tartube om de instellingen toe te passen" -#: .././config.py:18041 +#: .././config.py:18072 msgid "The default options manager cannot be deleted" msgstr "De standaard optiebeheerder kan niet worden verwijderd" -#: .././config.py:18736 +#: .././config.py:18767 msgid "There is already a scheduled download with that name" msgstr "Er is al een ingeplande download met die naam" -#: .././config.py:18783 +#: .././config.py:18814 msgid "Are you sure you want to delete this scheduled download?" msgstr "Weet je zeker dat je deze ingeplande download wilt verwijderen?" -#: .././config.py:18951 +#: .././config.py:18982 msgid "Please select the AVConv executable" msgstr "Kies het uitvoerbare AVConv-bestand" -#: .././config.py:18984 +#: .././config.py:19015 msgid "Please select the FFmpeg executable" msgstr "Kies het uitvoerbare FFmpeg-bestand" -#: .././config.py:19017 +#: .././config.py:19048 msgid "Please select the Youtube Stream Capture executable" msgstr "Kies het uitvoerbare YouTube-streamopnamebestand" -#: .././config.py:19807 +#: .././config.py:19837 msgid "Select the youtube-dl-compatible executable" msgstr "" -#: .././config.py:19991 +#: .././config.py:20021 msgid "Database file not loaded" msgstr "Geen databank geladen" -#: .././config.py:20011 +#: .././config.py:20041 msgid "Did not try to load the database file" msgstr "Niet geprobeerd om de databank te laden" -#: .././config.py:20036 +#: .././config.py:20066 msgid "Database file loaded" msgstr "Databank geladen" @@ -6658,54 +6670,54 @@ msgstr "Bezig met controleren van rss-feed" msgid "Cannot download videos in a private folder" msgstr "Video's kunnen niet worden gedownload naar privémappen" -#: .././downloads.py:2986 .././downloads.py:5243 +#: .././downloads.py:2986 .././downloads.py:5256 msgid "Download did not start" msgstr "Downloaden is niet begonnen" -#: .././downloads.py:2994 .././downloads.py:5255 .././info.py:364 +#: .././downloads.py:2994 .././downloads.py:5268 .././info.py:364 #: .././updates.py:278 .././updates.py:476 msgid "Child process exited with non-zero code: {}" msgstr "Onderliggend proces is gestopt met niet-nulcode: {}" -#: .././downloads.py:3108 .././downloads.py:4060 +#: .././downloads.py:3108 .././downloads.py:4072 msgid "" "This video has a URL that points to a channel or a playlist, not a video" msgstr "" "Deze video bevat een url die leidt naar een kanaal of afspeellijst in plaats " "van een video" -#: .././downloads.py:3937 .././downloads.py:3951 +#: .././downloads.py:3949 .././downloads.py:3963 msgid "Simulated download of:" msgstr "Gesimuleerde download van:" -#: .././downloads.py:3959 +#: .././downloads.py:3971 msgid "Simulated download of video with unprintable characters" msgstr "Gesimuleerde videodownload met onleesbare tekens" #. This object creates more messages for the Output Tab and/or terminal, #. than downloads.VideoDownloader would do, as the output generated by #. Youtube Stream Capture is not easy for the user to interpret -#: .././downloads.py:5134 +#: .././downloads.py:5147 msgid "Tartube is starting the stream capture..." msgstr "Bezig met starten van streamopname..." -#: .././downloads.py:5152 +#: .././downloads.py:5165 msgid "Could not create a destination directory, capture halted" msgstr "De bestemming kan niet worden aangemaakt - de opname is onderbroken" -#: .././downloads.py:5173 .././downloads.py:5198 +#: .././downloads.py:5186 .././downloads.py:5211 msgid "Youtube Stream Capture script not found:" msgstr "Geen YouTube-streamopnamesscript aangetroffen:" -#: .././downloads.py:5247 +#: .././downloads.py:5260 msgid "Failed to capture the livestream" msgstr "De livestream kan niet worden opgenomen" -#: .././downloads.py:5251 +#: .././downloads.py:5264 msgid "Stream capture terminated" msgstr "Streamopname afgebroken" -#: .././downloads.py:5261 +#: .././downloads.py:5274 msgid "" "Stream captured terminated without downloading any video segments " "(indicating an error with the stream)" @@ -6714,47 +6726,47 @@ msgstr "" "(dit duidt op een fout met de stream)" #. Capture successful -#: .././downloads.py:5277 +#: .././downloads.py:5290 msgid "Stream capture successful" msgstr "De stream is opgenomen" #. Show a confirmation message -#: .././downloads.py:5307 +#: .././downloads.py:5320 msgid "Merging file segments..." msgstr "Bezig met samenvoegen..." -#: .././downloads.py:5327 +#: .././downloads.py:5340 msgid "Segment merge did not start" msgstr "Het samenvoegen is niet begonnen" -#: .././downloads.py:5338 +#: .././downloads.py:5351 msgid "Segment merge completed, but path not detected" msgstr "Het samenvoegen is voltooid, maar het pad is niet aangetroffen" -#: .././downloads.py:5348 +#: .././downloads.py:5361 msgid "Segment merge completed, but output file not found" msgstr "" "Het samenvoegen is voltooid, maar het uitvoerbestand is niet aangetroffen" -#: .././downloads.py:5369 +#: .././downloads.py:5382 msgid "File moved to:" msgstr "Het bestand is verplaatst naar:" -#: .././downloads.py:5374 +#: .././downloads.py:5387 msgid "Livestream download is complete" msgstr "De livestream is gedownload" -#: .././downloads.py:5379 +#: .././downloads.py:5392 msgid "Failed to move output file" msgstr "Het uitvoerbestand kan niet worden verplaatst" -#: .././downloads.py:5548 +#: .././downloads.py:5561 #, python-brace-format msgid "Stream capture is frozen, trying again (restart #{0})" msgstr "" "De streamopname is vastgelopen - er wordt opnieuw begonnen (#{0} herstarten)" -#: .././downloads.py:5555 +#: .././downloads.py:5568 msgid "Stream capture is frozen, giving up" msgstr "De streamopname is vastgelopen - de opname wordt afgebroken" @@ -7340,6 +7352,21 @@ msgstr "Bezig met starten van bijwerkactie om te installeren/bij te werken " msgid "Update did not start" msgstr "Het bijwerken is niet gestart" +#~ msgid "Keep the description file after Tartube shuts down" +#~ msgstr "Omschrijvingsbestand behouden na afsluiten" + +#~ msgid "Keep the metadata file after Tartube shuts down" +#~ msgstr "Metagegevensbestand behouden na afsluiten" + +#~ msgid "Keep the annotations file after Tartube shuts down" +#~ msgstr "Aantekeningenbestand behouden na afsluiten" + +#~ msgid "Keep the thumbnail file after Tartube shuts down" +#~ msgstr "Miniatuurbestand behouden na afsluiten" + +#~ msgid "Use youtube-dlc" +#~ msgstr "youtube-dlc gebruiken" + #~ msgid "Installing" #~ msgstr "Bezig met installeren..." diff --git a/nsis/tartube_install_32bit.nsi b/nsis/tartube_install_32bit.nsi index 8a625da..5eec985 100644 --- a/nsis/tartube_install_32bit.nsi +++ b/nsis/tartube_install_32bit.nsi @@ -1,4 +1,4 @@ -# Tartube v2.3.097 installer script for MS Windows +# Tartube v2.3.110 installer script for MS Windows # # Copyright (C) 2019-2021 A S Lewis # @@ -249,7 +249,7 @@ ;Name and file Name "Tartube" - OutFile "install-tartube-2.3.097-32bit.exe" + OutFile "install-tartube-2.3.110-32bit.exe" ;Default installation folder InstallDir "$LOCALAPPDATA\Tartube" @@ -352,7 +352,7 @@ Section "Tartube" SecClient # "Publisher" "A S Lewis" # WriteRegStr HKLM \ # "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tartube" \ -# "DisplayVersion" "2.3.097" +# "DisplayVersion" "2.3.110" # Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" diff --git a/nsis/tartube_install_64bit.nsi b/nsis/tartube_install_64bit.nsi index f6b9320..362ca50 100644 --- a/nsis/tartube_install_64bit.nsi +++ b/nsis/tartube_install_64bit.nsi @@ -1,4 +1,4 @@ -# Tartube v2.3.097 installer script for MS Windows +# Tartube v2.3.110 installer script for MS Windows # # Copyright (C) 2019-2021 A S Lewis # @@ -249,7 +249,7 @@ ;Name and file Name "Tartube" - OutFile "install-tartube-2.3.097-64bit.exe" + OutFile "install-tartube-2.3.110-64bit.exe" ;Default installation folder InstallDir "$LOCALAPPDATA\Tartube" @@ -352,7 +352,7 @@ Section "Tartube" SecClient # "Publisher" "A S Lewis" # WriteRegStr HKLM \ # "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tartube" \ -# "DisplayVersion" "2.3.097" +# "DisplayVersion" "2.3.110" # Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" diff --git a/pack/bin/no_download/tartube b/pack/bin/no_download/tartube index b1ff7b9..b7f0702 100644 --- a/pack/bin/no_download/tartube +++ b/pack/bin/no_download/tartube @@ -42,8 +42,8 @@ import mainapp # 'Global' variables __packagename__ = 'tartube' -__version__ = '2.3.097' -__date__ = '16 Feb 2021' +__version__ = '2.3.110' +__date__ = '28 Feb 2021' __copyright__ = 'Copyright \xa9 2019-2021 A S Lewis' __license__ = """ Copyright \xa9 2019-2021 A S Lewis. diff --git a/pack/bin/pkg/tartube b/pack/bin/pkg/tartube index ef14d9d..8e7e4f3 100644 --- a/pack/bin/pkg/tartube +++ b/pack/bin/pkg/tartube @@ -42,8 +42,8 @@ import mainapp # 'Global' variables __packagename__ = 'tartube' -__version__ = '2.3.097' -__date__ = '16 Feb 2021' +__version__ = '2.3.110' +__date__ = '28 Feb 2021' __copyright__ = 'Copyright \xa9 2019-2021 A S Lewis' __license__ = """ Copyright \xa9 2019-2021 A S Lewis. diff --git a/pack/bin/strict/tartube b/pack/bin/strict/tartube index a6ad69f..9d05c5b 100644 --- a/pack/bin/strict/tartube +++ b/pack/bin/strict/tartube @@ -42,8 +42,8 @@ import mainapp # 'Global' variables __packagename__ = 'tartube' -__version__ = '2.3.097' -__date__ = '16 Feb 2021' +__version__ = '2.3.110' +__date__ = '28 Feb 2021' __copyright__ = 'Copyright \xa9 2019-2021 A S Lewis' __license__ = """ Copyright \xa9 2019-2021 A S Lewis. diff --git a/pack/tartube.1 b/pack/tartube.1 index f9e0a37..7efff2e 100644 --- a/pack/tartube.1 +++ b/pack/tartube.1 @@ -1,4 +1,4 @@ -.TH man 1 "16 Feb 2021" "2.3.097" "tartube man page" +.TH man 1 "28 Feb 2021" "2.3.110" "tartube man page" .SH NAME tartube \- GUI front-end for youtube-dl .SH SYNOPSIS diff --git a/pack/tartube.desktop b/pack/tartube.desktop index aea3f7d..1d8642d 100644 --- a/pack/tartube.desktop +++ b/pack/tartube.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Name=Tartube -Version=2.3.097 +Version=2.3.110 Exec=tartube Icon=tartube Type=Application diff --git a/setup.py b/setup.py index 37dc30c..78afe93 100644 --- a/setup.py +++ b/setup.py @@ -28,8 +28,8 @@ import sys # Set a standard long_description, modified only for Debian/RPM packages long_description=""" -Tartube is a GUI front-end for youtube-dlc, youtube-dl and other compatible -video downloaders. +Tartube is a GUI front-end for youtube-dl, yt-dlp and other compatible video +downloaders. It is partly based on youtube-dl-gui and is written in Python 3 / Gtk 3. Tartube runs on MS Windows, Linux, BSD and MacOS. @@ -182,7 +182,7 @@ for path in glob.glob('sounds/*'): # Setup setuptools.setup( name='tartube', - version='2.3.097', + version='2.3.110', description='GUI front-end for youtube-dl', long_description=long_description, long_description_content_type='text/plain', @@ -211,7 +211,8 @@ setuptools.setup( python_requires='>=3.0, <4', install_requires=[ 'feedparser', - 'pgi', +# 'pgi', + 'pygobject', 'matplotlib', 'playsound', 'requests', diff --git a/tartube/config.py b/tartube/config.py index 36e52f8..52565eb 100644 --- a/tartube/config.py +++ b/tartube/config.py @@ -3096,7 +3096,7 @@ class OptionsEditWin(GenericEditWin): _('Creator/uploader'), [ 'uploader', _('Full name of video uploader'), - 'uploader_id', _('Full name of video uploader'), + 'uploader_id', _('Uploader ID'), 'creator', _('Nickname/ID of video uploader'), 'channel', _('Channel name'), 'channel_id', _('Channel ID'), @@ -3447,25 +3447,25 @@ class OptionsEditWin(GenericEditWin): ) self.add_checkbutton(grid, - _('Keep the description file after Tartube shuts down'), + _('Keep the description file after the download has finished'), 'keep_description', 0, 1, 1, 1, ) self.add_checkbutton(grid, - _('Keep the metadata file after Tartube shuts down'), + _('Keep the metadata file after the download has finished'), 'keep_info', 0, 2, 1, 1, ) self.add_checkbutton(grid, - _('Keep the annotations file after Tartube shuts down'), + _('Keep the annotations file after the download has finished'), 'keep_annotations', 0, 3, 1, 1, ) self.add_checkbutton(grid, - _('Keep the thumbnail file after Tartube shuts down'), + _('Keep the thumbnail file after the download has finished'), 'keep_thumbnail', 0, 4, 1, 1, ) @@ -3478,25 +3478,25 @@ class OptionsEditWin(GenericEditWin): ) self.add_checkbutton(grid, - _('Keep the description file after Tartube shuts down'), + _('Keep the description file after the download has finished'), 'sim_keep_description', 0, 6, 1, 1, ) self.add_checkbutton(grid, - _('Keep the metadata file after Tartube shuts down'), + _('Keep the metadata file after the download has finished'), 'sim_keep_info', 0, 7, 1, 1, ) self.add_checkbutton(grid, - _('Keep the annotations file after Tartube shuts down'), + _('Keep the annotations file after the download has finished'), 'sim_keep_annotations', 0, 8, 1, 1, ) self.add_checkbutton(grid, - _('Keep the thumbnail file after Tartube shuts down'), + _('Keep the thumbnail file after the download has finished'), 'sim_keep_thumbnail', 0, 9, 1, 1, ) @@ -6019,6 +6019,8 @@ class FFmpegOptionsEditWin(GenericEditWin): self.rate_factor_scale = None # Gtk.Scale self.dummy_file_combo = None # Gtk.ComboBox self.patience_preset_combo = None # Gtk.ComboBox + self.gpu_encoding_combo = None # Gtk.ComboBox + self.hw_accel_combo = None # Gtk.ComboBox # (Settings tab, GIF grid) self.palette_mode_radiobutton = None # Gtk.RadioButton self.palette_mode_radiobutton2 = None # Gtk.RadioButton @@ -6775,6 +6777,35 @@ class FFmpegOptionsEditWin(GenericEditWin): ) self.patience_preset_combo.set_hexpand(False) + self.add_label(grid, + _('GPU encoding'), + 0, 6, 1, 1, + ) + + combo_list3 = [ + 'libx264', 'libx265', 'h264_amf', 'hevc_amf', 'h264_nvenc', + 'hevc_nvenc', + ] + + self.gpu_encoding_combo = self.add_combo(grid, + combo_list3, + 'gpu_encoding', + 1, 6, (inner_width - 1), 1, + ) + + self.add_label(grid, + _('Hardware acceleration'), + 0, 7, 1, 1, + ) + + combo_list4 = ['none', 'auto', 'vdpau', 'dxva2', 'vaapi', 'qsv'] + + self.hw_accel_combo = self.add_combo(grid, + combo_list4, + 'hw_accel', + 1, 7, (inner_width - 1), 1, + ) + # (Signal connects from above) self.quality_mode_radiobutton.connect( 'toggled', @@ -13889,10 +13920,10 @@ class SystemPrefWin(GenericPrefWin): 0, 0, 1, 1, ) - # youtube-dlc. Use an event box so the downloader can be selected by + # yt-dlp. Use an event box so the downloader can be selected by # clicking anywhere in the frame event_box = Gtk.EventBox() - grid.attach(event_box, 0, 2, 1, 1) + grid.attach(event_box, 0, 1, 1, 1) # (Signal connect appears below) frame = Gtk.Frame() @@ -13905,8 +13936,8 @@ class SystemPrefWin(GenericPrefWin): self.add_label(grid2, utils.tidy_up_long_string( - '<b>youtube-dlc</b>: <i>' \ - + self.app_obj.ytdl_fork_descrip_dict['youtube-dlc'] \ + '<b>yt-dlp</b>: <i>' \ + + self.app_obj.ytdl_fork_descrip_dict['yt-dlp'] \ + '</i>', ), 0, 0, 1, 1, @@ -13914,14 +13945,14 @@ class SystemPrefWin(GenericPrefWin): radiobutton = self.add_radiobutton(grid2, None, - ' ' + _('Use youtube-dlc'), + ' ' + _('Use yt-dlp'), 0, 1, 1, 1, ) # (Signal connect appears below) # youtube-dl event_box2 = Gtk.EventBox() - grid.attach(event_box2, 0, 1, 1, 1) + grid.attach(event_box2, 0, 2, 1, 1) # (Signal connect appears below) frame2 = Gtk.Frame() @@ -13989,7 +14020,7 @@ class SystemPrefWin(GenericPrefWin): or self.app_obj.ytdl_fork == 'youtube-dl': radiobutton2.set_active(True) entry.set_sensitive(False) - elif self.app_obj.ytdl_fork == 'youtube-dlc': + elif self.app_obj.ytdl_fork == 'yt-dlp': radiobutton.set_active(True) entry.set_sensitive(False) else: @@ -14020,7 +14051,7 @@ class SystemPrefWin(GenericPrefWin): 'toggled', self.on_ytdl_fork_button_toggled, entry, - 'youtube-dlc', + 'yt-dlp', ) radiobutton2.connect( 'toggled', @@ -19730,8 +19761,7 @@ class SystemPrefWin(GenericPrefWin): entry (Gtk.Entry): Another widget to be updated - fork_type (str): 'youtube-dlc', 'youtube-dl', or None for any other - fork + fork_type (str): 'yt-dlp', 'youtube-dl', or None for any other fork """ @@ -19755,7 +19785,7 @@ class SystemPrefWin(GenericPrefWin): entry.set_text('') entry.set_sensitive(False) - elif fork_type == 'youtube-dlc': + elif fork_type == 'yt-dlp': self.app_obj.set_ytdl_fork(fork_type) entry.set_text('') diff --git a/tartube/downloads.py b/tartube/downloads.py index 0856671..7150b37 100644 --- a/tartube/downloads.py +++ b/tartube/downloads.py @@ -3539,8 +3539,20 @@ class VideoDownloader(object): else: thumbnail = None +# if 'webpage_url' in json_dict: +# source = json_dict['webpage_url'] +# else: +# source = None + # !!! DEBUG: yt-dlp Git #119: filter out the extraneous characters at + # the end of the URL, if present if 'webpage_url' in json_dict: - source = json_dict['webpage_url'] + + source = re.sub( + r'\&has_verified\=.*\&bpctr\=.*', + '', + json_dict['webpage_url'], + ) + else: source = None @@ -4378,7 +4390,8 @@ class VideoDownloader(object): percent = '{0:.1f}%'.format(current_segment / segment_no * 100) dl_stat_dict['percent'] = percent - elif stdout_list[0] == '[ffmpeg]': + # youtube-dl uses [ffmpeg], yt-dlp uses [Merger] + elif stdout_list[0] == '[ffmpeg]' or stdout_list[0] == '[Merger]': # Using FFmpeg, not the the native HLS extractor # A successful video download is announced in one of several ways. diff --git a/tartube/ffmpeg_tartube.py b/tartube/ffmpeg_tartube.py index 009071d..4360c47 100644 --- a/tartube/ffmpeg_tartube.py +++ b/tartube/ffmpeg_tartube.py @@ -531,6 +531,13 @@ class FFmpegOptionsManager(object): itself: 'ultrafast', 'superfast', 'veryfast', 'faster', 'fast', 'medium', 'slow', 'slower', 'veryslow' + gpu_encoding (str): Optimisations for various GPUs. One of the values + 'libx264', 'libx265', 'h264_amf', 'hevc_amf', 'h264_nvenc', + 'hevc_nvenc' + + hw_accel (str): Hardware acceleration mode: 'none', 'auto', 'vdpau', + 'dxva2', 'vaapi', 'qsv' + palette_mode (str): Ignored unless 'output_mode' is 'gif'. Values are 'faster' or 'better' @@ -654,6 +661,11 @@ class FFmpegOptionsManager(object): # 'ultrafast', 'superfast', 'veryfast', 'faster', 'fast', 'medium', # 'slow', 'slower', 'veryslow' 'patience_preset': 'medium', + # 'libx264', 'libx265', 'h264_amf', 'hevc_amf', 'h264_nvenc', + # 'hevc_nvenc' + 'gpu_encoding': 'libx264', + # 'none', 'auto', 'vdpau', 'dxva2', 'vaapi', 'qsv' + 'hw_accel': 'none', # SETTINGS TAB ('output_mode' = gif) 'palette_mode': 'faster', # 'faster', 'better' # OPTIMISATIONS TAB ('output_mode' = h264) @@ -904,11 +916,15 @@ class FFmpegOptionsManager(object): # In the original code, this was marked: # Only necessary if the output filename does not end with .mp4 opt_list.append('-c:v') - opt_list.append('libx264') + opt_list.append(options_dict['gpu_encoding']) opt_list.append('-preset') opt_list.append(options_dict['patience_preset']) + if options_dict['hw_accel'] != 'none': + opt_list.append('-hwaccel') + opt_list.append(options_dict['hw_accel']) + if options_dict['tuning_film_flag']: tuning_list.append('film') if options_dict['tuning_animation_flag']: diff --git a/tartube/mainapp.py b/tartube/mainapp.py index 0c4c3cd..1f24445 100644 --- a/tartube/mainapp.py +++ b/tartube/mainapp.py @@ -839,10 +839,9 @@ class TartubeApp(Gtk.Application): # Descriptions of various forks, used in the preference window and also # in the wizard window self.ytdl_fork_descrip_dict = { - 'youtube-dlc': \ + 'yt-dlp': \ 'A popular fork of the original youtube-dl, created by' \ - + ' Tom-Oliver Heidel in 2020. Officially supported by' \ - + ' Tartube.', + + ' pukkandan in 2020. Officially supported by Tartube.', 'youtube-dl': \ 'This is the original downloader, created by Ricardo Garcia' \ + ' Gonzalez in 2006. Officially supported by Tartube.', @@ -5814,6 +5813,28 @@ class TartubeApp(Gtk.Application): False, # Not temporary ) + if version < 2003107: # v2.3.107 + + # This version adds new settings to + # ffmpeg_tartube.FFmpegOptionsManager + for options_obj in self.ffmpeg_reg_dict.values(): + options_obj.options_dict['gpu_encoding'] = 'libx264' + options_obj.options_dict['hw_accel'] = 'none' + + if version < 2003108: # v2.3.108 + + # Apply fix to youtube-dl update IVs, caused by an issue in + # self.auto_detect_paths(), now fixed (Git #256) + if os.name != 'nt' and __main__.__pkg_strict_install_flag__: + + self.ytdl_update_dict = { + 'ytdl_update_disabled': [], + } + self.ytdl_update_list = [ + 'ytdl_update_disabled', + ] + self.ytdl_update_current = 'ytdl_update_disabled' + def save_db(self): @@ -7192,12 +7213,14 @@ class TartubeApp(Gtk.Application): else: self.ytdl_path = self.ytdl_bin - if self.ytdl_path == self.ytdl_path_default: - self.ytdl_update_current = 'ytdl_update_default_path' - elif self.ytdl_path == self.ytdl_path_pypi: - self.ytdl_update_current = 'ytdl_update_pip3_recommend' - else: - self.ytdl_update_current = 'ytdl_update_local_path' + if not __main__.__pkg_strict_install_flag__: + + if self.ytdl_path == self.ytdl_path_default: + self.ytdl_update_current = 'ytdl_update_default_path' + elif self.ytdl_path == self.ytdl_path_pypi: + self.ytdl_update_current = 'ytdl_update_pip3_recommend' + else: + self.ytdl_update_current = 'ytdl_update_local_path' def auto_delete_old_videos(self): @@ -10773,7 +10796,16 @@ class TartubeApp(Gtk.Application): video_obj.set_duration(json_dict['duration']) if 'webpage_url' in json_dict: - video_obj.set_source(json_dict['webpage_url']) + # !!! DEBUG: yt-dlp Git #119: filter out the extraneous + # characters at the end of the URL, if present +# video_obj.set_source(json_dict['webpage_url']) + video_obj.set_source( + re.sub( + r'\&has_verified\=.*\&bpctr\=.*', + '', + json_dict['webpage_url'], + ) + ) if 'description' in json_dict: video_obj.set_video_descrip( @@ -11931,6 +11963,10 @@ class TartubeApp(Gtk.Application): if DEBUG_FUNC_FLAG: utils.debug_time('app 11305 delete_video_files') + # Sanity check + if video_obj.file_name is None: + return + # There might be thousands of files in the directory, so using # os.walk() or something like that might be too expensive # Also, post-processing might create various artefacts, all of which diff --git a/tartube/options.py b/tartube/options.py index c677224..0aa8ec1 100644 --- a/tartube/options.py +++ b/tartube/options.py @@ -1036,16 +1036,6 @@ class OptionsParser(object): options_list.append(option_holder_obj.switch) options_list.append('"' + utils.to_string(value) + '"') - elif option_holder_obj.name == 'subs_lang_list': - # Convert the list to a comma-separated string, that the - # 'subs_lang' option can use - lang_list = copy_dict[option_holder_obj.name] - if lang_list: - - comma = ',' - options_list.append('--sub-lang') - options_list.append(comma.join(lang_list)) - elif option_holder_obj.name == 'cookies_path': cookies_path = copy_dict[option_holder_obj.name] options_list.append('--cookies') @@ -1090,6 +1080,15 @@ class OptionsParser(object): options_list.append('--reject-title') options_list.append(item) + # Parse the 'subs_lang_list' option + if copy_dict['write_subs'] \ + and not copy_dict['write_auto_subs'] \ + and not copy_dict['write_all_subs'] \ + and copy_dict['subs_lang_list']: + + options_list.append('--sub-lang') + options_list.append(','.join(copy_dict['subs_lang_list'])) + # Parsing complete return options_list diff --git a/tartube/po/messages.pot b/tartube/po/messages.pot index 0978886..6a5acae 100644 --- a/tartube/po/messages.pot +++ b/tartube/po/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 16:51+0000\n" +"POT-Creation-Date: 2021-02-28 10:41+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -37,7 +37,7 @@ msgstr "" msgid "Enormous" msgstr "" -#: .././mainapp.py:945 +#: .././mainapp.py:944 msgid "" "Failed to convert a thumbnail from .webp to .jpg. No more conversions will " "be attempted until you install FFmpeg on your system, or (if FFmpeg is " @@ -46,651 +46,651 @@ msgid "" "conversions" msgstr "" -#: .././mainapp.py:2665 +#: .././mainapp.py:2664 msgid "" "Tartube can't create the folder in which its configuration file is saved" msgstr "" #. Load/save has been disabled. Show the error message in a dialogue #. window, then shut down -#: .././mainapp.py:2712 +#: .././mainapp.py:2711 msgid "Tartube failed to start because:" msgstr "" -#: .././mainapp.py:2720 +#: .././mainapp.py:2719 msgid "If you don't know how to resolve this error, please contact the authors" msgstr "" -#: .././mainapp.py:2948 +#: .././mainapp.py:2947 msgid "Because of an error, file load/save has been disabled" msgstr "" -#: .././mainapp.py:2957 +#: .././mainapp.py:2956 msgid "Because of the error, file load/save has been disabled" msgstr "" -#: .././mainapp.py:3041 +#: .././mainapp.py:3040 msgid "There is a download operation in progress." msgstr "" -#: .././mainapp.py:3043 +#: .././mainapp.py:3042 msgid "There is an update operation in progress." msgstr "" -#: .././mainapp.py:3045 +#: .././mainapp.py:3044 msgid "There is a refresh operation in progress." msgstr "" -#: .././mainapp.py:3047 +#: .././mainapp.py:3046 msgid "There is an info operation in progress." msgstr "" -#: .././mainapp.py:3049 +#: .././mainapp.py:3048 msgid "There is a tidy operation in progress." msgstr "" -#: .././mainapp.py:3051 +#: .././mainapp.py:3050 msgid "There is a process operation in progress." msgstr "" -#: .././mainapp.py:3056 +#: .././mainapp.py:3055 msgid "Are you sure you want to quit Tartube?" msgstr "" -#: .././mainapp.py:3261 +#: .././mainapp.py:3260 msgid "Failed to load the Tartube config file (failed sanity check)" msgstr "" -#: .././mainapp.py:3284 +#: .././mainapp.py:3283 msgid "Failed to load the Tartube config file (file is locked)" msgstr "" -#: .././mainapp.py:3314 +#: .././mainapp.py:3313 msgid "Failed to load the Tartube config file (JSON load failure)" msgstr "" -#: .././mainapp.py:3332 +#: .././mainapp.py:3331 msgid "Failed to load the Tartube config file (file is invalid)" msgstr "" -#: .././mainapp.py:3350 +#: .././mainapp.py:3349 msgid "" "Failed to load the Tartube config file (file cannot be read by this version)" msgstr "" -#: .././mainapp.py:3365 +#: .././mainapp.py:3364 msgid "Failed to load the Tartube config file (missing file type)" msgstr "" -#: .././mainapp.py:4222 +#: .././mainapp.py:4221 msgid "Failed to save the Tartube config file (failed sanity check)" msgstr "" -#: .././mainapp.py:4542 +#: .././mainapp.py:4541 msgid "Failed to save the Tartube config file (file is locked)" msgstr "" -#: .././mainapp.py:4544 .././mainapp.py:4584 .././mainapp.py:5920 -#: .././mainapp.py:5976 .././mainapp.py:5982 +#: .././mainapp.py:4543 .././mainapp.py:4583 .././mainapp.py:5941 +#: .././mainapp.py:5997 .././mainapp.py:6003 msgid "File load/save has been disabled" msgstr "" -#: .././mainapp.py:4563 +#: .././mainapp.py:4562 msgid "Failed to save the Tartube config file (file already in use)" msgstr "" -#: .././mainapp.py:4583 +#: .././mainapp.py:4582 msgid "Failed to save the Tartube config file" msgstr "" -#: .././mainapp.py:4695 .././mainapp.py:4711 .././mainapp.py:4741 +#: .././mainapp.py:4694 .././mainapp.py:4710 .././mainapp.py:4740 msgid "Failed to load the Tartube database file" msgstr "" -#: .././mainapp.py:4756 +#: .././mainapp.py:4755 msgid "The Tartube database file is invalid" msgstr "" -#: .././mainapp.py:4772 +#: .././mainapp.py:4771 msgid "Database file can't be read by this version of Tartube" msgstr "" -#: .././mainapp.py:5117 +#: .././mainapp.py:5116 msgid "Tartube is applying an essential database update" msgstr "" -#: .././mainapp.py:5119 +#: .././mainapp.py:5118 msgid "This might take a few minutes, so please be patient" msgstr "" -#: .././mainapp.py:5914 .././mainapp.py:5972 .././mainapp.py:5981 +#: .././mainapp.py:5935 .././mainapp.py:5993 .././mainapp.py:6002 msgid "Failed to save the Tartube database file" msgstr "" -#: .././mainapp.py:5917 +#: .././mainapp.py:5938 msgid "(Could not make a backup copy of the existing file)" msgstr "" -#: .././mainapp.py:5953 +#: .././mainapp.py:5974 msgid "Failed to save the Tartube database file (file already in use)" msgstr "" -#: .././mainapp.py:5974 +#: .././mainapp.py:5995 msgid "A backup of the previous file can be found at:" msgstr "" -#: .././mainapp.py:6155 .././mainapp.py:6165 +#: .././mainapp.py:6176 .././mainapp.py:6186 msgid "Database file created" msgstr "" -#: .././mainapp.py:6559 +#: .././mainapp.py:6580 msgid "Tartube's database can't be checked while an operation is in progress" msgstr "" -#: .././mainapp.py:6795 +#: .././mainapp.py:6816 msgid "Database check complete, no inconsistencies found" msgstr "" -#: .././mainapp.py:6827 +#: .././mainapp.py:6848 msgid "Database check complete, problems found:" msgstr "" -#: .././mainapp.py:6830 +#: .././mainapp.py:6851 msgid "" "Do you want to repair these problems? (The database will be fixed, but no " "files will be deleted)" msgstr "" -#: .././mainapp.py:7003 +#: .././mainapp.py:7024 msgid "Database inconsistencies repaired" msgstr "" -#: .././mainapp.py:7895 .././config.py:16026 +#: .././mainapp.py:7918 .././config.py:16057 msgid "Please select Tartube's data folder" msgstr "" -#: .././mainapp.py:8258 +#: .././mainapp.py:8281 msgid "" "A download operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:8282 .././mainapp.py:8307 +#: .././mainapp.py:8305 .././mainapp.py:8330 #, python-brace-format msgid "You only have {0} / {1} Mb remaining on your device" msgstr "" -#: .././mainapp.py:8310 .././mainapp.py:13970 .././mainapp.py:14086 -#: .././mainapp.py:14268 .././mainwin.py:17484 +#: .././mainapp.py:8333 .././mainapp.py:14006 .././mainapp.py:14122 +#: .././mainapp.py:14304 .././mainwin.py:17484 msgid "Are you sure you want to continue?" msgstr "" -#: .././mainapp.py:8397 +#: .././mainapp.py:8420 msgid "There is nothing to check!" msgstr "" -#: .././mainapp.py:8399 +#: .././mainapp.py:8422 msgid "There is nothing to download!" msgstr "" -#: .././mainapp.py:8642 +#: .././mainapp.py:8665 msgid "Download operation complete" msgstr "" -#: .././mainapp.py:8644 +#: .././mainapp.py:8667 msgid "Download operation halted" msgstr "" -#: .././mainapp.py:8648 +#: .././mainapp.py:8671 msgid "Videos downloaded:" msgstr "" -#: .././mainapp.py:8649 +#: .././mainapp.py:8672 msgid "Videos checked:" msgstr "" -#: .././mainapp.py:8652 .././mainapp.py:9253 .././mainapp.py:9747 -#: .././mainapp.py:10147 +#: .././mainapp.py:8675 .././mainapp.py:9276 .././mainapp.py:9770 +#: .././mainapp.py:10170 msgid "Time taken:" msgstr "" -#: .././mainapp.py:8757 +#: .././mainapp.py:8780 msgid "" "An update operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:8943 +#: .././mainapp.py:8966 msgid "Installation failed" msgstr "" -#: .././mainapp.py:8945 +#: .././mainapp.py:8968 msgid "Installation complete" msgstr "" -#: .././mainapp.py:8949 +#: .././mainapp.py:8972 msgid "Update operation failed" msgstr "" -#: .././mainapp.py:8951 +#: .././mainapp.py:8974 msgid "Update operation halted" msgstr "" -#: .././mainapp.py:8953 +#: .././mainapp.py:8976 msgid "Update operation complete" msgstr "" -#: .././mainapp.py:8955 +#: .././mainapp.py:8978 msgid "version:" msgstr "" -#: .././mainapp.py:8959 +#: .././mainapp.py:8982 msgid "(unknown)" msgstr "" -#: .././mainapp.py:9046 +#: .././mainapp.py:9069 msgid "" "A refresh operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:9059 +#: .././mainapp.py:9082 msgid "" "During a refresh operation, Tartube analyses its data folder, looking for " "videos that haven't yet been added to its database" msgstr "" -#: .././mainapp.py:9063 +#: .././mainapp.py:9086 msgid "" "You only need to perform a refresh operation if you have manually copied " "videos into Tartube's data folder" msgstr "" -#: .././mainapp.py:9070 +#: .././mainapp.py:9093 msgid "" "Before starting a refresh operation, you should click the 'Check all' button " "in the main window" msgstr "" -#: .././mainapp.py:9077 +#: .././mainapp.py:9100 msgid "" "Before starting a refresh operation, you should right-click the channel and " "select 'Check channel'" msgstr "" -#: .././mainapp.py:9084 +#: .././mainapp.py:9107 msgid "" "Before starting a refresh operation, you should right-click the playlist and " "select 'Check playlist'" msgstr "" -#: .././mainapp.py:9091 +#: .././mainapp.py:9114 msgid "" "Before starting a refresh operation, you should right-click the folder and " "select 'Check folder'" msgstr "" -#: .././mainapp.py:9096 +#: .././mainapp.py:9119 msgid "Are you sure you want to proceed with the refresh operation?" msgstr "" -#: .././mainapp.py:9248 +#: .././mainapp.py:9271 msgid "Refresh operation complete" msgstr "" -#: .././mainapp.py:9250 +#: .././mainapp.py:9273 msgid "Refresh operation halted" msgstr "" -#: .././mainapp.py:9355 +#: .././mainapp.py:9378 msgid "" "An info operation cannot start if one or more configuration windows are " "still open" msgstr "" -#: .././mainapp.py:9471 +#: .././mainapp.py:9494 msgid "Operation failed" msgstr "" -#: .././mainapp.py:9473 .././downloads.py:400 +#: .././mainapp.py:9496 .././downloads.py:400 msgid "Operation complete" msgstr "" -#: .././mainapp.py:9475 +#: .././mainapp.py:9498 msgid "Click the Output Tab to see the results" msgstr "" -#: .././mainapp.py:9488 +#: .././mainapp.py:9511 msgid "A new release is available!" msgstr "" -#: .././mainapp.py:9490 +#: .././mainapp.py:9513 msgid "Your installation is up to date!" msgstr "" -#: .././mainapp.py:9492 +#: .././mainapp.py:9515 msgid "Installed version:" msgstr "" -#: .././mainapp.py:9497 +#: .././mainapp.py:9520 msgid "Stable release:" msgstr "" -#: .././mainapp.py:9502 +#: .././mainapp.py:9525 msgid "Stable release: not found" msgstr "" -#: .././mainapp.py:9505 +#: .././mainapp.py:9528 msgid "Development release:" msgstr "" -#: .././mainapp.py:9507 +#: .././mainapp.py:9530 msgid "Development release: not found" msgstr "" -#: .././mainapp.py:9614 +#: .././mainapp.py:9637 msgid "" "A tidy operation cannot start if one or more configuration windows are still " "open" msgstr "" -#: .././mainapp.py:9742 +#: .././mainapp.py:9765 msgid "Tidy operation complete" msgstr "" -#: .././mainapp.py:9744 +#: .././mainapp.py:9767 msgid "Tidy operation halted" msgstr "" -#: .././mainapp.py:9911 .././mainwin.py:18169 +#: .././mainapp.py:9934 .././mainwin.py:18169 msgid "Livestream has started" msgstr "" -#: .././mainapp.py:10136 +#: .././mainapp.py:10159 msgid "Process operation complete" msgstr "" -#: .././mainapp.py:10138 +#: .././mainapp.py:10161 msgid "Process operation halted" msgstr "" -#: .././mainapp.py:10142 +#: .././mainapp.py:10165 msgid "Files processed:" msgstr "" -#: .././mainapp.py:10143 +#: .././mainapp.py:10166 msgid "Errors:" msgstr "" -#: .././mainapp.py:11403 .././mainapp.py:11578 +#: .././mainapp.py:11435 .././mainapp.py:11610 msgid "Cannot move anything to:" msgstr "" -#: .././mainapp.py:11405 .././mainapp.py:11580 +#: .././mainapp.py:11437 .././mainapp.py:11612 msgid "" "because a file or folder with the same name already exists (although " "Tartube's database doesn't know anything about it)" msgstr "" -#: .././mainapp.py:11409 +#: .././mainapp.py:11441 msgid "" "You probably created that file/folder accidentally, in which case you should " "delete it manually before trying again" msgstr "" -#: .././mainapp.py:11423 .././mainapp.py:11598 +#: .././mainapp.py:11455 .././mainapp.py:11630 msgid "Are you sure you want to move this channel:" msgstr "" -#: .././mainapp.py:11425 .././mainapp.py:11600 +#: .././mainapp.py:11457 .././mainapp.py:11632 msgid "Are you sure you want to move this playlist:" msgstr "" -#: .././mainapp.py:11427 .././mainapp.py:11602 +#: .././mainapp.py:11459 .././mainapp.py:11634 msgid "Are you sure you want to move this folder:" msgstr "" -#: .././mainapp.py:11432 +#: .././mainapp.py:11464 msgid "" "This procedure will move all downloaded files to the top level of Tartube's " "data folder" msgstr "" -#: .././mainapp.py:11532 +#: .././mainapp.py:11564 msgid "Channels, playlists and folders can only be dragged into a folder" msgstr "" -#: .././mainapp.py:11545 +#: .././mainapp.py:11577 #, python-brace-format msgid "The fixed folder '{0}' cannot be moved (but it can still be hidden)" msgstr "" -#: .././mainapp.py:11558 +#: .././mainapp.py:11590 #, python-brace-format msgid "The folder '{0}' can only contain videos" msgstr "" -#: .././mainapp.py:11585 +#: .././mainapp.py:11617 msgid "" "You probably created that file/folder accidentally, in which case, you " "should delete it manually before trying again" msgstr "" -#: .././mainapp.py:11604 +#: .././mainapp.py:11636 msgid "into this folder:" msgstr "" -#: .././mainapp.py:11608 +#: .././mainapp.py:11640 msgid "This procedure will move all downloaded files to the new location" msgstr "" -#: .././mainapp.py:11614 +#: .././mainapp.py:11646 msgid "" "WARNING: The destination folder is marked as temporary, so everything inside " "it will be DELETED when Tartube restarts!" msgstr "" -#: .././mainapp.py:12078 +#: .././mainapp.py:12114 msgid "" "Are you SURE you want to delete files? This procedure cannot be reversed!" msgstr "" -#: .././mainapp.py:13954 .././mainapp.py:14070 .././mainapp.py:14252 +#: .././mainapp.py:13990 .././mainapp.py:14106 .././mainapp.py:14288 #, python-brace-format msgid "The channel contains {0} item(s), so this action may take a while" msgstr "" -#: .././mainapp.py:13960 .././mainapp.py:14076 .././mainapp.py:14258 +#: .././mainapp.py:13996 .././mainapp.py:14112 .././mainapp.py:14294 #, python-brace-format msgid "The playlist contains {0} item(s), so this action may take a while" msgstr "" -#: .././mainapp.py:13966 .././mainapp.py:14082 .././mainapp.py:14264 +#: .././mainapp.py:14002 .././mainapp.py:14118 .././mainapp.py:14300 #, python-brace-format msgid "The folder contains {0} item(s), so this action may take a while" msgstr "" -#: .././mainapp.py:14332 .././mainapp.py:18504 .././mainapp.py:18636 -#: .././mainapp.py:18767 +#: .././mainapp.py:14368 .././mainapp.py:18540 .././mainapp.py:18672 +#: .././mainapp.py:18803 #, python-brace-format msgid "The name '{0}' is not allowed" msgstr "" -#: .././mainapp.py:14341 +#: .././mainapp.py:14377 #, python-brace-format msgid "The name '{0}' is already in use" msgstr "" -#: .././mainapp.py:14354 +#: .././mainapp.py:14390 #, python-brace-format msgid "Failed to rename '{0}'" msgstr "" -#: .././mainapp.py:14701 +#: .././mainapp.py:14737 msgid "Select where to save the database export" msgstr "" -#: .././mainapp.py:14822 +#: .././mainapp.py:14858 msgid "There is nothing to export!" msgstr "" -#: .././mainapp.py:14862 .././mainapp.py:14928 +#: .././mainapp.py:14898 .././mainapp.py:14964 msgid "Failed to save the database export file:" msgstr "" -#: .././mainapp.py:14936 +#: .././mainapp.py:14972 msgid "Database export file saved to:" msgstr "" -#: .././mainapp.py:14973 +#: .././mainapp.py:15009 msgid "Select the database export" msgstr "" -#: .././mainapp.py:14994 .././mainapp.py:15008 +#: .././mainapp.py:15030 .././mainapp.py:15044 msgid "Failed to load the database export file" msgstr "" -#: .././mainapp.py:15025 +#: .././mainapp.py:15061 msgid "The database export file is invalid" msgstr "" -#: .././mainapp.py:15036 +#: .././mainapp.py:15072 msgid "The database export file is invalid (or empty)" msgstr "" -#: .././mainapp.py:15080 +#: .././mainapp.py:15116 msgid "Nothing was imported from the database export file" msgstr "" #. Show a confirmation -#: .././mainapp.py:15094 +#: .././mainapp.py:15130 msgid "Imported" msgstr "" -#: .././mainapp.py:15095 .././mainwin.py:1287 .././config.py:888 -#: .././config.py:9274 .././config.py:11492 +#: .././mainapp.py:15131 .././mainwin.py:1287 .././config.py:888 +#: .././config.py:9305 .././config.py:11523 msgid "Videos" msgstr "" -#: .././mainapp.py:15096 .././config.py:9307 .././config.py:11525 +#: .././mainapp.py:15132 .././config.py:9338 .././config.py:11556 msgid "Channels" msgstr "" -#: .././mainapp.py:15097 .././config.py:9318 .././config.py:11536 +#: .././mainapp.py:15133 .././config.py:9349 .././config.py:11567 msgid "Playlists" msgstr "" -#: .././mainapp.py:15098 +#: .././mainapp.py:15134 msgid "Folders" msgstr "" -#: .././mainapp.py:15482 +#: .././mainapp.py:15518 msgid "" "The video file is missing from Tartube's data folder (try downloading the " "video again!)" msgstr "" -#: .././mainapp.py:16007 .././mainapp.py:16389 +#: .././mainapp.py:16043 .././mainapp.py:16425 msgid "Select where to save the options export" msgstr "" -#: .././mainapp.py:16055 .././mainapp.py:16437 +#: .././mainapp.py:16091 .././mainapp.py:16473 msgid "Failed to save the options export file:" msgstr "" -#: .././mainapp.py:16063 +#: .././mainapp.py:16099 msgid "Download options exported to to:" msgstr "" -#: .././mainapp.py:16094 .././mainapp.py:16476 +#: .././mainapp.py:16130 .././mainapp.py:16512 msgid "Select the options export file" msgstr "" -#: .././mainapp.py:16113 .././mainapp.py:16495 +#: .././mainapp.py:16149 .././mainapp.py:16531 msgid "Failed to load the options export file" msgstr "" -#: .././mainapp.py:16130 .././mainapp.py:16512 +#: .././mainapp.py:16166 .././mainapp.py:16548 msgid "The options export file is invalid" msgstr "" -#: .././mainapp.py:16141 .././mainapp.py:16523 +#: .././mainapp.py:16177 .././mainapp.py:16559 msgid "The options export file is invalid (or empty)" msgstr "" -#: .././mainapp.py:16445 +#: .././mainapp.py:16481 msgid "FFmpeg options exported to to:" msgstr "" -#: .././mainapp.py:17419 +#: .././mainapp.py:17455 msgid "Please select a destination folder" msgstr "" #. Prompt for confirmation -#: .././mainapp.py:17491 +#: .././mainapp.py:17527 msgid "Are you sure you want to clear this list?" msgstr "" #. Prompt for confirmation -#: .././mainapp.py:17538 +#: .././mainapp.py:17574 msgid "Are you sure you want to clear downloaded videos?" msgstr "" -#: .././mainapp.py:17631 .././mainwin.py:14535 +#: .././mainapp.py:17667 .././mainwin.py:14535 msgid "Only checked/downloaded videos can be processed by FFmpeg" msgstr "" -#: .././mainapp.py:17748 +#: .././mainapp.py:17784 msgid "No video(s) have been downloaded" msgstr "" #. Prompt for confirmation -#: .././mainapp.py:17846 +#: .././mainapp.py:17882 msgid "Are you sure you want to remove the selected item(s)?" msgstr "" -#: .././mainapp.py:18495 +#: .././mainapp.py:18531 msgid "You must give the channel a name" msgstr "" -#: .././mainapp.py:18513 .././mainapp.py:18776 +#: .././mainapp.py:18549 .././mainapp.py:18812 msgid "You must enter a valid URL" msgstr "" -#: .././mainapp.py:18628 +#: .././mainapp.py:18664 msgid "You must give the folder a name" msgstr "" -#: .././mainapp.py:18758 +#: .././mainapp.py:18794 msgid "You must give the playlist a name" msgstr "" -#: .././mainapp.py:18913 +#: .././mainapp.py:18949 msgid "The following videos are duplicates:" msgstr "" -#: .././mainapp.py:18977 +#: .././mainapp.py:19013 msgid "There were no livestream alerts to cancel" msgstr "" -#: .././mainapp.py:18979 +#: .././mainapp.py:19015 msgid "Livestream alerts for 1 video were cancelled" msgstr "" -#: .././mainapp.py:18982 +#: .././mainapp.py:19018 #, python-brace-format msgid "Livestream alerts for {0} videos were cancelled" msgstr "" -#: .././mainapp.py:19352 +#: .././mainapp.py:19388 msgid "All Tartube data has been saved" msgstr "" -#: .././mainapp.py:19382 +#: .././mainapp.py:19418 msgid "Database saved" msgstr "" -#: .././mainapp.py:19637 .././mainwin.py:13487 +#: .././mainapp.py:19673 .././mainwin.py:13487 msgid "" "Files cannot be recovered, after being deleted. Are you sure you want to " "continue?" @@ -699,39 +699,39 @@ msgstr "" #. Because livestream operations run silently in the background, when #. the user goes to the trouble of clicking a menu item in the #. main window's menu, tell them why nothing is happening -#: .././mainapp.py:19677 +#: .././mainapp.py:19713 msgid "Cannot update existing livestreams because" msgstr "" -#: .././mainapp.py:19679 +#: .././mainapp.py:19715 msgid "there is another operation running" msgstr "" -#: .././mainapp.py:19681 +#: .././mainapp.py:19717 msgid "they are currently being updated" msgstr "" -#: .././mainapp.py:19683 +#: .././mainapp.py:19719 msgid "one or more configuration windows are open" msgstr "" -#: .././mainapp.py:19685 +#: .././mainapp.py:19721 msgid "there are no livestreams to update" msgstr "" -#: .././mainapp.py:19759 +#: .././mainapp.py:19795 msgid "There is already a channel with that name" msgstr "" -#: .././mainapp.py:19761 +#: .././mainapp.py:19797 msgid "There is already a playlist with that name" msgstr "" -#: .././mainapp.py:19763 +#: .././mainapp.py:19799 msgid "There is already a folder with that name" msgstr "" -#: .././mainapp.py:19766 +#: .././mainapp.py:19802 msgid "(so please choose a different name)" msgstr "" @@ -740,7 +740,7 @@ msgid "Tartube cannot start because it cannot find its icons folder" msgstr "" #. File column -#: .././mainwin.py:943 .././config.py:6357 +#: .././mainwin.py:943 .././config.py:6359 msgid "_File" msgstr "" @@ -783,7 +783,7 @@ msgid "_General download options..." msgstr "" #. Media column -#: .././mainwin.py:1009 .././config.py:9834 +#: .././mainwin.py:1009 .././config.py:9865 msgid "_Media" msgstr "" @@ -841,7 +841,7 @@ msgstr "" #. Operations column #. Add this tab... -#: .././mainwin.py:1115 .././config.py:12776 +#: .././mainwin.py:1115 .././config.py:12807 msgid "_Operations" msgstr "" @@ -884,7 +884,7 @@ msgid "_Stop current operation" msgstr "" #. Livestreams column -#: .././mainwin.py:1195 .././config.py:13480 +#: .././mainwin.py:1195 .././config.py:13511 msgid "_Livestreams" msgstr "" @@ -967,7 +967,7 @@ msgstr "" #: .././mainwin.py:1393 .././mainwin.py:19371 .././mainwin.py:19376 #: .././mainwin.py:19384 .././mainwin.py:19633 .././mainwin.py:19645 #: .././mainwin.py:20380 .././mainwin.py:21727 .././mainwin.py:21753 -#: .././config.py:12481 +#: .././config.py:12512 msgid "Download" msgstr "" @@ -984,7 +984,7 @@ msgstr "" msgid "Stop the current operation" msgstr "" -#: .././mainwin.py:1443 .././config.py:11068 +#: .././mainwin.py:1443 .././config.py:11099 msgid "Switch" msgstr "" @@ -1016,8 +1016,8 @@ msgstr "" msgid "Close Tartube" msgstr "" -#: .././mainwin.py:1532 .././config.py:7115 .././config.py:11292 -#: .././config.py:11890 +#: .././mainwin.py:1532 .././config.py:7146 .././config.py:11323 +#: .././config.py:11921 msgid "_Videos" msgstr "" @@ -1033,7 +1033,7 @@ msgstr "" msgid "_Output" msgstr "" -#: .././mainwin.py:1566 .././config.py:8450 .././config.py:8956 +#: .././mainwin.py:1566 .././config.py:8481 .././config.py:8987 msgid "_Errors / Warnings" msgstr "" @@ -1094,12 +1094,12 @@ msgstr "" msgid "Sort" msgstr "" -#: .././mainwin.py:1875 .././config.py:8235 +#: .././mainwin.py:1875 .././config.py:8266 msgid "Upload time" msgstr "" -#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7138 -#: .././config.py:12481 .././config.py:14402 .././config.py:14669 +#: .././mainwin.py:1876 .././mainwin.py:25120 .././config.py:7169 +#: .././config.py:12512 .././config.py:14433 .././config.py:14700 msgid "Name" msgstr "" @@ -1191,11 +1191,11 @@ msgstr "" msgid "ETA" msgstr "" -#: .././mainwin.py:2219 .././config.py:8821 +#: .././mainwin.py:2219 .././config.py:8852 msgid "New videos" msgstr "" -#: .././mainwin.py:2219 .././config.py:404 .././config.py:8191 +#: .././mainwin.py:2219 .././config.py:404 .././config.py:8222 msgid "Duration" msgstr "" @@ -1203,7 +1203,7 @@ msgstr "" msgid "Date" msgstr "" -#: .././mainwin.py:2220 .././config.py:8147 +#: .././mainwin.py:2220 .././config.py:8178 msgid "File" msgstr "" @@ -1273,7 +1273,7 @@ msgstr "" msgid "Format:" msgstr "" -#: .././mainwin.py:2591 .././config.py:14402 +#: .././mainwin.py:2591 .././config.py:14433 msgid "Default" msgstr "" @@ -1302,14 +1302,14 @@ msgid "Play video" msgstr "" #. (Signal connect appears below) -#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11105 -#: .././config.py:12546 +#: .././mainwin.py:2781 .././config.py:3584 .././config.py:11136 +#: .././config.py:12577 msgid "Move up" msgstr "" #. (Signal connect appears below) -#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11113 -#: .././config.py:12555 +#: .././mainwin.py:2802 .././config.py:3588 .././config.py:11144 +#: .././config.py:12586 msgid "Move down" msgstr "" @@ -1345,7 +1345,7 @@ msgstr "" msgid "Maximum page size" msgstr "" -#: .././mainwin.py:3017 .././config.py:12481 +#: .././mainwin.py:3017 .././config.py:12512 msgid "Time" msgstr "" @@ -1373,7 +1373,7 @@ msgstr "" msgid "Show server warnings" msgstr "" -#: .././mainwin.py:3113 .././config.py:9936 +#: .././mainwin.py:3113 .././config.py:9967 msgid "Clear list" msgstr "" @@ -1726,7 +1726,7 @@ msgstr "" msgid "Not a _livestream" msgstr "" -#: .././mainwin.py:5295 .././config.py:8310 +#: .././mainwin.py:5295 .././config.py:8341 msgid "_Livestream" msgstr "" @@ -2392,8 +2392,8 @@ msgstr "" #. this function returns. Workaround is to make the label unclickable, #. then use a Glib timer to restore it (after some small fraction of a #. second) -#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9296 -#: .././config.py:11514 +#: .././mainwin.py:19485 .././mainwin.py:20612 .././config.py:9327 +#: .././config.py:11545 msgid "Other" msgstr "" @@ -2732,7 +2732,7 @@ msgstr "" msgid "This playlist contains:" msgstr "" -#: .././mainwin.py:24726 .././config.py:9269 +#: .././mainwin.py:24726 .././config.py:9300 msgid "This folder contains:" msgstr "" @@ -2886,7 +2886,7 @@ msgstr "" msgid "Choose which items to import" msgstr "" -#: .././mainwin.py:25104 .././config.py:14454 .././config.py:14719 +#: .././mainwin.py:25104 .././config.py:14485 .././config.py:14750 msgid "Import" msgstr "" @@ -2950,7 +2950,7 @@ msgstr "" #. 'OK' button #: .././mainwin.py:25521 .././config.py:1035 .././config.py:2242 -#: .././config.py:7694 .././config.py:7828 +#: .././config.py:7725 .././config.py:7859 msgid "OK" msgstr "" @@ -3134,7 +3134,7 @@ msgstr "" msgid "Copy to clipboard" msgstr "" -#: .././mainwin.py:26846 .././config.py:13749 +#: .././mainwin.py:26846 .././config.py:13780 msgid "Test" msgstr "" @@ -3228,7 +3228,7 @@ msgstr "" msgid "Uploads" msgstr "" -#: .././config.py:403 .././config.py:8214 +#: .././config.py:403 .././config.py:8245 msgid "File size" msgstr "" @@ -3306,8 +3306,8 @@ msgstr "" #. 'Reset' button #. (Signal connect appears below) -#: .././config.py:1017 .././config.py:3306 .././config.py:14214 -#: .././config.py:14255 .././config.py:14325 +#: .././config.py:1017 .././config.py:3306 .././config.py:14245 +#: .././config.py:14286 .././config.py:14356 msgid "Reset" msgstr "" @@ -3324,7 +3324,7 @@ msgstr "" msgid "Apply changes without closing the window" msgstr "" -#: .././config.py:1038 .././config.py:7697 .././config.py:7831 +#: .././config.py:1038 .././config.py:7728 .././config.py:7862 msgid "Apply changes" msgstr "" @@ -3381,7 +3381,7 @@ msgstr "" msgid "Close this window" msgstr "" -#: .././config.py:2869 .././config.py:6260 +#: .././config.py:2869 .././config.py:6262 msgid "_Name" msgstr "" @@ -3426,7 +3426,7 @@ msgid "Completely reset all download options to their default values" msgstr "" #. Add this tab... -#: .././config.py:3000 .././config.py:10878 +#: .././config.py:3000 .././config.py:10909 msgid "_Files" msgstr "" @@ -3450,7 +3450,7 @@ msgstr "" msgid "Add to template:" msgstr "" -#: .././config.py:3083 .././config.py:8018 +#: .././config.py:3083 .././config.py:8049 msgid "Video properties" msgstr "" @@ -3494,10 +3494,14 @@ msgstr "" msgid "Creator/uploader" msgstr "" -#: .././config.py:3098 .././config.py:3099 +#: .././config.py:3098 msgid "Full name of video uploader" msgstr "" +#: .././config.py:3099 +msgid "Uploader ID" +msgstr "" + #: .././config.py:3100 msgid "Nickname/ID of video uploader" msgstr "" @@ -3606,8 +3610,8 @@ msgstr "" msgid "Number of comments" msgstr "" -#: .././config.py:3170 .././config.py:9916 .././config.py:12528 -#: .././config.py:14445 .././config.py:14710 +#: .././config.py:3170 .././config.py:9947 .././config.py:12559 +#: .././config.py:14476 .././config.py:14741 msgid "Add" msgstr "" @@ -3648,8 +3652,8 @@ msgid "Path to the downloader's cookie jar file" msgstr "" #: .././config.py:3302 .././config.py:4927 .././config.py:4947 -#: .././config.py:4967 .././config.py:14111 .././config.py:14210 -#: .././config.py:14251 .././config.py:14321 +#: .././config.py:4967 .././config.py:14142 .././config.py:14241 +#: .././config.py:14282 .././config.py:14352 msgid "Set" msgstr "" @@ -3712,19 +3716,19 @@ msgid "Options during real (not simulated) downloads" msgstr "" #: .././config.py:3450 .././config.py:3481 -msgid "Keep the description file after Tartube shuts down" +msgid "Keep the description file after the download has finished" msgstr "" #: .././config.py:3456 .././config.py:3487 -msgid "Keep the metadata file after Tartube shuts down" +msgid "Keep the metadata file after the download has finished" msgstr "" #: .././config.py:3462 .././config.py:3493 -msgid "Keep the annotations file after Tartube shuts down" +msgid "Keep the annotations file after the download has finished" msgstr "" #: .././config.py:3468 .././config.py:3499 -msgid "Keep the thumbnail file after Tartube shuts down" +msgid "Keep the thumbnail file after the download has finished" msgstr "" #: .././config.py:3475 @@ -3815,7 +3819,7 @@ msgid "Do not download DASH-related data for YouTube videos" msgstr "" #. Add this tab... -#: .././config.py:3790 .././config.py:3809 .././config.py:13113 +#: .././config.py:3790 .././config.py:3809 .././config.py:13144 msgid "_Downloads" msgstr "" @@ -4247,8 +4251,8 @@ msgstr "" msgid "Arguments to pass to external downloader" msgstr "" -#: .././config.py:5168 .././config.py:5658 .././config.py:7355 -#: .././config.py:7603 +#: .././config.py:5168 .././config.py:5658 .././config.py:7386 +#: .././config.py:7634 msgid "This procedure cannot be reversed. Are you sure you want to continue?" msgstr "" @@ -4287,120 +4291,120 @@ msgid "FFmpeg options" msgstr "" #. Replace the 'OK' button with a 'Process files' button -#: .././config.py:6246 .././config.py:7776 +#: .././config.py:6248 .././config.py:7807 msgid "Process files" msgstr "" -#: .././config.py:6248 .././config.py:7778 +#: .././config.py:6250 .././config.py:7809 msgid "Process the files with FFmpeg" msgstr "" -#: .././config.py:6265 +#: .././config.py:6267 msgid "Name for these FFmpeg options" msgstr "" -#: .././config.py:6275 +#: .././config.py:6277 msgid "Extra command line options (e.g. --help)" msgstr "" -#: .././config.py:6286 +#: .././config.py:6288 msgid "System command, based on all FFmpeg options in this window:" msgstr "" -#: .././config.py:6317 +#: .././config.py:6319 msgid "Show fewer FFmpeg options" msgstr "" -#: .././config.py:6319 +#: .././config.py:6321 msgid "Show more FFmpeg options" msgstr "" -#: .././config.py:6329 +#: .././config.py:6331 msgid "Import current FFmpeg options into this window" msgstr "" -#: .././config.py:6344 +#: .././config.py:6346 msgid "Completely reset all FFmpeg options to their default values" msgstr "" -#: .././config.py:6360 +#: .././config.py:6362 msgid "Add to end of filename:" msgstr "" -#: .././config.py:6370 +#: .././config.py:6372 msgid "If regex matches filename:" msgstr "" -#: .././config.py:6384 +#: .././config.py:6386 msgid "...then apply substitution:" msgstr "" -#: .././config.py:6397 +#: .././config.py:6399 msgid "" "If the video/audio file is renamed, also rename the thumbnail (but not vice-" "versa)" msgstr "" -#: .././config.py:6408 +#: .././config.py:6410 msgid "Change file extension:" msgstr "" -#: .././config.py:6422 +#: .././config.py:6424 msgid "After changing the file extension, delete the original file" msgstr "" -#: .././config.py:6448 +#: .././config.py:6450 msgid "_Settings" msgstr "" -#: .././config.py:6455 +#: .././config.py:6457 msgid "Source file" msgstr "" -#: .././config.py:6462 +#: .././config.py:6464 msgid "Downloaded video/audio" msgstr "" -#: .././config.py:6471 +#: .././config.py:6473 msgid "with audio" msgstr "" -#: .././config.py:6484 +#: .././config.py:6486 msgid "Video thumbnail" msgstr "" -#: .././config.py:6503 +#: .././config.py:6505 msgid "Output file" msgstr "" -#: .././config.py:6630 +#: .././config.py:6632 msgid "Audio bitrate" msgstr "" -#: .././config.py:6644 +#: .././config.py:6646 msgid "How to set the quality" msgstr "" -#: .././config.py:6649 +#: .././config.py:6651 msgid "" "FFmpeg always encodes according to a Rate Factor that specifies the quality " "of the result." msgstr "" -#: .././config.py:6652 +#: .././config.py:6654 msgid "" "Instead of directly specifying the Rate Factor, an average bit rate can be " "specified. FFmpeg will then determine the optimal Rate Factor in a first " "pass." msgstr "" -#: .././config.py:6656 +#: .././config.py:6658 msgid "" "In fact the first pass is only used for determining the Rate Factor, no " "other data is carried over into the second pass." msgstr "" -#: .././config.py:6659 +#: .././config.py:6661 msgid "" "Specifying an average bitrate but running only one pass is possible, but not " "recommended. FFmpeg would then encode the beginning of the video with a " @@ -4408,1915 +4412,1923 @@ msgid "" "eventually reach the target bitrate." msgstr "" -#: .././config.py:6672 +#: .././config.py:6674 msgid "Manual rate factor" msgstr "" -#: .././config.py:6681 +#: .././config.py:6683 msgid "Determine from target bitrate (2-Pass)" msgstr "" -#: .././config.py:6691 +#: .././config.py:6693 msgid "Rate factor" msgstr "" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Lossless" msgstr "" -#: .././config.py:6703 +#: .././config.py:6705 msgid "Large file" msgstr "" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Bad quality" msgstr "" -#: .././config.py:6725 +#: .././config.py:6727 msgid "Small file" msgstr "" -#: .././config.py:6732 +#: .././config.py:6734 msgid "Name of dummy file" msgstr "" -#: .././config.py:6736 +#: .././config.py:6738 msgid "A dummy file is created during the first pass." msgstr "" -#: .././config.py:6740 +#: .././config.py:6742 msgid "Use the output file" msgstr "" -#: .././config.py:6741 +#: .././config.py:6743 msgid "Dummy" msgstr "" -#: .././config.py:6742 +#: .././config.py:6744 msgid "/dev/null (Linux)" msgstr "" -#: .././config.py:6743 +#: .././config.py:6745 msgid "NUL (MS Windows)" msgstr "" -#: .././config.py:6755 +#: .././config.py:6757 msgid "Patience preset" msgstr "" -#: .././config.py:6760 +#: .././config.py:6762 msgid "Ultra fast" msgstr "" -#: .././config.py:6761 +#: .././config.py:6763 msgid "Super fast" msgstr "" -#: .././config.py:6762 +#: .././config.py:6764 msgid "Very fast" msgstr "" -#: .././config.py:6763 .././config.py:6832 +#: .././config.py:6765 .././config.py:6863 msgid "Faster" msgstr "" -#: .././config.py:6764 +#: .././config.py:6766 msgid "Fast" msgstr "" -#: .././config.py:6765 -msgid "Medium (default)" -msgstr "" - -#: .././config.py:6766 -#, python-format -msgid "Slow (file about 5-10% smaller than medium)" -msgstr "" - #: .././config.py:6767 -#, python-format -msgid "Slower (file about 15% smaller than medium)" +msgid "Medium (default)" msgstr "" #: .././config.py:6768 #, python-format +msgid "Slow (file about 5-10% smaller than medium)" +msgstr "" + +#: .././config.py:6769 +#, python-format +msgid "Slower (file about 15% smaller than medium)" +msgstr "" + +#: .././config.py:6770 +#, python-format msgid "Very slow (file about 17% smaller than medium)" msgstr "" -#: .././config.py:6826 +#: .././config.py:6781 +msgid "GPU encoding" +msgstr "" + +#: .././config.py:6797 +msgid "Hardware acceleration" +msgstr "" + +#: .././config.py:6857 msgid "Palette:" msgstr "" -#: .././config.py:6833 +#: .././config.py:6864 msgid "Uses dithering to a standard palette provided by FFmpeg" msgstr "" -#: .././config.py:6834 +#: .././config.py:6865 msgid "Can cause dithering artefacts and slight banding" msgstr "" -#: .././config.py:6843 +#: .././config.py:6874 msgid "Better" msgstr "" -#: .././config.py:6844 +#: .././config.py:6875 msgid "Determines an optimized palette for the video" msgstr "" -#: .././config.py:6845 +#: .././config.py:6876 msgid "Uses two passes and a temporary file for the palette" msgstr "" -#: .././config.py:6898 +#: .././config.py:6929 msgid "" "This merges a video and audio file with the same name into a single video " "file,\n" "using the extension specified in the File tab" msgstr "" -#: .././config.py:6939 +#: .././config.py:6970 msgid "The thumbnail's format can be changed in the File tab" msgstr "" -#: .././config.py:6954 +#: .././config.py:6985 msgid "_Optimisations" msgstr "" -#: .././config.py:6960 +#: .././config.py:6991 msgid "" "Optimise for fast seeking (shorter keyframe interval, about 10% larger file)" msgstr "" -#: .././config.py:6968 +#: .././config.py:6999 msgid "Input video is a high-quality movie" msgstr "" -#: .././config.py:6974 +#: .././config.py:7005 msgid "Input video is an animated movie" msgstr "" -#: .././config.py:6980 +#: .././config.py:7011 msgid "Input video contains film grain" msgstr "" -#: .././config.py:6986 +#: .././config.py:7017 msgid "Input video is an image slideshow" msgstr "" -#: .././config.py:6992 +#: .././config.py:7023 msgid "Optimise for really weak CPU playback devices" msgstr "" -#: .././config.py:6999 +#: .././config.py:7030 msgid "Optimise for really old devices (requires rate factor above 0)" msgstr "" -#: .././config.py:7010 +#: .././config.py:7041 msgid "" "Move headers to beginning of file (so it can play while still downloading)" msgstr "" -#: .././config.py:7018 +#: .././config.py:7049 msgid "Fast encoding and low latency streaming" msgstr "" -#: .././config.py:7024 +#: .././config.py:7055 msgid "Limit bitrate (Mbit/s)" msgstr "" -#: .././config.py:7041 +#: .././config.py:7072 msgid "Assuming a receiving buffer (seconds)" msgstr "" -#: .././config.py:7119 +#: .././config.py:7150 msgid "List of videos to be processed" msgstr "" -#: .././config.py:7138 .././media.py:88 +#: .././config.py:7169 .././media.py:88 msgid "Video" msgstr "" -#: .././config.py:7138 +#: .././config.py:7169 msgid "Thumbnail" msgstr "" -#: .././config.py:7181 +#: .././config.py:7212 msgid "Remove video from list" msgstr "" -#: .././config.py:7647 +#: .././config.py:7678 msgid "" "Fewer FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" msgstr "" -#: .././config.py:7657 +#: .././config.py:7688 msgid "Show more FFmpeg options (when window re-opens)" msgstr "" -#: .././config.py:7674 +#: .././config.py:7705 msgid "" "More FFmpeg options will be visible when you click the 'Apply' or 'Reset' " "buttons (or when you close and then re-open the window)" msgstr "" -#: .././config.py:7684 +#: .././config.py:7715 msgid "Show fewer FFmpeg options (when window re-opens)" msgstr "" #. Add this tab... -#: .././config.py:8135 .././config.py:8752 .././config.py:9176 -#: .././config.py:9663 .././config.py:10464 +#: .././config.py:8166 .././config.py:8783 .././config.py:9207 +#: .././config.py:9694 .././config.py:10495 msgid "_General" msgstr "" -#: .././config.py:8138 .././config.py:8755 .././config.py:9179 -#: .././config.py:9668 +#: .././config.py:8169 .././config.py:8786 .././config.py:9210 +#: .././config.py:9699 msgid "General properties" msgstr "" -#: .././config.py:8164 +#: .././config.py:8195 msgid "Set the file (if this is the wrong one)" msgstr "" -#: .././config.py:8184 +#: .././config.py:8215 msgid "Always simulate download of this video" msgstr "" -#: .././config.py:8207 +#: .././config.py:8238 msgid "Video has been downloaded" msgstr "" -#: .././config.py:8228 +#: .././config.py:8259 msgid "Video is marked as unwatched" msgstr "" -#: .././config.py:8249 +#: .././config.py:8280 msgid "Video is archived" msgstr "" -#: .././config.py:8256 +#: .././config.py:8287 msgid "Video is bookmarked" msgstr "" -#: .././config.py:8263 +#: .././config.py:8294 msgid "Receive time" msgstr "" -#: .././config.py:8277 +#: .././config.py:8308 msgid "Video is favourite" msgstr "" -#: .././config.py:8284 +#: .././config.py:8315 msgid "Video is in waiting list" msgstr "" -#: .././config.py:8316 +#: .././config.py:8347 msgid "Livestream properties" msgstr "" -#: .././config.py:8321 +#: .././config.py:8352 msgid "Livestream status" msgstr "" -#: .././config.py:8332 +#: .././config.py:8363 msgid "Waiting to start" msgstr "" -#: .././config.py:8334 +#: .././config.py:8365 msgid "Stream has started" msgstr "" -#: .././config.py:8336 +#: .././config.py:8367 msgid "Not a livestream" msgstr "" -#: .././config.py:8339 +#: .././config.py:8370 msgid "Livestream message" msgstr "" -#: .././config.py:8354 +#: .././config.py:8385 msgid "Video is pre-recorded" msgstr "" -#: .././config.py:8361 +#: .././config.py:8392 msgid "Livestream actions" msgstr "" -#: .././config.py:8370 +#: .././config.py:8401 msgid "When the livestream starts, show a desktop notification" msgstr "" -#: .././config.py:8379 +#: .././config.py:8410 msgid "When the livestream starts, play an alarm" msgstr "" -#: .././config.py:8389 +#: .././config.py:8420 msgid "When the livestream starts, open it in the system's web browser" msgstr "" -#: .././config.py:8401 +#: .././config.py:8432 msgid "When the livestream starts, begin downloading it immediately" msgstr "" -#: .././config.py:8412 .././config.py:13782 +#: .././config.py:8443 .././config.py:13813 msgid "When a livestream stops, download it (overwriting any earlier file)" msgstr "" -#: .././config.py:8428 +#: .././config.py:8459 msgid "_Description" msgstr "" -#: .././config.py:8432 +#: .././config.py:8463 msgid "Video description" msgstr "" -#: .././config.py:8453 .././config.py:8959 +#: .././config.py:8484 .././config.py:8990 msgid "Errors / Warnings" msgstr "" -#: .././config.py:8459 +#: .././config.py:8490 msgid "Error messages produced the last time this video was checked/downloaded" msgstr "" -#: .././config.py:8474 +#: .././config.py:8505 msgid "" "Warning messages produced the last time this video was checked/downloaded" msgstr "" -#: .././config.py:8517 +#: .././config.py:8548 msgid "Select the correct video/audio file" msgstr "" -#: .././config.py:8543 +#: .././config.py:8574 msgid "" "The replacement video/audio file must be in the same channel, playlist or " "folder" msgstr "" -#: .././config.py:8561 +#: .././config.py:8592 msgid "You must select a valid video/audio file" msgstr "" -#: .././config.py:8629 +#: .././config.py:8660 msgid "Channel properties" msgstr "" -#: .././config.py:8632 +#: .././config.py:8663 msgid "Playlist properties" msgstr "" -#: .././config.py:8773 +#: .././config.py:8804 msgid "Always simulate download of videos in this channel" msgstr "" -#: .././config.py:8775 +#: .././config.py:8806 msgid "Always simulate download of videos in this playlist" msgstr "" -#: .././config.py:8785 +#: .././config.py:8816 msgid "Disable checking/downloading for this channel" msgstr "" -#: .././config.py:8787 +#: .././config.py:8818 msgid "Disable checking/downloading for this playlist" msgstr "" -#: .././config.py:8797 +#: .././config.py:8828 msgid "This channel is marked as a favourite" msgstr "" -#: .././config.py:8799 +#: .././config.py:8830 msgid "This playlist is marked as a favourite" msgstr "" -#: .././config.py:8809 +#: .././config.py:8840 msgid "Total videos" msgstr "" -#: .././config.py:8833 +#: .././config.py:8864 msgid "Favourite videos" msgstr "" -#: .././config.py:8845 +#: .././config.py:8876 msgid "Downloaded videos" msgstr "" -#: .././config.py:8867 .././config.py:9408 .././config.py:11646 +#: .././config.py:8898 .././config.py:9439 .././config.py:11677 msgid "_History" msgstr "" -#: .././config.py:8872 .././config.py:9413 .././config.py:11653 +#: .././config.py:8903 .././config.py:9444 .././config.py:11684 msgid "Download history" msgstr "" -#: .././config.py:8886 .././config.py:9427 .././config.py:11667 +#: .././config.py:8917 .././config.py:9458 .././config.py:11698 msgid "Draw" msgstr "" -#: .././config.py:8914 +#: .././config.py:8945 msgid "_RSS feed" msgstr "" -#: .././config.py:8917 +#: .././config.py:8948 msgid "RSS feed" msgstr "" -#: .././config.py:8923 +#: .././config.py:8954 msgid "" "If Tartube cannot detect the channel's RSS feed, you can enter the URL here" msgstr "" -#: .././config.py:8928 +#: .././config.py:8959 msgid "" "If Tartube cannot detect the playlist's RSS feed, you can enter the URL here" msgstr "" -#: .././config.py:8933 +#: .././config.py:8964 msgid "(The feed is used to detect livestreams on compatible websites)" msgstr "" -#: .././config.py:8965 +#: .././config.py:8996 msgid "" "Error messages produced the last time this channel was checked/downloaded" msgstr "" -#: .././config.py:8970 +#: .././config.py:9001 msgid "" "Error messages produced the last time this playlist was checked/downloaded" msgstr "" -#: .././config.py:8988 +#: .././config.py:9019 msgid "" "Warning messages produced the last time this channel was checked/downloaded" msgstr "" -#: .././config.py:8993 +#: .././config.py:9024 msgid "" "Warning messages produced the last time this playlist was checked/downloaded" msgstr "" -#: .././config.py:9059 +#: .././config.py:9090 msgid "Folder properties" msgstr "" -#: .././config.py:9196 +#: .././config.py:9227 msgid "Always simulate download of videos" msgstr "" -#: .././config.py:9203 +#: .././config.py:9234 msgid "Disable checking/downloading for this folder" msgstr "" -#: .././config.py:9210 +#: .././config.py:9241 msgid "This folder is marked as a favourite" msgstr "" -#: .././config.py:9217 +#: .././config.py:9248 msgid "This folder is hidden" msgstr "" -#: .././config.py:9224 +#: .././config.py:9255 msgid "This folder can't be deleted by the user" msgstr "" -#: .././config.py:9231 +#: .././config.py:9262 msgid "This is a system-controlled folder" msgstr "" -#: .././config.py:9238 +#: .././config.py:9269 msgid "Only videos can be added to this folder" msgstr "" -#: .././config.py:9245 +#: .././config.py:9276 msgid "All contents deleted when Tartube shuts down" msgstr "" -#: .././config.py:9259 .././config.py:11475 +#: .././config.py:9290 .././config.py:11506 msgid "_Statistics" msgstr "" -#: .././config.py:9264 .././config.py:11482 +#: .././config.py:9295 .././config.py:11513 msgid "Statistics" msgstr "" -#: .././config.py:9285 .././config.py:11503 +#: .././config.py:9316 .././config.py:11534 msgid "Downloaded" msgstr "" -#: .././config.py:9329 +#: .././config.py:9360 msgid "Sub-folders" msgstr "" -#: .././config.py:9351 +#: .././config.py:9382 msgid "Recalculate" msgstr "" -#: .././config.py:9522 +#: .././config.py:9553 msgid "Scheduled download" msgstr "" -#: .././config.py:9673 .././config.py:12515 +#: .././config.py:9704 .././config.py:12546 msgid "Scheduled download name" msgstr "" -#: .././config.py:9685 +#: .././config.py:9716 msgid "Download mode" msgstr "" -#: .././config.py:9690 +#: .././config.py:9721 msgid "Check channels, playlist and folders" msgstr "" -#: .././config.py:9691 +#: .././config.py:9722 msgid "Download channels, playlists and folders" msgstr "" -#: .././config.py:9692 +#: .././config.py:9723 msgid "Perform a custom download" msgstr "" -#: .././config.py:9703 .././config.py:12481 +#: .././config.py:9734 .././config.py:12512 msgid "Start mode" msgstr "" -#: .././config.py:9708 +#: .././config.py:9739 msgid "Perform this download at regular intervals" msgstr "" -#: .././config.py:9709 +#: .././config.py:9740 msgid "Perform this download when Tartube starts" msgstr "" -#: .././config.py:9710 +#: .././config.py:9741 msgid "Disable this scheduled download" msgstr "" -#: .././config.py:9722 +#: .././config.py:9753 msgid "Time between scheduled downloads" msgstr "" -#: .././config.py:9766 +#: .././config.py:9797 msgid "If another scheduled download is running:" msgstr "" -#: .././config.py:9773 +#: .././config.py:9804 msgid "Add channels, playlists and folders to the end of the queue" msgstr "" -#: .././config.py:9779 +#: .././config.py:9810 msgid "Add channels, playlists and folders to the beginning of the queue" msgstr "" -#: .././config.py:9786 +#: .././config.py:9817 msgid "Do nothing, just wait until the next scheduled download time" msgstr "" -#: .././config.py:9801 +#: .././config.py:9832 msgid "This scheduled download takes priority over others" msgstr "" -#: .././config.py:9804 +#: .././config.py:9835 msgid "Other scheduled downloads won't start until this one is finished" msgstr "" -#: .././config.py:9813 +#: .././config.py:9844 msgid "" "Ignore time-saving preferences, and check/download the whole channel/" "playlist/folder" msgstr "" -#: .././config.py:9821 +#: .././config.py:9852 msgid "Shut down Tartube when this scheduled download has finished" msgstr "" -#: .././config.py:9839 +#: .././config.py:9870 msgid "Media to download" msgstr "" -#: .././config.py:9845 +#: .././config.py:9876 msgid "Check/download everything" msgstr "" -#: .././config.py:9853 +#: .././config.py:9884 msgid "Only check/download the media below" msgstr "" -#: .././config.py:9867 +#: .././config.py:9898 msgid "" "Hint: you can drag and drop channels, playlists and your own folders here" msgstr "" -#: .././config.py:9926 +#: .././config.py:9957 msgid "Remove" msgstr "" -#: .././config.py:10230 +#: .././config.py:10261 msgid "System preferences" msgstr "" -#: .././config.py:10483 +#: .././config.py:10514 msgid "_Language" msgstr "" -#: .././config.py:10488 +#: .././config.py:10519 msgid "Language preferences" msgstr "" -#: .././config.py:10493 +#: .././config.py:10524 msgid "Language" msgstr "" -#: .././config.py:10529 +#: .././config.py:10560 msgid "_Stability" msgstr "" -#: .././config.py:10539 +#: .././config.py:10570 msgid "Gtk library" msgstr "" -#: .././config.py:10544 +#: .././config.py:10575 msgid "Current version of the system's Gtk library" msgstr "" -#: .././config.py:10559 +#: .././config.py:10590 msgid "Gtk stability" msgstr "" -#: .././config.py:10598 +#: .././config.py:10629 msgid "" "Tartube uses the Gtk graphics library. This library is notoriously " "unreliable and may even causes crashes." msgstr "" -#: .././config.py:10605 +#: .././config.py:10636 msgid "" "By default, some cosmetic features are disabled (for example, in the Videos " "tab, the list of videos is not updated until the end of a download " "operation)." msgstr "" -#: .././config.py:10613 +#: .././config.py:10644 msgid "" "If you think that your system Gtk has been fixed (or if you want to test Gtk " "stability), you can re-enable the cosmetic features." msgstr "" -#: .././config.py:10623 +#: .././config.py:10654 msgid "Disable some cosmetic features to prevent crashes and other issues" msgstr "" -#: .././config.py:10641 +#: .././config.py:10672 msgid "_Modules" msgstr "" -#: .././config.py:10646 +#: .././config.py:10677 msgid "Module availability" msgstr "" -#: .././config.py:10652 +#: .././config.py:10683 msgid "feedparser module is available (required for detecting livestreams)" msgstr "" -#: .././config.py:10661 +#: .././config.py:10692 msgid "matplotlib module is available (draws graphs)" msgstr "" -#: .././config.py:10669 +#: .././config.py:10700 msgid "moviepy module is available (finds the length of videos, if unknown)" msgstr "" -#: .././config.py:10679 +#: .././config.py:10710 msgid "playsound module is available (sound an alarm when a livestream starts)" msgstr "" -#: .././config.py:10689 +#: .././config.py:10720 msgid "" "XDG module is available (saves the config file in the standard location)" msgstr "" -#: .././config.py:10699 +#: .././config.py:10730 msgid "" "Notify module is available (shows desktop notifications; Linux/*BSD only)" msgstr "" -#: .././config.py:10709 +#: .././config.py:10740 msgid "Module preferences" msgstr "" -#: .././config.py:10715 +#: .././config.py:10746 msgid "" "Use 'moviepy' module to get a video's duration, if not known (may be slow)" msgstr "" -#: .././config.py:10727 +#: .././config.py:10758 msgid "Timeout applied when moviepy checks a video file" msgstr "" -#: .././config.py:10752 +#: .././config.py:10783 msgid "_Debugging" msgstr "" -#: .././config.py:10760 +#: .././config.py:10791 msgid "Debugging preferences" msgstr "" -#: .././config.py:10766 +#: .././config.py:10797 msgid "" "Debug messages are only visible in the terminal window (these settings are " "not saved)" msgstr "" -#: .././config.py:10773 +#: .././config.py:10804 msgid "Enable application debug messages (code in mainapp.py)" msgstr "" -#: .././config.py:10782 .././config.py:10802 +#: .././config.py:10813 .././config.py:10833 msgid "...but don't show timer debug messages" msgstr "" -#: .././config.py:10793 +#: .././config.py:10824 msgid "Enable main winddow debug messages (code in mainwin.py)" msgstr "" -#: .././config.py:10813 +#: .././config.py:10844 msgid "Enabled downloader debug messages (code in downloads.py)" msgstr "" -#: .././config.py:10856 +#: .././config.py:10887 msgid "" "Debugging messages are also visible if an empty file called debug.txt exists " "here:" msgstr "" -#: .././config.py:10901 +#: .././config.py:10932 msgid "_Device" msgstr "" -#: .././config.py:10906 +#: .././config.py:10937 msgid "Device preferences" msgstr "" -#: .././config.py:10911 +#: .././config.py:10942 msgid "Size of device (in Mb)" msgstr "" -#: .././config.py:10923 +#: .././config.py:10954 msgid "Free space on device (in Mb)" msgstr "" -#: .././config.py:10935 +#: .././config.py:10966 msgid "Warn user if disk space is less than" msgstr "" -#: .././config.py:10953 +#: .././config.py:10984 msgid "Halt downloads if disk space is less than" msgstr "" -#: .././config.py:10992 +#: .././config.py:11023 msgid "Configuration preferences" msgstr "" -#: .././config.py:10997 +#: .././config.py:11028 msgid "Tartube configuration file loaded from:" msgstr "" -#: .././config.py:11016 +#: .././config.py:11047 msgid "D_atabase" msgstr "" -#: .././config.py:11022 +#: .././config.py:11053 msgid "Database preferences" msgstr "" -#: .././config.py:11027 +#: .././config.py:11058 msgid "Tartube data folder" msgstr "" -#: .././config.py:11039 +#: .././config.py:11070 msgid "Add new database" msgstr "" -#: .././config.py:11041 +#: .././config.py:11072 msgid "Change to a different data folder" msgstr "" -#: .././config.py:11048 +#: .././config.py:11079 msgid "Check and repair database" msgstr "" -#: .././config.py:11051 +#: .././config.py:11082 msgid "Check for inconsistencies, and repair them" msgstr "" -#: .././config.py:11056 +#: .././config.py:11087 msgid "Recent data folders" msgstr "" -#: .././config.py:11070 +#: .././config.py:11101 msgid "Switch to the selected data folder" msgstr "" -#: .././config.py:11080 +#: .././config.py:11111 msgid "Forget" msgstr "" -#: .././config.py:11083 +#: .././config.py:11114 msgid "Remove the selected data folder from the list" msgstr "" -#: .././config.py:11092 +#: .././config.py:11123 msgid "Forget all" msgstr "" -#: .././config.py:11095 +#: .././config.py:11126 msgid "Forget every folder in this list (except the current one)" msgstr "" -#: .././config.py:11108 +#: .././config.py:11139 msgid "Move the selected folder up the list" msgstr "" -#: .././config.py:11116 +#: .././config.py:11147 msgid "Move the selected folder down the list" msgstr "" -#: .././config.py:11144 +#: .././config.py:11175 msgid "" "On startup, load the first database on the list (not the most recently-use " "one)" msgstr "" -#: .././config.py:11154 +#: .././config.py:11185 msgid "If one database is in use, try to load others" msgstr "" -#: .././config.py:11162 +#: .././config.py:11193 msgid "Add new data directories to this list" msgstr "" -#: .././config.py:11201 +#: .././config.py:11232 msgid "_Backups" msgstr "" -#: .././config.py:11205 +#: .././config.py:11236 msgid "Backup preferences" msgstr "" -#: .././config.py:11210 +#: .././config.py:11241 msgid "" "When saving a database file, Tartube makes a backup copy of it (in case " "something goes wrong)" msgstr "" -#: .././config.py:11219 +#: .././config.py:11250 msgid "Delete the backup file as soon as the save procedure is finished" msgstr "" -#: .././config.py:11229 +#: .././config.py:11260 msgid "Keep the backup file, replacing any previous backup file" msgstr "" -#: .././config.py:11240 +#: .././config.py:11271 msgid "" "Make a new backup file once per day, after the day's first save procedure" msgstr "" -#: .././config.py:11251 +#: .././config.py:11282 msgid "Make a new backup file for every save procedure" msgstr "" -#: .././config.py:11300 +#: .././config.py:11331 msgid "Automatic video deletion preferences" msgstr "" -#: .././config.py:11305 +#: .././config.py:11336 msgid "Automatically delete downloaded videos after this many days" msgstr "" -#: .././config.py:11319 +#: .././config.py:11350 msgid "...but only delete videos which have been watched" msgstr "" -#: .././config.py:11343 +#: .././config.py:11374 msgid "Video matching preferences" msgstr "" -#: .././config.py:11348 +#: .././config.py:11379 msgid "When matching videos on the filesystem:" msgstr "" -#: .././config.py:11354 +#: .././config.py:11385 msgid "The video names must match exactly" msgstr "" -#: .././config.py:11361 +#: .././config.py:11392 msgid "The first # characters must match exactly" msgstr "" -#: .././config.py:11375 +#: .././config.py:11406 msgid "Ignore the last # characters; the remaining name must match exactly" msgstr "" -#: .././config.py:11421 +#: .././config.py:11452 msgid "_Temporary folders" msgstr "" -#: .././config.py:11427 +#: .././config.py:11458 msgid "Temporary folder preferences" msgstr "" -#: .././config.py:11432 +#: .././config.py:11463 msgid "Empty temporary folders when Tartube shuts down" msgstr "" -#: .././config.py:11441 +#: .././config.py:11472 msgid "(N.B. Temporary folders are always emptied when Tartube starts up)" msgstr "" -#: .././config.py:11449 +#: .././config.py:11480 msgid "Open temporary folders (on the desktop) when Tartube shuts down" msgstr "" -#: .././config.py:11487 +#: .././config.py:11518 msgid "The Tartube database contains:" msgstr "" -#: .././config.py:11547 +#: .././config.py:11578 msgid "Custom folders" msgstr "" -#: .././config.py:11570 +#: .././config.py:11601 msgid "Calculate" msgstr "" #. Add this tab... -#: .././config.py:11696 +#: .././config.py:11727 msgid "_Windows" msgstr "" -#: .././config.py:11719 +#: .././config.py:11750 msgid "_Main window" msgstr "" -#: .././config.py:11725 +#: .././config.py:11756 msgid "Main window preferences" msgstr "" -#: .././config.py:11730 +#: .././config.py:11761 msgid "Remember the size of the main window when shutting down" msgstr "" -#: .././config.py:11738 +#: .././config.py:11769 msgid "Also remember the position of main window sliders" msgstr "" -#: .././config.py:11755 +#: .././config.py:11786 msgid "Don't show the main window toolbar" msgstr "" -#: .././config.py:11763 +#: .././config.py:11794 msgid "Don't show labels in the main window toolbar" msgstr "" -#: .././config.py:11781 +#: .././config.py:11812 msgid "" "Replace stock icons with custom icons (in case stock icons are not visible)" msgstr "" -#: .././config.py:11791 +#: .././config.py:11822 msgid "Show tooltips for videos, channels, playlists and folders" msgstr "" -#: .././config.py:11799 +#: .././config.py:11830 msgid "Show errors/warnings in tooltips (but not in the Videos tab)" msgstr "" -#: .././config.py:11817 +#: .././config.py:11848 msgid "Disable the 'Download all' buttons in the toolbar and the Videos Tab" msgstr "" -#: .././config.py:11828 +#: .././config.py:11859 msgid "In the Progress Tab, hide finished videos / channels / playlists" msgstr "" -#: .././config.py:11837 +#: .././config.py:11868 msgid "In the Progress Tab, show results in reverse order" msgstr "" -#: .././config.py:11845 +#: .././config.py:11876 msgid "When Tartube starts, automatically open the Classic Mode tab" msgstr "" -#: .././config.py:11859 +#: .././config.py:11890 msgid "" "In the Classic Mode Tab, when adding URLs, remove duplicates rather than " "retaining them" msgstr "" -#: .././config.py:11873 +#: .././config.py:11904 msgid "In the Errors/Warnings Tab, don't reset the tab text when it is clicked" msgstr "" -#: .././config.py:11896 +#: .././config.py:11927 msgid "Video Index (left side of the Videos Tab)" msgstr "" -#: .././config.py:11902 +#: .././config.py:11933 msgid "Show smaller icons in the Video Index" msgstr "" -#: .././config.py:11912 +#: .././config.py:11943 msgid "" "In the Video Index, show detailed statistics about the videos in each " "channel / playlist / folder" msgstr "" -#: .././config.py:11923 +#: .././config.py:11954 msgid "" "After clicking on a folder, automatically expand/collapse the tree around it" msgstr "" -#: .././config.py:11934 +#: .././config.py:11965 msgid "Expand the whole tree, not just the level beneath the clicked folder" msgstr "" -#: .././config.py:11955 +#: .././config.py:11986 msgid "Video Catalogue (right side of the Videos Tab)" msgstr "" -#: .././config.py:11962 +#: .././config.py:11993 msgid "Show 'today' and 'yesterday' as the date, when possible" msgstr "" -#: .././config.py:11972 +#: .././config.py:12003 msgid "Draw a frame around each video" msgstr "" -#: .././config.py:11982 +#: .././config.py:12013 msgid "Draw status icons for each video" msgstr "" -#: .././config.py:11991 +#: .././config.py:12022 msgid "Thumbnail size (when videos are displayed on a grid)" msgstr "" -#: .././config.py:12019 +#: .././config.py:12050 msgid "Show livestreams with a different background colour" msgstr "" -#: .././config.py:12027 +#: .././config.py:12058 msgid "Use same background colours for livestream and debut videos" msgstr "" -#: .././config.py:12055 +#: .././config.py:12086 msgid "_Drag" msgstr "" -#: .././config.py:12059 +#: .././config.py:12090 msgid "Drag and drop preferences" msgstr "" -#: .././config.py:12065 +#: .././config.py:12096 msgid "When dragging and dropping videos to an external application..." msgstr "" -#: .././config.py:12071 +#: .././config.py:12102 msgid "Transfer the video's full file path" msgstr "" -#: .././config.py:12079 +#: .././config.py:12110 msgid "Transfer the video's source URL" msgstr "" -#: .././config.py:12087 +#: .././config.py:12118 msgid "Transfer the video's name" msgstr "" -#: .././config.py:12095 +#: .././config.py:12126 msgid "Transfer the thumbnail's full file path" msgstr "" -#: .././config.py:12111 +#: .././config.py:12142 msgid "_System tray" msgstr "" -#: .././config.py:12117 +#: .././config.py:12148 msgid "System tray preferences" msgstr "" -#: .././config.py:12122 +#: .././config.py:12153 msgid "Show icon in system tray" msgstr "" -#: .././config.py:12131 +#: .././config.py:12162 msgid "Close to the tray, rather than closing the application" msgstr "" -#: .././config.py:12157 +#: .././config.py:12188 msgid "D_ialogues" msgstr "" -#: .././config.py:12163 +#: .././config.py:12194 msgid "Dialogue window preferences" msgstr "" -#: .././config.py:12168 +#: .././config.py:12199 msgid "When adding channels/playlists, keep the dialogue window open" msgstr "" -#: .././config.py:12178 +#: .././config.py:12209 msgid "When the dialogue window opens, add URLs from the system clipboard" msgstr "" -#: .././config.py:12206 +#: .././config.py:12237 msgid "_Errors/Warnings" msgstr "" -#: .././config.py:12214 +#: .././config.py:12245 msgid "Errors/Warnings tab preferences" msgstr "" -#: .././config.py:12219 +#: .././config.py:12250 msgid "Show Tartube error messages" msgstr "" -#: .././config.py:12227 +#: .././config.py:12258 msgid "Show Tartube warning messages" msgstr "" -#: .././config.py:12235 +#: .././config.py:12266 msgid "Show server error messages" msgstr "" -#: .././config.py:12246 +#: .././config.py:12277 msgid "Show server warning messages" msgstr "" -#: .././config.py:12258 +#: .././config.py:12289 msgid "Downloader error/warning preferences" msgstr "" -#: .././config.py:12263 +#: .././config.py:12294 msgid "TRANSLATOR'S NOTE: These error messages are always in English" msgstr "" -#: .././config.py:12267 +#: .././config.py:12298 msgid "Ignore 'Child process exited with non-zero code' errors" msgstr "" -#: .././config.py:12276 +#: .././config.py:12307 msgid "" "Ignore 'Unable to download video data' and 'Unable to extract video data' " "errors" msgstr "" -#: .././config.py:12286 +#: .././config.py:12317 msgid "Ignore 'Did not get any data blocks' errors" msgstr "" -#: .././config.py:12295 +#: .././config.py:12326 msgid "Ignore 'Requested formats are incompatible for merge' warnings" msgstr "" -#: .././config.py:12304 +#: .././config.py:12335 msgid "Ignore 'No video formats found' errors" msgstr "" -#: .././config.py:12312 +#: .././config.py:12343 msgid "Ignore 'There are no annotations to write' warnings" msgstr "" -#: .././config.py:12320 +#: .././config.py:12351 msgid "Ignore 'Video doesn't have subtitles' warnings" msgstr "" -#: .././config.py:12336 +#: .././config.py:12367 msgid "_Websites" msgstr "" -#: .././config.py:12344 +#: .././config.py:12375 msgid "YouTube error/warning preferences" msgstr "" -#: .././config.py:12349 +#: .././config.py:12380 msgid "Ignore YouTube copyright errors" msgstr "" -#: .././config.py:12357 +#: .././config.py:12388 msgid "Ignore YouTube age-restriction errors" msgstr "" -#: .././config.py:12365 +#: .././config.py:12396 msgid "Ignore YouTube deletion by uploader errors" msgstr "" -#: .././config.py:12373 +#: .././config.py:12404 msgid "Ignore YouTube payment errors" msgstr "" -#: .././config.py:12382 +#: .././config.py:12413 msgid "General preferences" msgstr "" -#: .././config.py:12388 +#: .././config.py:12419 msgid "" "Ignore any errors/warnings which match lines in this list (applies to all " "websites)" msgstr "" -#: .././config.py:12402 +#: .././config.py:12433 msgid "These are ordinary strings" msgstr "" -#: .././config.py:12409 +#: .././config.py:12440 msgid "These are regular expressions (regexes)" msgstr "" #. Add this tab... -#: .././config.py:12438 +#: .././config.py:12469 msgid "_Scheduling" msgstr "" -#: .././config.py:12455 +#: .././config.py:12486 msgid "_Start" msgstr "" -#: .././config.py:12461 +#: .././config.py:12492 msgid "Scheduled download preferences" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Priority" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Whole" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "Shutdown" msgstr "" -#: .././config.py:12482 +#: .././config.py:12513 msgid "D/L All" msgstr "" -#: .././config.py:12483 +#: .././config.py:12514 msgid "Join mode" msgstr "" -#: .././config.py:12537 .././config.py:14468 .././config.py:14733 +#: .././config.py:12568 .././config.py:14499 .././config.py:14764 msgid "Edit" msgstr "" -#: .././config.py:12564 .././config.py:14504 .././config.py:14769 +#: .././config.py:12595 .././config.py:14535 .././config.py:14800 msgid "Delete" msgstr "" -#: .././config.py:12632 +#: .././config.py:12663 msgid "S_top" msgstr "" -#: .././config.py:12638 +#: .././config.py:12669 msgid "Scheduled stop preferences" msgstr "" -#: .././config.py:12643 +#: .././config.py:12674 msgid "Stop all download operations after this much time" msgstr "" -#: .././config.py:12691 +#: .././config.py:12722 msgid "Stop all download operations after this many videos" msgstr "" -#: .././config.py:12718 +#: .././config.py:12749 msgid "Stop all download operations after this much disk space" msgstr "" -#: .././config.py:12761 +#: .././config.py:12792 msgid "" "N.B. Disk space is estimated. This setting does not apply to simulated " "downloads" msgstr "" -#: .././config.py:12799 +#: .././config.py:12830 msgid "_Performance" msgstr "" -#: .././config.py:12807 +#: .././config.py:12838 msgid "Performance limits" msgstr "" -#: .././config.py:12812 +#: .././config.py:12843 msgid "Limit simultaneous downloads to" msgstr "" -#: .././config.py:12830 +#: .././config.py:12861 msgid "Limit download speed to" msgstr "" -#: .././config.py:12856 +#: .././config.py:12887 msgid "Overriding video format options, limit video resolution to" msgstr "" -#: .././config.py:12878 +#: .././config.py:12909 msgid "Time-saving settings" msgstr "" -#: .././config.py:12884 +#: .././config.py:12915 msgid "" "Stop checking/downloading a channel/playlist when it starts sending videos " "you already have" msgstr "" -#: .././config.py:12895 +#: .././config.py:12926 msgid "Stop after this many videos (when checking)" msgstr "" -#: .././config.py:12910 +#: .././config.py:12941 msgid "Stop after this many videos (when downloading)" msgstr "" -#: .././config.py:12941 +#: .././config.py:12972 msgid "P_references" msgstr "" -#: .././config.py:12949 +#: .././config.py:12980 msgid "URL flexibility preferences" msgstr "" -#: .././config.py:12956 +#: .././config.py:12987 msgid "" "If a video's URL represents a channel/playlist, not a video, don't download " "it" msgstr "" -#: .././config.py:12965 +#: .././config.py:12996 msgid "...or, download multiple videos into the containing folder" msgstr "" -#: .././config.py:12975 +#: .././config.py:13006 msgid "...or, create a new channel, and download the videos into that" msgstr "" -#: .././config.py:12986 +#: .././config.py:13017 msgid "...or, create a new playlist, and download the videos into that" msgstr "" -#: .././config.py:13018 +#: .././config.py:13049 msgid "Missing video preferences" msgstr "" -#: .././config.py:13024 +#: .././config.py:13055 msgid "" "Add videos which have been removed from a channel/playlist to the Missing " "Videos folder" msgstr "" -#: .././config.py:13035 +#: .././config.py:13066 msgid "Only add videos that were uploaded within this many days" msgstr "" -#: .././config.py:13076 +#: .././config.py:13107 msgid "Invidious mirror" msgstr "" -#: .././config.py:13082 +#: .././config.py:13113 msgid "To find an updated list of Invidious mirrors, use any search engine!" msgstr "" -#: .././config.py:13095 .././config.py:13407 +#: .././config.py:13126 .././config.py:13438 msgid "Type the exact text that replaces youtube.com e.g." msgstr "" -#: .././config.py:13121 +#: .././config.py:13152 msgid "Download operation preferences" msgstr "" -#: .././config.py:13127 +#: .././config.py:13158 msgid "Automatically update downloader before every download operation" msgstr "" -#: .././config.py:13139 +#: .././config.py:13170 msgid "Automatically save files at the end of all operations" msgstr "" -#: .././config.py:13149 +#: .././config.py:13180 msgid "For simulated downloads, don't check a video in a folder more than once" msgstr "" -#: .././config.py:13160 +#: .././config.py:13191 msgid "If a download stalls, restart it after this many minutes" msgstr "" -#: .././config.py:13181 +#: .././config.py:13212 msgid "If a network problem is detected, restart the download immediately" msgstr "" -#: .././config.py:13193 +#: .././config.py:13224 msgid "Maximum restarts after a stalled download (0 for no maximum)" msgstr "" -#: .././config.py:13234 +#: .././config.py:13265 msgid "" "Allow downloader to create its own archive file (so deleted videos are not " "re-downloaded)" msgstr "" -#: .././config.py:13245 +#: .././config.py:13276 msgid "" "Also create an archive file when downloading from the Classic Mode tab (not " "recommended)" msgstr "" -#: .././config.py:13256 +#: .././config.py:13287 msgid "When checking videos, apply a 60-second timeout" msgstr "" -#: .././config.py:13266 +#: .././config.py:13297 msgid "" "Convert .webp thumbnails into .jpg thumbnails (using FFmpeg) after " "downloading them" msgstr "" -#: .././config.py:13283 +#: .././config.py:13314 msgid "_Custom" msgstr "" -#: .././config.py:13288 +#: .././config.py:13319 msgid "Custom download preferences" msgstr "" -#: .././config.py:13294 +#: .././config.py:13325 msgid "" "In custom downloads, download each video independently of its channel or " "playlist" msgstr "" -#: .././config.py:13305 +#: .././config.py:13336 msgid "" "In custom downloads, apply a delay after each video/channel/playlist is " "download" msgstr "" -#: .././config.py:13315 +#: .././config.py:13346 msgid "Maximum delay to apply (in minutes)" msgstr "" -#: .././config.py:13332 +#: .././config.py:13363 msgid "Minimum delay to apply (in minutes; randomises the actual delay)" msgstr "" -#: .././config.py:13355 +#: .././config.py:13386 msgid "In custom downloads, obtain a YouTube video from the original website" msgstr "" -#: .././config.py:13365 +#: .././config.py:13396 msgid "In custom downloads, obtain the video from HookTube rather than YouTube" msgstr "" -#: .././config.py:13377 +#: .././config.py:13408 msgid "" "In custom downloads, obtain the video from Invidious rather than YouTube" msgstr "" -#: .././config.py:13389 +#: .././config.py:13420 msgid "" "In custom downloads, obtain the video from the YouTube front-end specified " "below" msgstr "" -#: .././config.py:13489 +#: .././config.py:13520 msgid "Livestream preferences (compatible websites only)" msgstr "" -#: .././config.py:13495 +#: .././config.py:13526 msgid "Detect livestreams announced within this many days" msgstr "" -#: .././config.py:13510 +#: .././config.py:13541 msgid "How often to check the status of livestreams (in minutes)" msgstr "" -#: .././config.py:13529 +#: .././config.py:13560 msgid "Check more frequently when a livestream is due to start" msgstr "" -#: .././config.py:13572 +#: .././config.py:13603 msgid "Broadcast preferences (compatible websites only)" msgstr "" -#: .././config.py:13579 +#: .././config.py:13610 msgid "" "Use Youtube Stream Capture to download broadcasting livestreams (requires " "aria2)" msgstr "" -#: .././config.py:13589 +#: .././config.py:13620 msgid "Timeout after this many minutes of inactivity" msgstr "" -#: .././config.py:13603 +#: .././config.py:13634 msgid "Number of restarts after a timeout" msgstr "" -#: .././config.py:13618 +#: .././config.py:13649 msgid "" "Bypass usual limits on simultaneous downloads, so that all broadcasts can be " "downloaded" msgstr "" -#: .././config.py:13659 +#: .././config.py:13690 msgid "_Proxies" msgstr "" -#: .././config.py:13665 +#: .././config.py:13696 msgid "Proxies" msgstr "" -#: .././config.py:13672 +#: .././config.py:13703 msgid "" "During a download operation, Tartube will cycle betwween the proxies in this " "list" msgstr "" -#: .././config.py:13693 +#: .././config.py:13724 msgid "_Actions" msgstr "" -#: .././config.py:13702 +#: .././config.py:13733 msgid "Livestream actions (can be toggled for individual videos)" msgstr "" -#: .././config.py:13709 +#: .././config.py:13740 msgid "(currently disabled on MS Windows)" msgstr "" -#: .././config.py:13714 +#: .././config.py:13745 msgid "When a livestream starts, show a desktop notification" msgstr "" -#: .././config.py:13728 +#: .././config.py:13759 msgid "When a livestream starts, sound an alarm" msgstr "" -#: .././config.py:13751 +#: .././config.py:13782 msgid "Plays the selected sound effect" msgstr "" -#: .././config.py:13758 +#: .././config.py:13789 msgid "When a livestream starts, open it in the system's web browser" msgstr "" -#: .././config.py:13770 +#: .././config.py:13801 msgid "When a livestream starts, begin downloading it immediately" msgstr "" -#: .././config.py:13796 +#: .././config.py:13827 msgid "Desktop notification preferences" msgstr "" -#: .././config.py:13803 +#: .././config.py:13834 msgid "Show a dialogue window at the end of an operation" msgstr "" -#: .././config.py:13828 +#: .././config.py:13859 msgid "Don't notify the user at the end of an operation" msgstr "" -#: .././config.py:13882 +#: .././config.py:13913 msgid "_Forks" msgstr "" -#: .././config.py:13888 +#: .././config.py:13919 msgid "Forks of youtube-dl" msgstr "" -#: .././config.py:13917 -msgid "Use youtube-dlc" +#: .././config.py:13948 +msgid "Use yt-dlp" msgstr "" -#: .././config.py:13946 +#: .././config.py:13977 msgid "Use youtube-dl" msgstr "" -#: .././config.py:13974 +#: .././config.py:14005 msgid "Use a different fork of youtube-dl:" msgstr "" -#: .././config.py:14051 +#: .././config.py:14082 msgid "_File paths" msgstr "" -#: .././config.py:14058 +#: .././config.py:14089 msgid "Downloader file paths" msgstr "" -#: .././config.py:14064 +#: .././config.py:14095 msgid "Path to the executable" msgstr "" #. (Signal connect appears below) -#: .././config.py:14070 .././config.py:14218 .././config.py:14259 -#: .././config.py:14329 .././config.py:20068 +#: .././config.py:14101 .././config.py:14249 .././config.py:14290 +#: .././config.py:14360 .././config.py:20098 msgid "Use default path" msgstr "" -#: .././config.py:14075 .././config.py:20080 +#: .././config.py:14106 .././config.py:20110 msgid "Use local path" msgstr "" -#: .././config.py:14079 +#: .././config.py:14110 msgid "Use custom path" msgstr "" -#: .././config.py:14087 .././config.py:20094 +#: .././config.py:14118 .././config.py:20124 msgid "Use PyPI path" msgstr "" -#: .././config.py:14138 +#: .././config.py:14169 msgid "Command for update operations" msgstr "" -#: .././config.py:14186 +#: .././config.py:14217 msgid "_FFmpeg / AVConv" msgstr "" -#: .././config.py:14194 +#: .././config.py:14225 msgid "Post-processing file paths" msgstr "" -#: .././config.py:14199 +#: .././config.py:14230 msgid "" "You only need to set these paths if Tartube cannot find FFmpeg / AVConv " "automatically" msgstr "" -#: .././config.py:14206 +#: .././config.py:14237 msgid "Path to the FFmpeg executable" msgstr "" -#: .././config.py:14233 +#: .././config.py:14264 msgid "Install from main menu" msgstr "" -#: .././config.py:14247 +#: .././config.py:14278 msgid "Path to the AVConv executable" msgstr "" -#: .././config.py:14274 +#: .././config.py:14305 msgid "Not supported on MS Windows" msgstr "" -#: .././config.py:14297 +#: .././config.py:14328 msgid "_Stream Capture" msgstr "" -#: .././config.py:14305 +#: .././config.py:14336 msgid "Youtube Stream Capture file path" msgstr "" -#: .././config.py:14310 +#: .././config.py:14341 msgid "" "Tartube includes a copy of this script, but you can use a different copy, if " "you want" msgstr "" -#: .././config.py:14317 +#: .././config.py:14348 msgid "Path to the YT Stream Capture executable" msgstr "" -#: .././config.py:14375 +#: .././config.py:14406 msgid "_Download options" msgstr "" -#: .././config.py:14382 +#: .././config.py:14413 msgid "List of download options managers" msgstr "" -#: .././config.py:14402 +#: .././config.py:14433 msgid "Classic Mode" msgstr "" -#: .././config.py:14403 +#: .././config.py:14434 msgid "Applied to media" msgstr "" -#: .././config.py:14477 .././config.py:14742 +#: .././config.py:14508 .././config.py:14773 msgid "Export" msgstr "" -#: .././config.py:14486 .././config.py:14751 +#: .././config.py:14517 .././config.py:14782 msgid "Clone" msgstr "" -#: .././config.py:14495 +#: .././config.py:14526 msgid "Use in Classic Mode tab" msgstr "" -#: .././config.py:14520 .././config.py:14785 +#: .././config.py:14551 .././config.py:14816 msgid "Refresh list" msgstr "" -#: .././config.py:14601 +#: .././config.py:14632 msgid "_Preferences" msgstr "" -#: .././config.py:14608 +#: .././config.py:14639 msgid "Download options preferences" msgstr "" -#: .././config.py:14614 +#: .././config.py:14645 msgid "" "When applying download options to something, clone the general download " "options" msgstr "" -#: .././config.py:14625 +#: .././config.py:14656 msgid "After downloading a video, destroy its download options" msgstr "" -#: .././config.py:14642 +#: .././config.py:14673 msgid "_FFmpeg options" msgstr "" -#: .././config.py:14649 +#: .././config.py:14680 msgid "List of FFmpeg options managers" msgstr "" -#: .././config.py:14669 +#: .././config.py:14700 msgid "Current" msgstr "" -#: .././config.py:14760 +#: .././config.py:14791 msgid "Use these options" msgstr "" #. Add this tab... -#: .././config.py:14851 +#: .././config.py:14882 msgid "O_utput" msgstr "" -#: .././config.py:14870 +#: .././config.py:14901 msgid "_Output Tab" msgstr "" -#: .././config.py:14878 +#: .././config.py:14909 msgid "Output Tab preferences" msgstr "" -#: .././config.py:14883 +#: .././config.py:14914 msgid "Display downloader system commands in the Output Tab" msgstr "" -#: .././config.py:14892 +#: .././config.py:14923 msgid "Display output from downloader's STDOUT in the Output Tab" msgstr "" -#: .././config.py:14901 .././config.py:15063 +#: .././config.py:14932 .././config.py:15094 msgid "...but don't write each video's JSON data" msgstr "" -#: .././config.py:14912 .././config.py:15074 +#: .././config.py:14943 .././config.py:15105 msgid "...but don't write each video's download progress" msgstr "" -#: .././config.py:14931 +#: .././config.py:14962 msgid "Display output from downloader's STDERR in the Output Tab" msgstr "" -#: .././config.py:14940 +#: .././config.py:14971 msgid "Limit the size of Output Tab pages to" msgstr "" -#: .././config.py:14961 +#: .././config.py:14992 msgid "Empty pages in the Output Tab at the start of every operation" msgstr "" -#: .././config.py:14971 +#: .././config.py:15002 msgid "" "Show a summary of active threads (changes are applied when Tartube restarts)" msgstr "" -#: .././config.py:14983 +#: .././config.py:15014 msgid "During an update operation, automatically switch to the Output tab" msgstr "" -#: .././config.py:14994 +#: .././config.py:15025 msgid "During a refresh operation, show all matching videos in the Output Tab" msgstr "" -#: .././config.py:15005 +#: .././config.py:15036 msgid "...also show all non-matching videos" msgstr "" -#: .././config.py:15034 +#: .././config.py:15065 msgid "_Terminal window" msgstr "" -#: .././config.py:15040 +#: .././config.py:15071 msgid "Terminal window preferences" msgstr "" -#: .././config.py:15045 +#: .././config.py:15076 msgid "Write downloader system commands to the terminal window" msgstr "" -#: .././config.py:15054 +#: .././config.py:15085 msgid "Write output from downloader's STDOUT to the terminal window" msgstr "" -#: .././config.py:15096 +#: .././config.py:15127 msgid "Write output from downloader's STDERR to the terminal window" msgstr "" -#: .././config.py:15115 +#: .././config.py:15146 msgid "_Both" msgstr "" -#: .././config.py:15120 +#: .././config.py:15151 msgid "" "Special preferences (applies to both the Output Tab and the terminal window)" msgstr "" -#: .././config.py:15127 +#: .././config.py:15158 msgid "Downloader writes verbose output (youtube-dl debugging mode)" msgstr "" -#: .././config.py:15136 +#: .././config.py:15167 msgid "Youtube Stream Capture writes verbose output" msgstr "" -#: .././config.py:16053 +#: .././config.py:16084 msgid "Are you sure you want to create a new database at this location?" msgstr "" -#: .././config.py:16160 +#: .././config.py:16191 msgid "Are you sure you want to forget this database?" msgstr "" -#: .././config.py:16195 +#: .././config.py:16226 msgid "Are you sure you want to forget all databases except the current one?" msgstr "" -#: .././config.py:16399 +#: .././config.py:16430 msgid "No database exists at this location:" msgstr "" -#: .././config.py:16401 +#: .././config.py:16432 msgid "Do you want to create a new one?" msgstr "" -#: .././config.py:17041 +#: .././config.py:17072 msgid "The current options manager cannot be deleted" msgstr "" -#: .././config.py:17049 .././config.py:18049 +#: .././config.py:17080 .././config.py:18080 msgid "Are you sure you want to delete this options manager?" msgstr "" -#: .././config.py:17243 .././config.py:17590 .././config.py:19074 +#: .././config.py:17274 .././config.py:17621 .././config.py:19105 msgid "The new setting will be applied when Tartube restarts" msgstr "" -#: .././config.py:18041 +#: .././config.py:18072 msgid "The default options manager cannot be deleted" msgstr "" -#: .././config.py:18736 +#: .././config.py:18767 msgid "There is already a scheduled download with that name" msgstr "" -#: .././config.py:18783 +#: .././config.py:18814 msgid "Are you sure you want to delete this scheduled download?" msgstr "" -#: .././config.py:18951 +#: .././config.py:18982 msgid "Please select the AVConv executable" msgstr "" -#: .././config.py:18984 +#: .././config.py:19015 msgid "Please select the FFmpeg executable" msgstr "" -#: .././config.py:19017 +#: .././config.py:19048 msgid "Please select the Youtube Stream Capture executable" msgstr "" -#: .././config.py:19807 +#: .././config.py:19837 msgid "Select the youtube-dl-compatible executable" msgstr "" -#: .././config.py:19991 +#: .././config.py:20021 msgid "Database file not loaded" msgstr "" -#: .././config.py:20011 +#: .././config.py:20041 msgid "Did not try to load the database file" msgstr "" -#: .././config.py:20036 +#: .././config.py:20066 msgid "Database file loaded" msgstr "" @@ -6385,97 +6397,97 @@ msgstr "" msgid "Cannot download videos in a private folder" msgstr "" -#: .././downloads.py:2986 .././downloads.py:5243 +#: .././downloads.py:2986 .././downloads.py:5256 msgid "Download did not start" msgstr "" -#: .././downloads.py:2994 .././downloads.py:5255 .././info.py:364 +#: .././downloads.py:2994 .././downloads.py:5268 .././info.py:364 #: .././updates.py:278 .././updates.py:476 msgid "Child process exited with non-zero code: {}" msgstr "" -#: .././downloads.py:3108 .././downloads.py:4060 +#: .././downloads.py:3108 .././downloads.py:4072 msgid "" "This video has a URL that points to a channel or a playlist, not a video" msgstr "" -#: .././downloads.py:3937 .././downloads.py:3951 +#: .././downloads.py:3949 .././downloads.py:3963 msgid "Simulated download of:" msgstr "" -#: .././downloads.py:3959 +#: .././downloads.py:3971 msgid "Simulated download of video with unprintable characters" msgstr "" #. This object creates more messages for the Output Tab and/or terminal, #. than downloads.VideoDownloader would do, as the output generated by #. Youtube Stream Capture is not easy for the user to interpret -#: .././downloads.py:5134 +#: .././downloads.py:5147 msgid "Tartube is starting the stream capture..." msgstr "" -#: .././downloads.py:5152 +#: .././downloads.py:5165 msgid "Could not create a destination directory, capture halted" msgstr "" -#: .././downloads.py:5173 .././downloads.py:5198 +#: .././downloads.py:5186 .././downloads.py:5211 msgid "Youtube Stream Capture script not found:" msgstr "" -#: .././downloads.py:5247 +#: .././downloads.py:5260 msgid "Failed to capture the livestream" msgstr "" -#: .././downloads.py:5251 +#: .././downloads.py:5264 msgid "Stream capture terminated" msgstr "" -#: .././downloads.py:5261 +#: .././downloads.py:5274 msgid "" "Stream captured terminated without downloading any video segments " "(indicating an error with the stream)" msgstr "" #. Capture successful -#: .././downloads.py:5277 +#: .././downloads.py:5290 msgid "Stream capture successful" msgstr "" #. Show a confirmation message -#: .././downloads.py:5307 +#: .././downloads.py:5320 msgid "Merging file segments..." msgstr "" -#: .././downloads.py:5327 +#: .././downloads.py:5340 msgid "Segment merge did not start" msgstr "" -#: .././downloads.py:5338 +#: .././downloads.py:5351 msgid "Segment merge completed, but path not detected" msgstr "" -#: .././downloads.py:5348 +#: .././downloads.py:5361 msgid "Segment merge completed, but output file not found" msgstr "" -#: .././downloads.py:5369 +#: .././downloads.py:5382 msgid "File moved to:" msgstr "" -#: .././downloads.py:5374 +#: .././downloads.py:5387 msgid "Livestream download is complete" msgstr "" -#: .././downloads.py:5379 +#: .././downloads.py:5392 msgid "Failed to move output file" msgstr "" -#: .././downloads.py:5548 +#: .././downloads.py:5561 #, python-brace-format msgid "Stream capture is frozen, trying again (restart #{0})" msgstr "" -#: .././downloads.py:5555 +#: .././downloads.py:5568 msgid "Stream capture is frozen, giving up" msgstr "" diff --git a/tartube/tartube b/tartube/tartube index e9d598c..bf683eb 100644 --- a/tartube/tartube +++ b/tartube/tartube @@ -42,8 +42,8 @@ import mainapp # 'Global' variables __packagename__ = 'tartube' -__version__ = '2.3.097' -__date__ = '16 Feb 2021' +__version__ = '2.3.110' +__date__ = '28 Feb 2021' __copyright__ = 'Copyright \xa9 2019-2021 A S Lewis' __license__ = """ Copyright \xa9 2019-2021 A S Lewis. diff --git a/tartube/updates.py b/tartube/updates.py index 113d1ad..33b5233 100644 --- a/tartube/updates.py +++ b/tartube/updates.py @@ -542,7 +542,7 @@ class UpdateManager(threading.Thread): stdout (str): The STDOUT message - downloader (str): The name of the downloader, e.g. 'youtube-dlc' + downloader (str): The name of the downloader, e.g. 'yt-dlp' """ diff --git a/tartube/wizwin.py b/tartube/wizwin.py index 5831db5..b0768a7 100644 --- a/tartube/wizwin.py +++ b/tartube/wizwin.py @@ -905,18 +905,18 @@ class SetupWizWin(GenericWizWin): 0, 0, grid_width, 1, ) - # youtube-dlc + # yt-dlp radiobutton = self.setup_set_downloader_page_add_button( - 2, # Row number - '<b>youtube-dlc</b>: <i>' \ - + self.app_obj.ytdl_fork_descrip_dict['youtube-dlc'] \ + 1, # Row number + '<b>yt-dlp</b>: <i>' \ + + self.app_obj.ytdl_fork_descrip_dict['yt-dlp'] \ + '</i>', - _('Use youtube-dlc'), + _('Use yt-dlp'), ) # youtube-dl radiobutton2 = self.setup_set_downloader_page_add_button( - 1, # Row number + 2, # Row number '<b>youtube-dl</b>: <i>' \ + self.app_obj.ytdl_fork_descrip_dict['youtube-dl'] \ + '</i>', @@ -937,7 +937,7 @@ class SetupWizWin(GenericWizWin): if self.ytdl_fork is None or self.ytdl_fork == 'youtube-dl': radiobutton2.set_active(True) entry.set_sensitive(False) - elif self.ytdl_fork == 'youtube-dlc': + elif self.ytdl_fork == 'yt-dlp': radiobutton.set_active(True) entry.set_sensitive(False) else: @@ -954,7 +954,7 @@ class SetupWizWin(GenericWizWin): 'toggled', self.on_button_ytdl_fork_toggled, entry, - 'youtube-dlc', + 'yt-dlp', ) radiobutton2.connect( 'toggled', @@ -1688,8 +1688,7 @@ class SetupWizWin(GenericWizWin): entry (Gtk.Entry): Another widget to be updated - fork_type (str): 'youtube-dlc', 'youtube-dl', or None for any other - fork + fork_type (str): 'yt-dlp', 'youtube-dl', or None for any other fork """ @@ -1714,7 +1713,7 @@ class SetupWizWin(GenericWizWin): entry.set_text('') entry.set_sensitive(False) - elif fork_type == 'youtube-dlc': + elif fork_type == 'yt-dlp': self.ytdl_fork = fork_type entry.set_text('')