Merge pull request #174 from MrS0m30n3/new_layout

New layout merge
This commit is contained in:
MrS0m30n3 2017-06-15 16:07:14 +03:00 committed by GitHub
commit 4ef3d60593
84 changed files with 13077 additions and 7256 deletions

View File

@ -1,61 +1,64 @@
## Please follow the guide below
- You will be asked some questions and requested to provide some information, please read them **carefully** and answer honestly
- Put an `x` into all the boxes [ ] relevant to your *issue* (like that [x])
- Put an `x` into all the boxes [ ] relevant to your issue (like that [x])
- Use *Preview* tab to see how your issue will actually look like
---
### WARNING
All the invalid issues will be rejected!!
All invalid issues will be rejected!!
---
### Before going further
* If your problem is a bug with the **youtube-dl** program or a request for new site support please report it [here](https://github.com/rg3/youtube-dl/issues)
* Make sure you are using the *latest* **youtube-dl-gui** version: `Options > About` tab. If it's not please download & install the latest version for your OS and check if your issue still persists
- If your problem is a bug with **youtube-dl** or a request for new site support please report it [here](https://github.com/rg3/youtube-dl/issues)
* Make sure you are using the *latest* **youtube-dl** version: Click the `Update` button on the main screen and check if your issue still persists
- Make sure you are using the *latest* **youtube-dl-gui** version (Click the `Settings` icon and then `About` to view the current version)
* Make sure you searched the bugtracker for similar issues including closed ones
- Make sure you are using the *latest* **youtube-dl** version (Click the `Settings` icon and then `Update` to update to the latest **youtube-dl** version)
- Make sure you searched the bugtracker for similar issues including closed ones
- Make sure to read the [FAQs](../docs/faqs.md) file
- [ ] **I assure** that my problem is **NOT** with **youtube-dl**
- [ ] I've **verified** and **I assure** that I'm running youtube-dl-gui **0.3.8**
- [ ] I've **verified** and **i assure** that I'm running youtube-dl-gui **0.3.8**
- [ ] **I assure** that i am using the latest version of **youtube-dl**
- [ ] [Searched](https://github.com/MrS0m30n3/youtube-dl-gui/issues) bugtracker
- [ ] I've read the FAQs file
---
### What is the purpose of your *issue*?
- [ ] Bug during the download process (encountered problems after hitting the *Download* button)
- [ ] Bug other (encountered other problems with *youtube-dl-gui*)
- [ ] Bug report
- [ ] Feature request (request for a new functionality)
- [ ] Question
- [ ] Other
Please remove any sections between (---) if they are not related to your issue
---
Please remove the following section between the (---) if your problem does not belong to the **bug during the download process** category
### Bug report
#### Provide the full verbose output as follows:
#### If the problem occurs when downloading a URL please provide the full verbose output as follows:
1. Add `-v` flag to Options > Commands tab
2. Re-try to download the URL
3. Go to `Options > Log` tab and click the `View Log` button
4. Copy the **whole** content of the log file and insert it between the triple ``` part
1. Restart **youtube-dl-gui**
1. Go to `Options > Extra` tab
2. Enable **Debug youtube-dl**
3. Go to `Options > Advanced` tab and **Clear** your log content
4. Try to download the URL
5. Copy the **whole** log content and insert it between the ``` part below
```
[delete me and insert your log content here]
```
---
Please remove the following section between the (---) if your problem does not belong to **the first two categories (bug report)**
#### What operating system do you use ?
#### List of actions to perform to reproduce the problem:
1. ..
2. ..
3. ..
@ -64,7 +67,19 @@ Please remove the following section between the (---) if your problem does not b
#### What happens instead ?
---
### Description of your *issue*, suggested solution and other information. Please make sure the description is worded well enough to be understood.
### Feature request (request for a new functionality)
Please make sure that the requested feature is **NOT** already in the [TODO](../TODO) list
- [ ] I've **verified** and **i assure** that my requested feature is **NOT** in the TODO list
#### What operating system do you use ?
---
<!--Enter description of your issue, suggested solution and other information below. Please make sure the description is worded well enough to be understood-->

2
.gitignore vendored
View File

@ -1,4 +1,6 @@
MANIFEST
*.pyc
*.mo
dist/
build/

View File

@ -1,9 +1,15 @@
include README.md
include TODO
include AUTHORS
include LICENSE
include ToDo
include README.md
include locale_build/*
include tests/*.py
include devscripts/*
include docs/*
recursive-include youtube_dl_gui/icons *.png *.ico *.icns
recursive-include youtube_dl_gui/locale *.mo *.po
include youtube_dl_gui/data/pixmaps/icons-license
recursive-include youtube_dl_gui/data *.png *.ico
recursive-include youtube_dl_gui/locale *.po
recursive-exclude youtube_dl_gui/locale *.mo

View File

@ -1,49 +1,51 @@
# youtube-dlG
A cross platform front-end GUI of the popular [youtube-dl](http://rg3.github.io/youtube-dl/) media downloader, written in wxPython. [List of supported sites](https://rg3.github.io/youtube-dl/supportedsites.html).
A cross platform front-end GUI of the popular [youtube-dl](https://rg3.github.io/youtube-dl/) media downloader written in wxPython. [Supported sites](https://rg3.github.io/youtube-dl/supportedsites.html)
## Screenshots
![youtube-dl-gui main window](https://i.imgur.com/tMTtgPt.png)
**Main window**
## Requirements
* [Python 2.7.3+](https://www.python.org/downloads)
* [wxPython 3](https://wxpython.org/download.php)
* [TwoDict](https://pypi.python.org/pypi/twodict)
* [FFmpeg](https://ffmpeg.org/download.html) (optional, to post process video files)
![Youtube-dl-gui main window](http://i.imgur.com/I4oXPWs.png)
**Options window**
![Options window](http://i.imgur.com/eShdoLD.png)
## Downloads
* [Source (.zip)](https://github.com/MrS0m30n3/youtube-dl-gui/archive/0.3.8.zip)
* [Source (.tar.gz)](https://github.com/MrS0m30n3/youtube-dl-gui/archive/0.3.8.tar.gz)
* [PyPi](https://pypi.python.org/pypi/youtube-dlg/0.3.8)
* [Ubuntu PPA](http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu/pool/main/y/youtube-dlg/)
* [Arch AUR](https://aur.archlinux.org/packages/youtube-dl-gui-git/)
* [Slackware SlackBuild](https://slackbuilds.org/repository/14.2/network/youtube-dl-gui/)
* [Windows Installer](https://github.com/MrS0m30n3/youtube-dl-gui/releases/download/0.3.8/youtube-dl-gui-0.3.8-win-setup.zip)
* [Windows Portable](https://github.com/MrS0m30n3/youtube-dl-gui/releases/download/0.3.8/youtube-dl-gui-0.3.8-win-portable.zip)
## Installation
**Linux (from source):** `sudo python setup.py install`
### Install From Source
1. Download & extract the source
2. Change directory into *youtube-dl-gui-0.3.8*
3. Run `python setup.py install`
**Linux (Ubuntu PPA):** https://launchpad.net/~flexiondotorg/+archive/ubuntu/youtube-dl-gui
### Install PyPi
1. Run `pip install youtube-dlg`
**Linux (Arch AUR):** https://aur.archlinux.org/packages/youtube-dl-gui-git/ (TODO: update)
**Windows:** https://github.com/MrS0m30n3/youtube-dl-gui/releases/download/0.3.8/youtube-dl-gui-0.3.8-win-setup.zip
**Mac:** TODO Package app
Then you can call youtube-dlg from the command line, using the `youtube-dl-gui` command, or by creating a desktop launcher (TODO)
### Install Windows Installer
1. Download & extract the Windows installer
2. Run the `setup.exe` file
## Contributing
**Support for new language:** See [Localization HOWTO](locale_build/HOWTO.md).
**Reporting bugs:** See [Issues](https://github.com/MrS0m30n3/youtube-dl-gui/issues).
## Requirements
[Python](http://www.python.org) 2.7+, [wxPython](http://wxpython.org), [FFMPEG & FFPROBE](http://www.ffmpeg.org) (optional, to convert video files to audio-only files).
* **Add support for new language:** See [localization howto](docs/localization_howto.md)
* **Report a bug:** See [issues](https://github.com/MrS0m30n3/youtube-dl-gui/issues)
## Authors
See [AUTHORS](AUTHORS) file
## License
## License
The [Public Domain License](LICENSE)
## Thanks
## Frequently Asked Questions
See [FAQs](docs/faqs.md) file
Thanks to youtube-dl authors for creating such an amazing tool.
## Thanks
Thanks to everyone who contributed to this project and to [@philipzae](https://github.com/philipzae) for designing the new UI layout.

58
TODO
View File

@ -1,46 +1,40 @@
GUI
===
* Change MainFrame layout
(see: https://docs.google.com/document/d/1UJ55sYepfk5Dl0nCJNz9fXRBgpG32v-4RwIqSdkXXVg/edit)
* Create new button widget (groups, auto width, General tab)
* Add more statistics (Average download speed)
* Auto video format detection
* GUI command line builder like zenmap
After new_layout merge
======================
* Send emails to update translations
Next release
============
* Improve playlist downloads
* Remember list of urls after closing & re-opening
* About dialog show youtube-dl version
* Icons theme selection (vote on github) (or at least make it easy to change between them)
* Settings menu add "Statistics"
* Mix formats option
* Non-Windows shutdown using D-Bus instead of 'shutdown'
Structure
=========
* Create devscripts/ directory and move all the utility scripts there
* Create docs/ directory and move all the guides there
* Remove twodict from utils and use it directly from the library
* Give icons the same name and keep them on different directories
(see: https://github.com/deluge-torrent/deluge/tree/develop/deluge/ui/data/icons/hicolor)
Localization
============
* Update translation files
* Add support for right to left languages (hebrew, arabic)
* Fix paths on R2L layouts
* Compile *.po files at build time
* Script to automatically check translations (use google-translate library)
* Write bot to automatically check the translations and merge them?
Options
=======
* Option to disable-enable the 'download finished' pop up message
* Option to close the program after download process
* Add 'native hls option' see issue #49
* Add Swedish on available subtitles
* Add Hebrew on available subtitles
Other
=====
* README.md add slackbuild
* README.md add new images
* Re-structure package
* Add FAQs into docs/
* Add tests
* Refactor
* Review - rewrite threads communications
* Add support for Python 3.*
* Logging system using the Python 'logging' module
* Use youtube-dl directly from python instead of using the subprocess module
* Upload new website for http://mrs0m30n3.github.io/youtube-dl-gui
* Script to automatically update file contents like version from .github/ISSUE_TEMPLATE.md file, AUTHORS file, etc..
Probably wont add
=================
* ListCtrl double click to "Rename"
* Option to enable-disable items deletion from the filesystem
* Add '--recode-video' to Formats tab
* Auto video format detection
* Change 'Warning' status to 'Finished (*)' or something similar? (see: issue #131)

58
devscripts/bump-version.sh Executable file
View File

@ -0,0 +1,58 @@
#!/bin/bash
# Author: Sotiris Papadopoulos <ytubedlg@gmail.com>
# Last-Revision: 2017-04-17
# Script to bump the version and automatically update related files
#
# Usage: ./bump_version.sh <new-version>
PACKAGE="youtube_dl_gui"
FILES=`cat <<EOF
$PACKAGE/version.py
.github/ISSUE_TEMPLATE.md
README.md
EOF`
# Update version string on given file
# $1 = current version
# $2 = new version
# $3 = file
function update_version {
echo "Updating file: $3"
sed -i "s/$1/$2/g" $3
}
# Returns 'true' if given version is less or equal to the current version
# $1 = version to check
# $2 = current version
function version_le {
smallest_version=`echo -e "$1\n$2" | sort -V | head -n1`
[ "$1" = "$smallest_version" ]
}
if [ $# -ne 1 ]; then
echo "Usage ./bump_version.sh <new-version>"
exit 1
fi
cd ..
new_version=$1
cur_version=`grep version "$PACKAGE/version.py" | cut -d"'" -f2`
echo "Current version = $cur_version"
echo "New version = $new_version"
echo
if version_le $new_version $cur_version; then
echo "New version must be greater than the current version, exiting..."
exit 1
fi
for file in $FILES; do
update_version $cur_version $new_version $file
done
echo "Done"

View File

@ -0,0 +1,249 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Author: Sotiris Papadopoulos <ytubedlg@gmail.com>
Last-Revision: 2017-04-19
Script to automatically check PO files
"""
from __future__ import unicode_literals
import os
import sys
import logging
import argparse
from time import sleep
from datetime import datetime, timedelta
try:
import polib
import google_translate
except ImportError as error:
print(error)
sys.exit(1)
WTIME = 2.0 # Time in seconds to wait between requests to avoid ban
PACKAGE = "youtube_dl_gui"
PO_FILENAME = "{}.po".format(PACKAGE)
LOCALE_PATH_TMPL = os.path.join(PACKAGE, "locale", "{lang}", "LC_MESSAGES", PO_FILENAME)
logging.basicConfig(level=logging.ERROR)
def parse():
"""Parse command line arguments."""
parser = argparse.ArgumentParser(description="Script to automatically check PO files")
parser.add_argument("language", help="language of the PO file to check")
parser.add_argument("-w", "--werror", action="store_true", help="treat all warning messages as errors")
parser.add_argument("-o", "--only-headers", action="store_true", help="check only the PO file headers")
parser.add_argument("-n", "--no-translate", action="store_true", help="do not use the translator to check 'msgstr' fields")
return parser.parse_args()
def parse_date(date_string):
"""Parse date string into a datetime object."""
return datetime.strptime(date_string, "%Y-%m-%d %H:%M+%Z")
# Print helpers
def my_print(msg, char="*", value=None, exit=False):
"""Print 'msg', debug 'value' and exit if 'exit' is True."""
print("[{}] {}".format(char, msg))
if value is not None:
print("\tvalue= \"{}\"".format(value))
if exit:
sys.exit(1)
def perror(msg, value=None):
my_print(msg, "-", value, True)
def pwarn(msg, value=None, exit=False):
my_print(msg, "!", value, exit)
def pinfo(msg):
my_print(msg)
#############################
def main(args):
os.chdir("..")
# setup
pot_file_path = LOCALE_PATH_TMPL.format(lang="en_US")
po_file_path = LOCALE_PATH_TMPL.format(lang=args.language)
if not os.path.exists(pot_file_path):
perror("Failed to locate POT file, exiting...", pot_file_path)
if not os.path.exists(po_file_path):
perror("Failed to locate PO file, exiting...", po_file_path)
pot_file = polib.pofile(pot_file_path)
po_file = polib.pofile(po_file_path)
# check headers
pinfo("Checking PO headers")
pot_headers = pot_file.metadata
po_headers = po_file.metadata
if pot_headers["Project-Id-Version"] != po_headers["Project-Id-Version"]:
pwarn("'Project-Id-Version' headers do not match", exit=args.werror)
if pot_headers["POT-Creation-Date"] != po_headers["POT-Creation-Date"]:
pwarn("'POT-Creation-Date' headers do not match", exit=args.werror)
po_creation_date = parse_date(po_headers["POT-Creation-Date"])
po_revision_date = parse_date(po_headers["PO-Revision-Date"])
timediff = po_revision_date - po_creation_date
if timediff.days <= 0:
pwarn("PO file seems outdated", exit=args.werror)
if "Language" in po_headers and po_headers["Language"] != args.language:
pwarn("'Language' header does not match with the given language", po_headers["Language"], args.werror)
pinfo("Last-Translator: {}".format(po_headers["Last-Translator"]))
# check translations
if args.only_headers:
sys.exit(0)
pinfo("Checking translations, this might take a while...")
eta = timedelta(seconds=len(pot_file) * WTIME)
pinfo("Approximate time to check translations online: {}".format(eta))
pot_msgid = [entry.msgid for entry in pot_file]
po_msgid = [entry.msgid for entry in po_file]
# lists to hold reports
missing_msgid = []
not_translated = []
same_msgstr = []
with_typo = []
verify_trans = []
fuzzy_trans = po_file.fuzzy_entries()
for msgid in pot_msgid:
if msgid not in po_msgid:
missing_msgid.append(msgid)
translator = google_translate.GoogleTranslator(timeout=5.0, retries=2, wait_time=WTIME)
# Get a valid source language for Google
# for example convert 'ar_SA' to 'ar' or 'zh_CN' to 'zh-CN'
src_lang = args.language
if src_lang not in translator._lang_dict:
src_lang = src_lang.replace("_", "-")
if src_lang not in translator._lang_dict:
src_lang = src_lang.split("-")[0]
for entry in po_file:
if not entry.translated():
not_translated.append(entry)
elif entry.msgid == entry.msgstr:
same_msgstr.append(entry)
else:
if args.no_translate:
continue
word_dict = translator.get_info_dict(entry.msgstr, "en", src_lang)
if word_dict is not None:
if word_dict["has_typo"]:
with_typo.append(entry)
if word_dict["translation"].lower() != entry.msgid.lower():
found = False
# Check verbs, nouns, adverbs, etc..
for key in word_dict["extra"]:
if entry.msgid.lower() in word_dict["extra"][key].keys():
found = True
break
if not found:
verify_trans.append((entry, word_dict["translation"]))
sleep(WTIME)
# time to report
print("=" * 25 + "Report" + "=" * 25)
if missing_msgid:
print("Missing msgids")
for msgid in missing_msgid:
print(" \"{}\"".format(msgid))
if not_translated:
print("Not translated")
for entry in not_translated:
print(" line: {} msgid: \"{}\"".format(entry.linenum, entry.msgid))
if same_msgstr:
print("Same msgstr")
for entry in same_msgstr:
print(" line: {} msgid: \"{}\"".format(entry.linenum, entry.msgid))
if with_typo:
print("With typo")
for entry in with_typo:
print(" line: {} msgid: \"{}\" msgstr: \"{}\"".format(entry.linenum, entry.msgid, entry.msgstr))
if verify_trans:
print("Verify translation")
for item in verify_trans:
entry, translation = item
print(" line: {} msgid: \"{}\" trans: \"{}\"".format(entry.linenum, entry.msgid, translation))
if fuzzy_trans:
print("Fuzzy translations")
for entry in fuzzy_trans:
print(" line: {} msgid: \"{}\"".format(entry.linenum, entry.msgid))
total = len(missing_msgid) + len(not_translated) + len(same_msgstr) + len(with_typo) + len(verify_trans) + len(fuzzy_trans)
print("")
print("Missing msgids\t\t: {}".format(len(missing_msgid)))
print("Not translated\t\t: {}".format(len(not_translated)))
print("Same msgstr\t\t: {}".format(len(same_msgstr)))
print("With typo\t\t: {}".format(len(with_typo)))
print("Verify translation\t: {}".format(len(verify_trans)))
print("Fuzzy translations\t: {}".format(len(fuzzy_trans)))
print("Total\t\t\t: {}".format(total))
if __name__ == "__main__":
try:
main(parse())
except KeyboardInterrupt:
print("KeyboardInterrupt")

67
devscripts/new-locale.py Normal file
View File

@ -0,0 +1,67 @@
#!/usr/bin/env python
"""
Author: Sotiris Papadopoulos <ytubedlg@gmail.com>
Last-Revision: 2017-01-30
Script to add support for a new language
Usage : ./new-locale.py <language_code>
Example : ./new-locale.py en_US
"""
import os
import sys
import shutil
PACKAGE = "youtube_dl_gui"
LOCALE_PATH_TMPL = os.path.join(PACKAGE, "locale", "{lang}", "LC_MESSAGES")
PO_FILE_TMPL = os.path.join("{parent_dir}", "youtube_dl_gui.po")
def error(msg):
print("[-]{0}".format(msg))
sys.exit(1)
def output(msg):
print("[*]{0}".format(msg))
def manage_directory():
"""Allow script calls from the 'devscripts' dir and the package dir."""
if os.path.basename(os.getcwd()) == "devscripts":
os.chdir("..")
def main(lang_code):
manage_directory()
target_dir = LOCALE_PATH_TMPL.format(lang=lang_code)
default_dir = LOCALE_PATH_TMPL.format(lang="en_US")
target_po = PO_FILE_TMPL.format(parent_dir=target_dir)
source_po = PO_FILE_TMPL.format(parent_dir=default_dir)
if os.path.exists(target_dir):
error("Locale '{0}' already exists, exiting...".format(lang_code))
output("Creating directory: '{0}'".format(target_dir))
os.makedirs(target_dir)
output("Creating PO file: '{0}'".format(target_po))
shutil.copy(source_po, target_po)
output("Done")
if __name__ == "__main__":
if len(sys.argv) == 2:
main(sys.argv[1])
else:
print("Usage : {0} <language_code>".format(sys.argv[0]))
print("Example : {0} en_US".format(sys.argv[0]))

27
devscripts/update-authors.sh Executable file
View File

@ -0,0 +1,27 @@
#!/bin/bash
# Author: Sotiris Papadopoulos <ytubedlg@gmail.com>
# Last-Revision: 2017-04-17
# Script to update the AUTHORS file
#
# Usage: ./update-authors.sh
cd ..
git log --reverse --format="%aN <%aE>" | python -c "
import sys
authors = set()
sys.stdout.write('# Authors ordered by first contribution.\n\n')
for line in sys.stdin:
username, _ = line.split('<')
if username not in authors:
authors.add(username)
sys.stdout.write(line)
sys.stdout.write('\n# Generated by update-authors.sh script\n')
" > AUTHORS

54
devscripts/update-locales.sh Executable file
View File

@ -0,0 +1,54 @@
#!/bin/bash
# Author: Sotiris Papadopoulos <ytubedlg@gmail.com>
# Last-Revision: 2017-01-30
# Script to update all locale files and rebuild the MO files
#
# Usage: ./update_locales.sh
PACKAGE="youtube_dl_gui"
PO_FILE="$PACKAGE.po"
cd ..
VERSION=$(grep version "$PACKAGE/version.py" | cut -d"'" -f2)
DIRS=$(find "$PACKAGE/locale" -mindepth 2 -maxdepth 2)
echo "[*]Creating new .PO file"
pygettext.py -v -o new.po "$PACKAGE/*.py"
#vim new.po
echo "[*]Updating old .PO files"
for dir in $DIRS; do
msgmerge --update --no-wrap -v "$dir/$PO_FILE" new.po
# Strip empty headers
sed -i "/: \\n/d" "$dir/$PO_FILE"
# Upate version
sed -i "s/Project-Id-Version:.*\\\n/Project-Id-Version: youtube-dlg $VERSION\\\n/g" "$dir/$PO_FILE"
done
echo
read -p "Open files for revision?(y/n) " ch
if [ $ch = 'y' ]; then
for dir in $DIRS; do
vim "$dir/$PO_FILE"
done
fi
echo "[*]Building .MO files"
for dir in $DIRS; do
msgfmt --use-fuzzy --output-file "$dir/$PO_FILE" "$dir/$PO_FILE"
done
echo "[*]Done"

53
docs/faqs.md Normal file
View File

@ -0,0 +1,53 @@
# Frequently Asked Questions
* **Post processing takes too long**:
There should be no post-processing if you leave the video format to default (which defaults to the best format) and did not check convert to audio or embed subtitles, otherwise the file will be re-encoded to the format you selected (which takes time/CPU resources).
* **The website I'm trying to download from is not supported**:
Youtube-dl-gui uses [youtube-dl](https://github.com/rg3/youtube-dl) in the backend to download files. Youtube-dl provides a list of [extractors](https://github.com/rg3/youtube-dl/tree/master/youtube_dl/extractor) to work with each particular site. If you'd like to request support for a new website, please submit it to youtube-dl's [issue tracker](https://github.com/rg3/youtube-dl/issues).
* **How do I change the naming pattern for downloaded files?**:
You can change the naming pattern by picking a different filename format under the Options>General tab. You can also use a custom pattern by setting the option to "Custom" and editing the output template field. For more infomations on the output template see [youtube-dl's output template section](https://github.com/rg3/youtube-dl/blob/master/README.md#output-template).
* **When is the next release coming?**:
Youtube-dl-gui does not have a release schedule, next release will come when it's ready.
* **How can i log the youtube-dl's debug output?**:
Just go to Options>Extra tab and enable the "Debug youtube-dl" option.
* **I don't see my language in the available subtitles languages**:
You can't see it because it's not there, feel free to open a new pull-request and add support for your language (it's literally one line of code you don't need years of experience).
* **I'm on OS-X and i get 'No module named wx' error**:
You need to install wxPython. If you have [homebrew](https://brew.sh/) installed you can just run: `brew install wxpython`
* **Is there an option to change the maximum parallel downloads?**:
You can change the number of max parallel downloads by editing the "workers_number" option in your settings.json file. Note that you need to restart youtube-dl-gui for the changes to take place.
settings.json file location:
* Windows: `%appdata%\youtube-dlg\settings.json`
* Linux: `~/.config/youtube-dlg/settings.json`
* **Not all formats reported by youtube-dl '-F' are available in youtube-dl-gui**:
Unfortunately it is not possible to support all the video formats that youtube-dl provides. If you want to use a "custom"
format you can follow this steps:
1. Set the download format to "default"
2. Go to Options>Extra tab
3. Add `-f your_custom_format` in the commands box
4. Download your video as you would normally do
* **How can i use a youtube-dl option that's not available in youtube-dl-gui?**:
You can add extra youtube-dl command line options in the commands box under the Options>Extra tab.
* **Can i download only the subtitles file?**:
If the video file is presented youtube-dl-gui will go ahead and download only the subtitles file. If the video file is NOT presented you can add the `--skip-download` option, which will skip the video download phase. If you are not happy with the above options you should use a different tool for the job since youtube-dl-gui is not a subtitles downloader.
* **I'm using the HLS downloader and i don't see any progress report**:
That's a known issue you should use the native HLS implementation by enabling the "Prefer Native HLS" option under the Options>Extra tab. NOTE that the native HLS implementation **might not work on every site**. For more info you can read issue [#49](https://github.com/MrS0m30n3/youtube-dl-gui/issues/49).
* **I'm using the HLS downloader and the 'stop' button won't work**:
That's also a known issue with the HLS downloader on Windows. You should use the native HLS implementation or wait for the download to complete normally. For more info you can read issue [#49](https://github.com/MrS0m30n3/youtube-dl-gui/issues/49).
* **Is it possible to use a youtube-dl version other than the official one?**:
You can use your own version of youtube-dl by editing the "youtubedl_path" option in your settings.json file and make it point to your own binary (e.g. /usr/local/bin). Note that if youtube-dl-gui does not have write permissions to this new directory the "update" option in the GUI will fail. Also, note that changing the "youtubedl_path" won't change the update source which is hardcoded for now to "https://yt-dl.org/latest/".

View File

@ -0,0 +1,65 @@
## ADD SUPPORT FOR NEW LANGUAGE
### Requirements
- [GNU gettext](https://www.gnu.org/software/gettext) (To build the MO files)
### Notes
- Do **NOT** send me the PO files via email since i'm not looking at them anymore
- See the **Help** & **Helpful links** sections below for help
- The instructions below assume basic knowledge of the command line (OS independent)
---
### Getting started
1. Fork the project
2. Create a local clone of your fork repo
3. Change directory into **youtube-dl-gui**
4. Run the **new-locale.py** script under the **devscripts** directory
5. Edit the created **PO** file with your favorite editor
6. Add the new language in the **optionsframe.py** file
7. Build the binary translation files (MO) using the **setup.py** script:
`python setup.py build`
8. Test the translations by running youtube-dl-gui:
`python -m youtube_dl_gui`
9. Push your changes:
```
git add -A
git commit -m "Your commit message here"
git push origin master
```
10. Open a new pull request
---
### Help
- The language code being used should be in the format `<ISO 639-1>_<ISO 3166-1 alpha-2>` (e.g. en_US)
- To translate the PO file just edit the **msgstr** fields as shown below:
``` pot
msgid "Download"
msgstr "ダウンロード"
```
- In order for youtube-dl-gui to display the new language you must add it to the **optionsframe.py** file:
1. Open **optionsframe.py** with your favorite editor
2. Locate the **LOCALE_NAMES** attribute
3. Add your language to it (make sure to sort alphabetically based on the language name)
``` python
LOCALE_NAMES = twodict([
('en_US', 'English'),
+ ('ja_JP', 'Japanese')
])
```
---
### Helpful links
- [Creating a pull request](https://help.github.com/articles/creating-a-pull-request)
- [Fork A Repo](https://help.github.com/articles/fork-a-repo)
- [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
- [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
- [PO file headers](https://www.gnu.org/software/gettext/manual/html_node/Header-Entry.html)

View File

@ -1,75 +0,0 @@
## ADD SUPPORT FOR NEW LANGUAGE
**Requires**: [GNU GetText](https://www.gnu.org/software/gettext/) (If you want to build the MO files on your own)
###You have two options in order to add a new translation on youtube-dlg.
1. Translate the files and send them to me via email.
2. Fork youtube-dlg and push changes on your own.
####1st Way
1. Download the source code
1. Either download & extract the source from [here](https://github.com/MrS0m30n3/youtube-dl-gui/archive/master.zip)
2. Or run `git clone https://github.com/MrS0m30n3/youtube-dl-gui youtube-dl-gui-master`
2. Change directory into **youtube-dl-gui-master**
3. Copy **youtube_dl_gui/locale/en_US/LC_MESSAGES/youtube_dl_gui.po** -> **locale_build/**
4. Change directory into **locale_build**
5. Edit the PO file with your favorite text editor (See *EDIT* section)
6. Send me the translated PO file via email to: ytubedlg@gmail.com
####2nd Way
1. Fork youtube-dlg project (See [Fork A Repo](https://help.github.com/articles/fork-a-repo/))
2. Clone your repository `git clone https://github.com/<your-username>/youtube-dl-gui`
3. Change directory into **youtube-dl-gui**
4. Copy **youtube_dl_gui/locale/en_US/LC_MESSAGES/youtube_dl_gui.po** -> **locale_build/**
5. Change directory into **locale_build**
6. Edit the PO file with your favorite text editor (See *EDIT* section)
7. Build the binary translation file (MO) using the build scripts (See *BUILD* section)
8. Push changes:
`git add -A; git commit -m "Your commit message here"; git push origin master`
9. Now you can open a new pull request
### EDIT
PO file headers informations:
https://www.gnu.org/software/gettext/manual/html_node/Header-Entry.html
To translate the PO file just edit the **msgstr** fields
**Example**
``` pot
#: mainframe.py:78
msgid "Download"
msgstr "Add the translation here"
```
### BUILD
1. To build the MO file you need to run the corresponding build script for your OS
**Windows**: build_locale.bat
**Linux**: build_locale.sh
**Usage**
`build_locale.<sh-bat> <language code> <translated PO file>`
**Example**
`./build_locale.sh gr_GR gr.po`
2. Now you also need to add the corresponding language option under the options frame localization tab
1. Open optionsframe.py
2. Locate the LocalizationTab class
3. Find the LOCALE_NAMES attribute
4. Add your language to the LOCALE_NAMES
**Example**
``` python
LOCALE_NAMES = twodict([
('en_US', 'English'),
+ ('gr_GR', 'Greek')
])
```

View File

@ -1,35 +0,0 @@
@echo off
REM Author: Sotiris Papadopoulos
REM Last-Edited: 25/02/2015
REM Script to auto-create a locale file.
REM Usage: build_locale.bat <locale> <locale_file>
REM Example: build_locale.bat gr_GR gr.po
REM To create a new locale file copy youtube_dl_gui.po
REM to a new locale file (e.g. gr.po) edit it with your
REM favorite editor and then run this script.
REM You also need to install gettext for Windows
set FILENAME=youtube_dl_gui
set /a args=0
for %%A in (%*) do set /a args+=1
if not %args% == 2 (
echo Usage: %~n0.bat "locale" "locale_file"
echo Example: %~n0.bat gr_GR gr.po
) else (
mkdir ..\%FILENAME%\locale\%1\LC_MESSAGES
msgfmt.exe --output-file %FILENAME%.mo %2
move %2 ..\%FILENAME%\locale\%1\LC_MESSAGES\%FILENAME%.po 1>NUL
move %FILENAME%.mo ..\%FILENAME%\locale\%1\LC_MESSAGES\ 1>NUL
tree /F ..\%FILENAME%\locale\%1
echo Done
)

View File

@ -1,32 +0,0 @@
#!/bin/bash
# Author: Sotiris Papadopoulos
# Last-Edited: 25/02/2015
# Script to auto-create a locale file.
# Usage: ./build_locale.sh <locale> <locale_file>
# Example: ./build_locale.sh gr_GR gr.po
# To create a new locale file copy youtube_dl_gui.po
# to a new locale file (e.g. gr.po) edit it with your
# favorite editor and then run this script.
FILENAME="youtube_dl_gui"
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <locale> <locale_file>"
echo "Example: $0 gr_GR gr.po"
exit 1
fi
mkdir -p "../$FILENAME/locale/$1/LC_MESSAGES/"
msgfmt --output-file "$FILENAME.mo" "$2"
mv "$2" "../$FILENAME/locale/$1/LC_MESSAGES/$FILENAME.po"
mv "$FILENAME.mo" "../$FILENAME/locale/$1/LC_MESSAGES/"
tree "../$FILENAME/locale/$1"
echo "Done"

View File

@ -1,48 +0,0 @@
#!/bin/bash
# Author: Sotiris Papadopoulos <ytubedlg@gmail.com>
# Last-Updated: 2015-07-02
# Script to update all locale files and rebuild the mo files.
# Usage: ./update_locales.sh
cd ../youtube_dl_gui/
echo "[*]Creating new .PO file"
pygettext.py -v -o new.po *.py
#vim new.po
version=$(grep version version.py | cut -d"'" -f2)
dirs=$(find locale -mindepth 2 -maxdepth 2)
echo "[*]Updating old .PO files"
for dir in $dirs; do
msgmerge --update --no-wrap -v "$dir/youtube_dl_gui.po" new.po
# Strip empty headers
sed -i '/: \\n/d' "$dir/youtube_dl_gui.po"
# Upate version
sed -i "s/Project-Id-Version:.*\\\n/Project-Id-Version: youtube-dlg $version\\\n/g" "$dir/youtube_dl_gui.po"
done
echo ""
read -p "Open files for revision?(y/n) " ch
if [ $ch = 'y' ]; then
for dir in $dirs; do
vim "$dir/youtube_dl_gui.po"
done
fi
echo "[*]Building .MO files"
for dir in $dirs; do
msgfmt --use-fuzzy --output-file "$dir/youtube_dl_gui.mo" "$dir/youtube_dl_gui.po"
done
echo "[*]Done"

310
setup.py
View File

@ -3,19 +3,59 @@
"""Youtube-dlg setup file.
Note:
If you get 'TypeError: decoding Unicode is not supported' when you run
py2exe then apply the following patch:
Examples:
Windows::
http://sourceforge.net/p/py2exe/patches/28/
python setup.py py2exe
Linux::
python setup.py install
Build source distribution::
python setup.py sdist
Build platform distribution::
python setup.py bdist
Build the translations::
python setup.py build
Requirements:
* GNU gettext utilities
Notes:
If you get 'TypeError: decoding Unicode is not supported' when you run
py2exe then apply the following patch::
http://sourceforge.net/p/py2exe/patches/28/
Basic steps of the setup::
* Run pre-build tasks
* Call setup handler based on OS & options
* Set up hicolor icons (if supported by platform)
* Set up fallback pixmaps icon (if supported by platform)
* Set up package level pixmaps icons (*.png, *.ico)
* Set up package level i18n files (*.mo)
* Set up scripts (executables) (if supported by platform)
* Run setup
"""
from distutils.core import setup
import os
import sys
import shutil
import glob
from shutil import copyfile
from subprocess import call
PY2EXE = len(sys.argv) >= 2 and sys.argv[1] == 'py2exe'
PY2EXE = len(sys.argv) >= 2 and sys.argv[1] == "py2exe"
if PY2EXE:
try:
@ -24,18 +64,6 @@ if PY2EXE:
print error
sys.exit(1)
PY2APP = len(sys.argv) >= 2 and sys.argv[1] == 'py2app'
if PY2APP:
try:
import py2app
except ImportError as error:
print error
sys.exit(1)
from distutils.core import setup
from distutils.sysconfig import get_python_lib
from youtube_dl_gui import (
__author__,
__appname__,
@ -44,150 +72,158 @@ from youtube_dl_gui import (
__license__,
__projecturl__,
__description__,
__packagename__,
__descriptionfull__
)
ICONS_SIZES = ('16x16', '32x32', '48x48', '64x64', '128x128', '256x256')
ICONS_TEMPLATE = 'youtube_dl_gui/icons/youtube-dl-gui_{size}.png'
ICONS_LIST = [ICONS_TEMPLATE.format(size=size) for size in ICONS_SIZES]
# Set icons path
PY2EXE_ICONS = 'icons'
WINDOWS_ICONS = os.path.join(get_python_lib(), 'youtube_dl_gui', 'icons')
LINUX_ICONS = '/usr/share/icons/hicolor/'
LINUX_FALLBACK_ICONS = '/usr/share/pixmaps/'
# Set localization files path
LOCALE_PATH = os.path.join('youtube_dl_gui', 'locale')
PY2EXE_LOCALE_DIR = 'locale'
WIN_LOCALE_DIR = os.path.join(get_python_lib(), 'youtube_dl_gui', 'locale')
LINUX_LOCALE_DIR = '/usr/share/{app_name}/locale/'.format(app_name=__appname__.lower())
OSX_PREFIX = '/usr/local/Cellar/youtube-dl-gui/{version}'.format(version=__version__)
OSX_LOCALE_DIR = '{prefix}/share/locale'.format(prefix=OSX_PREFIX)
OSX_APP = '{prefix}/YoutubeDlGui.app'.format(prefix=OSX_PREFIX)
# Setup can not handle unicode
__packagename__ = str(__packagename__)
# Helper functions
def create_scripts():
dest_dir = os.path.join('build', '_scripts')
dest_file = os.path.join(dest_dir, 'youtube-dl-gui')
src_file = os.path.join('youtube_dl_gui', '__main__.py')
"""Create the binary scripts."""
dest_dir = os.path.join("build", "_scripts")
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
shutil.copyfile(src_file, dest_file)
copyfile(os.path.join(__packagename__, "__main__.py"),
os.path.join(dest_dir, "youtube-dl-gui"))
def build_translations():
"""Build the MO files."""
exec_name = "msgfmt.exe" if os.name == "nt" else "msgfmt"
search_pattern = os.path.join("youtube_dl_gui", "locale", "*", "LC_MESSAGES", "*.po")
for po_file in glob.glob(search_pattern):
mo_file = po_file.replace(".po", ".mo")
try:
print "Building MO file for '%s'" % po_file
call([exec_name, "-o", mo_file, po_file])
except OSError:
print "Could not locate file '%s', exiting..." % exec_name
sys.exit(1)
##################################
def set_locale_files(data_files):
for directory in os.listdir(LOCALE_PATH):
locale_lang = os.path.join(directory, 'LC_MESSAGES')
def linux_setup():
scripts = []
data_files = []
package_data = {}
src = os.path.join(LOCALE_PATH, locale_lang, 'youtube_dl_gui.mo')
# Add hicolor icons
for path in glob.glob("youtube_dl_gui/data/icons/hicolor/*x*"):
size = os.path.basename(path)
if PY2EXE:
dst = os.path.join(PY2EXE_LOCALE_DIR, locale_lang)
elif os.name == 'nt':
dst = os.path.join(WIN_LOCALE_DIR, locale_lang)
elif sys.platform == 'darwin':
dst = os.path.join(OSX_LOCALE_DIR, locale_lang)
else:
dst = os.path.join(LINUX_LOCALE_DIR, locale_lang)
dst = "share/icons/hicolor/{size}/apps".format(size=size)
src = "{icon_path}/apps/youtube-dl-gui.png".format(icon_path=path)
data_files.append((dst, [src]))
# Add fallback icon, see issue #14
data_files.append(
("share/pixmaps", ["youtube_dl_gui/data/pixmaps/youtube-dl-gui.png"])
)
def py2exe_setup():
create_scripts()
py2exe_dependencies = [
'C:\\Windows\\System32\\ffmpeg.exe',
'C:\\Windows\\System32\\ffprobe.exe',
'C:\\python27\\DLLs\\MSVCP90.dll'
# Add other package data
package_data[__packagename__] = [
"data/pixmaps/*.png",
"data/pixmaps/*.ico",
"locale/*/LC_MESSAGES/*.mo"
]
py2exe_data_files = [
('', py2exe_dependencies),
(PY2EXE_ICONS, ICONS_LIST)
]
# Add scripts
scripts.append("build/_scripts/youtube-dl-gui")
set_locale_files(py2exe_data_files)
py2exe_options = {
'includes': ['wx.lib.pubsub.*',
'wx.lib.pubsub.core.*',
'wx.lib.pubsub.core.arg1.*']
setup_params = {
"scripts": scripts,
"data_files": data_files,
"package_data": package_data
}
py2exe_windows = {
'script': 'build\\_scripts\\youtube-dl-gui',
'icon_resources': [(0, 'youtube_dl_gui\\icons\\youtube-dl-gui.ico')]
}
params = {
'data_files': py2exe_data_files,
'windows': [py2exe_windows],
'options': {'py2exe': py2exe_options}
}
return params
def py2app_setup():
data_files = []
create_scripts()
set_locale_files(data_files)
params = {
'data_files': data_files,
'app': ['build/_scripts/youtube-dl-gui'],
'setup_requires': ['py2app'],
'options': {'py2app': {'argv_emulation': True, 'iconfile': 'youtube_dl_gui/icons/osx/YoutubeDlGui.icns'}},
}
return params
def normal_setup():
data_files = list()
if os.name == 'nt':
icons_dir = (WINDOWS_ICONS, ICONS_LIST)
data_files.append(icons_dir)
set_locale_files(data_files)
params = {'data_files': data_files}
else:
# Create all the hicolor icons
for index, size in enumerate(ICONS_SIZES):
icons_dest = os.path.join(LINUX_ICONS, size, 'apps')
icons_dir = (icons_dest, [ICONS_LIST[index]])
data_files.append(icons_dir)
# Add the 48x48 icon as fallback
fallback_icon = (LINUX_FALLBACK_ICONS, [ICONS_LIST[2]])
data_files.append(fallback_icon)
set_locale_files(data_files)
create_scripts()
params = {'data_files': data_files, 'scripts': ['build/_scripts/youtube-dl-gui']}
return params
return setup_params
if PY2EXE:
params = py2exe_setup()
def windows_setup():
def normal_setup():
package_data = {}
# On Windows we dont use the icons under hicolor
package_data[__packagename__] = [
"data\\pixmaps\\*.png",
"data\\pixmaps\\*.ico",
"locale\\*\\LC_MESSAGES\\*.mo"
]
setup_params = {
"package_data": package_data
}
return setup_params
def py2exe_setup():
windows = []
data_files = []
# Py2exe dependencies & options
dependencies = [
"C:\\Windows\\System32\\ffmpeg.exe",
"C:\\Windows\\System32\\ffprobe.exe",
"C:\\python27\\DLLs\\MSVCP90.dll"
]
options = {
"includes": ["wx.lib.pubsub.*",
"wx.lib.pubsub.core.*",
"wx.lib.pubsub.core.arg1.*"]
}
#############################################
# Add package data
data_files.extend([
("", dependencies),
("data\\pixmaps", glob.glob("youtube_dl_gui\\data\\pixmaps\\*.*")),
])
# We have to manually add the translation files since py2exe cant do it
for lang in os.listdir("youtube_dl_gui\\locale"):
dst = os.path.join("locale", lang, "LC_MESSAGES")
src = os.path.join("youtube_dl_gui", dst, "youtube_dl_gui.mo")
data_files.append((dst, [src]))
# Add GUI executable details
windows.append({
"script": "build\\_scripts\\youtube-dl-gui",
"icon_resources": [(0, "youtube_dl_gui\\data\\pixmaps\\youtube-dl-gui.ico")]
})
setup_params = {
"windows": windows,
"data_files": data_files,
"options": {"py2exe": options}
}
return setup_params
if PY2EXE:
return py2exe_setup()
return normal_setup()
# Execute pre-build stuff
create_scripts()
build_translations()
if os.name == "nt":
params = windows_setup()
else:
if PY2APP:
params = py2app_setup()
else:
params = normal_setup()
params = linux_setup()
setup(
@ -199,7 +235,7 @@ setup(
url = __projecturl__,
description = __description__,
long_description = __descriptionfull__,
packages = ['youtube_dl_gui'],
packages = [__packagename__],
**params
)

0
tests/__init__.py Normal file
View File

550
tests/test_ditem.py Normal file
View File

@ -0,0 +1,550 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""Contains test cases for the DownloadItem object."""
from __future__ import unicode_literals
import sys
import os.path
import unittest
PATH = os.path.realpath(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(os.path.dirname(PATH)))
try:
from youtube_dl_gui.downloadmanager import DownloadItem
except ImportError as error:
print error
sys.exit(1)
class TestItemInit(unittest.TestCase):
"""Test case for DownloadItem init."""
def test_init(self):
url = "url"
options = ["-f", "flv"]
ditem = DownloadItem(url, options)
self.assertEqual(ditem.stage, "Queued")
self.assertEqual(ditem.url, url)
self.assertEqual(ditem.options, options)
self.assertEqual(ditem.object_id, hash(url + unicode(options)))
self.assertEqual(ditem.path, "")
self.assertEqual(ditem.filenames, [])
self.assertEqual(ditem.extensions, [])
self.assertEqual(ditem.filesizes, [])
self.assertEqual(
ditem.progress_stats,
{"filename": url,
"extension": "-",
"filesize": "-",
"percent": "0%",
"speed": "-",
"eta": "-",
"status": "Queued",
"playlist_size": "",
"playlist_index": ""}
)
class TestGetFiles(unittest.TestCase):
"""Test case for DownloadItem get_files method."""
def setUp(self):
self.ditem = DownloadItem("url", ["-f", "flv"])
def test_get_files(self):
path = os.path.join("/home", "user", "downloads")
self.ditem.path = path
self.ditem.filenames = ["file1", "file2"]
self.ditem.extensions = [".mp4", ".m4a"]
self.assertEqual(self.ditem.get_files(), [os.path.join(path, "file1" + ".mp4"), os.path.join(path, "file2" + ".m4a")])
def test_get_files_no_data(self):
self.assertEqual(self.ditem.get_files(), [])
class TestItemComparison(unittest.TestCase):
"""Test case for DownloadItem __eq__ method."""
def test_equal_true(self):
ditem1 = DownloadItem("url", ["-f", "flv"])
ditem2 = DownloadItem("url", ["-f", "flv"])
self.assertTrue(ditem1 == ditem2)
def test_equal_false(self):
ditem1 = DownloadItem("url", ["-f", "flv"])
ditem2 = DownloadItem("url2", ["-f", "flv"])
self.assertFalse(ditem1 == ditem2)
ditem1 = DownloadItem("url", ["-f", "flv"])
ditem2 = DownloadItem("url", ["-f", "mp4"])
self.assertFalse(ditem1 == ditem2)
class TestSetItemStage(unittest.TestCase):
"""Test case for DownloadItem stage setter."""
def setUp(self):
self.ditem = DownloadItem("url", ["-f", "flv"])
def test_set_stage_valid(self):
self.ditem.stage = "Queued"
self.assertEqual(self.ditem.stage, "Queued")
self.assertEqual(self.ditem.progress_stats["status"], "Queued")
self.ditem.stage = "Active"
self.assertEqual(self.ditem.stage, "Active")
self.assertEqual(self.ditem.progress_stats["status"], "Pre Processing")
self.ditem.stage = "Completed"
self.assertEqual(self.ditem.stage, "Completed")
self.assertEqual(self.ditem.progress_stats["status"], "Finished")
self.ditem.stage = "Paused"
self.assertEqual(self.ditem.stage, "Paused")
self.assertEqual(self.ditem.progress_stats["status"], "Paused")
self.ditem.stage = "Error"
self.assertEqual(self.ditem.stage, "Error")
self.assertEqual(self.ditem.progress_stats["status"], "Error")
def test_set_stage_invalid(self):
raised = False
try:
self.ditem.stage = "some other status"
except ValueError:
raised = True
self.assertTrue(raised)
class TestUpdateStats(unittest.TestCase):
"""Test case for DownloadItem update_stats method."""
def setUp(self):
self.ditem = DownloadItem("url", ["-f", "flv"])
def test_update_stats(self):
path = os.path.join("/home", "user")
# 1st playlist item
self.ditem.update_stats({"filename": "somefilename.f1",
"extension": ".mp4",
"filesize": "9.45MiB",
"percent": "2.0%",
"speed": "200.00KiB/s",
"eta": "00:38",
"status": "Downloading",
"path": path,
"playlist_size": "10",
"playlist_index": "1"})
self.assertEqual(self.ditem.path, path)
self.assertEqual(self.ditem.filenames, ["somefilename.f1"])
self.assertEqual(self.ditem.extensions, [".mp4"])
# Do not update filesizes unless percentage is 100%
# See https://github.com/MrS0m30n3/youtube-dl-gui/issues/162
self.assertEqual(self.ditem.filesizes, [])
self.assertEqual(
self.ditem.progress_stats,
{"filename": "somefilename.f1",
"extension": ".mp4",
"filesize": "9.45MiB",
"percent": "2.0%",
"speed": "200.00KiB/s",
"eta": "00:38",
"status": "Downloading",
"playlist_size": "10",
"playlist_index": "1"}
)
# Since the percentage is 100% this should update the filesizes list
self.ditem.update_stats({"filesize": "9.45MiB",
"percent": "100%",
"speed": "",
"eta": "",
"status": "Downloading"})
self.assertEqual(self.ditem.filesizes, [9909043.20])
self.ditem.update_stats({"filename": "somefilename.f2",
"extension": ".m4a",
"filesize": "2.22MiB",
"percent": "33.0%",
"speed": "200.00KiB/s",
"eta": "00:20",
"status": "Downloading",
"path": path})
self.assertEqual(self.ditem.path, path)
self.assertEqual(self.ditem.filenames, ["somefilename.f1", "somefilename.f2"])
self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
self.assertEqual(self.ditem.filesizes, [9909043.20])
self.assertEqual(
self.ditem.progress_stats,
{"filename": "somefilename.f2",
"extension": ".m4a",
"filesize": "2.22MiB",
"percent": "33.0%",
"speed": "200.00KiB/s",
"eta": "00:20",
"status": "Downloading",
"playlist_size": "10",
"playlist_index": "1"}
)
# Since the percentage is 100% this should update the filesizes list
self.ditem.update_stats({"filesize": "2.22MiB",
"percent": "100%",
"speed": "",
"eta": "",
"status": "Downloading"})
self.assertEqual(self.ditem.filesizes, [9909043.20, 2327838.72])
# Moving to the 2nd playlist item
self.ditem.update_stats({"filename": "someotherfilename.f1",
"extension": ".mp4",
"filesize": "10.25MiB",
"percent": "50.0%",
"speed": "200.00KiB/s",
"eta": "00:38",
"status": "Downloading",
"path": path,
"playlist_size": "10",
"playlist_index": "2"})
# We must reset filenames, extensions & filesizes lists when changing playlist index
# else the filesizes for the post processed files will be wrong
self.assertEqual(self.ditem.filenames, ["someotherfilename.f1"])
self.assertEqual(self.ditem.extensions, [".mp4"])
self.assertEqual(self.ditem.filesizes, [])
self.assertEqual(
self.ditem.progress_stats,
{"filename": "someotherfilename.f1",
"extension": ".mp4",
"filesize": "10.25MiB",
"percent": "50.0%",
"speed": "200.00KiB/s",
"eta": "00:38",
"status": "Downloading",
"playlist_size": "10",
"playlist_index": "2"}
)
# Since the percentage is 100% this should update the filesizes list
self.ditem.update_stats({"filesize": "10.25MiB",
"percent": "100%",
"speed": "",
"eta": "",
"status": "Downloading"})
self.assertEqual(self.ditem.filesizes, [10747904.0])
self.ditem.update_stats({"filename": "someotherfilename.f2",
"extension": ".m4a",
"filesize": "3.33MiB",
"percent": "33.0%",
"speed": "200.00KiB/s",
"eta": "00:30",
"status": "Downloading",
"path": path})
self.assertEqual(self.ditem.path, path)
self.assertEqual(self.ditem.filenames, ["someotherfilename.f1", "someotherfilename.f2"])
self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
self.assertEqual(self.ditem.filesizes, [10747904.0])
self.assertEqual(
self.ditem.progress_stats,
{"filename": "someotherfilename.f2",
"extension": ".m4a",
"filesize": "3.33MiB",
"percent": "33.0%",
"speed": "200.00KiB/s",
"eta": "00:30",
"status": "Downloading",
"playlist_size": "10",
"playlist_index": "2"}
)
# Since the percentage is 100% this should update the filesizes list
self.ditem.update_stats({"filesize": "3.33MiB",
"percent": "100%",
"speed": "",
"eta": "",
"status": "Downloading"})
self.assertEqual(self.ditem.filesizes, [10747904.0, 3491758.08])
# Let's move to the 3rd playlist item
# Here we mimic youtube-dl's "max downloads limit reached"
# this line should not reset the filenames, extensions & filesizes lists
# since we will lose the ability to play the last playlist item
self.ditem.update_stats({"status": "Downloading",
"playlist_size": "10",
"playlist_index": "3"})
self.assertEqual(self.ditem.filenames, ["someotherfilename.f1", "someotherfilename.f2"])
self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
self.assertEqual(self.ditem.filesizes, [10747904.0, 3491758.08])
self.assertEqual(
self.ditem.progress_stats,
{"filename": "someotherfilename.f2",
"extension": ".m4a",
"filesize": "3.33MiB",
"percent": "100%",
"speed": "-",
"eta": "-",
"status": "Downloading",
"playlist_size": "10",
"playlist_index": "3"}
)
def test_update_stats_invalid_input(self):
self.assertRaises(AssertionError, self.ditem.update_stats, [])
def test_update_stats_empty_strings(self):
self.ditem.update_stats({"filename": "",
"extension": "",
"filesize": "",
"percent": "",
"speed": "",
"eta": "",
"status": "",
"playlist_size": "",
"playlist_index": ""})
self.assertEqual(
self.ditem.progress_stats,
{"filename": "url",
"extension": "-",
"filesize": "-",
"percent": "0%",
"speed": "-",
"eta": "-",
"status": "Queued",
"playlist_size": "",
"playlist_index": ""}
)
def test_update_stats_not_string(self):
self.ditem.update_stats({"filename": None, "status": 1234, "eta": False})
self.assertEqual(self.ditem.progress_stats["filename"], "url")
self.assertEqual(self.ditem.progress_stats["status"], "Queued")
self.assertEqual(self.ditem.progress_stats["eta"], "-")
class TestDownloadItemPrivate(unittest.TestCase):
"""Test case for private method of the DownloadItem."""
def test_set_stage(self):
ditem = DownloadItem("url", ["-f", "flv"])
active_status = ["Pre Processing", "Downloading", "Post Processing"]
complete_status = ["Finished", "Warning", "Already Downloaded"]
error_status = ["Error", "Stopped", "Filesize Abort"]
for status in active_status:
ditem._set_stage(status)
self.assertEqual(ditem.stage, "Active")
for status in complete_status:
ditem._set_stage(status)
self.assertEqual(ditem.stage, "Completed")
for status in error_status:
ditem._set_stage(status)
self.assertEqual(ditem.stage, "Error")
def test_calc_post_proc_size(self):
# REFACTOR Not an actual method
# should transfer to TestUpdateStats
ditem = DownloadItem("url", ["-f", "flv"])
ditem.update_stats({"filename": "file.f123",
"extension": ".webm",
"filesize": "10.00MiB",
"percent": "100%",
"speed": "",
"eta": "",
"status": "Downloading",
"path": "/home/user"})
ditem.update_stats({"filename": "file.f456",
"extension": ".m4a",
"filesize": "3.45MiB",
"percent": "100%",
"speed": "",
"eta": "",
"status": "Downloading",
"path": "/home/user"})
# Mimic youtube-dl post process behaviour
ditem.update_stats({"filename": "file",
"extension": ".webm",
"percent": "100%",
"speed": "",
"eta": "",
"status": "Post Processing"})
self.assertEqual(ditem.filesizes, [10485760.00, 3617587.20, 14103347.20])
self.assertEqual(
ditem.progress_stats,
{"filename": "file",
"extension": ".webm",
"filesize": "13.45MiB",
"percent": "100%",
"speed": "-",
"eta": "-",
"status": "Post Processing",
"playlist_size": "",
"playlist_index": ""}
)
class TestReset(unittest.TestCase):
"""Test case for the DownloadItem reset method."""
def setUp(self):
self.ditem = DownloadItem("url", ["-f", "flv"])
def test_reset_completed_stage(self):
self.ditem._stage = "Completed"
self.ditem.path = os.path.join("/home", "user")
self.ditem.filenames = ["file"]
self.ditem.extensions = [".mp4"]
self.ditem.filesizes = [123456.00]
self.ditem.progress_stats = {
"filename": "file",
"extension": ".mp4",
"filsize": "6.66MiB",
"percent": "100%",
"speed": "-",
"eta": "-",
"status": "Finished",
"playlist_size": "",
"playlist_index": ""
}
self.ditem.reset()
self.assertEqual(self.ditem._stage, "Queued")
self.assertEqual(self.ditem.path, "")
self.assertEqual(self.ditem.filenames, [])
self.assertEqual(self.ditem.extensions, [])
self.assertEqual(self.ditem.filesizes, [])
self.assertEqual(
self.ditem.progress_stats,
{"filename": "url",
"extension": "-",
"filesize": "-",
"percent": "0%",
"speed": "-",
"eta": "-",
"status": "Queued",
"playlist_size": "",
"playlist_index": ""}
)
def test_reset_error_stage(self):
self.ditem._stage = "Error"
self.ditem.path = os.path.join("/home", "user")
self.ditem.filenames = ["file1", "file2", "file"]
self.ditem.extensions = [".mp4", ".m4a", ".mp4"]
self.ditem.filesizes = [1234.00, 3421.00, 4655.00]
self.ditem.progress_stats = {
"filename": "file",
"extension": ".mp4",
"filsize": "9.45MiB",
"percent": "100%",
"speed": "-",
"eta": "-",
"status": "Error",
"playlist_size": "10",
"playlist_index": "8"
}
self.ditem.reset()
self.assertEqual(self.ditem._stage, "Queued")
self.assertEqual(self.ditem.path, "")
self.assertEqual(self.ditem.filenames, [])
self.assertEqual(self.ditem.extensions, [])
self.assertEqual(self.ditem.filesizes, [])
self.assertEqual(
self.ditem.progress_stats,
{"filename": "url",
"extension": "-",
"filesize": "-",
"percent": "0%",
"speed": "-",
"eta": "-",
"status": "Queued",
"playlist_size": "",
"playlist_index": ""}
)
def test_reset_paused_stage(self):
self.ditem._stage = "Paused"
# No need to change filanames, extension, etc
# since everything in pause state has the default value
self.ditem.reset()
self.assertEqual(self.ditem._stage, "Queued")
def test_reset_active_stage(self):
self.ditem._stage = "Active"
self.ditem.path = os.path.join("/home", "user")
self.ditem.filenames = ["file1"]
self.ditem.extensions = [".mp4"]
self.ditem.filesizes = []
self.ditem.progress_stats = {
"filename": "file1",
"extension": ".mp4",
"filsize": "9.45MiB",
"percent": "75.5%",
"speed": "200.00KiB/s",
"eta": "00:10",
"status": "Downloading"
}
self.assertRaises(RuntimeError, self.ditem.reset)
def main():
unittest.main()
if __name__ == '__main__':
main()

276
tests/test_dlist.py Normal file
View File

@ -0,0 +1,276 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""Contains test cases for the DownloadList object."""
from __future__ import unicode_literals
import sys
import os.path
import unittest
PATH = os.path.realpath(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(os.path.dirname(PATH)))
try:
import mock
from youtube_dl_gui.downloadmanager import DownloadList, synchronized
except ImportError as error:
print error
sys.exit(1)
class TestInit(unittest.TestCase):
"""Test case for the DownloadList init."""
def test_init(self):
mocks = [mock.Mock(object_id=0), mock.Mock(object_id=1)]
dlist = DownloadList(mocks)
self.assertEqual(dlist._items_list, [0, 1])
self.assertEqual(dlist._items_dict, {0: mocks[0], 1: mocks[1]})
def test_init_empty(self):
dlist = DownloadList()
self.assertEqual(dlist._items_list, [])
self.assertEqual(dlist._items_dict, {})
def test_init_invalid_args(self):
self.assertRaises(AssertionError, DownloadList, {})
self.assertRaises(AssertionError, DownloadList, ())
self.assertRaises(AssertionError, DownloadList, False)
class TestInsert(unittest.TestCase):
"""Test case for the DownloadList insert method."""
def test_insert(self):
mock_ditem = mock.Mock(object_id=0)
dlist = DownloadList()
dlist.insert(mock_ditem)
self.assertEqual(dlist._items_list, [0])
self.assertEqual(dlist._items_dict, {0: mock_ditem})
class TestRemove(unittest.TestCase):
"""Test case for the DownloadList remove method."""
def setUp(self):
self.mocks = [mock.Mock(object_id=0), mock.Mock(object_id=1), mock.Mock(object_id=2)]
self.dlist = DownloadList(self.mocks)
def test_remove(self):
self.assertTrue(self.dlist.remove(1))
self.assertEqual(self.dlist._items_list, [0, 2])
self.assertEqual(self.dlist._items_dict, {0: self.mocks[0], 2: self.mocks[2]})
def test_remove_not_exist(self):
self.assertRaises(KeyError, self.dlist.remove, 3)
def test_remove_active(self):
self.mocks[1].stage = "Active"
self.assertFalse(self.dlist.remove(1))
self.assertEqual(self.dlist._items_list, [0, 1, 2])
self.assertEqual(self.dlist._items_dict, {0: self.mocks[0], 1: self.mocks[1], 2: self.mocks[2]})
class TestFetchNext(unittest.TestCase):
"""Test case for the DownloadList fetch_next method."""
def test_fetch_next(self):
items_count = 3
mocks = [mock.Mock(object_id=i, stage="Queued") for i in range(items_count)]
dlist = DownloadList(mocks)
for i in range(items_count):
self.assertEqual(dlist.fetch_next(), mocks[i])
mocks[i].stage = "Active"
self.assertIsNone(dlist.fetch_next())
for i in range(items_count):
mocks[i].stage = "Completed"
self.assertIsNone(dlist.fetch_next())
mocks[1].stage = "Queued" # Re-queue item
self.assertEqual(dlist.fetch_next(), mocks[1])
def test_fetch_next_empty_list(self):
dlist = DownloadList()
self.assertIsNone(dlist.fetch_next())
class TestMoveUp(unittest.TestCase):
"""Test case for the DownloadList move_up method."""
def setUp(self):
mocks = [mock.Mock(object_id=i, stage="Queued") for i in range(3)]
self.dlist = DownloadList(mocks)
def test_move_up(self):
self.assertTrue(self.dlist.move_up(1))
self.assertEqual(self.dlist._items_list, [1, 0, 2])
def test_move_up_already_on_top(self):
self.assertFalse(self.dlist.move_up(0))
self.assertEqual(self.dlist._items_list, [0, 1, 2])
def test_move_up_not_exist(self):
self.assertRaises(ValueError, self.dlist.move_up, 666)
class TestMoveDown(unittest.TestCase):
"""Test case for the DownloadList move_down method."""
def setUp(self):
mocks = [mock.Mock(object_id=i, stage="Queued") for i in range(3)]
self.dlist = DownloadList(mocks)
def test_move_down(self):
self.assertTrue(self.dlist.move_down(1))
self.assertEqual(self.dlist._items_list, [0, 2, 1])
def test_move_down_already_on_bottom(self):
self.assertFalse(self.dlist.move_down(2))
self.assertEqual(self.dlist._items_list, [0, 1, 2])
def test_move_down_not_exist(self):
self.assertRaises(ValueError, self.dlist.move_down, 666)
class TestGetItem(unittest.TestCase):
"""Test case for the DownloadList get_item method."""
def test_get_item(self):
mocks = [mock.Mock(object_id=i) for i in range(3)]
dlist = DownloadList(mocks)
self.assertEqual(dlist.get_item(0), mocks[0])
self.assertEqual(dlist.get_item(2), mocks[2])
def test_get_item_not_exist(self):
dlist = DownloadList()
self.assertRaises(KeyError, dlist.get_item, 0)
class TestGetLength(unittest.TestCase):
"""Test case for the DownloadList __len__ method."""
def test_get_length(self):
dlist = DownloadList([mock.Mock(), mock.Mock()])
self.assertEqual(len(dlist), 2)
def test_get_length_empty_list(self):
dlist = DownloadList()
self.assertEqual(len(dlist), 0)
class TestHasItem(unittest.TestCase):
"""Test case for the DownloadList has_item method."""
def setUp(self):
mock_ditem = mock.Mock(object_id=1337)
self.dlist = DownloadList([mock_ditem])
def test_has_item_true(self):
self.assertTrue(self.dlist.has_item(1337))
def test_has_item_false(self):
self.assertFalse(self.dlist.has_item(1000))
class TestGetItems(unittest.TestCase):
"""Test case for the DownloadList get_items method."""
def test_get_items(self):
mocks = [mock.Mock() for _ in range(3)]
dlist = DownloadList(mocks)
self.assertEqual(dlist.get_items(), mocks)
def test_get_items_empty_list(self):
dlist = DownloadList()
self.assertEqual(dlist.get_items(), [])
class TestClear(unittest.TestCase):
"""Test case for the DownloadList clear method."""
def test_clear(self):
dlist = DownloadList([mock.Mock() for _ in range(3)])
self.assertEqual(len(dlist), 3)
dlist.clear()
self.assertEqual(len(dlist), 0)
class TestChangeStage(unittest.TestCase):
"""Test case for the DownloadList change_stage method."""
def setUp(self):
self.mocks = [mock.Mock(object_id=i, stage="Queued") for i in range(3)]
self.dlist = DownloadList(self.mocks)
def test_change_stage(self):
self.dlist.change_stage(0, "Active")
self.assertEqual(self.mocks[0].stage, "Active")
def test_change_stage_id_not_exist(self):
self.assertRaises(KeyError, self.dlist.change_stage, 3, "Active")
class TestIndex(unittest.TestCase):
"""Test case for the DownloadList index method."""
def setUp(self):
self.mocks = [mock.Mock(object_id=i) for i in range(3)]
self.dlist = DownloadList(self.mocks)
def test_index(self):
self.assertEqual(self.dlist.index(2), 2)
def test_index_not_exist(self):
self.assertEqual(self.dlist.index(3), -1)
class TestSynchronizeDecorator(unittest.TestCase):
def test_synchronize(self):
mock_func = mock.Mock()
mock_lock = mock.Mock()
decorated_func = synchronized(mock_lock)(mock_func)
self.assertEqual(decorated_func(1, a=2), mock_func.return_value)
mock_func.assert_called_once_with(1, a=2)
mock_lock.acquire.assert_called_once()
mock_lock.release.assert_called_once()
def main():
unittest.main()
if __name__ == '__main__':
main()

115
tests/test_parsers.py Normal file
View File

@ -0,0 +1,115 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""Contains test cases for the parsers module."""
from __future__ import unicode_literals
import sys
import os.path
import unittest
PATH = os.path.realpath(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(os.path.dirname(PATH)))
try:
from youtube_dl_gui.parsers import OptionsParser
except ImportError as error:
print error
sys.exit(1)
class TestParse(unittest.TestCase):
"""Test case for OptionsParser parse method."""
def test_parse_to_audio_requirement_bug(self):
"""Test case for the 'to_audio' requirement."""
options_dict = { # Extracted from youtube-dlG settings.json
'keep_video': False,
'opts_win_size': (640, 490),
'open_dl_dir': False,
'second_video_format': '0',
'native_hls': False,
'write_subs': False,
'workers_number': 3,
'max_downloads': 0,
'max_filesize': 0,
'youtube_dl_debug': False,
'shutdown': False,
'selected_format': 'mp3',
'write_all_subs': False,
'enable_log': True,
'embed_thumbnail': True,
'audio_quality': '9',
'subs_lang': 'en',
'audio_format': 'mp3',
'restrict_filenames': False,
'min_filesize_unit': '',
'selected_audio_formats': ['mp3', 'm4a', 'vorbis'],
'selected_video_formats': ['webm', 'mp4'],
'save_path': '/home/user/Workplace/test/youtube',
'output_template': '%(uploader)s/%(title)s.%(ext)s',
'show_completion_popup': True,
'locale_name': 'en_US',
'to_audio': False,
'confirm_deletion': True,
'min_filesize': 0,
'save_path_dirs': ['/home/user/Downloads', '/home/user/Desktop', '/home/user/Videos', '/home/user/Music', '/home/user/Workplace/test/youtube'],
'sudo_password': '',
'video_password': '',
'output_format': 1,
'embed_subs': False,
'write_auto_subs': False,
'video_format': '0',
'confirm_exit': False,
'referer': '',
'proxy': '',
'add_metadata': False,
'ignore_errors': False,
'log_time': True,
'password': '',
'playlist_end': 0,
'write_description': False,
'retries': 10,
'cmd_args': '',
'write_thumbnail': False,
'playlist_start': 1,
'nomtime': False,
'write_info': False,
'username': '',
'main_win_size': (930, 560),
'user_agent': '',
'max_filesize_unit': '',
'ignore_config': False,
'youtubedl_path': '/home/user/.config/youtube-dlg'
}
expected_cmd_list = ["--newline",
"-x",
"--audio-format",
"mp3",
"--embed-thumbnail",
"--audio-quality",
"9",
"-o",
"/home/user/Workplace/test/youtube/%(title)s.%(ext)s"]
options_parser = OptionsParser()
self.assertItemsEqual(options_parser.parse(options_dict), expected_cmd_list)
# Setting 'to_audio' to True should return the same results
# since the '-x' flag is already set on audio extraction
options_dict["to_audio"] = True
self.assertItemsEqual(options_parser.parse(options_dict), expected_cmd_list)
def main():
unittest.main()
if __name__ == '__main__':
main()

114
tests/test_utils.py Normal file
View File

@ -0,0 +1,114 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Contains test cases for the utils.py module."""
from __future__ import unicode_literals
import sys
import os.path
import unittest
PATH = os.path.realpath(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(os.path.dirname(PATH)))
try:
from youtube_dl_gui import utils
except ImportError as error:
print error
sys.exit(1)
class TestToBytes(unittest.TestCase):
"""Test case for the to_bytes method."""
def test_to_bytes_bytes(self):
self.assertEqual(utils.to_bytes("596.00B"), 596.00)
self.assertEqual(utils.to_bytes("133.55B"), 133.55)
def test_to_bytes_kilobytes(self):
self.assertEqual(utils.to_bytes("1.00KiB"), 1024.00)
self.assertEqual(utils.to_bytes("5.55KiB"), 5683.20)
def test_to_bytes_megabytes(self):
self.assertEqual(utils.to_bytes("13.64MiB"), 14302576.64)
self.assertEqual(utils.to_bytes("1.00MiB"), 1048576.00)
def test_to_bytes_gigabytes(self):
self.assertEqual(utils.to_bytes("1.00GiB"), 1073741824.00)
self.assertEqual(utils.to_bytes("1.55GiB"), 1664299827.20)
def test_to_bytes_terabytes(self):
self.assertEqual(utils.to_bytes("1.00TiB"), 1099511627776.00)
class TestFormatBytes(unittest.TestCase):
"""Test case for the format_bytes method."""
def test_format_bytes_bytes(self):
self.assertEqual(utils.format_bytes(518.00), "518.00B")
def test_format_bytes_kilobytes(self):
self.assertEqual(utils.format_bytes(1024.00), "1.00KiB")
def test_format_bytes_megabytes(self):
self.assertEqual(utils.format_bytes(1048576.00), "1.00MiB")
def test_format_bytes_gigabytes(self):
self.assertEqual(utils.format_bytes(1073741824.00), "1.00GiB")
def test_format_bytes_terabytes(self):
self.assertEqual(utils.format_bytes(1099511627776.00), "1.00TiB")
class TestBuildCommand(unittest.TestCase):
"""Test case for the build_command method."""
def test_build_command_linux(self):
result = "youtube-dl -o \"/home/user/downloads/%(upload_date)s/%(id)" \
"s_%(playlist_id)s - %(format)s.%(ext)s\" -f mp4 --ignore-config " \
"\"https://www.youtube.com/watch?v=aaaaaaaaaaa&list=AAAAAAAAAAA\""
options = [
"-o",
"/home/user/downloads/%(upload_date)s/%(id)s_%(playlist_id)s - %(format)s.%(ext)s",
"-f",
"mp4",
"--ignore-config"
]
url = "https://www.youtube.com/watch?v=aaaaaaaaaaa&list=AAAAAAAAAAA"
utils.YOUTUBEDL_BIN = "youtube-dl"
self.assertEqual(utils.build_command(options, url), result)
def test_build_command_windows(self):
result = "youtube-dl.exe -o \"C:\\downloads\\%(upload_date)s\\%(id)" \
"s_%(playlist_id)s - %(format)s.%(ext)s\" -f mp4 --ignore-config " \
"\"https://www.youtube.com/watch?v=aaaaaaaaaaa&list=AAAAAAAAAAA\""
options = [
"-o",
"C:\\downloads\\%(upload_date)s\\%(id)s_%(playlist_id)s - %(format)s.%(ext)s",
"-f",
"mp4",
"--ignore-config"
]
url = "https://www.youtube.com/watch?v=aaaaaaaaaaa&list=AAAAAAAAAAA"
utils.YOUTUBEDL_BIN = "youtube-dl.exe"
self.assertEqual(utils.build_command(options, url), result)
def main():
unittest.main()
if __name__ == "__main__":
main()

273
tests/test_widgets.py Normal file
View File

@ -0,0 +1,273 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""Contains test cases for the widgets.py module."""
from __future__ import unicode_literals
import sys
import os.path
import unittest
PATH = os.path.realpath(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(os.path.dirname(PATH)))
try:
import wx
import mock
from youtube_dl_gui.widgets import (
ListBoxWithHeaders,
CustomComboBox,
ListBoxPopup
)
except ImportError as error:
print error
sys.exit(1)
class TestListBoxWithHeaders(unittest.TestCase):
"""Test cases for the ListBoxWithHeaders widget."""
def setUp(self):
self.app = wx.App()
self.frame = wx.Frame(None)
self.listbox = ListBoxWithHeaders(self.frame)
self.listbox.add_header("Header")
self.listbox.add_items(["item%s" % i for i in xrange(10)])
def tearDown(self):
self.frame.Destroy()
def test_find_string_header_found(self):
self.assertEqual(self.listbox.FindString("Header"), 0)
def test_find_string_header_not_found(self):
self.assertEqual(self.listbox.FindString("Header2"), wx.NOT_FOUND)
def test_find_string_item_found(self):
self.assertEqual(self.listbox.FindString("item1"), 2)
def test_find_string_item_not_found(self):
self.assertEqual(self.listbox.FindString("item"), wx.NOT_FOUND)
def test_get_string_header(self):
self.assertEqual(self.listbox.GetString(0), "Header")
def test_get_string_item(self):
self.assertEqual(self.listbox.GetString(10), "item9")
def test_get_string_item_not_found(self):
self.assertEqual(self.listbox.GetString(11), "")
def test_get_string_item_negative_index(self):
self.assertEqual(self.listbox.GetString(-1), "")
def test_insert_items(self):
self.listbox.SetSelection(1)
self.listbox.InsertItems(["new_item1", "new_item2"], 1)
self.assertEqual(self.listbox.GetString(1), "new_item1")
self.assertEqual(self.listbox.GetString(2), "new_item2")
self.assertEqual(self.listbox.GetString(3), "item0")
self.assertTrue(self.listbox.IsSelected(3)) # Old selection + 2
def test_set_selection_header(self):
self.listbox.SetSelection(0)
self.assertFalse(self.listbox.IsSelected(0))
def test_set_selection_item_valid_index(self):
self.listbox.SetSelection(1)
self.assertEqual(self.listbox.GetSelection(), 1)
def test_set_selection_item_invalid_index(self):
self.listbox.SetSelection(1)
self.assertEqual(self.listbox.GetSelection(), 1)
self.listbox.SetSelection(wx.NOT_FOUND)
self.assertEqual(self.listbox.GetSelection(), wx.NOT_FOUND)
def test_set_string_item(self):
self.listbox.SetString(1, "item_mod0")
self.assertEqual(self.listbox.GetString(1), "item_mod0")
def test_set_string_header(self):
self.listbox.SetString(0, "New header")
self.assertEqual(self.listbox.GetString(0), "New header")
# Make sure that the header is not selectable
self.listbox.SetSelection(0)
self.assertFalse(self.listbox.IsSelected(0))
def test_set_string_selection_header(self):
self.assertFalse(self.listbox.SetStringSelection("Header"))
self.assertFalse(self.listbox.IsSelected(0))
def test_set_string_selection_item(self):
self.assertTrue(self.listbox.SetStringSelection("item1"))
self.assertTrue(self.listbox.IsSelected(2))
def test_get_string_selection(self):
self.listbox.SetSelection(1)
self.assertEqual(self.listbox.GetStringSelection(), "item0")
def test_get_string_selection_empty(self):
self.assertEqual(self.listbox.GetStringSelection(), "")
# wx.ItemContainer methods
def test_append(self):
self.listbox.Append("item666")
self.assertEqual(self.listbox.GetString(11), "item666")
def test_append_items(self):
self.listbox.AppendItems(["new_item1", "new_item2"])
self.assertEqual(self.listbox.GetString(11), "new_item1")
self.assertEqual(self.listbox.GetString(12), "new_item2")
def test_clear(self):
self.listbox.Clear()
self.assertEqual(self.listbox.GetItems(), [])
def test_delete(self):
self.listbox.Delete(0)
self.assertEqual(self.listbox.GetString(0), "item0")
# Test item selection
self.listbox.SetSelection(0)
self.assertTrue(self.listbox.IsSelected(0))
# Test object extra methods
def test_add_header(self):
self.listbox.add_header("Header2")
self.listbox.SetSelection(11)
self.assertFalse(self.listbox.IsSelected(11))
@mock.patch("wx.ListBox.Append")
def test_add_item_with_prefix(self, mock_append):
self.listbox.add_item("new_item")
mock_append.assert_called_once_with(ListBoxWithHeaders.TEXT_PREFIX + "new_item")
@mock.patch("wx.ListBox.Append")
def test_add_item_without_prefix(self, mock_append):
self.listbox.add_item("new_item", with_prefix=False)
mock_append.assert_called_once_with("new_item")
@mock.patch("wx.ListBox.AppendItems")
def test_add_items_with_prefix(self, mock_append):
self.listbox.add_items(["new_item1", "new_item2"])
mock_append.assert_called_once_with([ListBoxWithHeaders.TEXT_PREFIX + "new_item1",
ListBoxWithHeaders.TEXT_PREFIX + "new_item2"])
@mock.patch("wx.ListBox.AppendItems")
def test_add_items_without_prefix(self, mock_append):
self.listbox.add_items(["new_item1", "new_item2"], with_prefix=False)
mock_append.assert_called_once_with(["new_item1", "new_item2"])
class TestCustomComboBox(unittest.TestCase):
"""Test cases for the CustomComboBox widget."""
def setUp(self):
self.app = wx.App()
self.frame = wx.Frame(None)
self.combobox = CustomComboBox(self.frame)
# Call directly the ListBoxWithHeaders methods
self.combobox.listbox.GetControl().add_header("Header")
self.combobox.listbox.GetControl().add_items(["item%s" % i for i in xrange(10)])
def tearDown(self):
self.frame.Destroy()
def test_init(self):
combobox = CustomComboBox(self.frame, -1, "item1", choices=["item0", "item1", "item2"])
self.assertEqual(combobox.GetValue(), "item1")
self.assertEqual(combobox.GetCount(), 3)
self.assertEqual(combobox.GetSelection(), 1)
# wx.ComboBox methods
# Not all of them since most of them are calls to ListBoxWithHeaders
# methods and we already have tests for those
def test_is_list_empty_false(self):
self.assertFalse(self.combobox.IsListEmpty())
def test_is_list_empty_true(self):
self.combobox.Clear()
self.assertTrue(self.combobox.IsListEmpty())
def test_is_text_empty_false(self):
self.combobox.SetValue("somevalue")
self.assertFalse(self.combobox.IsTextEmpty())
def test_is_text_empty_true(self):
self.assertTrue(self.combobox.IsTextEmpty())
def test_set_selection_item(self):
self.combobox.SetSelection(1)
self.assertEqual(self.combobox.GetSelection(), 1)
self.assertEqual(self.combobox.GetValue(), "item0")
def test_set_selection_header(self):
self.combobox.SetSelection(0)
self.assertEqual(self.combobox.GetSelection(), wx.NOT_FOUND)
self.assertEqual(self.combobox.GetValue(), "")
def test_set_string_selection_item(self):
self.combobox.SetStringSelection("item0")
self.assertEqual(self.combobox.GetStringSelection(), "item0")
self.assertEqual(self.combobox.GetValue(), "item0")
def test_set_string_selection_header(self):
self.combobox.SetStringSelection("Header")
self.assertEqual(self.combobox.GetStringSelection(), "")
self.assertEqual(self.combobox.GetValue(), "")
def test_set_string_selection_invalid_string(self):
self.combobox.SetStringSelection("abcde")
self.assertEqual(self.combobox.GetStringSelection(), "")
self.assertEqual(self.combobox.GetValue(), "")
# wx.ItemContainer methods
def test_clear(self):
self.combobox.SetValue("value")
self.combobox.Clear()
self.assertEqual(self.combobox.GetCount(), 0)
self.assertTrue(self.combobox.IsTextEmpty())
def test_append(self):
self.combobox.Append("item10")
self.assertEqual(self.combobox.GetCount(), 12)
def test_append_items(self):
self.combobox.AppendItems(["item10", "item11"])
self.assertEqual(self.combobox.GetCount(), 13)
def test_delete(self):
self.combobox.Delete(1)
self.assertEqual(self.combobox.GetString(1), "item1")
# wx.TextEntry methods
def test_get_value(self):
self.combobox.SetValue("value")
self.assertEqual(self.combobox.GetValue(), "value")
def main():
unittest.main()
if __name__ == '__main__':
main()

View File

@ -25,6 +25,8 @@ except ImportError as error:
print error
sys.exit(1)
__packagename__ = "youtube_dl_gui"
# For package use
from .version import __version__
from .info import (
@ -38,6 +40,9 @@ from .info import (
__descriptionfull__,
)
gettext.install(__packagename__)
from .formats import reload_strings
from .logmanager import LogManager
from .optionsmanager import OptionsManager
@ -61,11 +66,12 @@ if opt_manager.options['enable_log']:
locale_dir = get_locale_file()
try:
gettext.translation('youtube_dl_gui', locale_dir, [opt_manager.options['locale_name']]).install(unicode=True)
gettext.translation(__packagename__, locale_dir, [opt_manager.options['locale_name']]).install(unicode=True)
except IOError:
opt_manager.options['locale_name'] = 'en_US'
gettext.install('youtube_dl_gui')
gettext.install(__packagename__)
reload_strings()
from .mainframe import MainFrame

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 574 B

After

Width:  |  Height:  |  Size: 574 B

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

View File

@ -0,0 +1,2 @@
icons from: https://www.iconfinder.com/iconsets/google-material-design-icons
license: https://creativecommons.org/licenses/by-sa/3.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

View File

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -360,12 +360,22 @@ def extract_data(stdout):
'playlist_size' : The number of videos in the playlist.
"""
def extract_filename(input_data):
path, fullname = os.path.split(input_data.strip("\""))
filename, extension = os.path.splitext(fullname)
return path, filename, extension
data_dictionary = {}
if not stdout:
return data_dictionary
stdout = [string for string in stdout.split(' ') if string != '']
# We want to keep the spaces in order to extract filenames with
# multiple whitespaces correctly. We also keep a copy of the old
# 'stdout' for backward compatibility with the old code
stdout_with_spaces = stdout.split(' ')
stdout = stdout.split()
stdout[0] = stdout[0].lstrip('\r')
@ -374,14 +384,11 @@ def extract_data(stdout):
# Get path, filename & extension
if stdout[1] == 'Destination:':
path, fullname = os.path.split(' '.join(stdout[2:]))
filename, extension = os.path.splitext(fullname)
path, filename, extension = extract_filename(' '.join(stdout_with_spaces[2:]))
data_dictionary['path'] = path
data_dictionary['filename'] = filename
data_dictionary['extension'] = extension
# remove the format that youtube-dl adds during the merging
# process at end of the filename
data_dictionary['filename'] = re.sub('\.f[0-9]{1,3}$', '', filename)
# Get progress info
if '%' in stdout[1]:
@ -401,9 +408,21 @@ def extract_data(stdout):
data_dictionary['playlist_index'] = stdout[3]
data_dictionary['playlist_size'] = stdout[5]
# Remove the 'and merged' part from stdout when using ffmpeg to merge the formats
if stdout[-3] == 'downloaded' and stdout [-1] == 'merged':
stdout = stdout[:-2]
stdout_with_spaces = stdout_with_spaces[:-2]
data_dictionary['percent'] = '100%'
# Get file already downloaded status
if stdout[-1] == 'downloaded':
data_dictionary['status'] = 'Already Downloaded'
path, filename, extension = extract_filename(' '.join(stdout_with_spaces[1:-4]))
data_dictionary['path'] = path
data_dictionary['filename'] = filename
data_dictionary['extension'] = extension
# Get filesize abort status
if stdout[-1] == 'Aborting.':
@ -427,7 +446,22 @@ def extract_data(stdout):
# Get final extension after merging process
if stdout[1] == 'Merging':
data_dictionary['extension'] = os.path.splitext(' '.join(stdout[4:])[:-1])[1]
path, filename, extension = extract_filename(' '.join(stdout_with_spaces[4:]))
data_dictionary['path'] = path
data_dictionary['filename'] = filename
data_dictionary['extension'] = extension
# Get final extension ffmpeg post process simple (not file merge)
if stdout[1] == 'Destination:':
path, filename, extension = extract_filename(' '.join(stdout_with_spaces[2:]))
data_dictionary['path'] = path
data_dictionary['filename'] = filename
data_dictionary['extension'] = extension
elif stdout[0][0] != '[' or stdout[0] == '[debug]':
pass # Just ignore this output
else:
data_dictionary['status'] = 'Pre Processing'

View File

@ -26,6 +26,7 @@ import os.path
from threading import (
Thread,
RLock,
Lock
)
@ -39,13 +40,311 @@ from .downloaders import YoutubeDLDownloader
from .utils import (
YOUTUBEDL_BIN,
os_path_exists
os_path_exists,
format_bytes,
to_string,
to_bytes
)
MANAGER_PUB_TOPIC = 'dlmanager'
WORKER_PUB_TOPIC = 'dlworker'
_SYNC_LOCK = RLock()
# Decorator that adds thread synchronization to a function
def synchronized(lock):
def _decorator(func):
def _wrapper(*args, **kwargs):
lock.acquire()
ret_value = func(*args, **kwargs)
lock.release()
return ret_value
return _wrapper
return _decorator
class DownloadItem(object):
"""Object that represents a download.
Attributes:
STAGES (tuple): Main stages of the download item.
ACTIVE_STAGES (tuple): Sub stages of the 'Active' stage.
COMPLETED_STAGES (tuple): Sub stages of the 'Completed' stage.
ERROR_STAGES (tuple): Sub stages of the 'Error' stage.
Args:
url (string): URL that corresponds to the download item.
options (list): Options list to use during the download phase.
"""
STAGES = ("Queued", "Active", "Paused", "Completed", "Error")
ACTIVE_STAGES = ("Pre Processing", "Downloading", "Post Processing")
COMPLETED_STAGES = ("Finished", "Warning", "Already Downloaded")
ERROR_STAGES = ("Error", "Stopped", "Filesize Abort")
def __init__(self, url, options):
self.url = url
self.options = options
self.object_id = hash(url + to_string(options))
self.reset()
@property
def stage(self):
return self._stage
@stage.setter
def stage(self, value):
if value not in self.STAGES:
raise ValueError(value)
if value == "Queued":
self.progress_stats["status"] = value
if value == "Active":
self.progress_stats["status"] = self.ACTIVE_STAGES[0]
if value == "Completed":
self.progress_stats["status"] = self.COMPLETED_STAGES[0]
if value == "Paused":
self.progress_stats["status"] = value
if value == "Error":
self.progress_stats["status"] = self.ERROR_STAGES[0]
self._stage = value
def reset(self):
if hasattr(self, "_stage") and self._stage == self.STAGES[1]:
raise RuntimeError("Cannot reset an 'Active' item")
self._stage = self.STAGES[0]
self.path = ""
self.filenames = []
self.extensions = []
self.filesizes = []
self.default_values = {
"filename": self.url,
"extension": "-",
"filesize": "-",
"percent": "0%",
"speed": "-",
"eta": "-",
"status": self.stage,
"playlist_size": "",
"playlist_index": ""
}
self.progress_stats = dict(self.default_values)
# Keep track when the 'playlist_index' changes
self.playlist_index_changed = False
def get_files(self):
"""Returns a list that contains all the system files bind to this object."""
files = []
for index, item in enumerate(self.filenames):
filename = item + self.extensions[index]
files.append(os.path.join(self.path, filename))
return files
def update_stats(self, stats_dict):
"""Updates the progress_stats dict from the given dictionary."""
assert isinstance(stats_dict, dict)
for key in stats_dict:
if key in self.progress_stats:
value = stats_dict[key]
if not isinstance(value, basestring) or not value:
self.progress_stats[key] = self.default_values[key]
else:
self.progress_stats[key] = value
# Extract extra stuff
if "playlist_index" in stats_dict:
self.playlist_index_changed = True
if "filename" in stats_dict:
# Reset filenames, extensions & filesizes lists when changing playlist item
if self.playlist_index_changed:
self.filenames = []
self.extensions = []
self.filesizes = []
self.playlist_index_changed = False
self.filenames.append(stats_dict["filename"])
if "extension" in stats_dict:
self.extensions.append(stats_dict["extension"])
if "path" in stats_dict:
self.path = stats_dict["path"]
if "filesize" in stats_dict:
if stats_dict["percent"] == "100%" and len(self.filesizes) < len(self.filenames):
filesize = stats_dict["filesize"].lstrip("~") # HLS downloader etc
self.filesizes.append(to_bytes(filesize))
if "status" in stats_dict:
# If we are post processing try to calculate the size of
# the output file since youtube-dl does not
if stats_dict["status"] == self.ACTIVE_STAGES[2] and len(self.filesizes) == 2:
post_proc_filesize = self.filesizes[0] + self.filesizes[1]
self.filesizes.append(post_proc_filesize)
self.progress_stats["filesize"] = format_bytes(post_proc_filesize)
self._set_stage(stats_dict["status"])
def _set_stage(self, status):
if status in self.ACTIVE_STAGES:
self._stage = self.STAGES[1]
if status in self.COMPLETED_STAGES:
self._stage = self.STAGES[3]
if status in self.ERROR_STAGES:
self._stage = self.STAGES[4]
def __eq__(self, other):
return self.object_id == other.object_id
class DownloadList(object):
"""List like data structure that contains DownloadItems.
Args:
items (list): List that contains DownloadItems.
"""
def __init__(self, items=None):
assert isinstance(items, list) or items is None
if items is None:
self._items_dict = {} # Speed up lookup
self._items_list = [] # Keep the sequence
else:
self._items_list = [item.object_id for item in items]
self._items_dict = {item.object_id: item for item in items}
@synchronized(_SYNC_LOCK)
def clear(self):
"""Removes all the items from the list even the 'Active' ones."""
self._items_list = []
self._items_dict = {}
@synchronized(_SYNC_LOCK)
def insert(self, item):
"""Inserts the given item to the list. Does not check for duplicates. """
self._items_list.append(item.object_id)
self._items_dict[item.object_id] = item
@synchronized(_SYNC_LOCK)
def remove(self, object_id):
"""Removes an item from the list.
Removes the item with the corresponding object_id from
the list if the item is not in 'Active' state.
Returns:
True on success else False.
"""
if self._items_dict[object_id].stage != "Active":
self._items_list.remove(object_id)
del self._items_dict[object_id]
return True
return False
@synchronized(_SYNC_LOCK)
def fetch_next(self):
"""Returns the next queued item on the list.
Returns:
Next queued item or None if no other item exist.
"""
for object_id in self._items_list:
cur_item = self._items_dict[object_id]
if cur_item.stage == "Queued":
return cur_item
return None
@synchronized(_SYNC_LOCK)
def move_up(self, object_id):
"""Moves the item with the corresponding object_id up to the list."""
index = self._items_list.index(object_id)
if index > 0:
self._swap(index, index - 1)
return True
return False
@synchronized(_SYNC_LOCK)
def move_down(self, object_id):
"""Moves the item with the corresponding object_id down to the list."""
index = self._items_list.index(object_id)
if index < (len(self._items_list) - 1):
self._swap(index, index + 1)
return True
return False
@synchronized(_SYNC_LOCK)
def get_item(self, object_id):
"""Returns the DownloadItem with the given object_id."""
return self._items_dict[object_id]
@synchronized(_SYNC_LOCK)
def has_item(self, object_id):
"""Returns True if the given object_id is in the list else False."""
return object_id in self._items_list
@synchronized(_SYNC_LOCK)
def get_items(self):
"""Returns a list with all the items."""
return [self._items_dict[object_id] for object_id in self._items_list]
@synchronized(_SYNC_LOCK)
def change_stage(self, object_id, new_stage):
"""Change the stage of the item with the given object_id."""
self._items_dict[object_id].stage = new_stage
@synchronized(_SYNC_LOCK)
def index(self, object_id):
"""Get the zero based index of the item with the given object_id."""
if object_id in self._items_list:
return self._items_list.index(object_id)
return -1
@synchronized(_SYNC_LOCK)
def __len__(self):
return len(self._items_list)
def _swap(self, index1, index2):
self._items_list[index1], self._items_list[index2] = self._items_list[index2], self._items_list[index1]
class DownloadManager(Thread):
@ -55,9 +354,7 @@ class DownloadManager(Thread):
WAIT_TIME (float): Time in seconds to sleep.
Args:
urls_list (list): Python list that contains multiple dictionaries
with the url to download and the corresponding row(index) in
which the worker should send the download process information.
download_list (DownloadList): List that contains items to download.
opt_manager (optionsmanager.OptionsManager): Object responsible for
managing the youtubedlg options.
@ -69,11 +366,12 @@ class DownloadManager(Thread):
WAIT_TIME = 0.1
def __init__(self, urls_list, opt_manager, log_manager=None):
def __init__(self, parent, download_list, opt_manager, log_manager=None):
super(DownloadManager, self).__init__()
self.parent = parent
self.opt_manager = opt_manager
self.log_manager = log_manager
self.urls_list = urls_list
self.download_list = download_list
self._time_it_took = 0
self._successful = 0
@ -82,7 +380,7 @@ class DownloadManager(Thread):
# Init the custom workers thread pool
log_lock = None if log_manager is None else Lock()
wparams = (opt_manager, self._youtubedl_path(), log_manager, log_lock)
self._workers = [Worker(*wparams) for i in xrange(opt_manager.options['workers_number'])]
self._workers = [Worker(*wparams) for _ in xrange(opt_manager.options["workers_number"])]
self.start()
@ -102,16 +400,19 @@ class DownloadManager(Thread):
self._time_it_took = time.time()
while self._running:
for worker in self._workers:
if worker.available() and self.urls_list:
worker.download(self.urls_list.pop(0))
item = self.download_list.fetch_next()
time.sleep(self.WAIT_TIME)
if item is not None:
worker = self._get_worker()
if not self.urls_list and self._jobs_done():
if worker is not None:
worker.download(item.url, item.options, item.object_id)
self.download_list.change_stage(item.object_id, "Active")
if item is None and self._jobs_done():
break
self._talk_to_gui('report_active')
time.sleep(self.WAIT_TIME)
# Close all the workers
for worker in self._workers:
@ -136,14 +437,14 @@ class DownloadManager(Thread):
active_items = (workers that work) + (items waiting in the url_list).
"""
counter = 0
for worker in self._workers:
if not worker.available():
counter += 1
#counter = 0
#for worker in self._workers:
#if not worker.available():
#counter += 1
counter += len(self.urls_list)
#counter += len(self.download_list)
return counter
return len(self.download_list)
def stop_downloads(self):
"""Stop the download process. Also send 'closing'
@ -158,7 +459,7 @@ class DownloadManager(Thread):
self._running = False
def add_url(self, url):
"""Add given url to the urls_list.
"""Add given url to the download_list.
Args:
url (dict): Python dictionary that contains two keys.
@ -167,7 +468,7 @@ class DownloadManager(Thread):
download process.
"""
self.urls_list.append(url)
self.download_list.append(url)
def send_to_worker(self, data):
"""Send data to the Workers.
@ -204,8 +505,17 @@ class DownloadManager(Thread):
def _check_youtubedl(self):
"""Check if youtube-dl binary exists. If not try to download it. """
if not os_path_exists(self._youtubedl_path()):
UpdateThread(self.opt_manager.options['youtubedl_path'], True).join()
if not os_path_exists(self._youtubedl_path()) and self.parent.update_thread is None:
self.parent.update_thread = UpdateThread(self.opt_manager.options['youtubedl_path'], True)
self.parent.update_thread.join()
self.parent.update_thread = None
def _get_worker(self):
for worker in self._workers:
if worker.available():
return worker
return None
def _jobs_done(self):
"""Returns True if the workers have finished their jobs else False. """
@ -260,6 +570,7 @@ class Worker(Thread):
self._options_parser = OptionsParser()
self._successful = 0
self._running = True
self._options = None
self._wait_for_reply = False
@ -284,19 +595,20 @@ class Worker(Thread):
def run(self):
while self._running:
if self._data['url'] is not None:
options = self._options_parser.parse(self.opt_manager.options)
ret_code = self._downloader.download(self._data['url'], options)
#options = self._options_parser.parse(self.opt_manager.options)
ret_code = self._downloader.download(self._data['url'], self._options)
if (ret_code == YoutubeDLDownloader.OK or
ret_code == YoutubeDLDownloader.ALREADY):
ret_code == YoutubeDLDownloader.ALREADY or
ret_code == YoutubeDLDownloader.WARNING):
self._successful += 1
# Ask GUI for name updates
self._talk_to_gui('receive', {'source': 'filename', 'dest': 'new_filename'})
#self._talk_to_gui('receive', {'source': 'filename', 'dest': 'new_filename'})
# Wait until you get a reply
while self._wait_for_reply:
time.sleep(self.WAIT_TIME)
#while self._wait_for_reply:
#time.sleep(self.WAIT_TIME)
self._reset()
@ -305,7 +617,7 @@ class Worker(Thread):
# Call the destructor function of YoutubeDLDownloader object
self._downloader.close()
def download(self, item):
def download(self, url, options, object_id):
"""Download given item.
Args:
@ -315,8 +627,9 @@ class Worker(Thread):
download process.
"""
self._data['url'] = item['url']
self._data['index'] = item['index']
self._data['url'] = url
self._options = options
self._data['index'] = object_id
def stop_download(self):
"""Stop the download process of the worker. """
@ -381,26 +694,28 @@ class Worker(Thread):
extract_data() function under the downloaders.py module.
"""
# Temp dictionary which holds the updates
temp_dict = {}
## Temp dictionary which holds the updates
#temp_dict = {}
# Update each key
for key in data:
if self._data[key] != data[key]:
self._data[key] = data[key]
temp_dict[key] = data[key]
## Update each key
#for key in data:
#if self._data[key] != data[key]:
#self._data[key] = data[key]
#temp_dict[key] = data[key]
# Build the playlist status if there is an update
if self._data['playlist_index'] is not None:
if 'status' in temp_dict or 'playlist_index' in temp_dict:
temp_dict['status'] = '{status} {index}/{size}'.format(
status=self._data['status'],
index=self._data['playlist_index'],
size=self._data['playlist_size']
)
## Build the playlist status if there is an update
## REFACTOR re-implement this on DownloadItem or ListCtrl level?
##if self._data['playlist_index'] is not None:
##if 'status' in temp_dict or 'playlist_index' in temp_dict:
##temp_dict['status'] = '{status} {index}/{size}'.format(
##status=self._data['status'],
##index=self._data['playlist_index'],
##size=self._data['playlist_size']
##)
if len(temp_dict):
self._talk_to_gui('send', temp_dict)
#if len(temp_dict):
#self._talk_to_gui('send', temp_dict)
self._talk_to_gui('send', data)
def _talk_to_gui(self, signal, data):
"""Communicate with the GUI using wxCallAfter and wxPublisher.

182
youtube_dl_gui/formats.py Normal file
View File

@ -0,0 +1,182 @@
# -*- coding: UTF-8 -*-
import gettext
from .utils import TwoWayOrderedDict as tdict
OUTPUT_FORMATS = tdict([
(0, _("ID")),
(1, _("Title")),
(2, _("Title + ID")),
(4, _("Title + Quality")),
(5, _("Title + ID + Quality")),
(3, _("Custom"))
])
DEFAULT_FORMATS = tdict([
("0", _("default"))
])
VIDEO_FORMATS = tdict([
("3gp", "3gp"),
("17", "3gp [144p]"),
("36", "3gp [240p]"),
("flv", "flv"),
("5", "flv [240p]"),
("34", "flv [360p]"),
("35", "flv [480p]"),
("webm", "webm"),
("43", "webm [360p]"),
("44", "webm [480p]"),
("45", "webm [720p]"),
("46", "webm [1080p]"),
("mp4", "mp4"),
("18", "mp4 [360p]"),
("22", "mp4 [720p]"),
("37", "mp4 [1080p]"),
("38", "mp4 [4K]"),
("160", "mp4 [144p] (DASH Video)"),
("133", "mp4 [240p] (DASH Video)"),
("134", "mp4 [360p] (DASH Video)"),
("135", "mp4 [480p] (DASH Video)"),
("136", "mp4 [720p] (DASH Video)"),
("137", "mp4 [1080p] (DASH Video)"),
("264", "mp4 [1440p] (DASH Video)"),
("138", "mp4 [2160p] (DASH Video)"),
("242", "webm [240p] (DASH Video)"),
("243", "webm [360p] (DASH Video)"),
("244", "webm [480p] (DASH Video)"),
("247", "webm [720p] (DASH Video)"),
("248", "webm [1080p] (DASH Video)"),
("271", "webm [1440p] (DASH Video)"),
("272", "webm [2160p] (DASH Video)"),
("82", "mp4 [360p] (3D)"),
("83", "mp4 [480p] (3D)"),
("84", "mp4 [720p] (3D)"),
("85", "mp4 [1080p] (3D)"),
("100", "webm [360p] (3D)"),
("101", "webm [480p] (3D)"),
("102", "webm [720p] (3D)"),
("139", "m4a 48k (DASH Audio)"),
("140", "m4a 128k (DASH Audio)"),
("141", "m4a 256k (DASH Audio)"),
("171", "webm 48k (DASH Audio)"),
("172", "webm 256k (DASH Audio)")
])
AUDIO_FORMATS = tdict([
("mp3", "mp3"),
("wav", "wav"),
("aac", "aac"),
("m4a", "m4a"),
("vorbis", "vorbis"),
("opus", "opus")
])
FORMATS = DEFAULT_FORMATS.copy()
FORMATS.update(VIDEO_FORMATS)
FORMATS.update(AUDIO_FORMATS)
def reload_strings():
# IF YOU DONT WANT YOUR EYES TO BLEED STOP HERE
# YOU HAVE BEEN WARNED
# DO NOT LOOK THE CODE BELOW
#
#
#
#
#
#
#
#
#NOTE Remove
# Code is so messed up that i need to reload strings else
# the translations wont work on the about gettext tags
global OUTPUT_FORMATS
global DEFAULT_FORMATS
global VIDEO_FORMATS
global AUDIO_FORMATS
global FORMATS
OUTPUT_FORMATS = tdict([
(0, _("ID")),
(1, _("Title")),
(2, _("Title + ID")),
(4, _("Title + Quality")),
(5, _("Title + ID + Quality")),
(3, _("Custom"))
])
DEFAULT_FORMATS = tdict([
("0", _("default"))
])
VIDEO_FORMATS = tdict([
("3gp", "3gp"),
("17", "3gp [144p]"),
("36", "3gp [240p]"),
("flv", "flv"),
("5", "flv [240p]"),
("34", "flv [360p]"),
("35", "flv [480p]"),
("webm", "webm"),
("43", "webm [360p]"),
("44", "webm [480p]"),
("45", "webm [720p]"),
("46", "webm [1080p]"),
("mp4", "mp4"),
("18", "mp4 [360p]"),
("22", "mp4 [720p]"),
("37", "mp4 [1080p]"),
("38", "mp4 [4K]"),
("160", "mp4 [144p] (DASH Video)"),
("133", "mp4 [240p] (DASH Video)"),
("134", "mp4 [360p] (DASH Video)"),
("135", "mp4 [480p] (DASH Video)"),
("136", "mp4 [720p] (DASH Video)"),
("137", "mp4 [1080p] (DASH Video)"),
("264", "mp4 [1440p] (DASH Video)"),
("138", "mp4 [2160p] (DASH Video)"),
("242", "webm [240p] (DASH Video)"),
("243", "webm [360p] (DASH Video)"),
("244", "webm [480p] (DASH Video)"),
("247", "webm [720p] (DASH Video)"),
("248", "webm [1080p] (DASH Video)"),
("271", "webm [1440p] (DASH Video)"),
("272", "webm [2160p] (DASH Video)"),
("82", "mp4 [360p] (3D)"),
("83", "mp4 [480p] (3D)"),
("84", "mp4 [720p] (3D)"),
("85", "mp4 [1080p] (3D)"),
("100", "webm [360p] (3D)"),
("101", "webm [480p] (3D)"),
("102", "webm [720p] (3D)"),
("139", "m4a 48k (DASH Audio)"),
("140", "m4a 128k (DASH Audio)"),
("141", "m4a 256k (DASH Audio)"),
("171", "webm 48k (DASH Audio)"),
("172", "webm 256k (DASH Audio)")
])
AUDIO_FORMATS = tdict([
("mp3", "mp3"),
("wav", "wav"),
("aac", "aac"),
("m4a", "m4a"),
("vorbis", "vorbis"),
("opus", "opus")
])
FORMATS = DEFAULT_FORMATS.copy()
FORMATS.update(VIDEO_FORMATS)
FORMATS.update(AUDIO_FORMATS)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@ -1,444 +0,0 @@
# Youtube-dlG localization file.
# FIRST AUTHOR: Sotiris Papadopoulos <ytubedlg@gmail.com>, 2015.
# Snosi <fixall.dz@gmail.com>, 2015.
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"PO-Revision-Date: 2015-07-02 15:39+EEST\n"
"Last-Translator: Snosi <fixall.dz@gmail.com>\n"
"Language-Team: العربية <>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Virtaal 0.7.1\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "الرابط"
#: mainframe.py:83
msgid "Download"
msgstr "بدأ التحميل"
#: mainframe.py:84
msgid "Update"
msgstr "تحديث"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "الخيارات"
#: mainframe.py:86
msgid "Error"
msgstr "خطأ"
#: mainframe.py:87
msgid "Stop"
msgstr "إيقاف"
#: mainframe.py:88
msgid "Info"
msgstr "معلومات"
#: mainframe.py:89
msgid "Welcome"
msgstr "مرحباً"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "إنتهاء التحميلات {0} رابط {1} يوم {2} ساعة {3} دقيقة {4} ثانية"
#: mainframe.py:92
#, fuzzy
msgid "Downloads completed"
msgstr "إكتمال التحميل"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "تحميل {0} رابط"
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "إيقاف التحميل"
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "تم إيقاف التحميل"
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "أدخل رابطا على الأقل"
#: mainframe.py:97
#, fuzzy
msgid "Downloads started"
msgstr "بدأ التحميل"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "تحديث محمل فيديوهات يوتيوب. يرجى الإنتظار..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "فشل تحديث محمل فيديوهات يوتيوب [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "محمل فيديوهات يوتيوب محدث"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "فعل لفتح الدليل : '{dir}'. المسار خاطئ"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "تعذر إيقاف الجهاز . تأكد من كلمة المرور"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "إيقاف تشغيل النظام"
#: mainframe.py:109
msgid "Title"
msgstr "العنوان"
#: mainframe.py:110
msgid "Size"
msgstr "الحجم"
#: mainframe.py:111
msgid "Percent"
msgstr "النِسبة"
#: mainframe.py:112
msgid "ETA"
msgstr "الوقت المتبقي"
#: mainframe.py:113
msgid "Speed"
msgstr "السرعة"
#: mainframe.py:114
msgid "Status"
msgstr "الحالة"
#: optionsframe.py:42
msgid "General"
msgstr "عام"
#: optionsframe.py:43
msgid "Video"
msgstr "الفيديو"
#: optionsframe.py:44
msgid "Audio"
msgstr "الصوت"
#: optionsframe.py:45
msgid "Playlist"
msgstr "قائمة التشغيل"
#: optionsframe.py:46
msgid "Output"
msgstr "المخرجات"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "الترجمة"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "ملفات النظام"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "إيقاف التشغيل"
#: optionsframe.py:50
msgid "Authentication"
msgstr "إستيثاق"
#: optionsframe.py:51
msgid "Connection"
msgstr "الإتصال"
#: optionsframe.py:52
msgid "Log"
msgstr "السِجِل"
#: optionsframe.py:53
msgid "Commands"
msgstr "أوامر"
#: optionsframe.py:54
msgid "Localization"
msgstr "اللغة"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "فعّل السِجِل"
#: optionsframe.py:401
msgid "Write Time"
msgstr "كتابة الوقت"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "إمسح السِجِل"
#: optionsframe.py:403
msgid "View Log"
msgstr "شاهد السِجِل"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "المسار: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "حجم السِجِل: {0} Octets"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "إعادة التشغيل"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "أعد التشغيل {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "أوقف تشغيل النظام عند الإنتهاء"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "كلمة مرور المسؤول"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "بدأ قائمة التشغيل"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "إيقاف قائمة التشغيل"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "أقصى حد للتحميلات"
#: optionsframe.py:630
msgid "Retries"
msgstr "فحص"
#: optionsframe.py:631
msgid "User Agent"
msgstr "اسم العميل"
#: optionsframe.py:632
msgid "Referer"
msgstr "يدل"
#: optionsframe.py:633
msgid "Proxy"
msgstr "الخادم الوكيل"
#: optionsframe.py:707
msgid "Username"
msgstr "اسم المستخدم"
#: optionsframe.py:708
msgid "Password"
msgstr "كلمة المرور"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "كلمة المرور (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "عالي"
#: optionsframe.py:767
msgid "low"
msgstr "منخفض"
#: optionsframe.py:767
msgid "mid"
msgstr "متوسط"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "حول الى صوت"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "فيديو"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "صيغة الصوت"
#: optionsframe.py:773
msgid "Audio Quality"
msgstr "جودة الصوت"
#: optionsframe.py:890
msgid "default"
msgstr "مبدئي"
#: optionsframe.py:891
msgid "none"
msgstr "بدون"
#: optionsframe.py:895
msgid "Video Format"
msgstr "صيغة الفيديو"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "خلط الصيغة"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "حول الاسماء الى (ASCII)"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "الإسم = الهوية"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "الإسم = العنوان"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "قالب مخصص"
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "تجاهل الأخطاء"
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "افتح وجهة المجلد"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "اكتب المعلومات في ملف (.json)"
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "اكتب الوصف"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "إحفظ المصغرات"
#: optionsframe.py:1057
msgid "Filesize"
msgstr "حجم الملف"
#: optionsframe.py:1058
msgid "Min"
msgstr "اقل"
#: optionsframe.py:1059
msgid "Max"
msgstr "اقصى"
#: optionsframe.py:1172
msgid "English"
msgstr "الانجليزية"
#: optionsframe.py:1173
msgid "Greek"
msgstr "اليونانية"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "البرتغالية"
#: optionsframe.py:1175
msgid "French"
msgstr "الفرنسية"
#: optionsframe.py:1176
msgid "Italian"
msgstr "الايطالية"
#: optionsframe.py:1177
msgid "Russian"
msgstr "الروسية"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "الاسبانية"
#: optionsframe.py:1179
msgid "German"
msgstr "الالمانية"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "تحميل الترجمة حسب المرشح"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "تحميل كل الترجمات المتوفرة"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "تحميل تلقائي للترجمة (يوتيوب فقط)"
#: optionsframe.py:1185
#, fuzzy
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "اضف الترجمة للفيديو (mp4 فقط)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "لغة الترجمة"
#: optionsframe.py:1280
msgid "About"
msgstr "عن"
#: optionsframe.py:1281
msgid "Open"
msgstr "فتح"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "إعادة تعين"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "حفظ المسار"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "خيارات الملف : {0}"
#: optionsframe.py:1285
msgid "Choose Directory"
msgstr "اختيار الوجهة"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "معطيات سطر الاوامر (e.g. --help)"
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "اللغة"
#: optionsframe.py:1427
msgid "In order for the changes to take effect please restart {0}"
msgstr "لتصبح التغييرات سارية المفعول أعد تشغيل {0}"
#: optionsframe.py:1474
msgid "Log Viewer"
msgstr "عارض السجل"

View File

@ -0,0 +1,623 @@
# Youtube-dlG localization file.
# FIRST AUTHOR: Sotiris Papadopoulos <ytubedlg@gmail.com>, 2015.
# Snosi <fixall.dz@gmail.com>, 2015.
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-07-02 15:39+EEST\n"
"Last-Translator: Snosi <fixall.dz@gmail.com>\n"
"Language-Team: العربية <>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Virtaal 0.7.1\n"
"Generated-By: pygettext.py 1.5\n"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "العنوان"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "جودة الصوت"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "مبدئي"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: mainframe.py:98
msgid "Update"
msgstr "تحديث"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "الخيارات"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "إيقاف"
#: mainframe.py:101
msgid "Info"
msgstr "معلومات"
#: mainframe.py:102
msgid "Welcome"
msgstr "مرحباً"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: mainframe.py:105
msgid "Add"
msgstr ""
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "بدأ التحميل"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "قائمة التشغيل"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "بدأ التحميل"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "إعادة التشغيل"
#: mainframe.py:114
msgid "About"
msgstr "عن"
#: mainframe.py:115
msgid "View Log"
msgstr "شاهد السِجِل"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "إنتهاء التحميلات {0} رابط {1} يوم {2} ساعة {3} دقيقة {4} ثانية"
#: mainframe.py:119
#, fuzzy
msgid "Downloads completed"
msgstr "إكتمال التحميل"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "إيقاف التحميل"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "تم إيقاف التحميل"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "أدخل رابطا على الأقل"
#: mainframe.py:124
#, fuzzy
msgid "Downloads started"
msgstr "بدأ التحميل"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "اختيار الوجهة"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "تحديث محمل فيديوهات يوتيوب. يرجى الإنتظار..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "فشل تحديث محمل فيديوهات يوتيوب [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "فعل لفتح الدليل : '{dir}'. المسار خاطئ"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "تعذر إيقاف الجهاز . تأكد من كلمة المرور"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "إيقاف تشغيل النظام"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "الحجم"
#: mainframe.py:143
msgid "Percent"
msgstr "النِسبة"
#: mainframe.py:144
msgid "ETA"
msgstr "الوقت المتبقي"
#: mainframe.py:145
msgid "Speed"
msgstr "السرعة"
#: mainframe.py:146
msgid "Status"
msgstr "الحالة"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "أوامر"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "افتح وجهة المجلد"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "الفيديو"
#: mainframe.py:479
msgid "Audio"
msgstr "الصوت"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "إكتمال التحميل"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "إكتمال التحميل"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "إيقاف التشغيل"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "إيقاف تشغيل النظام"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "عام"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "خلط الصيغة"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "بدأ التحميل"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "لغة الترجمة"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "إعادة تعين"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "حول الاسماء الى (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "إعادة تعين"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "إكتمال التحميل"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "كلمة مرور المسؤول"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "لتصبح التغييرات سارية المفعول أعد تشغيل {0}"
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "إعادة التشغيل"
#: optionsframe.py:466
msgid "high"
msgstr "عالي"
#: optionsframe.py:466
msgid "low"
msgstr "منخفض"
#: optionsframe.py:466
msgid "mid"
msgstr "متوسط"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "صيغة الفيديو"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "صيغة الصوت"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "جودة الصوت"
#: optionsframe.py:541
msgid "English"
msgstr "الانجليزية"
#: optionsframe.py:542
msgid "French"
msgstr "الفرنسية"
#: optionsframe.py:543
msgid "German"
msgstr "الالمانية"
#: optionsframe.py:544
msgid "Greek"
msgstr "اليونانية"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "الايطالية"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "البرتغالية"
#: optionsframe.py:548
msgid "Russian"
msgstr "الروسية"
#: optionsframe.py:549
msgid "Spanish"
msgstr "الاسبانية"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "تحميل تلقائي للترجمة (يوتيوب فقط)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "تحميل كل الترجمات المتوفرة"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "لغة الترجمة"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "الترجمة"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "الترجمة"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "اضف الترجمة للفيديو (mp4 فقط)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "قائمة التشغيل"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "اقصى"
#: optionsframe.py:592
msgid "Filesize"
msgstr "حجم الملف"
#: optionsframe.py:597
msgid "Min"
msgstr "اقل"
#: optionsframe.py:726
msgid "Retries"
msgstr "فحص"
#: optionsframe.py:729
msgid "Authentication"
msgstr "إستيثاق"
#: optionsframe.py:731
msgid "Username"
msgstr "اسم المستخدم"
#: optionsframe.py:733
msgid "Password"
msgstr "كلمة المرور"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "كلمة مرور المسؤول"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "الخادم الوكيل"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "اسم العميل"
#: optionsframe.py:744
msgid "Referer"
msgstr "يدل"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "فعّل السِجِل"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "شاهد السِجِل"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "إمسح السِجِل"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "معطيات سطر الاوامر (e.g. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "إعادة تعين"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "تجاهل الأخطاء"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "عارض السجل"

View File

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2016-09-03 15:37+EEST\n"
"Last-Translator: Ondrej Kovar <ondrej95kovar@gmail.com>\n"
"Language-Team: Czech\n"
@ -15,426 +15,606 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "Odkazy"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Stáhni"
#: mainframe.py:84
msgid "Update"
msgstr "Update"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "Nastavení"
#: mainframe.py:86
msgid "Error"
msgstr "Chyba"
#: mainframe.py:87
msgid "Stop"
msgstr "Stop"
#: mainframe.py:88
msgid "Info"
msgstr "Info"
#: mainframe.py:89
msgid "Welcome"
msgstr "Vítejte"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Úspěšně staženo {0} odkaz(ů) za {1} dní {2} hodin {3} minut {4} sekund"
#: mainframe.py:92
msgid "Downloads completed"
msgstr "Stahování dokončeno"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Stahuji {0} odkaz(y)"
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "Zastavují stahování"
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "Stahování zastaveno"
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "Musíte poskytnout alespoň jeden odkaz"
#: mainframe.py:97
msgid "Downloads started"
msgstr "Stahování zahájeno"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Stahuji poslední youtube-dl. Prosím vyčkejte..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl stažení skončilo chybou [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl staženo"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Nemohu otevřít adresář: '{dir}'. Zadaná cesta neexistuje"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Chyba při ukončování. Ujistěte se, že jste zadali správné heslo"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Vypínám"
#: mainframe.py:109
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Titul"
#: mainframe.py:110
msgid "Size"
msgstr "Velikost"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: mainframe.py:111
msgid "Percent"
msgstr "Procent"
#: mainframe.py:112
msgid "ETA"
msgstr "OZČ"
#: mainframe.py:113
msgid "Speed"
msgstr "Rychlost"
#: mainframe.py:114
msgid "Status"
msgstr "Status"
#: optionsframe.py:42
msgid "General"
msgstr "Obecné"
#: optionsframe.py:43
msgid "Video"
msgstr "Video"
#: optionsframe.py:44
msgid "Audio"
msgstr "Zvuk"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Seznam stop"
#: optionsframe.py:46
msgid "Output"
msgstr "Výstup"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Titulky"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Filesystem"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Vypnout"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Autentikace"
#: optionsframe.py:51
msgid "Connection"
msgstr "Připojení"
#: optionsframe.py:52
msgid "Log"
msgstr "Log"
#: optionsframe.py:53
msgid "Commands"
msgstr "Příkazy"
#: optionsframe.py:54
msgid "Localization"
msgstr "Lokalizace"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Povolit logování"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Zapiš čas"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Vyčisti log"
#: optionsframe.py:403
msgid "View Log"
msgstr "Zhlédni log"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Cesta: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Velikost logu: {0}"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Restart"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Restartujte prosím {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Po skončení vypnout"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "SUDO password"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Začít seznam stop"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Zastavit seznam stop"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Max stažení"
#: optionsframe.py:630
msgid "Retries"
msgstr "Obnovení"
#: optionsframe.py:631
msgid "User Agent"
msgstr "User Agent"
#: optionsframe.py:632
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "Uživatelské jméno"
#: optionsframe.py:708
msgid "Password"
msgstr "Heslo"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Video heslo (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "vysoké"
#: optionsframe.py:767
msgid "low"
msgstr "nízké"
#: optionsframe.py:767
msgid "mid"
msgstr "střední"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Překonvertovat do zvuku"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Zachovej video"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Formát zvuku"
#: optionsframe.py:773
msgid "Audio Quality"
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Kvalita zvuku"
#: optionsframe.py:890
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "výchozí"
#: optionsframe.py:891
msgid "none"
msgstr "žádné"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: optionsframe.py:895
msgid "Video Format"
msgstr "Formát videa"
#: mainframe.py:98
msgid "Update"
msgstr "Update"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Formát mix"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Nastavení"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Omezit názvy souborů (ASCII)"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Stop"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID jako název"
#: mainframe.py:101
msgid "Info"
msgstr "Info"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Titul jako název"
#: mainframe.py:102
msgid "Welcome"
msgstr "Vítejte"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Vlastní šablona (youtube-dl)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Ignorovat chyby"
#: mainframe.py:105
msgid "Add"
msgstr ""
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Otevřít cílový adresář"
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Stáhni"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Zapiš info do (.json) souboru"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Zapiš popis do souboru"
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Seznam stop"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Zapiš nádhled na disk"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Velikost souboru"
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Stáhni"
#: optionsframe.py:1058
msgid "Min"
msgstr "Min"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
msgstr "Max"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: optionsframe.py:1172
msgid "English"
msgstr "Angličtina"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Restart"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Řečtina"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portugalština"
#: optionsframe.py:1175
msgid "French"
msgstr "Francouzština"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Italština"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Ruština"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Španělština"
#: optionsframe.py:1179
msgid "German"
msgstr "Němčina"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Stáhni soubor s titulkami podle jazyka"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Stáhni všechny dostupné titulky"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Stáhni automaticky soubor s titulkami (POUZE YOUTUBE)"
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Vlož titulky přímo do videa (pouze mp4)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Jazyk titulek"
#: optionsframe.py:1280
#: mainframe.py:114
msgid "About"
msgstr "O aplikaci"
#: optionsframe.py:1281
msgid "Open"
msgstr "Otevřít"
#: mainframe.py:115
msgid "View Log"
msgstr "Zhlédni log"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Obnovit nastavení"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Úspěšně staženo {0} odkaz(ů) za {1} dní {2} hodin {3} minut {4} sekund"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Uložit cestu"
#: mainframe.py:119
msgid "Downloads completed"
msgstr "Stahování dokončeno"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Soubor nastavení: {0}"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Zastavují stahování"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Stahování zastaveno"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Musíte poskytnout alespoň jeden odkaz"
#: mainframe.py:124
msgid "Downloads started"
msgstr "Stahování zahájeno"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Vyberte adresář"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Argumenty příkazové řádky (např. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Jazyk"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Stahuji poslední youtube-dl. Prosím vyčkejte..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl stažení skončilo chybou [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Nemohu otevřít adresář: '{dir}'. Zadaná cesta neexistuje"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Chyba při ukončování. Ujistěte se, že jste zadali správné heslo"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Vypínám"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Velikost"
#: mainframe.py:143
msgid "Percent"
msgstr "Procent"
#: mainframe.py:144
msgid "ETA"
msgstr "OZČ"
#: mainframe.py:145
msgid "Speed"
msgstr "Rychlost"
#: mainframe.py:146
msgid "Status"
msgstr "Status"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Příkazy"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Otevřít cílový adresář"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Video"
#: mainframe.py:479
msgid "Audio"
msgstr "Zvuk"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Stahování dokončeno"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Stahování dokončeno"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Vypnout"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Vypínám"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Obecné"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Formát mix"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Stáhni"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Jazyk titulek"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Obnovit nastavení"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Omezit názvy souborů (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Obnovit nastavení"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Stahování dokončeno"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "SUDO password"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Restartuje prosím, aby se projevily změny {0}"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Restart"
#: optionsframe.py:466
msgid "high"
msgstr "vysoké"
#: optionsframe.py:466
msgid "low"
msgstr "nízké"
#: optionsframe.py:466
msgid "mid"
msgstr "střední"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Formát videa"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Formát zvuku"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Kvalita zvuku"
#: optionsframe.py:541
msgid "English"
msgstr "Angličtina"
#: optionsframe.py:542
msgid "French"
msgstr "Francouzština"
#: optionsframe.py:543
msgid "German"
msgstr "Němčina"
#: optionsframe.py:544
msgid "Greek"
msgstr "Řečtina"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Italština"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portugalština"
#: optionsframe.py:548
msgid "Russian"
msgstr "Ruština"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Španělština"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Stáhni automaticky soubor s titulkami (POUZE YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Stáhni všechny dostupné titulky"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Jazyk titulek"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Titulky"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Titulky"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Vlož titulky přímo do videa (pouze mp4)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Seznam stop"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "Max"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Velikost souboru"
#: optionsframe.py:597
msgid "Min"
msgstr "Min"
#: optionsframe.py:726
msgid "Retries"
msgstr "Obnovení"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Autentikace"
#: optionsframe.py:731
msgid "Username"
msgstr "Uživatelské jméno"
#: optionsframe.py:733
msgid "Password"
msgstr "Heslo"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "SUDO password"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "User Agent"
#: optionsframe.py:744
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Povolit logování"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Zhlédni log"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Vyčisti log"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Argumenty příkazové řádky (např. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Obnovit nastavení"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Ignorovat chyby"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Náhled logu"

View File

@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-07-02 15:31+EEST\n"
"Last-Translator: Max Bruckner <max at maxbruckner dot de>\n"
"Language-Team: de\n"
@ -13,429 +13,608 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "URLs"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Herunterladen"
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Titel"
#: mainframe.py:84
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Audio-Qualität"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "standard"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: mainframe.py:98
msgid "Update"
msgstr "Updaten"
#: mainframe.py:85 optionsframe.py:40
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Optionen"
#: mainframe.py:86
msgid "Error"
msgstr "Fehler"
#: mainframe.py:87
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Anhalten"
#: mainframe.py:88
#: mainframe.py:101
msgid "Info"
msgstr "Info"
#: mainframe.py:89
#: mainframe.py:102
msgid "Welcome"
msgstr "Willkommen"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: mainframe.py:105
msgid "Add"
msgstr ""
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Herunterladen"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Wiedergabeliste"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Herunterladen"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Neustarten"
#: mainframe.py:114
msgid "About"
msgstr "Über"
#: mainframe.py:115
msgid "View Log"
msgstr "Protokoll anzeigen"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "{0} url(s) wurden innerhalb von {1} Tage(n) {2} Stunde(n) {3} Minute(n) {4} Sekunde(n) erfolgreich heruntergeladen"
#: mainframe.py:92
#: mainframe.py:119
#, fuzzy
msgid "Downloads completed"
msgstr "Download abgeschlossen"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Lade {0} URL(s) herunter"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: mainframe.py:94
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Halte Downloads an"
#: mainframe.py:95
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Downloads angehalten"
#: mainframe.py:96
msgid "You need to provide at least one url"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Sie müssen mindestens eine URL angeben"
#: mainframe.py:97
#: mainframe.py:124
#, fuzzy
msgid "Downloads started"
msgstr "Download gestartet"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Lade neuestes youtube-dl herunter. Bitte warten..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Herunterladen von youtube-dl fehlgeschlagen [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl erfolgreich heruntergeladen"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Konnte '{dir}' nicht öffnen. Der angegebene Pfad existiert nicht"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Fehler beim Herunterfahren. Stellen Sie sicher dass sie das Passwort korrekt eingegeben haben"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "System wird heruntergefahren"
#: mainframe.py:109
msgid "Title"
msgstr "Titel"
#: mainframe.py:110
msgid "Size"
msgstr "Größe"
#: mainframe.py:111
msgid "Percent"
msgstr "Prozent"
#: mainframe.py:112
msgid "ETA"
msgstr "Verbleibend"
#: mainframe.py:113
msgid "Speed"
msgstr "Geschwindigkeit"
#: mainframe.py:114
msgid "Status"
msgstr "Status"
#: optionsframe.py:42
msgid "General"
msgstr "Allgemein"
#: optionsframe.py:43
msgid "Video"
msgstr "Video"
#: optionsframe.py:44
msgid "Audio"
msgstr "Audio"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Wiedergabeliste"
#: optionsframe.py:46
msgid "Output"
msgstr "Ausgabe"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Untertitel"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Dateisystem"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Herunterfahren"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Authentifizierung"
#: optionsframe.py:51
msgid "Connection"
msgstr "Verbindung"
#: optionsframe.py:52
msgid "Log"
msgstr "Protokoll"
#: optionsframe.py:53
msgid "Commands"
msgstr "Befehle"
#: optionsframe.py:54
msgid "Localization"
msgstr "Sprache"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Protokollierung aktivieren"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Zeit protokollieren"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Protokoll leeren"
#: optionsframe.py:403
msgid "View Log"
msgstr "Protokoll anzeigen"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Pfad: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Protokollgröße: {0} Bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Neustarten"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Bitte starten Sie {0} neu"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Herunterfahren sobald abgeschlossen"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "SUDO Passwort"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Starten mit"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Aufhören mit"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Maximale Downloads"
#: optionsframe.py:630
msgid "Retries"
msgstr "Verbindungsversuche"
#: optionsframe.py:631
msgid "User Agent"
msgstr "User Agent"
#: optionsframe.py:632
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "Nutzername"
#: optionsframe.py:708
msgid "Password"
msgstr "Passwort"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Video-Passwort (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "gut"
#: optionsframe.py:767
msgid "low"
msgstr "schlecht"
#: optionsframe.py:767
msgid "mid"
msgstr "mittel"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Zu Audio konvertieren"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Video behalten"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Audio-Format"
#: optionsframe.py:773
msgid "Audio Quality"
msgstr "Audio-Qualität"
#: optionsframe.py:890
msgid "default"
msgstr "standard"
#: optionsframe.py:891
msgid "none"
msgstr "keines"
#: optionsframe.py:895
msgid "Video Format"
msgstr "Video-Format"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Mix-Format"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Dateinamen einschränken (ASCII)"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID als Name"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Titel als Name"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Benutzerdefiniertes Template (youtube-dl)"
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Fehler ignorieren"
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Zielordner öffnen"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "In JSON-Datei schreiben"
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Beschreibung in Datei speichern"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Vorschaubild speichern"
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Dateigröße"
#: optionsframe.py:1058
msgid "Min"
msgstr "Min"
#: optionsframe.py:1059
msgid "Max"
msgstr "Max"
#: optionsframe.py:1172
msgid "English"
msgstr "Englisch"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Griechisch"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portugiesisch"
#: optionsframe.py:1175
msgid "French"
msgstr "Französisch"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Italienisch"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Russisch"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Spanisch"
#: optionsframe.py:1179
msgid "German"
msgstr "Deutsch"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Untertitel nach Sprache herunterladen"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Alle verfügbaren Untertitel herunterladen"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Automatische Untertitel-Datei herunterladen (NUR YOUTUBE)"
#: optionsframe.py:1185
#, fuzzy
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Untertitel in Video einbetten (nur MP4-Videos)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Untertitel-Sprache"
#: optionsframe.py:1280
msgid "About"
msgstr "Über"
#: optionsframe.py:1281
msgid "Open"
msgstr "Öffnen"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Zurücksetzen"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Speicherort"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Konfigurationsdatei: {0}"
#: optionsframe.py:1285
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Ordner auswählen"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Kommandozeilen-Parameter (z.B. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Sprache"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Lade neuestes youtube-dl herunter. Bitte warten..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Herunterladen von youtube-dl fehlgeschlagen [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Konnte '{dir}' nicht öffnen. Der angegebene Pfad existiert nicht"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Fehler beim Herunterfahren. Stellen Sie sicher dass sie das Passwort korrekt eingegeben haben"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "System wird heruntergefahren"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Größe"
#: mainframe.py:143
msgid "Percent"
msgstr "Prozent"
#: mainframe.py:144
msgid "ETA"
msgstr "Verbleibend"
#: mainframe.py:145
msgid "Speed"
msgstr "Geschwindigkeit"
#: mainframe.py:146
msgid "Status"
msgstr "Status"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Befehle"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Zielordner öffnen"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Video"
#: mainframe.py:479
msgid "Audio"
msgstr "Audio"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Download abgeschlossen"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Download abgeschlossen"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Herunterfahren"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "System wird heruntergefahren"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Allgemein"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Mix-Format"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Herunterladen"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Untertitel-Sprache"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Zurücksetzen"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Dateinamen einschränken (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Zurücksetzen"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Download abgeschlossen"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "SUDO Passwort"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "{0} neustarten, um Änderungen anzuwenden"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Neustarten"
#: optionsframe.py:466
msgid "high"
msgstr "gut"
#: optionsframe.py:466
msgid "low"
msgstr "schlecht"
#: optionsframe.py:466
msgid "mid"
msgstr "mittel"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Video-Format"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Audio-Format"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Audio-Qualität"
#: optionsframe.py:541
msgid "English"
msgstr "Englisch"
#: optionsframe.py:542
msgid "French"
msgstr "Französisch"
#: optionsframe.py:543
msgid "German"
msgstr "Deutsch"
#: optionsframe.py:544
msgid "Greek"
msgstr "Griechisch"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Italienisch"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portugiesisch"
#: optionsframe.py:548
msgid "Russian"
msgstr "Russisch"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Spanisch"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Automatische Untertitel-Datei herunterladen (NUR YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Alle verfügbaren Untertitel herunterladen"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Untertitel-Sprache"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Untertitel"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Untertitel"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Untertitel in Video einbetten (nur MP4-Videos)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Wiedergabeliste"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "Max"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Dateigröße"
#: optionsframe.py:597
msgid "Min"
msgstr "Min"
#: optionsframe.py:726
msgid "Retries"
msgstr "Verbindungsversuche"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Authentifizierung"
#: optionsframe.py:731
msgid "Username"
msgstr "Nutzername"
#: optionsframe.py:733
msgid "Password"
msgstr "Passwort"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "SUDO Passwort"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "User Agent"
#: optionsframe.py:744
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Protokollierung aktivieren"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Protokoll anzeigen"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Protokoll leeren"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Kommandozeilen-Parameter (z.B. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Zurücksetzen"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Fehler ignorieren"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Protokoll"

View File

@ -4,8 +4,8 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"PO-Revision-Date: 2015-07-02 15:37+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2016-12-17 17:08+EET\n"
"Last-Translator: Sotiris Papadopoulos <ytubedlg@gmail.com>\n"
"Language-Team: en\n"
"MIME-Version: 1.0\n"
@ -13,426 +13,570 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr ""
#: mainframe.py:84
msgid "Update"
msgstr ""
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr ""
#: mainframe.py:86
msgid "Error"
msgstr ""
#: mainframe.py:87
msgid "Stop"
msgstr ""
#: mainframe.py:88
msgid "Info"
msgstr ""
#: mainframe.py:89
msgid "Welcome"
msgstr ""
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr ""
#: mainframe.py:92
msgid "Downloads completed"
msgstr ""
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr ""
#: mainframe.py:94
msgid "Stopping downloads"
msgstr ""
#: mainframe.py:95
msgid "Downloads stopped"
msgstr ""
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr ""
#: mainframe.py:97
msgid "Downloads started"
msgstr ""
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr ""
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr ""
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr ""
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr ""
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr ""
#: mainframe.py:107
msgid "Shutting down system"
msgstr ""
#: mainframe.py:109
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr ""
#: mainframe.py:110
msgid "Size"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: mainframe.py:111
msgid "Percent"
#: formats.py:12 formats.py:111
msgid "Title + Quality"
msgstr ""
#: mainframe.py:112
msgid "ETA"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: mainframe.py:113
msgid "Speed"
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: mainframe.py:114
msgid "Status"
msgstr ""
#: optionsframe.py:42
msgid "General"
msgstr ""
#: optionsframe.py:43
msgid "Video"
msgstr ""
#: optionsframe.py:44
msgid "Audio"
msgstr ""
#: optionsframe.py:45
msgid "Playlist"
msgstr ""
#: optionsframe.py:46
msgid "Output"
msgstr ""
#: optionsframe.py:47
msgid "Subtitles"
msgstr ""
#: optionsframe.py:48
msgid "Filesystem"
msgstr ""
#: optionsframe.py:49
msgid "Shutdown"
msgstr ""
#: optionsframe.py:50
msgid "Authentication"
msgstr ""
#: optionsframe.py:51
msgid "Connection"
msgstr ""
#: optionsframe.py:52
msgid "Log"
msgstr ""
#: optionsframe.py:53
msgid "Commands"
msgstr ""
#: optionsframe.py:54
msgid "Localization"
msgstr ""
#: optionsframe.py:400
msgid "Enable Log"
msgstr ""
#: optionsframe.py:401
msgid "Write Time"
msgstr ""
#: optionsframe.py:402
msgid "Clear Log"
msgstr ""
#: optionsframe.py:403
msgid "View Log"
msgstr ""
#: optionsframe.py:404
msgid "Path: {0}"
msgstr ""
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr ""
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr ""
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr ""
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr ""
#: optionsframe.py:518
msgid "SUDO password"
msgstr ""
#: optionsframe.py:570
msgid "Playlist Start"
msgstr ""
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr ""
#: optionsframe.py:572
msgid "Max Downloads"
msgstr ""
#: optionsframe.py:630
msgid "Retries"
msgstr ""
#: optionsframe.py:631
msgid "User Agent"
msgstr ""
#: optionsframe.py:632
msgid "Referer"
msgstr ""
#: optionsframe.py:633
msgid "Proxy"
msgstr ""
#: optionsframe.py:707
msgid "Username"
msgstr ""
#: optionsframe.py:708
msgid "Password"
msgstr ""
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr ""
#: optionsframe.py:767
msgid "high"
msgstr ""
#: optionsframe.py:767
msgid "low"
msgstr ""
#: optionsframe.py:767
msgid "mid"
msgstr ""
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr ""
#: optionsframe.py:771
msgid "Keep Video"
msgstr ""
#: optionsframe.py:772
msgid "Audio Format"
msgstr ""
#: optionsframe.py:773
msgid "Audio Quality"
msgstr ""
#: optionsframe.py:890
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr ""
#: optionsframe.py:891
msgid "none"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: optionsframe.py:895
msgid "Video Format"
#: mainframe.py:98
msgid "Update"
msgstr ""
#: optionsframe.py:896
msgid "Mix Format"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr ""
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr ""
#: optionsframe.py:956
msgid "ID as Name"
#: mainframe.py:101
msgid "Info"
msgstr ""
#: optionsframe.py:957
msgid "Title as Name"
#: mainframe.py:102
msgid "Welcome"
msgstr ""
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: optionsframe.py:1052
msgid "Ignore Errors"
#: mainframe.py:105
msgid "Add"
msgstr ""
#: optionsframe.py:1053
msgid "Open destination folder"
#: mainframe.py:106
msgid "Download list"
msgstr ""
#: optionsframe.py:1054
msgid "Write info to (.json) file"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: optionsframe.py:1055
msgid "Write description to file"
#: mainframe.py:108
msgid "Play"
msgstr ""
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: optionsframe.py:1057
msgid "Filesize"
#: mainframe.py:110
msgid "Down"
msgstr ""
#: optionsframe.py:1058
msgid "Min"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: optionsframe.py:1172
msgid "English"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
msgid "Start"
msgstr ""
#: optionsframe.py:1173
msgid "Greek"
msgstr ""
#: optionsframe.py:1174
msgid "Portuguese"
msgstr ""
#: optionsframe.py:1175
msgid "French"
msgstr ""
#: optionsframe.py:1176
msgid "Italian"
msgstr ""
#: optionsframe.py:1177
msgid "Russian"
msgstr ""
#: optionsframe.py:1178
msgid "Spanish"
msgstr ""
#: optionsframe.py:1179
msgid "German"
msgstr ""
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr ""
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr ""
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr ""
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr ""
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr ""
#: optionsframe.py:1280
#: mainframe.py:114
msgid "About"
msgstr ""
#: optionsframe.py:1281
msgid "Open"
#: mainframe.py:115
msgid "View Log"
msgstr ""
#: optionsframe.py:1282
msgid "Reset Options"
#: mainframe.py:117
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr ""
#: optionsframe.py:1283
msgid "Save Path"
#: mainframe.py:119
msgid "Downloads completed"
msgstr ""
#: optionsframe.py:1284
msgid "Settings File: {0}"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:121
msgid "Stopping downloads"
msgstr ""
#: mainframe.py:122
msgid "Downloads stopped"
msgstr ""
#: mainframe.py:123
msgid "You need to provide at least one URL"
msgstr ""
#: mainframe.py:124
msgid "Downloads started"
msgstr ""
#: mainframe.py:125
msgid "Choose Directory"
msgstr ""
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr ""
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr ""
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr ""
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr ""
#: mainframe.py:138
msgid "Shutting down system"
msgstr ""
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr ""
#: mainframe.py:143
msgid "Percent"
msgstr ""
#: mainframe.py:144
msgid "ETA"
msgstr ""
#: mainframe.py:145
msgid "Speed"
msgstr ""
#: mainframe.py:146
msgid "Status"
msgstr ""
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
msgid "Get command"
msgstr ""
#: mainframe.py:237
msgid "Open destination"
msgstr ""
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr ""
#: mainframe.py:479
msgid "Audio"
msgstr ""
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
msgid "Remove completed"
msgstr ""
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
msgid "Item is not completed"
msgstr ""
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr ""
#: mainframe.py:886
msgid "Shutting down in {0} second(s)"
msgstr ""
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr ""
#: optionsframe.py:73
msgid "Formats"
msgstr ""
#: optionsframe.py:74
msgid "Downloads"
msgstr ""
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
msgid "Language"
msgstr ""
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
msgid "Filename options"
msgstr ""
#: optionsframe.py:322
msgid "Restrict filenames to ASCII"
msgstr ""
#: optionsframe.py:324
msgid "More options"
msgstr ""
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
msgid "Shutdown on download completion"
msgstr ""
#: optionsframe.py:340
msgid "SUDO password"
msgstr ""
#: optionsframe.py:418 optionsframe.py:819
msgid "In order for the changes to take effect please restart {0}"
msgstr ""
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr ""
#: optionsframe.py:466
msgid "high"
msgstr ""
#: optionsframe.py:466
msgid "low"
msgstr ""
#: optionsframe.py:466
msgid "mid"
msgstr ""
#: optionsframe.py:471
msgid "Video formats"
msgstr ""
#: optionsframe.py:474
msgid "Audio formats"
msgstr ""
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
msgid "Audio quality"
msgstr ""
#: optionsframe.py:541
msgid "English"
msgstr ""
#: optionsframe.py:542
msgid "French"
msgstr ""
#: optionsframe.py:543
msgid "German"
msgstr ""
#: optionsframe.py:544
msgid "Greek"
msgstr ""
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr ""
#: optionsframe.py:547
msgid "Portuguese"
msgstr ""
#: optionsframe.py:548
msgid "Russian"
msgstr ""
#: optionsframe.py:549
msgid "Spanish"
msgstr ""
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr ""
#: optionsframe.py:569
msgid "All available subtitles"
msgstr ""
#: optionsframe.py:570
msgid "Subtitles by language"
msgstr ""
#: optionsframe.py:576
msgid "Subtitles"
msgstr ""
#: optionsframe.py:580
msgid "Subtitles options"
msgstr ""
#: optionsframe.py:581
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr ""
#: optionsframe.py:583
msgid "Playlist"
msgstr ""
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr ""
#: optionsframe.py:592
msgid "Filesize"
msgstr ""
#: optionsframe.py:597
msgid "Min"
msgstr ""
#: optionsframe.py:726
msgid "Retries"
msgstr ""
#: optionsframe.py:729
msgid "Authentication"
msgstr ""
#: optionsframe.py:731
msgid "Username"
msgstr ""
#: optionsframe.py:733
msgid "Password"
msgstr ""
#: optionsframe.py:735
msgid "Video password"
msgstr ""
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr ""
#: optionsframe.py:742
msgid "User agent"
msgstr ""
#: optionsframe.py:744
msgid "Referer"
msgstr ""
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
msgid "Enable log"
msgstr ""
#: optionsframe.py:750
msgid "View"
msgstr ""
#: optionsframe.py:751
msgid "Clear"
msgstr ""
#: optionsframe.py:861
msgid "Youtube-dl command line options (e.g. --help)"
msgstr ""
#: optionsframe.py:864
msgid "Extra options"
msgstr ""
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
msgid "Ignore errors"
msgstr ""
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr ""

View File

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-07-02 15:32+EEST\n"
"Last-Translator: Ismael Ferreras Morezuelas <swyterzone+youtubedlgui@gmail.com>\n"
"Language-Team: Spanish <>\n"
@ -17,426 +17,606 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 2.91.7\n"
#: mainframe.py:82
msgid "URLs"
msgstr "Direcciones de Internet a descargar"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Descargar"
#: mainframe.py:84
msgid "Update"
msgstr "Actualizar"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "Ajustes"
#: mainframe.py:86
msgid "Error"
msgstr "Error"
#: mainframe.py:87
msgid "Stop"
msgstr "Detener"
#: mainframe.py:88
msgid "Info"
msgstr "Info"
#: mainframe.py:89
msgid "Welcome"
msgstr "Bienvenid@"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Se han terminado de descargar {0} elementos en {1} días, {2} horas, {3} minutos y {4} segundos"
#: mainframe.py:92
msgid "Downloads completed"
msgstr "Se han completado todas las descargas."
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Descargando {0} elementos."
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "Parando descargas en curso."
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "Se ha detenido todas las descargas en curso."
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "Es necesario proporcionar al menos una dirección de descarga para poder empezar."
#: mainframe.py:97
msgid "Downloads started"
msgstr "Comenzando descargas."
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Descargando última versión de youtube-dl. Un momento..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "No se ha podido descargar youtube-dl [{0}]."
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl se ha actualizado correctamente."
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "No se ha podido abrir la carpeta: '{dir}'. La ruta no existe."
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "No se ha podido apagar el equipo. Asegúrate de que la contraseña esté bien escrita."
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Apagando el equipo"
#: mainframe.py:109
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Título"
#: mainframe.py:110
msgid "Size"
msgstr "Tamaño"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: mainframe.py:111
msgid "Percent"
msgstr "Porcentaje"
#: mainframe.py:112
msgid "ETA"
msgstr "Tiempo estimado"
#: mainframe.py:113
msgid "Speed"
msgstr "Velocidad"
#: mainframe.py:114
msgid "Status"
msgstr "Estado"
#: optionsframe.py:42
msgid "General"
msgstr "General"
#: optionsframe.py:43
msgid "Video"
msgstr "Vídeo"
#: optionsframe.py:44
msgid "Audio"
msgstr "Audio"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Lista de reproducción"
#: optionsframe.py:46
msgid "Output"
msgstr "Nomenclatura"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Subtítulos"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Sistema de archivos"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Apagar"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Autenticación"
#: optionsframe.py:51
msgid "Connection"
msgstr "Conexión"
#: optionsframe.py:52
msgid "Log"
msgstr "Registro"
#: optionsframe.py:53
msgid "Commands"
msgstr "Comandos"
#: optionsframe.py:54
msgid "Localization"
msgstr "Idioma"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Utilizar archivo de registro"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Hora de escritura"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Borrar registro"
#: optionsframe.py:403
msgid "View Log"
msgstr "Ver registro"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Ruta: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Tamaño de archivo de registro: {0} bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Reiniciar"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Es necesario reiniciar {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Apagar el equipo al terminar"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "Contraseña de superusuario"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Inicio de lista de reproducción"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Fin de lista de reproducción"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Nº máximo de elementos a descargar"
#: optionsframe.py:630
msgid "Retries"
msgstr "Reintentos"
#: optionsframe.py:631
msgid "User Agent"
msgstr "Agente de usuario"
#: optionsframe.py:632
msgid "Referer"
msgstr "Página de origen"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "Nombre de usuario"
#: optionsframe.py:708
msgid "Password"
msgstr "Contraseña"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Contraseña de vídeo (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "Alta"
#: optionsframe.py:767
msgid "low"
msgstr "Baja"
#: optionsframe.py:767
msgid "mid"
msgstr "Intermedia"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Convertir vídeos a audio"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Conservar el vídeo original"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Formato de audio:"
#: optionsframe.py:773
msgid "Audio Quality"
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Calidad de audio:"
#: optionsframe.py:890
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "predeterminada"
#: optionsframe.py:891
msgid "none"
msgstr "ninguno"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: optionsframe.py:895
msgid "Video Format"
msgstr "Formato de vídeo"
#: mainframe.py:98
msgid "Update"
msgstr "Actualizar"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Formato mixto"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Ajustes"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Restringir nombres de archivo (a ASCII)"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Detener"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "Utilizar el identificador como nombre de archivo."
#: mainframe.py:101
msgid "Info"
msgstr "Info"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Utilizar el título como nombre de archivo."
#: mainframe.py:102
msgid "Welcome"
msgstr "Bienvenid@"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Plantilla personalizada (youtube-dl)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Ignorar errores"
#: mainframe.py:105
msgid "Add"
msgstr ""
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Abrir carpeta de destino"
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Descargar"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Guardar info en archivo (.json)"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Guardar descripción en archivo"
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Lista de reproducción"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Guardar miniatura en disco"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Tamaño de archivo"
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Descargar"
#: optionsframe.py:1058
msgid "Min"
msgstr "Mínimo"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
msgstr "Máximo"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: optionsframe.py:1172
msgid "English"
msgstr "Inglés"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Reiniciar"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Griego"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portugués"
#: optionsframe.py:1175
msgid "French"
msgstr "Francés"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Ruso"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Español"
#: optionsframe.py:1179
msgid "German"
msgstr "Alemán"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Descargar archivo de subtítulos por idioma"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Descargar todos los subtítulos disponibles"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Descargar archivo con subtítulos automáticos (SÓLO PARA YOUTUBE)"
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Insertar los subtítulos en el vídeo (sólo para vídeos en mp4)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Idioma de subtítulos"
#: optionsframe.py:1280
#: mainframe.py:114
msgid "About"
msgstr "Acerca de"
#: optionsframe.py:1281
msgid "Open"
msgstr "Abrir"
#: mainframe.py:115
msgid "View Log"
msgstr "Ver registro"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Restablecer"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Se han terminado de descargar {0} elementos en {1} días, {2} horas, {3} minutos y {4} segundos"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Ruta de destino"
#: mainframe.py:119
msgid "Downloads completed"
msgstr "Se han completado todas las descargas."
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Archivo de configuración: {0}"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Parando descargas en curso."
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Se ha detenido todas las descargas en curso."
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Es necesario proporcionar al menos una dirección de descarga para poder empezar."
#: mainframe.py:124
msgid "Downloads started"
msgstr "Comenzando descargas."
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Elegir carpeta"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Argumentos de línea de comandos (p. ej. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Idioma de interfaz"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Descargando última versión de youtube-dl. Un momento..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "No se ha podido descargar youtube-dl [{0}]."
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "No se ha podido abrir la carpeta: '{dir}'. La ruta no existe."
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "No se ha podido apagar el equipo. Asegúrate de que la contraseña esté bien escrita."
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Apagando el equipo"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Tamaño"
#: mainframe.py:143
msgid "Percent"
msgstr "Porcentaje"
#: mainframe.py:144
msgid "ETA"
msgstr "Tiempo estimado"
#: mainframe.py:145
msgid "Speed"
msgstr "Velocidad"
#: mainframe.py:146
msgid "Status"
msgstr "Estado"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Comandos"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Abrir carpeta de destino"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Vídeo"
#: mainframe.py:479
msgid "Audio"
msgstr "Audio"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Se han completado todas las descargas."
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Se han completado todas las descargas."
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Apagar"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Apagando el equipo"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "General"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Formato mixto"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Descargar"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Idioma de subtítulos"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Restablecer"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Restringir nombres de archivo (a ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Restablecer"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Se han completado todas las descargas."
#: optionsframe.py:340
msgid "SUDO password"
msgstr "Contraseña de superusuario"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Por favor, reinicia {0} para que los efectos surtan efecto"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Reiniciar"
#: optionsframe.py:466
msgid "high"
msgstr "Alta"
#: optionsframe.py:466
msgid "low"
msgstr "Baja"
#: optionsframe.py:466
msgid "mid"
msgstr "Intermedia"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Formato de vídeo"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Formato de audio:"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Calidad de audio:"
#: optionsframe.py:541
msgid "English"
msgstr "Inglés"
#: optionsframe.py:542
msgid "French"
msgstr "Francés"
#: optionsframe.py:543
msgid "German"
msgstr "Alemán"
#: optionsframe.py:544
msgid "Greek"
msgstr "Griego"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portugués"
#: optionsframe.py:548
msgid "Russian"
msgstr "Ruso"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Español"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Descargar archivo con subtítulos automáticos (SÓLO PARA YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Descargar todos los subtítulos disponibles"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Idioma de subtítulos"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Subtítulos"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Subtítulos"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Insertar los subtítulos en el vídeo (sólo para vídeos en mp4)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Lista de reproducción"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "Máximo"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Tamaño de archivo"
#: optionsframe.py:597
msgid "Min"
msgstr "Mínimo"
#: optionsframe.py:726
msgid "Retries"
msgstr "Reintentos"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Autenticación"
#: optionsframe.py:731
msgid "Username"
msgstr "Nombre de usuario"
#: optionsframe.py:733
msgid "Password"
msgstr "Contraseña"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "Contraseña de superusuario"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "Agente de usuario"
#: optionsframe.py:744
msgid "Referer"
msgstr "Página de origen"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Utilizar archivo de registro"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Ver registro"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Borrar registro"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Argumentos de línea de comandos (p. ej. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Restablecer"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Ignorar errores"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Visor de registro"

View File

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-07-02 15:32+EEST\n"
"Last-Translator: Israel Torres <dnlsrl.kaiser@gmail.com>\n"
"Language-Team: Spanish <>\n"
@ -17,429 +17,608 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 2.91.7\n"
#: mainframe.py:82
msgid "URLs"
msgstr "URLs"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Descargar"
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Título"
#: mainframe.py:84
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Calidad de audio"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "por defecto"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: mainframe.py:98
msgid "Update"
msgstr "Actualizar"
#: mainframe.py:85 optionsframe.py:40
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Opciones"
#: mainframe.py:86
msgid "Error"
msgstr "Error"
#: mainframe.py:87
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Detener"
#: mainframe.py:88
#: mainframe.py:101
msgid "Info"
msgstr "Info"
#: mainframe.py:89
#: mainframe.py:102
msgid "Welcome"
msgstr "Bienvenido"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: mainframe.py:105
msgid "Add"
msgstr ""
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Descargar"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Lista de reproducción"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Descargar"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Reiniciar"
#: mainframe.py:114
msgid "About"
msgstr "Acerca de"
#: mainframe.py:115
msgid "View Log"
msgstr "Ver registro"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "{0} url(s) descargadas exitosamente en {1} día(s) {2} hora(s) {3} minuto(s) {4} segundo(s)"
#: mainframe.py:92
#: mainframe.py:119
#, fuzzy
msgid "Downloads completed"
msgstr "Descarga terminada"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Descargando {0} url(s)"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: mainframe.py:94
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Deteniendo descargas"
#: mainframe.py:95
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Descargas detenidas"
#: mainframe.py:96
msgid "You need to provide at least one url"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Tienes que especificar una url como mínimo"
#: mainframe.py:97
#: mainframe.py:124
#, fuzzy
msgid "Downloads started"
msgstr "Descarga iniciada"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Descargando la versión más reciente de youtube-dl. Espera..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Falló la descarga de youtube-dl [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl se descargó correctamente"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "No se pudo abrir el directorio: '{dir}'. La ruta no existe"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Error al apagar. Asegúrate de que introdujiste la contraseña correcta"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Apagando sistema"
#: mainframe.py:109
msgid "Title"
msgstr "Título"
#: mainframe.py:110
msgid "Size"
msgstr "Tamaño"
#: mainframe.py:111
msgid "Percent"
msgstr "Porcentaje"
#: mainframe.py:112
msgid "ETA"
msgstr "Tiempo estimado"
#: mainframe.py:113
msgid "Speed"
msgstr "Velocidad"
#: mainframe.py:114
msgid "Status"
msgstr "Estado"
#: optionsframe.py:42
msgid "General"
msgstr "General"
#: optionsframe.py:43
msgid "Video"
msgstr "Video"
#: optionsframe.py:44
msgid "Audio"
msgstr "Audio"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Lista de reproducción"
#: optionsframe.py:46
msgid "Output"
msgstr "Nombre"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Subtítulos"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Sistema de archivos"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Apagar"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Autenticación"
#: optionsframe.py:51
msgid "Connection"
msgstr "Conexión"
#: optionsframe.py:52
msgid "Log"
msgstr "Registro"
#: optionsframe.py:53
msgid "Commands"
msgstr "Comandos"
#: optionsframe.py:54
msgid "Localization"
msgstr "Idioma"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Habilitar archivo de registro"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Hora de escritura"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Limpiar registro"
#: optionsframe.py:403
msgid "View Log"
msgstr "Ver registro"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Ruta: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Tamaño de archivo de registro: {0} Bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Reiniciar"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Por favor, reinicia {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Apagar al finalizar"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "Contraseña SUDO"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Inicio de lista de reproducción"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Final de lista de reproducción"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Máximo de descargas"
#: optionsframe.py:630
msgid "Retries"
msgstr "Reintentos"
#: optionsframe.py:631
msgid "User Agent"
msgstr "Agente de usuario"
#: optionsframe.py:632
msgid "Referer"
msgstr "Referidor"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "Nombre de usuario"
#: optionsframe.py:708
msgid "Password"
msgstr "Contraseña"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Contraseña de video (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "alta"
#: optionsframe.py:767
msgid "low"
msgstr "baja"
#: optionsframe.py:767
msgid "mid"
msgstr "media"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Convertir a audio"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Mantener video"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Formato de audio"
#: optionsframe.py:773
msgid "Audio Quality"
msgstr "Calidad de audio"
#: optionsframe.py:890
msgid "default"
msgstr "por defecto"
#: optionsframe.py:891
msgid "none"
msgstr "ninguno"
#: optionsframe.py:895
msgid "Video Format"
msgstr "Formato de video"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Formato mixto"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Restringir nombres de archivo (ASCII)"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID como nombre"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Título como nombre"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Plantilla personalizada (youtube-dl)"
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Ignorar errores"
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Abrir directorio destino"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Escribir info a archivo (.json)"
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Grabar descripción al archivo"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Grabar miniatura a disco"
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Tamaño de archivo"
#: optionsframe.py:1058
msgid "Min"
msgstr "Mínimo"
#: optionsframe.py:1059
msgid "Max"
msgstr "Máximo"
#: optionsframe.py:1172
msgid "English"
msgstr "Inglés"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Griego"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portugués"
#: optionsframe.py:1175
msgid "French"
msgstr "Francés"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Ruso"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Español"
#: optionsframe.py:1179
msgid "German"
msgstr "Alemán"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Descargar archivo de subtítulos por idioma"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Descargar todos los subtítulos disponibles"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Descargar archivo de subtítulos automático (SOLO YOUTUBE)"
#: optionsframe.py:1185
#, fuzzy
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Insertar los subtítulos en el video (solo para videos mp4)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Idioma de subtítulos"
#: optionsframe.py:1280
msgid "About"
msgstr "Acerca de"
#: optionsframe.py:1281
msgid "Open"
msgstr "Abrir"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Restablecer"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Ruta de destino"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Archivo de opciones: {0}"
#: optionsframe.py:1285
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Elegir directorio"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Argumentos de línea de comandos (p. ej. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Idioma de localización"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Descargando la versión más reciente de youtube-dl. Espera..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Falló la descarga de youtube-dl [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "No se pudo abrir el directorio: '{dir}'. La ruta no existe"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Error al apagar. Asegúrate de que introdujiste la contraseña correcta"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Apagando sistema"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Tamaño"
#: mainframe.py:143
msgid "Percent"
msgstr "Porcentaje"
#: mainframe.py:144
msgid "ETA"
msgstr "Tiempo estimado"
#: mainframe.py:145
msgid "Speed"
msgstr "Velocidad"
#: mainframe.py:146
msgid "Status"
msgstr "Estado"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Comandos"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Abrir directorio destino"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Video"
#: mainframe.py:479
msgid "Audio"
msgstr "Audio"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Descarga terminada"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Descarga terminada"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Apagar"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Apagando sistema"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "General"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Formato mixto"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Descargar"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Idioma de subtítulos"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Restablecer"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Restringir nombres de archivo (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Restablecer"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Descarga terminada"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "Contraseña SUDO"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Por favor, reinicia {0} para que los efectos surtan efecto"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Reiniciar"
#: optionsframe.py:466
msgid "high"
msgstr "alta"
#: optionsframe.py:466
msgid "low"
msgstr "baja"
#: optionsframe.py:466
msgid "mid"
msgstr "media"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Formato de video"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Formato de audio"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Calidad de audio"
#: optionsframe.py:541
msgid "English"
msgstr "Inglés"
#: optionsframe.py:542
msgid "French"
msgstr "Francés"
#: optionsframe.py:543
msgid "German"
msgstr "Alemán"
#: optionsframe.py:544
msgid "Greek"
msgstr "Griego"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portugués"
#: optionsframe.py:548
msgid "Russian"
msgstr "Ruso"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Español"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Descargar archivo de subtítulos automático (SOLO YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Descargar todos los subtítulos disponibles"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Idioma de subtítulos"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Subtítulos"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Subtítulos"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Insertar los subtítulos en el video (solo para videos mp4)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Lista de reproducción"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "Máximo"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Tamaño de archivo"
#: optionsframe.py:597
msgid "Min"
msgstr "Mínimo"
#: optionsframe.py:726
msgid "Retries"
msgstr "Reintentos"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Autenticación"
#: optionsframe.py:731
msgid "Username"
msgstr "Nombre de usuario"
#: optionsframe.py:733
msgid "Password"
msgstr "Contraseña"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "Contraseña SUDO"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "Agente de usuario"
#: optionsframe.py:744
msgid "Referer"
msgstr "Referidor"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Habilitar archivo de registro"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Ver registro"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Limpiar registro"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Argumentos de línea de comandos (p. ej. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Restablecer"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Ignorar errores"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Visor de registro"

View File

@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-07-02 15:38+EEST\n"
"Last-Translator: Thierry Roussel <thierry.roussel@gmx.com>\n"
"Language-Team: fr\n"
@ -13,429 +13,607 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "Lien(s)"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Télécharger"
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Titre"
#: mainframe.py:84
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Qualité Audio"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "par défaut"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: mainframe.py:98
msgid "Update"
msgstr "Mise à jour"
#: mainframe.py:85 optionsframe.py:40
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr ""
#: mainframe.py:86
msgid "Error"
msgstr "Erreur"
#: mainframe.py:87
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Arrêter"
#: mainframe.py:88
#: mainframe.py:101
msgid "Info"
msgstr ""
#: mainframe.py:89
#: mainframe.py:102
msgid "Welcome"
msgstr "Bienvenue"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: mainframe.py:105
msgid "Add"
msgstr ""
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Télécharger"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Playlist"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Télécharger"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Redémarrer"
#: mainframe.py:114
msgid "About"
msgstr "A propos"
#: mainframe.py:115
msgid "View Log"
msgstr "Afficher les traces"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Téléchargements réussis {0} lien(s) en {1} jour(s) {2} heure(s) {3} minute(s) {4} seconde(s)"
#: mainframe.py:92
#: mainframe.py:119
#, fuzzy
msgid "Downloads completed"
msgstr "Téléchargement terminé"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Téléchargement de {0} lien(s)"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: mainframe.py:94
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Arrêt des téléchargements"
#: mainframe.py:95
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Téléchargements arrêtés"
#: mainframe.py:96
msgid "You need to provide at least one url"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Vous devez fournir au moins 1 lien"
#: mainframe.py:97
#: mainframe.py:124
#, fuzzy
msgid "Downloads started"
msgstr "Téléchargement démarré"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Mise à jour de youtube-dl. Merci de patienter"
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Echec de la mise à jour de Youtube-dl [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl a été mis à jour"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Impossible d'ouvrir le répertoire: '{dir}'. Le chemin n'existe pas"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Erreur d'arrêt du système. Vérifiez le mot de passe saisi"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Arrêt du système"
#: mainframe.py:109
msgid "Title"
msgstr "Titre"
#: mainframe.py:110
msgid "Size"
msgstr "Taille"
#: mainframe.py:111
msgid "Percent"
msgstr "%"
#: mainframe.py:112
msgid "ETA"
msgstr "ETA"
#: mainframe.py:113
msgid "Speed"
msgstr "Vitesse"
#: mainframe.py:114
msgid "Status"
msgstr "Etat"
#: optionsframe.py:42
msgid "General"
msgstr "Général"
#: optionsframe.py:43
msgid "Video"
msgstr "Vidéo"
#: optionsframe.py:44
msgid "Audio"
msgstr "Audio"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Playlist"
#: optionsframe.py:46
msgid "Output"
msgstr "Sortie"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Sous-titres"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Fichiers"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Arrêt"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Authentification"
#: optionsframe.py:51
msgid "Connection"
msgstr "Connexion"
#: optionsframe.py:52
msgid "Log"
msgstr "Log"
#: optionsframe.py:53
msgid "Commands"
msgstr "Commandes"
#: optionsframe.py:54
msgid "Localization"
msgstr "Langue"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Activer les traces"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Temps d'écriture"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Effacer les traces"
#: optionsframe.py:403
msgid "View Log"
msgstr "Afficher les traces"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Répertoire: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Taille des traces: {0} Octets"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Redémarrer"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Veuillez redémarrer {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Arrêter une fois terminé"
#: optionsframe.py:518
msgid "SUDO password"
msgstr ""
#: optionsframe.py:570
msgid "Playlist Start"
msgstr ""
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr ""
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Téléchargements Max"
#: optionsframe.py:630
msgid "Retries"
msgstr "Essais"
#: optionsframe.py:631
msgid "User Agent"
msgstr ""
#: optionsframe.py:632
msgid "Referer"
msgstr ""
#: optionsframe.py:633
msgid "Proxy"
msgstr ""
#: optionsframe.py:707
msgid "Username"
msgstr "Utilisateur"
#: optionsframe.py:708
msgid "Password"
msgstr "Mot de passe"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr ""
#: optionsframe.py:767
msgid "high"
msgstr "haute"
#: optionsframe.py:767
msgid "low"
msgstr "basse"
#: optionsframe.py:767
msgid "mid"
msgstr "moyenne"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Convertir la piste Audio"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Conserver la piste Vidéo"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Format Audio"
#: optionsframe.py:773
msgid "Audio Quality"
msgstr "Qualité Audio"
#: optionsframe.py:890
msgid "default"
msgstr "par défaut"
#: optionsframe.py:891
msgid "none"
msgstr "aucune"
#: optionsframe.py:895
msgid "Video Format"
msgstr "Format Vidéo"
#: optionsframe.py:896
msgid "Mix Format"
msgstr ""
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Convertir les noms (ASCII)"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "Nom = ID"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Nom = Titre"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Format personnalisé"
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Ignorer les erreurs"
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Ouvrir le répertoire de destination"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Renseigner le fichier (.json)"
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Ecrire la description"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Enregistrer la miniature"
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Taille de fichier"
#: optionsframe.py:1058
msgid "Min"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
msgstr ""
#: optionsframe.py:1172
msgid "English"
msgstr "Anglais"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Grec"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portugais"
#: optionsframe.py:1175
msgid "French"
msgstr "Français"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Italien"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Russe"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Espagnol"
#: optionsframe.py:1179
msgid "German"
msgstr "Allemand"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Télécharger les sous-titres suivant la langue"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Télécharger tous les sous-titres disponibles"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Télécharger le fichier sous-titre automatique (YOUTUBE ONLY)"
#: optionsframe.py:1185
#, fuzzy
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Ajouter les sous-titres à la vidéo (mp4 uniquement)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Langue sous-titres"
#: optionsframe.py:1280
msgid "About"
msgstr "A propos"
#: optionsframe.py:1281
msgid "Open"
msgstr "Ouvrir"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Reset options"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Enregistrer sous..."
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Sélectionner le répertoire"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Langue"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Mise à jour de youtube-dl. Merci de patienter"
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Echec de la mise à jour de Youtube-dl [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Impossible d'ouvrir le répertoire: '{dir}'. Le chemin n'existe pas"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Erreur d'arrêt du système. Vérifiez le mot de passe saisi"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Arrêt du système"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Taille"
#: mainframe.py:143
msgid "Percent"
msgstr "%"
#: mainframe.py:144
msgid "ETA"
msgstr "ETA"
#: mainframe.py:145
msgid "Speed"
msgstr "Vitesse"
#: mainframe.py:146
msgid "Status"
msgstr "Etat"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Commandes"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Ouvrir le répertoire de destination"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Vidéo"
#: mainframe.py:479
msgid "Audio"
msgstr "Audio"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Téléchargement terminé"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Téléchargement terminé"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Arrêt"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Arrêt du système"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Général"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Format Audio"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Télécharger"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Langue sous-titres"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Reset options"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Convertir les noms (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Reset options"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Téléchargement terminé"
#: optionsframe.py:340
msgid "SUDO password"
msgstr ""
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Pour que les changements prennent effet, veuillez redémarrer {0}"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Redémarrer"
#: optionsframe.py:466
msgid "high"
msgstr "haute"
#: optionsframe.py:466
msgid "low"
msgstr "basse"
#: optionsframe.py:466
msgid "mid"
msgstr "moyenne"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Format Vidéo"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Format Audio"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Qualité Audio"
#: optionsframe.py:541
msgid "English"
msgstr "Anglais"
#: optionsframe.py:542
msgid "French"
msgstr "Français"
#: optionsframe.py:543
msgid "German"
msgstr "Allemand"
#: optionsframe.py:544
msgid "Greek"
msgstr "Grec"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Italien"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portugais"
#: optionsframe.py:548
msgid "Russian"
msgstr "Russe"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Espagnol"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Télécharger le fichier sous-titre automatique (YOUTUBE ONLY)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Télécharger tous les sous-titres disponibles"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Langue sous-titres"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Sous-titres"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Sous-titres"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Ajouter les sous-titres à la vidéo (mp4 uniquement)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Playlist"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr ""
#: optionsframe.py:592
msgid "Filesize"
msgstr "Taille de fichier"
#: optionsframe.py:597
msgid "Min"
msgstr ""
#: optionsframe.py:726
msgid "Retries"
msgstr "Essais"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Authentification"
#: optionsframe.py:731
msgid "Username"
msgstr "Utilisateur"
#: optionsframe.py:733
msgid "Password"
msgstr "Mot de passe"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "Mot de passe"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr ""
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "Utilisateur"
#: optionsframe.py:744
msgid "Referer"
msgstr ""
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Activer les traces"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Afficher les traces"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Effacer les traces"
#: optionsframe.py:861
msgid "Youtube-dl command line options (e.g. --help)"
msgstr ""
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Reset options"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Ignorer les erreurs"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Afficher les traces"

View File

@ -0,0 +1,618 @@
# Youtube-dlG localization file.
# FIRST AUTHOR: Sotiris Papadopoulos <ytubedlg@gmail.com>, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-09-28 16:28+EEST\n"
"Last-Translator: Yuval Bar-on <hyuvii@gmail.com>\n"
"Language-Team: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "כותרת"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "איכות אודיו"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "ברירת מחדל"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: mainframe.py:98
msgid "Update"
msgstr "עדכן"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "אפשרויות"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "עצור"
#: mainframe.py:101
msgid "Info"
msgstr "מידע"
#: mainframe.py:102
msgid "Welcome"
msgstr "ברוכים הבאים"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: mainframe.py:105
msgid "Add"
msgstr ""
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "הורדה"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "פלייליסט"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "הורדה"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "הפעל מחדש"
#: mainframe.py:114
msgid "About"
msgstr "אודות"
#: mainframe.py:115
msgid "View Log"
msgstr "צפה לוג"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "הוריד בהצלחה {0} קישור(ים) תוך {1} יום(ימים) {2} שעה(ות) {3} דקה(ות) {4} שנייה(ות)"
#: mainframe.py:119
msgid "Downloads completed"
msgstr "ההורדה הושלמה"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "מפסיק הורדה"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "ההורדה נפסקה"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "עלייך לספק לפחות קישור אחד"
#: mainframe.py:124
msgid "Downloads started"
msgstr "ההורדה החלה"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "בחר תיקייה"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "מוריד את youtube-dl האחרון. אנא המתן..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "ההורדה של youtube-dl נכשלה [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "לא הצליח לפתוח תיקייה: '{dir}'. הכתובת שצויינה איננה קיימת"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "שגיאה בזמן יציאה. אנא וודאו שהכנסתם את הסיסמא הנכונה"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "יוצא מהתוכנה"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "גודל"
#: mainframe.py:143
msgid "Percent"
msgstr "אחוז(ים)"
#: mainframe.py:144
msgid "ETA"
msgstr "זמן סיום משוער"
#: mainframe.py:145
msgid "Speed"
msgstr "מהירות"
#: mainframe.py:146
msgid "Status"
msgstr "סטטוס"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "פקודות"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "פתח תיקיית יעד"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "וידאו"
#: mainframe.py:479
msgid "Audio"
msgstr "אודיו"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "ההורדה הושלמה"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "ההורדה הושלמה"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "כיבוי"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "יוצא מהתוכנה"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "כללי"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "פורמט משולב (mix)"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "הורדה"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "שפת כתוביות"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "אפס הגדרות"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "הגבל שמות קבצים ללועזית (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "אפס הגדרות"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "ההורדה הושלמה"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "סיסמאת SUDO"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "על מנת להחיל את השינויים יש לאתחל את {0}"
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "הפעל מחדש"
#: optionsframe.py:466
msgid "high"
msgstr "גבוהה"
#: optionsframe.py:466
msgid "low"
msgstr "נמוכה"
#: optionsframe.py:466
msgid "mid"
msgstr "בינונית"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "פורמט וידאו"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "פורמט אודיו"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "איכות אודיו"
#: optionsframe.py:541
msgid "English"
msgstr "אנגלית"
#: optionsframe.py:542
msgid "French"
msgstr "צרפתית"
#: optionsframe.py:543
msgid "German"
msgstr "גרמנית"
#: optionsframe.py:544
msgid "Greek"
msgstr "יוונית"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "איטלקית"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "פורטוגזית"
#: optionsframe.py:548
msgid "Russian"
msgstr "רוסית"
#: optionsframe.py:549
msgid "Spanish"
msgstr "ספרדית"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "הורד כתוביות אוטומטיות (רק Youtube!)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "הורד את כל הכתוביות הקיימות"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "שפת כתוביות"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "כתוביות"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "כתוביות"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "שמור כתוביות כחלק מהוידאו (רק לקבצי mp4)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "פלייליסט"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "מקסימום"
#: optionsframe.py:592
msgid "Filesize"
msgstr "גודל הקובץ"
#: optionsframe.py:597
msgid "Min"
msgstr "מינימום"
#: optionsframe.py:726
msgid "Retries"
msgstr "נסיונות חוזרים"
#: optionsframe.py:729
msgid "Authentication"
msgstr "אימות משתמש"
#: optionsframe.py:731
msgid "Username"
msgstr "שם משתמש"
#: optionsframe.py:733
msgid "Password"
msgstr "סיסמא"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "סיסמאת SUDO"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "User Agent"
#: optionsframe.py:744
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "אפשר לוג"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "צפה לוג"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "נקה לוג"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "פקודות למסוף (למשל --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "אפס הגדרות"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "התעלם משגיאות"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "צפייה בלוג"

View File

@ -1,438 +0,0 @@
# Youtube-dlG localization file.
# FIRST AUTHOR: Sotiris Papadopoulos <ytubedlg@gmail.com>, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"PO-Revision-Date: 2015-09-28 16:28+EEST\n"
"Last-Translator: Yuval Bar-on <hyuvii@gmail.com>\n"
"Language-Team: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "קישורים"
#: mainframe.py:83
msgid "Download"
msgstr "הורדה"
#: mainframe.py:84
msgid "Update"
msgstr "עדכן"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "אפשרויות"
#: mainframe.py:86
msgid "Error"
msgstr "שגיאה"
#: mainframe.py:87
msgid "Stop"
msgstr "עצור"
#: mainframe.py:88
msgid "Info"
msgstr "מידע"
#: mainframe.py:89
msgid "Welcome"
msgstr "ברוכים הבאים"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "הוריד בהצלחה {0} קישור(ים) תוך {1} יום(ימים) {2} שעה(ות) {3} דקה(ות) {4} שנייה(ות)"
#: mainframe.py:92
msgid "Downloads completed"
msgstr "ההורדה הושלמה"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "מוריד {0} קישור(ים)"
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "מפסיק הורדה"
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "ההורדה נפסקה"
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "עלייך לספק לפחות קישור אחד"
#: mainframe.py:97
msgid "Downloads started"
msgstr "ההורדה החלה"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "מוריד את youtube-dl האחרון. אנא המתן..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "ההורדה של youtube-dl נכשלה [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "youtube-dl ירד בהצלחה"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "לא הצליח לפתוח תיקייה: '{dir}'. הכתובת שצויינה איננה קיימת"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "שגיאה בזמן יציאה. אנא וודאו שהכנסתם את הסיסמא הנכונה"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "יוצא מהתוכנה"
#: mainframe.py:109
msgid "Title"
msgstr "כותרת"
#: mainframe.py:110
msgid "Size"
msgstr "גודל"
#: mainframe.py:111
msgid "Percent"
msgstr "אחוז(ים)"
#: mainframe.py:112
msgid "ETA"
msgstr "זמן סיום משוער"
#: mainframe.py:113
msgid "Speed"
msgstr "מהירות"
#: mainframe.py:114
msgid "Status"
msgstr "סטטוס"
#: optionsframe.py:42
msgid "General"
msgstr "כללי"
#: optionsframe.py:43
msgid "Video"
msgstr "וידאו"
#: optionsframe.py:44
msgid "Audio"
msgstr "אודיו"
#: optionsframe.py:45
msgid "Playlist"
msgstr "פלייליסט"
#: optionsframe.py:46
msgid "Output"
msgstr "פלט"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "כתוביות"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "קבצים"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "כיבוי"
#: optionsframe.py:50
msgid "Authentication"
msgstr "אימות משתמש"
#: optionsframe.py:51
msgid "Connection"
msgstr "חיבור"
#: optionsframe.py:52
msgid "Log"
msgstr "לוג"
#: optionsframe.py:53
msgid "Commands"
msgstr "פקודות"
#: optionsframe.py:54
msgid "Localization"
msgstr "שפה"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "אפשר לוג"
#: optionsframe.py:401
msgid "Write Time"
msgstr "ציין זמן"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "נקה לוג"
#: optionsframe.py:403
msgid "View Log"
msgstr "צפה לוג"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "כתובת: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "גודל לוג: {0} Bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "הפעל מחדש"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "אנא הפעל מחדש {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "צא בסיום הורדה"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "סיסמאת SUDO"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "התחל פלייליסט בקטע"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "עצור פלייליסט בקטע"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "מקסימום הורדות"
#: optionsframe.py:630
msgid "Retries"
msgstr "נסיונות חוזרים"
#: optionsframe.py:631
msgid "User Agent"
msgstr "User Agent"
#: optionsframe.py:632
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "שם משתמש"
#: optionsframe.py:708
msgid "Password"
msgstr "סיסמא"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "סיסמא לוידאו (vimeo, smorti)"
#: optionsframe.py:767
msgid "high"
msgstr "גבוהה"
#: optionsframe.py:767
msgid "low"
msgstr "נמוכה"
#: optionsframe.py:767
msgid "mid"
msgstr "בינונית"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "המר לאודיו"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "שמור וידאו בנפרד"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "פורמט אודיו"
#: optionsframe.py:773
msgid "Audio Quality"
msgstr "איכות אודיו"
#: optionsframe.py:890
msgid "default"
msgstr "ברירת מחדל"
#: optionsframe.py:891
msgid "none"
msgstr "ריק"
#: optionsframe.py:895
msgid "Video Format"
msgstr "פורמט וידאו"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "פורמט משולב (mix)"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "הגבל שמות קבצים ללועזית (ASCII)"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID הוידאו כשם"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "כותרת הוידאו כשם"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "תבנית מותאמת אישית (youtube-dl)"
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "התעלם משגיאות"
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "פתח תיקיית יעד"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "שמור מידע בתוך קובץ (.json)"
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "שמור את הקובץ עם התיאור"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "שמור thumbnail"
#: optionsframe.py:1057
msgid "Filesize"
msgstr "גודל הקובץ"
#: optionsframe.py:1058
msgid "Min"
msgstr "מינימום"
#: optionsframe.py:1059
msgid "Max"
msgstr "מקסימום"
#: optionsframe.py:1172
msgid "English"
msgstr "אנגלית"
#: optionsframe.py:1173
msgid "Greek"
msgstr "יוונית"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "פורטוגזית"
#: optionsframe.py:1175
msgid "French"
msgstr "צרפתית"
#: optionsframe.py:1176
msgid "Italian"
msgstr "איטלקית"
#: optionsframe.py:1177
msgid "Russian"
msgstr "רוסית"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "ספרדית"
#: optionsframe.py:1179
msgid "German"
msgstr "גרמנית"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "הורד קובץ כתוביות לפי שפה"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "הורד את כל הכתוביות הקיימות"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "הורד כתוביות אוטומטיות (רק Youtube!)"
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "שמור כתוביות כחלק מהוידאו (רק לקבצי mp4)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "שפת כתוביות"
#: optionsframe.py:1280
msgid "About"
msgstr "אודות"
#: optionsframe.py:1281
msgid "Open"
msgstr "פתח"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "אפס הגדרות"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "נתיב הורדה"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "קובץ הגדרות: {0}"
#: optionsframe.py:1285
msgid "Choose Directory"
msgstr "בחר תיקייה"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "פקודות למסוף (למשל --help)"
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "שפה לוקאלית"
#: optionsframe.py:1427
msgid "In order for the changes to take effect please restart {0}"
msgstr "על מנת להחיל את השינויים יש לאתחל את {0}"
#: optionsframe.py:1474
msgid "Log Viewer"
msgstr "צפייה בלוג"

View File

@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-12-29 17:04+EEST\n"
"Last-Translator: Bodri Zoltán <bdr75@citromail.com>\n"
"Language-Team: hu\n"
@ -13,426 +13,606 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "URL-ek"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Letöltés"
#: mainframe.py:84
msgid "Update"
msgstr "Frissítés"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "Beállítások"
#: mainframe.py:86
msgid "Error"
msgstr "Hiba"
#: mainframe.py:87
msgid "Stop"
msgstr "Állj"
#: mainframe.py:88
msgid "Info"
msgstr "Infó"
#: mainframe.py:89
msgid "Welcome"
msgstr "Üdvözlöm"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Sikeresen letöltve {0} url {1} nap {2} óra {3} perc {4} másodperc alatt"
#: mainframe.py:92
msgid "Downloads completed"
msgstr "Letöltés kész"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Letöltve {0} url"
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "Megállított letöltés"
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "Letöltés megállítva"
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "Meg kell adnia legalább egy url-t"
#: mainframe.py:97
msgid "Downloads started"
msgstr "Letöltés elindítva"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Legutolsó youtube-dl letöltése. Kérlek várj..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl letöltése sikertelen [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl sikeresen letöltve"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Nem sikerült megnyitni a könyvtárat: '{dir}'. A megadott elérési út nem létezik"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Hiba történt leállításkor. Győződjön meg róla, hogy a beírt jelszó helyes"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Rendszer leállítása"
#: mainframe.py:109
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Cím"
#: mainframe.py:110
msgid "Size"
msgstr "Méret"
#: mainframe.py:111
msgid "Percent"
msgstr "Százalék"
#: mainframe.py:112
msgid "ETA"
msgstr "Hátravan"
#: mainframe.py:113
msgid "Speed"
msgstr "Sebesség"
#: mainframe.py:114
msgid "Status"
msgstr "Állapot"
#: optionsframe.py:42
msgid "General"
msgstr "Általános"
#: optionsframe.py:43
msgid "Video"
msgstr "Videó"
#: optionsframe.py:44
msgid "Audio"
msgstr "Audió"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Lejátszási lista"
#: optionsframe.py:46
msgid "Output"
msgstr "Kimenet"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Felirat"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Fájlrendszer"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Leállítás"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Hitelesítés"
#: optionsframe.py:51
msgid "Connection"
msgstr "Csatlakozás"
#: optionsframe.py:52
msgid "Log"
msgstr "Napló"
#: optionsframe.py:53
msgid "Commands"
msgstr "Parancsok"
#: optionsframe.py:54
msgid "Localization"
msgstr "Lokalizáció"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Naplózás engedélyezése"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Idő hozzáadása"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Napló törlése"
#: optionsframe.py:403
msgid "View Log"
msgstr "Naplót mutat"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Útvonal: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Napló mérete: {0} Bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Újraindítás"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Kérem, indítsa újra {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Leállítás, ha végzett"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "SUDO jelszó"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Lejátszási lista eleje"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Lejátszási lista vége"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Max letöltés"
#: optionsframe.py:630
msgid "Retries"
msgstr "Ismétlés"
#: optionsframe.py:631
msgid "User Agent"
msgstr "Kiszolgáló"
#: optionsframe.py:632
msgid "Referer"
msgstr "Hivatkozás"
#: optionsframe.py:633
msgid "Proxy"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: optionsframe.py:707
msgid "Username"
msgstr "Felhasználó név"
#: optionsframe.py:708
msgid "Password"
msgstr "Jelszó"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Videó jelszó (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "magas"
#: optionsframe.py:767
msgid "low"
msgstr "alacsony"
#: optionsframe.py:767
msgid "mid"
msgstr "közepes"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Audió konvertálása"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Videó megtartása"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Audió formátum"
#: optionsframe.py:773
msgid "Audio Quality"
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Audió minőség"
#: optionsframe.py:890
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "alapértelmezett"
#: optionsframe.py:891
msgid "none"
msgstr "nincs"
#: optionsframe.py:895
msgid "Video Format"
msgstr "Videó formátum"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Mixelt formátum"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Fájlnév hossz korlátozása (ASCII)"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID beállítása névnek"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Cím beállítása névnek"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Egyedi sablon (youtube-dl)"
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Hibák figyelmen kívül hagyása"
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Célmappa megnyitása"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Infó írása (.json) fájlba"
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Leírás írása fájlba"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Bélyegkép létrehozása a meghajtón"
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Fájlméret"
#: optionsframe.py:1058
msgid "Min"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
#: mainframe.py:98
msgid "Update"
msgstr "Frissítés"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Beállítások"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Állj"
#: mainframe.py:101
msgid "Info"
msgstr "Infó"
#: mainframe.py:102
msgid "Welcome"
msgstr "Üdvözlöm"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: optionsframe.py:1172
msgid "English"
msgstr "Angol"
#: mainframe.py:105
msgid "Add"
msgstr ""
#: optionsframe.py:1173
msgid "Greek"
msgstr "Görög"
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Letöltés"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portugál"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: optionsframe.py:1175
msgid "French"
msgstr "Francia"
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Lejátszási lista"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Olasz"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: optionsframe.py:1177
msgid "Russian"
msgstr "Orosz"
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Letöltés"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Spanyol"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: optionsframe.py:1179
msgid "German"
msgstr "Német"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Felirat letöltése saját nyelven"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Újraindítás"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Az összes elérhető felirat letöltése"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Felirat automatikus letöltése (CSAK YOUTUBE)"
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Felirat beágyazása a videóba (csak mp4 videók)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Felirat nyelve"
#: optionsframe.py:1280
#: mainframe.py:114
msgid "About"
msgstr "Névjegy"
#: optionsframe.py:1281
msgid "Open"
msgstr "Megnyit"
#: mainframe.py:115
msgid "View Log"
msgstr "Naplót mutat"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Visszaállít"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Sikeresen letöltve {0} url {1} nap {2} óra {3} perc {4} másodperc alatt"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Mentés helye"
#: mainframe.py:119
msgid "Downloads completed"
msgstr "Letöltés kész"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Beállítás fájl: {0}"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Megállított letöltés"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Letöltés megállítva"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Meg kell adnia legalább egy url-t"
#: mainframe.py:124
msgid "Downloads started"
msgstr "Letöltés elindítva"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Válasszon könyvtárat"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Parancssori argumentumok (pl. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Lokalizált nyelv"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Legutolsó youtube-dl letöltése. Kérlek várj..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl letöltése sikertelen [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Nem sikerült megnyitni a könyvtárat: '{dir}'. A megadott elérési út nem létezik"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Hiba történt leállításkor. Győződjön meg róla, hogy a beírt jelszó helyes"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Rendszer leállítása"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Méret"
#: mainframe.py:143
msgid "Percent"
msgstr "Százalék"
#: mainframe.py:144
msgid "ETA"
msgstr "Hátravan"
#: mainframe.py:145
msgid "Speed"
msgstr "Sebesség"
#: mainframe.py:146
msgid "Status"
msgstr "Állapot"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Parancsok"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Célmappa megnyitása"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Videó"
#: mainframe.py:479
msgid "Audio"
msgstr "Audió"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Letöltés kész"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Letöltés kész"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Leállítás"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Rendszer leállítása"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Általános"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Mixelt formátum"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Letöltés"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Felirat nyelve"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Visszaállít"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Fájlnév hossz korlátozása (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Visszaállít"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Letöltés kész"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "SUDO jelszó"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "A változtatásokhoz indítsa újra a {0}"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Újraindítás"
#: optionsframe.py:466
msgid "high"
msgstr "magas"
#: optionsframe.py:466
msgid "low"
msgstr "alacsony"
#: optionsframe.py:466
msgid "mid"
msgstr "közepes"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Videó formátum"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Audió formátum"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Audió minőség"
#: optionsframe.py:541
msgid "English"
msgstr "Angol"
#: optionsframe.py:542
msgid "French"
msgstr "Francia"
#: optionsframe.py:543
msgid "German"
msgstr "Német"
#: optionsframe.py:544
msgid "Greek"
msgstr "Görög"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Olasz"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portugál"
#: optionsframe.py:548
msgid "Russian"
msgstr "Orosz"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Spanyol"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Felirat automatikus letöltése (CSAK YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Az összes elérhető felirat letöltése"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Felirat nyelve"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Felirat"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Felirat"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Felirat beágyazása a videóba (csak mp4 videók)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Lejátszási lista"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr ""
#: optionsframe.py:592
msgid "Filesize"
msgstr "Fájlméret"
#: optionsframe.py:597
msgid "Min"
msgstr ""
#: optionsframe.py:726
msgid "Retries"
msgstr "Ismétlés"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Hitelesítés"
#: optionsframe.py:731
msgid "Username"
msgstr "Felhasználó név"
#: optionsframe.py:733
msgid "Password"
msgstr "Jelszó"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "SUDO jelszó"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr ""
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "Kiszolgáló"
#: optionsframe.py:744
msgid "Referer"
msgstr "Hivatkozás"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Naplózás engedélyezése"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Naplót mutat"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Napló törlése"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Parancssori argumentumok (pl. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Visszaállít"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Hibák figyelmen kívül hagyása"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Naplókezelő"

View File

@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2016-09-16 14:20+EEST\n"
"Last-Translator: Penaz <https://github.com/Penaz91>\n"
"Language-Team: en\n"
@ -13,426 +13,606 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "Indirizzi"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Scaricamenti"
#: mainframe.py:84
msgid "Update"
msgstr "Aggiorna"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "Opzioni"
#: mainframe.py:86
msgid "Error"
msgstr "Errore"
#: mainframe.py:87
msgid "Stop"
msgstr "Ferma"
#: mainframe.py:88
msgid "Info"
msgstr "Informazioni"
#: mainframe.py:89
msgid "Welcome"
msgstr "Benvenuto"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "{0} URL scaricati in {1} giorni {2} ore {3} minuti e {4} secondi"
#: mainframe.py:92
msgid "Downloads completed"
msgstr "Scaricamenti Completati"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Scaricamento di {0} URLs"
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "Sto fermando gli scaricamenti"
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "Scaricamenti Fermati"
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "Devi inserire almeno un indirizzo"
#: mainframe.py:97
msgid "Downloads started"
msgstr "Scaricamenti Iniziati"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Aggiornamento di youtube-dl. Attendere..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Scaricamento di Youtube-dl Fallito [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl scaricato correttamente"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Impossibile aprire la cartella: '{dir}'. Il percorso non esiste"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Errore durante lo spegnimento. Assicurati di aver digitato la password corretta."
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Spegnimento del sistema"
#: mainframe.py:109
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Titolo"
#: mainframe.py:110
msgid "Size"
msgstr "Dimensione"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: mainframe.py:111
msgid "Percent"
msgstr "Percentuale"
#: mainframe.py:112
msgid "ETA"
msgstr "Tempo Rimanente"
#: mainframe.py:113
msgid "Speed"
msgstr "Velocità"
#: mainframe.py:114
msgid "Status"
msgstr "Stato"
#: optionsframe.py:42
msgid "General"
msgstr "Generale"
#: optionsframe.py:43
msgid "Video"
msgstr "Video"
#: optionsframe.py:44
msgid "Audio"
msgstr "Audio"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Playlist"
#: optionsframe.py:46
msgid "Output"
msgstr "Output"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Sottotitoli"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Filesystem"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Spegnimento"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Autenticazione"
#: optionsframe.py:51
msgid "Connection"
msgstr "Connessione"
#: optionsframe.py:52
msgid "Log"
msgstr "Log"
#: optionsframe.py:53
msgid "Commands"
msgstr "Comandi"
#: optionsframe.py:54
msgid "Localization"
msgstr "Traduzioni"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Abilita Log"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Inserisci l'ora"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Cancella Log"
#: optionsframe.py:403
msgid "View Log"
msgstr "Visualizza Log"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Percorso: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Dimensione Log: {0} Bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Riavvia"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Per favore, riavviare {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Spegni al termine"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "Password per SUDO"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Inizia Playlist"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Ferma Playlist"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Download Massimi"
#: optionsframe.py:630
msgid "Retries"
msgstr "Tentativi"
#: optionsframe.py:631
msgid "User Agent"
msgstr "User Agent"
#: optionsframe.py:632
msgid "Referer"
msgstr "Referente"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "Nome Utente"
#: optionsframe.py:708
msgid "Password"
msgstr "Password"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Passowrd Video (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "alto"
#: optionsframe.py:767
msgid "low"
msgstr "basso"
#: optionsframe.py:767
msgid "mid"
msgstr "medio"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Converti ad Audio"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Mantieni Video"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Formato Audio"
#: optionsframe.py:773
msgid "Audio Quality"
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Qualità Audio"
#: optionsframe.py:890
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "predefinito"
#: optionsframe.py:891
msgid "none"
msgstr "nessuno"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: optionsframe.py:895
msgid "Video Format"
msgstr "Formato Video"
#: mainframe.py:98
msgid "Update"
msgstr "Aggiorna"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Formato di Miscelazione"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Opzioni"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Restrizione nomi file (ASCII)"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Ferma"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID come Nome"
#: mainframe.py:101
msgid "Info"
msgstr "Informazioni"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Titolo come Nome"
#: mainframe.py:102
msgid "Welcome"
msgstr "Benvenuto"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Personalizzato (youtube-dl)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Ignora Errori"
#: mainframe.py:105
msgid "Add"
msgstr ""
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Apri cartella di destinazione"
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Scaricamenti"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Scrivi informazioni in un file (.json)"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Scrivi descrizione in un file"
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Playlist"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Scrivi anteprime su disco"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Dimensione File"
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Scaricamenti"
#: optionsframe.py:1058
msgid "Min"
msgstr "Min"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
msgstr "Max"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: optionsframe.py:1172
msgid "English"
msgstr "Inglese"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Riavvia"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Greco"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portoghese"
#: optionsframe.py:1175
msgid "French"
msgstr "Francese"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Russo"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Spagnolo"
#: optionsframe.py:1179
msgid "German"
msgstr "Tedesco"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Scarica sottotitoli per lingua"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Scarica tutti i sottotitoli disponibili"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Scarica file sottotitoli automatici (SOLO YOUTUBE)"
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Incorpora sottotitoli nel video (Solo mp4)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Lingua Sottotitoli"
#: optionsframe.py:1280
#: mainframe.py:114
msgid "About"
msgstr "Info Su"
#: optionsframe.py:1281
msgid "Open"
msgstr "Apri"
#: mainframe.py:115
msgid "View Log"
msgstr "Visualizza Log"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Resetta Opzioni"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "{0} URL scaricati in {1} giorni {2} ore {3} minuti e {4} secondi"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Salva Percorso"
#: mainframe.py:119
msgid "Downloads completed"
msgstr "Scaricamenti Completati"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "File Impostazioni: {0}"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Sto fermando gli scaricamenti"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Scaricamenti Fermati"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Devi inserire almeno un indirizzo"
#: mainframe.py:124
msgid "Downloads started"
msgstr "Scaricamenti Iniziati"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Scegli Directory"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Argomenti da linea di comando (es. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Lingua traduzione"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Aggiornamento di youtube-dl. Attendere..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Scaricamento di Youtube-dl Fallito [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Impossibile aprire la cartella: '{dir}'. Il percorso non esiste"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Errore durante lo spegnimento. Assicurati di aver digitato la password corretta."
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Spegnimento del sistema"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Dimensione"
#: mainframe.py:143
msgid "Percent"
msgstr "Percentuale"
#: mainframe.py:144
msgid "ETA"
msgstr "Tempo Rimanente"
#: mainframe.py:145
msgid "Speed"
msgstr "Velocità"
#: mainframe.py:146
msgid "Status"
msgstr "Stato"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Comandi"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Apri cartella di destinazione"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Video"
#: mainframe.py:479
msgid "Audio"
msgstr "Audio"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Scaricamenti Completati"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Scaricamenti Completati"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Spegnimento"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Spegnimento del sistema"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Generale"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Formato di Miscelazione"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Scaricamenti"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Lingua Sottotitoli"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Resetta Opzioni"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Restrizione nomi file (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Resetta Opzioni"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Scaricamenti Completati"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "Password per SUDO"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Per applicare le modifiche, per favore riavvia {0}"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Riavvia"
#: optionsframe.py:466
msgid "high"
msgstr "alto"
#: optionsframe.py:466
msgid "low"
msgstr "basso"
#: optionsframe.py:466
msgid "mid"
msgstr "medio"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Formato Video"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Formato Audio"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Qualità Audio"
#: optionsframe.py:541
msgid "English"
msgstr "Inglese"
#: optionsframe.py:542
msgid "French"
msgstr "Francese"
#: optionsframe.py:543
msgid "German"
msgstr "Tedesco"
#: optionsframe.py:544
msgid "Greek"
msgstr "Greco"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portoghese"
#: optionsframe.py:548
msgid "Russian"
msgstr "Russo"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Spagnolo"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Scarica file sottotitoli automatici (SOLO YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Scarica tutti i sottotitoli disponibili"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Lingua Sottotitoli"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Sottotitoli"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Sottotitoli"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Incorpora sottotitoli nel video (Solo mp4)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Playlist"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "Max"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Dimensione File"
#: optionsframe.py:597
msgid "Min"
msgstr "Min"
#: optionsframe.py:726
msgid "Retries"
msgstr "Tentativi"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Autenticazione"
#: optionsframe.py:731
msgid "Username"
msgstr "Nome Utente"
#: optionsframe.py:733
msgid "Password"
msgstr "Password"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "Password per SUDO"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "User Agent"
#: optionsframe.py:744
msgid "Referer"
msgstr "Referente"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Abilita Log"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Visualizza Log"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Cancella Log"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Argomenti da linea di comando (es. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Resetta Opzioni"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Ignora Errori"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Visualizzatore Log"

View File

@ -0,0 +1,582 @@
# Youtube-dlG localization file.
# FIRST AUTHOR: Sotiris Papadopoulos <ytubedlg@gmail.com>, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2017-02-22 02:49+GMT\n"
"Last-Translator: Yi Soo, An <yisooan@gmail.com>\n"
"Language-Team: kr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: vim\n"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr "ID"
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "제목"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr "제목 + ID"
#: formats.py:12 formats.py:111
msgid "Title + Quality"
msgstr "제목 + 화질"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr "제목 + ID + 화질"
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr "사용자 설정"
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "기본값"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr "URL을 입력하세요."
#: mainframe.py:98
msgid "Update"
msgstr "업데이트"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "옵션"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "정지"
#: mainframe.py:101
msgid "Info"
msgstr "정보"
#: mainframe.py:102
msgid "Welcome"
msgstr "환영합니다."
#: mainframe.py:103
msgid "Warning"
msgstr "주의"
#: mainframe.py:105
msgid "Add"
msgstr "추가"
#: mainframe.py:106
msgid "Download list"
msgstr "다운로드 목록"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr "삭제"
#: mainframe.py:108
msgid "Play"
msgstr "재생"
#: mainframe.py:109
msgid "Up"
msgstr "위로"
#: mainframe.py:110
msgid "Down"
msgstr "아래로"
#: mainframe.py:111
msgid "Reload"
msgstr "새로고침"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr "일시정지"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
msgid "Start"
msgstr "시작"
#: mainframe.py:114
msgid "About"
msgstr "정보"
#: mainframe.py:115
msgid "View Log"
msgstr "로그 보기"
#: mainframe.py:117
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "{0}개의 URL을 받는데 총 {1}일 {2}시간 {3}분 {4}초가 걸렸습니다."
#: mainframe.py:119
msgid "Downloads completed"
msgstr "다운로드 완료"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr "진행 상태: {0:.1f}% | 대기 ({1}) 일시정지 ({2}) 진행중 ({3}) 완료 ({4}) 오류 ({5})"
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "다운로드 정지중"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "다운로드 정지"
#: mainframe.py:123
msgid "You need to provide at least one URL"
msgstr "최소 한 개 이상의 URL을 입력해야 합니다."
#: mainframe.py:124
msgid "Downloads started"
msgstr "다운로드 시작됨"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "저장 경로"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr "다운로드가 완료될 때까지 기다려주세요."
#: mainframe.py:128
msgid "Update already in progress"
msgstr "업데이트 진행중입니다."
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "최신 youtube-dl을 다운로드하고 있습니다. 잠시만 기다려주세요."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl 다운로드 실패 [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr "Youtube-dl 다운로드가 완료되었습니다."
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "'{dir}'을 열 수 없습니다. 올바른 경로가 아닙니다."
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "시스템을 종료할 수 없습니다. 패스워드가 올바른지 확인하세요."
#: mainframe.py:138
msgid "Shutting down system"
msgstr "시스템 종료 중.."
#: mainframe.py:141
msgid "Extension"
msgstr "확장자"
#: mainframe.py:142
msgid "Size"
msgstr "크기"
#: mainframe.py:143
msgid "Percent"
msgstr "퍼센트"
#: mainframe.py:144
msgid "ETA"
msgstr "기타"
#: mainframe.py:145
msgid "Speed"
msgstr "속도"
#: mainframe.py:146
msgid "Status"
msgstr "상태"
#: mainframe.py:235
msgid "Get URL"
msgstr "클립보드로 URL 복사"
#: mainframe.py:236
msgid "Get command"
msgstr "커맨드라인 명령어 복사"
#: mainframe.py:237
msgid "Open destination"
msgstr "폴더 열기"
#: mainframe.py:238
msgid "Re-enter"
msgstr "대기열에 넣기"
#: mainframe.py:453
msgid "Resume"
msgstr "이어받기"
#: mainframe.py:475
msgid "Video"
msgstr "비디오"
#: mainframe.py:479
msgid "Audio"
msgstr "오디오"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr "선택된 아이템이 없습니다. 다음 중 하나를 실행하시겠습니까?"
#: mainframe.py:511
msgid "Remove all"
msgstr "전체삭제"
#: mainframe.py:511
msgid "Remove completed"
msgstr "완료된 것만 삭제"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr "해당 아이템을 삭제하시겠습니까?"
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr "삭제할 수 없습니다."
#: mainframe.py:574
msgid "Item is not completed"
msgstr "다운로드가 완료되지 않았습니다."
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr "업데이트가 완료될 때까지 기다려주세요."
#: mainframe.py:711
msgid "Logging is disabled"
msgstr "로깅이 비활성화되었습니다."
#: mainframe.py:886
msgid "Shutdown"
msgstr "시스템 종료"
#: mainframe.py:886
msgid "Shutting down in {0} second(s)"
msgstr "{0}초 후에 시스템이 종료됩니다."
#: mainframe.py:975
msgid "No items to download"
msgstr "다운로드할 아이템이 없습니다."
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr "종료하시겠습니까?"
#: mainframe.py:1055
msgid "Exit"
msgstr "종료"
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr "취소"
#: mainframe.py:1445
msgid "OK"
msgstr "확인"
#: optionsframe.py:65
msgid "Reset"
msgstr "초기화"
#: optionsframe.py:66
msgid "Close"
msgstr "닫기"
#: optionsframe.py:72
msgid "General"
msgstr "일반"
#: optionsframe.py:73
msgid "Formats"
msgstr "포맷"
#: optionsframe.py:74
msgid "Downloads"
msgstr "다운로드"
#: optionsframe.py:75
msgid "Advanced"
msgstr "고급설정"
#: optionsframe.py:76
msgid "Extra"
msgstr "기타"
#: optionsframe.py:313
msgid "Language"
msgstr "언어"
#: optionsframe.py:316
msgid "Filename format"
msgstr "파일이름 형식"
#: optionsframe.py:321
msgid "Filename options"
msgstr "파일이름 옵션"
#: optionsframe.py:322
msgid "Restrict filenames to ASCII"
msgstr "ASCII 문자로 제한"
#: optionsframe.py:324
msgid "More options"
msgstr "추가옵션"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr "종료시 확인"
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr "아이템 삭제시 확인"
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr "완료시 알림"
#: optionsframe.py:329
msgid "Shutdown on download completion"
msgstr "완료시 시스템종료"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "SUDO 암호"
#: optionsframe.py:418 optionsframe.py:819
msgid "In order for the changes to take effect please restart {0}"
msgstr "설정값을 적용하기 위해 {0}을 재시작하세요."
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "재시작"
#: optionsframe.py:466
msgid "high"
msgstr "높음"
#: optionsframe.py:466
msgid "low"
msgstr "낮음"
#: optionsframe.py:466
msgid "mid"
msgstr "중간"
#: optionsframe.py:471
msgid "Video formats"
msgstr "비디오 형식"
#: optionsframe.py:474
msgid "Audio formats"
msgstr "오디오 형식"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr "후처리 옵션"
#: optionsframe.py:478
msgid "Keep original files"
msgstr "원본파일 유지"
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr "오디오 추출"
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr "오디오에 섬네일 추가"
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr "메타데이터 추가"
#: optionsframe.py:483
msgid "Audio quality"
msgstr "오디오 음질"
#: optionsframe.py:541
msgid "English"
msgstr "English"
#: optionsframe.py:542
msgid "French"
msgstr "French"
#: optionsframe.py:543
msgid "German"
msgstr "German"
#: optionsframe.py:544
msgid "Greek"
msgstr "Greek"
#: optionsframe.py:545
msgid "Hebrew"
msgstr "Hebrew"
#: optionsframe.py:546
msgid "Italian"
msgstr "Italian"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portuguese"
#: optionsframe.py:548
msgid "Russian"
msgstr "Russian"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Spanish"
#: optionsframe.py:550
msgid "Swedish"
msgstr "Swedish"
#: optionsframe.py:551
msgid "Turkish"
msgstr "Turkish"
#: optionsframe.py:567
msgid "None"
msgstr "없음"
#: optionsframe.py:568
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "오토매틱 자막 (유튜브 전용)"
#: optionsframe.py:569
msgid "All available subtitles"
msgstr "사용가능한 모든 자막"
#: optionsframe.py:570
msgid "Subtitles by language"
msgstr "언어에 따른 자막"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "자막"
#: optionsframe.py:580
msgid "Subtitles options"
msgstr "자막 옵션"
#: optionsframe.py:581
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "비디오에 자막 삽입 (mp4 전용)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "재생목록"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "최대"
#: optionsframe.py:592
msgid "Filesize"
msgstr "파일크기"
#: optionsframe.py:597
msgid "Min"
msgstr "최소"
#: optionsframe.py:726
msgid "Retries"
msgstr "재시도 횟수"
#: optionsframe.py:729
msgid "Authentication"
msgstr "인증"
#: optionsframe.py:731
msgid "Username"
msgstr "사용자 이름"
#: optionsframe.py:733
msgid "Password"
msgstr "비밀번호"
#: optionsframe.py:735
msgid "Video password"
msgstr "비디오 비밀번호"
#: optionsframe.py:738
msgid "Network"
msgstr "네트워크"
#: optionsframe.py:740
msgid "Proxy"
msgstr "프록시"
#: optionsframe.py:742
msgid "User agent"
msgstr "User agent"
#: optionsframe.py:744
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:747
msgid "Logging"
msgstr "로그"
#: optionsframe.py:749
msgid "Enable log"
msgstr "로그 사용"
#: optionsframe.py:750
msgid "View"
msgstr "보기"
#: optionsframe.py:751
msgid "Clear"
msgstr "초기화"
#: optionsframe.py:861
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Youtube-dl 커맨드라인 옵션 (예: --help)"
#: optionsframe.py:864
msgid "Extra options"
msgstr "기타 옵션"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr "Youtube-dl 디버그"
#: optionsframe.py:867
msgid "Ignore errors"
msgstr "오류 무시"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr "Youtube-dl 설정 무시"
#: optionsframe.py:869
msgid "No mtime"
msgstr "mtime 사용안함"
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr "네이티브 HLS 사용"
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "로그 뷰어"

View File

@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-07-02 15:34+EEST\n"
"Last-Translator: Cleiton Meurer <cleitonme@gmail.com>\n"
"Language-Team: pt_BR\n"
@ -16,429 +16,608 @@ msgstr ""
"X-Generator: Poedit 1.8\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: mainframe.py:82
msgid "URLs"
msgstr "Endereços"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Download"
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Título"
#: mainframe.py:84
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Qualidade do Audio"
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "Padrão"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: mainframe.py:98
msgid "Update"
msgstr "Atualizar"
#: mainframe.py:85 optionsframe.py:40
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Opções"
#: mainframe.py:86
msgid "Error"
msgstr "Erro"
#: mainframe.py:87
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Parar"
#: mainframe.py:88
#: mainframe.py:101
msgid "Info"
msgstr "Informações"
#: mainframe.py:89
#: mainframe.py:102
msgid "Welcome"
msgstr "Bem Vindo"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: mainframe.py:105
msgid "Add"
msgstr ""
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Download"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Playlist"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Download"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Reiniciar"
#: mainframe.py:114
msgid "About"
msgstr "Sobre"
#: mainframe.py:115
msgid "View Log"
msgstr "Ver Log"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Baixado com sucesso {0} url(s) em {1} day(s) {2} hora (s) {3} minuto(s) {4} secondo(s)"
#: mainframe.py:92
#: mainframe.py:119
#, fuzzy
msgid "Downloads completed"
msgstr "Download completo"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Baixando {0} url(s)"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: mainframe.py:94
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Parar downloads"
#: mainframe.py:95
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Downloads parados"
#: mainframe.py:96
msgid "You need to provide at least one url"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Você precisa fornecer pelo menos um endereço"
#: mainframe.py:97
#: mainframe.py:124
#, fuzzy
msgid "Downloads started"
msgstr "Download iniciado"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Atualizando para ultima versão youtube-dl. Aguarde..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl download falhou [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl atualizado"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Não é possível abrir diretório: '{dir}'. O caminho especificado não existe"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Erro ao desligar. Certifique-se de que você digitou a senha correta"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Desligar sistema"
#: mainframe.py:109
msgid "Title"
msgstr "Título"
#: mainframe.py:110
msgid "Size"
msgstr "Tamanho"
#: mainframe.py:111
msgid "Percent"
msgstr "Porcentagem"
#: mainframe.py:112
msgid "ETA"
msgstr "ETA"
#: mainframe.py:113
msgid "Speed"
msgstr "Velocidade"
#: mainframe.py:114
msgid "Status"
msgstr "Status"
#: optionsframe.py:42
msgid "General"
msgstr "Geral"
#: optionsframe.py:43
msgid "Video"
msgstr "Video"
#: optionsframe.py:44
msgid "Audio"
msgstr "Audio"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Playlist"
#: optionsframe.py:46
msgid "Output"
msgstr "Saida"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Legenda"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Sistema De Arquivo"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Desligar"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Autenticação"
#: optionsframe.py:51
msgid "Connection"
msgstr "Conexão"
#: optionsframe.py:52
msgid "Log"
msgstr "Log"
#: optionsframe.py:53
msgid "Commands"
msgstr "Comandos"
#: optionsframe.py:54
msgid "Localization"
msgstr "Idioma"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Habiliar Log"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Gravar Hora"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Limpar Log"
#: optionsframe.py:403
msgid "View Log"
msgstr "Ver Log"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Pasta: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Tamanho do Log: {0} Bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Reiniciar"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Por Favor reiniciar {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Desligar quando terminar"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "SUDO senha"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Iniciar lista"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Parar lista"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Maximo de downloads"
#: optionsframe.py:630
msgid "Retries"
msgstr "Tentativas"
#: optionsframe.py:631
msgid "User Agent"
msgstr "User Agent"
#: optionsframe.py:632
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "Usuario"
#: optionsframe.py:708
msgid "Password"
msgstr "Senha"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Senha Vídeo (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "Alto"
#: optionsframe.py:767
msgid "low"
msgstr "Baixo"
#: optionsframe.py:767
msgid "mid"
msgstr "Medio"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Converter em Audio"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Mantenha Vídeo"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Formado Audio"
#: optionsframe.py:773
msgid "Audio Quality"
msgstr "Qualidade do Audio"
#: optionsframe.py:890
msgid "default"
msgstr "Padrão"
#: optionsframe.py:891
msgid "none"
msgstr "nenhum"
#: optionsframe.py:895
msgid "Video Format"
msgstr "Formato Video"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Mix Format"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Restringem nomes de arquivos (ASCII)"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID como Nome"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Título como Nome"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Modelo Template (youtube-dl)"
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Ignora erros"
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Abrir pasta de destino"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Gravar informações para (.json) arquivo"
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Faça descrição para arquivo"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Escrever miniatura para disco"
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Tamanho"
#: optionsframe.py:1058
msgid "Min"
msgstr "Min"
#: optionsframe.py:1059
msgid "Max"
msgstr "Max"
#: optionsframe.py:1172
msgid "English"
msgstr "Inglês"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Grego"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Português"
#: optionsframe.py:1175
msgid "French"
msgstr "França"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Russo"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Espa"
#: optionsframe.py:1179
msgid "German"
msgstr "Alemão"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Baixar arquivo de legenda por lingua"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Baixar todas legendas disponiveis"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Baixar arquivo de legenda automática (YOUTUBE SOMENTE)"
#: optionsframe.py:1185
#, fuzzy
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Incorporar as legendas do vídeo (apenas para vídeos mp4)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Língua Legendas"
#: optionsframe.py:1280
msgid "About"
msgstr "Sobre"
#: optionsframe.py:1281
msgid "Open"
msgstr "Abrir"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Voltar opções"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Pasta para salvar"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Arquivo de Configuração: {0}"
#: optionsframe.py:1285
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Escolher pasta"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Argumentos de linha de comando (e.x. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Idioma"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Atualizando para ultima versão youtube-dl. Aguarde..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl download falhou [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Não é possível abrir diretório: '{dir}'. O caminho especificado não existe"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Erro ao desligar. Certifique-se de que você digitou a senha correta"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Desligar sistema"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Tamanho"
#: mainframe.py:143
msgid "Percent"
msgstr "Porcentagem"
#: mainframe.py:144
msgid "ETA"
msgstr "ETA"
#: mainframe.py:145
msgid "Speed"
msgstr "Velocidade"
#: mainframe.py:146
msgid "Status"
msgstr "Status"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Comandos"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Abrir pasta de destino"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Video"
#: mainframe.py:479
msgid "Audio"
msgstr "Audio"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Download completo"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Download completo"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Desligar"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Desligar sistema"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Geral"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Mix Format"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Download"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Língua Legendas"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Voltar opções"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Restringem nomes de arquivos (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Voltar opções"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Download completo"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "SUDO senha"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Para que as alterações tenham efeito, reinicie {0}"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Reiniciar"
#: optionsframe.py:466
msgid "high"
msgstr "Alto"
#: optionsframe.py:466
msgid "low"
msgstr "Baixo"
#: optionsframe.py:466
msgid "mid"
msgstr "Medio"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Formato Video"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Formado Audio"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Qualidade do Audio"
#: optionsframe.py:541
msgid "English"
msgstr "Inglês"
#: optionsframe.py:542
msgid "French"
msgstr "França"
#: optionsframe.py:543
msgid "German"
msgstr "Alemão"
#: optionsframe.py:544
msgid "Greek"
msgstr "Grego"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Italiano"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Português"
#: optionsframe.py:548
msgid "Russian"
msgstr "Russo"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Espa"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Baixar arquivo de legenda automática (YOUTUBE SOMENTE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Baixar todas legendas disponiveis"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Língua Legendas"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Legenda"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Legenda"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Incorporar as legendas do vídeo (apenas para vídeos mp4)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Playlist"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "Max"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Tamanho"
#: optionsframe.py:597
msgid "Min"
msgstr "Min"
#: optionsframe.py:726
msgid "Retries"
msgstr "Tentativas"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Autenticação"
#: optionsframe.py:731
msgid "Username"
msgstr "Usuario"
#: optionsframe.py:733
msgid "Password"
msgstr "Senha"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "SUDO senha"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "User Agent"
#: optionsframe.py:744
msgid "Referer"
msgstr "Referer"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Habiliar Log"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Ver Log"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Limpar Log"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Argumentos de linha de comando (e.x. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Voltar opções"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Ignora erros"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Ver log"

View File

@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2016-06-22 07:43+1000\n"
"Last-Translator: Nikita «Arttse» Bystrov <arttsesoft@gmail.com>\n"
"Language-Team: ru\n"
@ -15,430 +15,606 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 1.7.4\n"
#: mainframe.py:82
msgid "URLs"
msgstr "Ссылки (каждая на новой строке)"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "Скачать"
#: mainframe.py:84
msgid "Update"
msgstr "Обновить приложение"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "Настройки"
#: mainframe.py:86
msgid "Error"
msgstr "Ошибка"
#: mainframe.py:87
msgid "Stop"
msgstr "Остановить скачивание"
#: mainframe.py:88
msgid "Info"
msgstr "Информация"
#: mainframe.py:89
msgid "Welcome"
msgstr "Добро пожаловать"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Успешно скачано {0} по указанным ссылкам за {1} дней {2} часов {3} минут {4} секунд"
#: mainframe.py:92
msgid "Downloads completed"
msgstr "Скачивание завершено"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "Скачивание по {0} ссылке"
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "Производится остановка скачивания"
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "Скачивание остановлено"
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "Вы должны указать хотя бы одну ссылку"
#: mainframe.py:97
msgid "Downloads started"
msgstr "Началось скачивание"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Производится скачивание последней версии youtube-dl. Пожалуйста, подождите..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Не удалось скачать Youtube-dl [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl скачан успешно"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Невозможно открыть каталог: '{dir}'. Указанный путь не существует"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Ошибка при выключении. Убедитесь, что вы ввели корректный пароль вашей учетной записи администратора"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Выключение системы"
#: mainframe.py:109
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Заголовок"
#: mainframe.py:108
msgid "Extension"
msgstr "Расширение"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: mainframe.py:110
msgid "Size"
msgstr "Размер"
#: mainframe.py:111
msgid "Percent"
msgstr "Процент"
#: mainframe.py:112
msgid "ETA"
msgstr "Осталось"
#: mainframe.py:113
msgid "Speed"
msgstr "Скорость скачивания"
#: mainframe.py:114
msgid "Status"
msgstr "Статус"
#: optionsframe.py:42
msgid "General"
msgstr "Главные"
#: optionsframe.py:43
msgid "Video"
msgstr "Видео"
#: optionsframe.py:44
msgid "Audio"
msgstr "Аудио"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Плейлист"
#: optionsframe.py:46
msgid "Output"
msgstr "Вывод"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Субтитры"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Файловая система"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Выключение"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Аутентификация"
#: optionsframe.py:51
msgid "Connection"
msgstr "Подключение"
#: optionsframe.py:52
msgid "Log"
msgstr "Журнал событий"
#: optionsframe.py:53
msgid "Commands"
msgstr "Команды"
#: optionsframe.py:54
msgid "Localization"
msgstr "Язык"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Включить ведение журнала событий"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Время записи"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Очистить журнал событий"
#: optionsframe.py:403
msgid "View Log"
msgstr "Посмотреть журнал событий"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Путь: {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Размер системного журнала: {0} Байт"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Перезагрузка"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Пожалуйста, перезапустите {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Завершение работы по завершении скачки"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "Пароль от вашей учетной записи (администратора)"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Начинать с видео под номером"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Последнее видео под номером"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Максимальное число файлов для скачивания"
#: optionsframe.py:630
msgid "Retries"
msgstr "Количество попыток"
#: optionsframe.py:631
msgid "User Agent"
msgstr "Агент пользователя"
#: optionsframe.py:632
msgid "Referer"
msgstr "Реферер"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Прокси"
#: optionsframe.py:707
msgid "Username"
msgstr "Имя пользователя"
#: optionsframe.py:708
msgid "Password"
msgstr "Пароль"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Пароль для видео (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "высокое"
#: optionsframe.py:767
msgid "low"
msgstr "низкое"
#: optionsframe.py:767
msgid "mid"
msgstr "среднее"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Конвертировать Аудио"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Сохранить видео после пост-обработки"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Формат Аудио"
#: optionsframe.py:773
msgid "Audio Quality"
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Качество Аудио"
#: optionsframe.py:890
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "По умолчанию"
#: optionsframe.py:891
msgid "none"
msgstr "нет"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: optionsframe.py:895
msgid "Video Format"
msgstr "Формат Видео"
#: mainframe.py:98
msgid "Update"
msgstr "Обновить приложение"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Смешать формат"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Настройки"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Сокращать имена файлов (ASCII)"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Остановить скачивание"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "ID как Имя"
#: mainframe.py:101
msgid "Info"
msgstr "Информация"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "Заголовок как Имя"
#: mainframe.py:102
msgid "Welcome"
msgstr "Добро пожаловать"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Пользовательский шаблон (youtube-dl)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Игнорировать ошибки"
#: mainframe.py:105
msgid "Add"
msgstr ""
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Открыть папку назначения после скачки"
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "Скачать"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Записать информацию в (.json) файл"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Записать описание в файл"
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Плейлист"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Записать миниатюру (thumbnail) на диск"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Размер файла"
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "Скачать"
#: optionsframe.py:1058
msgid "Min"
msgstr "Минимум"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
msgstr "Максимум"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: optionsframe.py:1172
msgid "English"
msgstr "Английский"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Перезагрузка"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Греческий"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Португальский"
#: optionsframe.py:1175
msgid "French"
msgstr "Французский"
#: optionsframe.py:1176
msgid "Italian"
msgstr "Итальянский"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Русский"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "Испанский"
#: optionsframe.py:1179
msgid "German"
msgstr "Немецкий"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Скачать файл субтитров указанного языка"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Скачать все имеющиеся субтитры"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Скачать файл авто-субтитров (ТОЛЬКО YOUTUBE)"
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Встроить субтитры в видео (только mp4)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Язык Субтитров"
#: optionsframe.py:1280
#: mainframe.py:114
msgid "About"
msgstr "О программе"
#: optionsframe.py:1281
msgid "Open"
msgstr "Открыть"
#: mainframe.py:115
msgid "View Log"
msgstr "Посмотреть журнал событий"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Сбросить настройки"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "Успешно скачано {0} по указанным ссылкам за {1} дней {2} часов {3} минут {4} секунд"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Путь для сохранения"
#: mainframe.py:119
msgid "Downloads completed"
msgstr "Скачивание завершено"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Файл настроек: {0}"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "Производится остановка скачивания"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "Скачивание остановлено"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "Вы должны указать хотя бы одну ссылку"
#: mainframe.py:124
msgid "Downloads started"
msgstr "Началось скачивание"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Выбрать Директорию"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Аргументы командной строки (например, --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Язык"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "Производится скачивание последней версии youtube-dl. Пожалуйста, подождите..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Не удалось скачать Youtube-dl [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "Невозможно открыть каталог: '{dir}'. Указанный путь не существует"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Ошибка при выключении. Убедитесь, что вы ввели корректный пароль вашей учетной записи администратора"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Выключение системы"
#: mainframe.py:141
msgid "Extension"
msgstr "Расширение"
#: mainframe.py:142
msgid "Size"
msgstr "Размер"
#: mainframe.py:143
msgid "Percent"
msgstr "Процент"
#: mainframe.py:144
msgid "ETA"
msgstr "Осталось"
#: mainframe.py:145
msgid "Speed"
msgstr "Скорость скачивания"
#: mainframe.py:146
msgid "Status"
msgstr "Статус"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Команды"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Открыть папку назначения после скачки"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Видео"
#: mainframe.py:479
msgid "Audio"
msgstr "Аудио"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "Скачивание завершено"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "Скачивание завершено"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Выключение"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Выключение системы"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Главные"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Смешать формат"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "Скачать"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Язык Субтитров"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Сбросить настройки"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Сокращать имена файлов (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Сбросить настройки"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "Скачивание завершено"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "Пароль от вашей учетной записи (администратора)"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Для того, чтобы изменения вступили в силу, пожалуйста, перезапустите {0}"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Перезагрузка"
#: optionsframe.py:466
msgid "high"
msgstr "высокое"
#: optionsframe.py:466
msgid "low"
msgstr "низкое"
#: optionsframe.py:466
msgid "mid"
msgstr "среднее"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Формат Видео"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Формат Аудио"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Качество Аудио"
#: optionsframe.py:541
msgid "English"
msgstr "Английский"
#: optionsframe.py:542
msgid "French"
msgstr "Французский"
#: optionsframe.py:543
msgid "German"
msgstr "Немецкий"
#: optionsframe.py:544
msgid "Greek"
msgstr "Греческий"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "Итальянский"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Португальский"
#: optionsframe.py:548
msgid "Russian"
msgstr "Русский"
#: optionsframe.py:549
msgid "Spanish"
msgstr "Испанский"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Скачать файл авто-субтитров (ТОЛЬКО YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Скачать все имеющиеся субтитры"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Язык Субтитров"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Субтитры"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Субтитры"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Встроить субтитры в видео (только mp4)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Плейлист"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "Максимум"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Размер файла"
#: optionsframe.py:597
msgid "Min"
msgstr "Минимум"
#: optionsframe.py:726
msgid "Retries"
msgstr "Количество попыток"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Аутентификация"
#: optionsframe.py:731
msgid "Username"
msgstr "Имя пользователя"
#: optionsframe.py:733
msgid "Password"
msgstr "Пароль"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "Пароль от вашей учетной записи (администратора)"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Прокси"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "Агент пользователя"
#: optionsframe.py:744
msgid "Referer"
msgstr "Реферер"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Включить ведение журнала событий"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Посмотреть журнал событий"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Очистить журнал событий"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Аргументы командной строки (например, --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Сбросить настройки"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Игнорировать ошибки"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Журнал событий"

View File

@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: youtube-dlg 0.3.8\n"
"POT-Creation-Date: 2015-07-02 15:31+EEST\n"
"POT-Creation-Date: 2016-12-17 17:07+EET\n"
"PO-Revision-Date: 2015-11-03 16:37+EEST\n"
"Last-Translator: Ali KOÇ <alikoc@protonmail.ch>\n"
"Language-Team: tr\n"
@ -13,426 +13,606 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: mainframe.py:82
msgid "URLs"
msgstr "Url(ler)"
#: formats.py:9 formats.py:108
msgid "ID"
msgstr ""
#: mainframe.py:83
msgid "Download"
msgstr "İndirme"
#: mainframe.py:84
msgid "Update"
msgstr "Güncelleme"
#: mainframe.py:85 optionsframe.py:40
msgid "Options"
msgstr "Ayarlar"
#: mainframe.py:86
msgid "Error"
msgstr "Hata"
#: mainframe.py:87
msgid "Stop"
msgstr "Dur"
#: mainframe.py:88
msgid "Info"
msgstr "Bilgi"
#: mainframe.py:89
msgid "Welcome"
msgstr "Hoşgeldiniz"
#: mainframe.py:90
msgid "Successfully downloaded {0} url(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "{0} url(ler) {1} gün {2} saat {3} dakika {4} saniye içinde başarı ile indirildi"
#: mainframe.py:92
msgid "Downloads completed"
msgstr "İndirmeler tamamlandı"
#: mainframe.py:93
msgid "Downloading {0} url(s)"
msgstr "İndiriliyor {0} url(ler)"
#: mainframe.py:94
msgid "Stopping downloads"
msgstr "İndirmeler durduruluyor"
#: mainframe.py:95
msgid "Downloads stopped"
msgstr "İndirmeler durduruldu"
#: mainframe.py:96
msgid "You need to provide at least one url"
msgstr "En az bir url belirtmeniz gerek"
#: mainframe.py:97
msgid "Downloads started"
msgstr "İndirmeler başlatıldı"
#: mainframe.py:99
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "youtube-dl'nin en son sürümü indiriliyor. Lütfen bekleyin..."
#: mainframe.py:100
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl indirme başarısız [{0}]"
#: mainframe.py:101
msgid "Youtube-dl downloaded correctly"
msgstr "Youtube-dl başarılı olarak indirildi"
#: mainframe.py:103
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "'{dir}' klasörüne erişilemiyor. Belirtilen yol geçerli değil"
#: mainframe.py:105
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Kapanırken hata oluştu. Doğru şifreyi girdinizden emin olun"
#: mainframe.py:107
msgid "Shutting down system"
msgstr "Sistem kapatılıyor"
#: mainframe.py:109
#: formats.py:10 formats.py:109 mainframe.py:140
msgid "Title"
msgstr "Başlık"
#: mainframe.py:110
msgid "Size"
msgstr "Boyut"
#: formats.py:11 formats.py:110
msgid "Title + ID"
msgstr ""
#: mainframe.py:111
msgid "Percent"
msgstr "Yüzde"
#: mainframe.py:112
msgid "ETA"
msgstr "TKZ"
#: mainframe.py:113
msgid "Speed"
msgstr "Hız"
#: mainframe.py:114
msgid "Status"
msgstr "Durum"
#: optionsframe.py:42
msgid "General"
msgstr "Genel"
#: optionsframe.py:43
msgid "Video"
msgstr "Video"
#: optionsframe.py:44
msgid "Audio"
msgstr "Ses"
#: optionsframe.py:45
msgid "Playlist"
msgstr "Çalma listesi"
#: optionsframe.py:46
msgid "Output"
msgstr "Çıkış"
#: optionsframe.py:47
msgid "Subtitles"
msgstr "Altyazılar"
#: optionsframe.py:48
msgid "Filesystem"
msgstr "Dosya sistemi"
#: optionsframe.py:49
msgid "Shutdown"
msgstr "Kapat"
#: optionsframe.py:50
msgid "Authentication"
msgstr "Yetkilendirme"
#: optionsframe.py:51
msgid "Connection"
msgstr "Bağlantı"
#: optionsframe.py:52
msgid "Log"
msgstr "Günlük"
#: optionsframe.py:53
msgid "Commands"
msgstr "Komutlar"
#: optionsframe.py:54
msgid "Localization"
msgstr "Bölgeselleştirme"
#: optionsframe.py:400
msgid "Enable Log"
msgstr "Günlüğü Etkinleştir"
#: optionsframe.py:401
msgid "Write Time"
msgstr "Yazma Zamanı"
#: optionsframe.py:402
msgid "Clear Log"
msgstr "Günlüğü Temizle"
#: optionsframe.py:403
msgid "View Log"
msgstr "Günlüğü Görüntüle"
#: optionsframe.py:404
msgid "Path: {0}"
msgstr "Yol {0}"
#: optionsframe.py:405
msgid "Log Size: {0} Bytes"
msgstr "Günlük Boyutu: {0} Bytes"
#: optionsframe.py:406 optionsframe.py:1425
msgid "Restart"
msgstr "Yeniden başlat"
#: optionsframe.py:407
msgid "Please restart {0}"
msgstr "Lütfen yeniden başlatın {0}"
#: optionsframe.py:517
msgid "Shutdown when finished"
msgstr "Tamamlandığında kapat"
#: optionsframe.py:518
msgid "SUDO password"
msgstr "SUDO parola"
#: optionsframe.py:570
msgid "Playlist Start"
msgstr "Çalma listesini başlat"
#: optionsframe.py:571
msgid "Playlist Stop"
msgstr "Çalma listesini durdur"
#: optionsframe.py:572
msgid "Max Downloads"
msgstr "Maks İndirme"
#: optionsframe.py:630
msgid "Retries"
msgstr "Deneme"
#: optionsframe.py:631
msgid "User Agent"
msgstr "Kullancı Aracısı"
#: optionsframe.py:632
msgid "Referer"
msgstr "Yönlendirici"
#: optionsframe.py:633
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:707
msgid "Username"
msgstr "Kullancı Adı"
#: optionsframe.py:708
msgid "Password"
msgstr "Parola"
#: optionsframe.py:709
msgid "Video Password (vimeo, smotri)"
msgstr "Video parolası (vimeo, smotri)"
#: optionsframe.py:767
msgid "high"
msgstr "yüksek"
#: optionsframe.py:767
msgid "low"
msgstr "düşük"
#: optionsframe.py:767
msgid "mid"
msgstr "orta"
#: optionsframe.py:770
msgid "Convert to Audio"
msgstr "Sese Çevir"
#: optionsframe.py:771
msgid "Keep Video"
msgstr "Videoyu Tut"
#: optionsframe.py:772
msgid "Audio Format"
msgstr "Ses Formatı"
#: optionsframe.py:773
msgid "Audio Quality"
#: formats.py:12 formats.py:111
#, fuzzy
msgid "Title + Quality"
msgstr "Ses Kalitesi"
#: optionsframe.py:890
#: formats.py:13 formats.py:112
msgid "Title + ID + Quality"
msgstr ""
#: formats.py:14 formats.py:113
msgid "Custom"
msgstr ""
#: formats.py:19 formats.py:118 mainframe.py:498 mainframe.py:501
msgid "default"
msgstr "varsayılan"
#: optionsframe.py:891
msgid "none"
msgstr "hiçbiri"
#: mainframe.py:97
msgid "Enter URLs below"
msgstr ""
#: optionsframe.py:895
msgid "Video Format"
msgstr "Video Formatı"
#: mainframe.py:98
msgid "Update"
msgstr "Güncelleme"
#: optionsframe.py:896
msgid "Mix Format"
msgstr "Karıştırma Formatı"
#: mainframe.py:99 optionsframe.py:41
msgid "Options"
msgstr "Ayarlar"
#: optionsframe.py:955
msgid "Restrict filenames (ASCII)"
msgstr "Dosya isimlerini kısıtla (ASCII)"
#: mainframe.py:100 optionsframe.py:587
msgid "Stop"
msgstr "Dur"
#: optionsframe.py:956
msgid "ID as Name"
msgstr "İsim yerine Kimlik"
#: mainframe.py:101
msgid "Info"
msgstr "Bilgi"
#: optionsframe.py:957
msgid "Title as Name"
msgstr "İsim yerine Başlık"
#: mainframe.py:102
msgid "Welcome"
msgstr "Hoşgeldiniz"
#: optionsframe.py:958
msgid "Custom Template (youtube-dl)"
msgstr "Özel Şablon (youtube-dl)"
#: mainframe.py:103
msgid "Warning"
msgstr ""
#: optionsframe.py:1052
msgid "Ignore Errors"
msgstr "Hataları Yoksay"
#: mainframe.py:105
msgid "Add"
msgstr ""
#: optionsframe.py:1053
msgid "Open destination folder"
msgstr "Hedef klasörü aç"
#: mainframe.py:106
#, fuzzy
msgid "Download list"
msgstr "İndirme"
#: optionsframe.py:1054
msgid "Write info to (.json) file"
msgstr "Bilgiyi (.json) dosyasına yaz"
#: mainframe.py:107 mainframe.py:511 mainframe.py:529
msgid "Delete"
msgstr ""
#: optionsframe.py:1055
msgid "Write description to file"
msgstr "Açıklamayı dosyaya yaz"
#: mainframe.py:108
#, fuzzy
msgid "Play"
msgstr "Çalma listesi"
#: optionsframe.py:1056
msgid "Write thumbnail to disk"
msgstr "Önizleme resimini diske kaydet"
#: mainframe.py:109
msgid "Up"
msgstr ""
#: optionsframe.py:1057
msgid "Filesize"
msgstr "Dosya boyutu"
#: mainframe.py:110
#, fuzzy
msgid "Down"
msgstr "İndirme"
#: optionsframe.py:1058
msgid "Min"
msgstr "En az"
#: mainframe.py:111
msgid "Reload"
msgstr ""
#: optionsframe.py:1059
msgid "Max"
msgstr "En fazla"
#: mainframe.py:112 mainframe.py:443 mainframe.py:644
msgid "Pause"
msgstr ""
#: optionsframe.py:1172
msgid "English"
msgstr "İngilizce"
#: mainframe.py:113 mainframe.py:860 mainframe.py:861 optionsframe.py:585
#, fuzzy
msgid "Start"
msgstr "Yeniden başlat"
#: optionsframe.py:1173
msgid "Greek"
msgstr "Yunanca"
#: optionsframe.py:1174
msgid "Portuguese"
msgstr "Portekizce"
#: optionsframe.py:1175
msgid "French"
msgstr "Fransızca"
#: optionsframe.py:1176
msgid "Italian"
msgstr "İtalyanca"
#: optionsframe.py:1177
msgid "Russian"
msgstr "Rusça"
#: optionsframe.py:1178
msgid "Spanish"
msgstr "İspanyolca"
#: optionsframe.py:1179
msgid "German"
msgstr "Almanca"
#: optionsframe.py:1182
msgid "Download subtitle file by language"
msgstr "Altyazı dosyasını dile göre indir"
#: optionsframe.py:1183
msgid "Download all available subtitles"
msgstr "Var olan tüm altyazıları indir"
#: optionsframe.py:1184
msgid "Download automatic subtitle file (YOUTUBE ONLY)"
msgstr "Otomatik altyazıyı indir (SADECE YOUTUBE)"
#: optionsframe.py:1185
msgid "Embed subtitles in the video (only mp4 videos)"
msgstr "Altyazıyı videoya yerleştir (sadece mp4 videoları)"
#: optionsframe.py:1186
msgid "Subtitles Language"
msgstr "Altyazı Dili"
#: optionsframe.py:1280
#: mainframe.py:114
msgid "About"
msgstr "Hakkında"
#: optionsframe.py:1281
msgid "Open"
msgstr ""
#: mainframe.py:115
msgid "View Log"
msgstr "Günlüğü Görüntüle"
#: optionsframe.py:1282
msgid "Reset Options"
msgstr "Ayarları Sıfırla"
#: mainframe.py:117
#, fuzzy
msgid "Successfully downloaded {0} URL(s) in {1} day(s) {2} hour(s) {3} minute(s) {4} second(s)"
msgstr "{0} url(ler) {1} gün {2} saat {3} dakika {4} saniye içinde başarı ile indirildi"
#: optionsframe.py:1283
msgid "Save Path"
msgstr "Yolu Kaydet"
#: mainframe.py:119
msgid "Downloads completed"
msgstr "İndirmeler tamamlandı"
#: optionsframe.py:1284
msgid "Settings File: {0}"
msgstr "Ayar Dosyası: {0}"
#: mainframe.py:120
msgid "Total Progress: {0:.1f}% | Queued ({1}) Paused ({2}) Active ({3}) Completed ({4}) Error ({5})"
msgstr ""
#: optionsframe.py:1285
#: mainframe.py:121
msgid "Stopping downloads"
msgstr "İndirmeler durduruluyor"
#: mainframe.py:122
msgid "Downloads stopped"
msgstr "İndirmeler durduruldu"
#: mainframe.py:123
#, fuzzy
msgid "You need to provide at least one URL"
msgstr "En az bir url belirtmeniz gerek"
#: mainframe.py:124
msgid "Downloads started"
msgstr "İndirmeler başlatıldı"
#: mainframe.py:125
msgid "Choose Directory"
msgstr "Klasör Seç"
#: optionsframe.py:1370
msgid "Command line arguments (e.g. --help)"
msgstr "Komut satırı argümanları (örn. --help)"
#: mainframe.py:127
msgid "Download in progress. Please wait for all downloads to complete"
msgstr ""
#: optionsframe.py:1426
msgid "Localization Language"
msgstr "Dil"
#: mainframe.py:128
msgid "Update already in progress"
msgstr ""
#: optionsframe.py:1427
#: mainframe.py:130
msgid "Downloading latest youtube-dl. Please wait..."
msgstr "youtube-dl'nin en son sürümü indiriliyor. Lütfen bekleyin..."
#: mainframe.py:131
msgid "Youtube-dl download failed [{0}]"
msgstr "Youtube-dl indirme başarısız [{0}]"
#: mainframe.py:132
msgid "Successfully downloaded youtube-dl"
msgstr ""
#: mainframe.py:134
msgid "Unable to open directory: '{dir}'. The specified path does not exist"
msgstr "'{dir}' klasörüne erişilemiyor. Belirtilen yol geçerli değil"
#: mainframe.py:136
msgid "Error while shutting down. Make sure you typed the correct password"
msgstr "Kapanırken hata oluştu. Doğru şifreyi girdinizden emin olun"
#: mainframe.py:138
msgid "Shutting down system"
msgstr "Sistem kapatılıyor"
#: mainframe.py:141
msgid "Extension"
msgstr ""
#: mainframe.py:142
msgid "Size"
msgstr "Boyut"
#: mainframe.py:143
msgid "Percent"
msgstr "Yüzde"
#: mainframe.py:144
msgid "ETA"
msgstr "TKZ"
#: mainframe.py:145
msgid "Speed"
msgstr "Hız"
#: mainframe.py:146
msgid "Status"
msgstr "Durum"
#: mainframe.py:235
msgid "Get URL"
msgstr ""
#: mainframe.py:236
#, fuzzy
msgid "Get command"
msgstr "Komutlar"
#: mainframe.py:237
#, fuzzy
msgid "Open destination"
msgstr "Hedef klasörü aç"
#: mainframe.py:238
msgid "Re-enter"
msgstr ""
#: mainframe.py:453
msgid "Resume"
msgstr ""
#: mainframe.py:475
msgid "Video"
msgstr "Video"
#: mainframe.py:479
msgid "Audio"
msgstr "Ses"
#: mainframe.py:511
msgid "No items selected. Please pick an action"
msgstr ""
#: mainframe.py:511
msgid "Remove all"
msgstr ""
#: mainframe.py:511
#, fuzzy
msgid "Remove completed"
msgstr "İndirmeler tamamlandı"
#: mainframe.py:529
msgid "Are you sure you want to remove selected items?"
msgstr ""
#: mainframe.py:541
msgid "Item is active, cannot remove"
msgstr ""
#: mainframe.py:574
#, fuzzy
msgid "Item is not completed"
msgstr "İndirmeler tamamlandı"
#: mainframe.py:662
msgid "Update in progress. Please wait for the update to complete"
msgstr ""
#: mainframe.py:711
msgid "Logging is disabled"
msgstr ""
#: mainframe.py:886
msgid "Shutdown"
msgstr "Kapat"
#: mainframe.py:886
#, fuzzy
msgid "Shutting down in {0} second(s)"
msgstr "Sistem kapatılıyor"
#: mainframe.py:975
msgid "No items to download"
msgstr ""
#: mainframe.py:1055
msgid "Are you sure you want to exit?"
msgstr ""
#: mainframe.py:1055
msgid "Exit"
msgstr ""
#: mainframe.py:1296 mainframe.py:1446
msgid "Cancel"
msgstr ""
#: mainframe.py:1445
msgid "OK"
msgstr ""
#: optionsframe.py:65
msgid "Reset"
msgstr ""
#: optionsframe.py:66
msgid "Close"
msgstr ""
#: optionsframe.py:72
msgid "General"
msgstr "Genel"
#: optionsframe.py:73
#, fuzzy
msgid "Formats"
msgstr "Karıştırma Formatı"
#: optionsframe.py:74
#, fuzzy
msgid "Downloads"
msgstr "İndirme"
#: optionsframe.py:75
msgid "Advanced"
msgstr ""
#: optionsframe.py:76
msgid "Extra"
msgstr ""
#: optionsframe.py:313
#, fuzzy
msgid "Language"
msgstr "Altyazı Dili"
#: optionsframe.py:316
msgid "Filename format"
msgstr ""
#: optionsframe.py:321
#, fuzzy
msgid "Filename options"
msgstr "Ayarları Sıfırla"
#: optionsframe.py:322
#, fuzzy
msgid "Restrict filenames to ASCII"
msgstr "Dosya isimlerini kısıtla (ASCII)"
#: optionsframe.py:324
#, fuzzy
msgid "More options"
msgstr "Ayarları Sıfırla"
#: optionsframe.py:325
msgid "Confirm on exit"
msgstr ""
#: optionsframe.py:326
msgid "Confirm item deletion"
msgstr ""
#: optionsframe.py:327
msgid "Inform me on download completion"
msgstr ""
#: optionsframe.py:329
#, fuzzy
msgid "Shutdown on download completion"
msgstr "İndirmeler tamamlandı"
#: optionsframe.py:340
msgid "SUDO password"
msgstr "SUDO parola"
#: optionsframe.py:418 optionsframe.py:819
#, fuzzy
msgid "In order for the changes to take effect please restart {0}"
msgstr "Değişikliklerin etkin olaması için lütfen yeniden başlatın {0}"
#: optionsframe.py:1474
#: optionsframe.py:419 optionsframe.py:820
msgid "Restart"
msgstr "Yeniden başlat"
#: optionsframe.py:466
msgid "high"
msgstr "yüksek"
#: optionsframe.py:466
msgid "low"
msgstr "düşük"
#: optionsframe.py:466
msgid "mid"
msgstr "orta"
#: optionsframe.py:471
#, fuzzy
msgid "Video formats"
msgstr "Video Formatı"
#: optionsframe.py:474
#, fuzzy
msgid "Audio formats"
msgstr "Ses Formatı"
#: optionsframe.py:477
msgid "Post-Process options"
msgstr ""
#: optionsframe.py:478
msgid "Keep original files"
msgstr ""
#: optionsframe.py:479
msgid "Extract audio from video file"
msgstr ""
#: optionsframe.py:480
msgid "Embed thumbnail in audio file"
msgstr ""
#: optionsframe.py:481
msgid "Add metadata to file"
msgstr ""
#: optionsframe.py:483
#, fuzzy
msgid "Audio quality"
msgstr "Ses Kalitesi"
#: optionsframe.py:541
msgid "English"
msgstr "İngilizce"
#: optionsframe.py:542
msgid "French"
msgstr "Fransızca"
#: optionsframe.py:543
msgid "German"
msgstr "Almanca"
#: optionsframe.py:544
msgid "Greek"
msgstr "Yunanca"
#: optionsframe.py:545
msgid "Hebrew"
msgstr ""
#: optionsframe.py:546
msgid "Italian"
msgstr "İtalyanca"
#: optionsframe.py:547
msgid "Portuguese"
msgstr "Portekizce"
#: optionsframe.py:548
msgid "Russian"
msgstr "Rusça"
#: optionsframe.py:549
msgid "Spanish"
msgstr "İspanyolca"
#: optionsframe.py:550
msgid "Swedish"
msgstr ""
#: optionsframe.py:551
msgid "Turkish"
msgstr ""
#: optionsframe.py:567
msgid "None"
msgstr ""
#: optionsframe.py:568
#, fuzzy
msgid "Automatic subtitles (YOUTUBE ONLY)"
msgstr "Otomatik altyazıyı indir (SADECE YOUTUBE)"
#: optionsframe.py:569
#, fuzzy
msgid "All available subtitles"
msgstr "Var olan tüm altyazıları indir"
#: optionsframe.py:570
#, fuzzy
msgid "Subtitles by language"
msgstr "Altyazı Dili"
#: optionsframe.py:576
msgid "Subtitles"
msgstr "Altyazılar"
#: optionsframe.py:580
#, fuzzy
msgid "Subtitles options"
msgstr "Altyazılar"
#: optionsframe.py:581
#, fuzzy
msgid "Embed subtitles into video file (mp4 ONLY)"
msgstr "Altyazıyı videoya yerleştir (sadece mp4 videoları)"
#: optionsframe.py:583
msgid "Playlist"
msgstr "Çalma listesi"
#: optionsframe.py:589 optionsframe.py:594
msgid "Max"
msgstr "En fazla"
#: optionsframe.py:592
msgid "Filesize"
msgstr "Dosya boyutu"
#: optionsframe.py:597
msgid "Min"
msgstr "En az"
#: optionsframe.py:726
msgid "Retries"
msgstr "Deneme"
#: optionsframe.py:729
msgid "Authentication"
msgstr "Yetkilendirme"
#: optionsframe.py:731
msgid "Username"
msgstr "Kullancı Adı"
#: optionsframe.py:733
msgid "Password"
msgstr "Parola"
#: optionsframe.py:735
#, fuzzy
msgid "Video password"
msgstr "SUDO parola"
#: optionsframe.py:738
msgid "Network"
msgstr ""
#: optionsframe.py:740
msgid "Proxy"
msgstr "Proxy"
#: optionsframe.py:742
#, fuzzy
msgid "User agent"
msgstr "Kullancı Aracısı"
#: optionsframe.py:744
msgid "Referer"
msgstr "Yönlendirici"
#: optionsframe.py:747
msgid "Logging"
msgstr ""
#: optionsframe.py:749
#, fuzzy
msgid "Enable log"
msgstr "Günlüğü Etkinleştir"
#: optionsframe.py:750
#, fuzzy
msgid "View"
msgstr "Günlüğü Görüntüle"
#: optionsframe.py:751
#, fuzzy
msgid "Clear"
msgstr "Günlüğü Temizle"
#: optionsframe.py:861
#, fuzzy
msgid "Youtube-dl command line options (e.g. --help)"
msgstr "Komut satırı argümanları (örn. --help)"
#: optionsframe.py:864
#, fuzzy
msgid "Extra options"
msgstr "Ayarları Sıfırla"
#: optionsframe.py:866
msgid "Debug youtube-dl"
msgstr ""
#: optionsframe.py:867
#, fuzzy
msgid "Ignore errors"
msgstr "Hataları Yoksay"
#: optionsframe.py:868
msgid "Ignore youtube-dl config"
msgstr ""
#: optionsframe.py:869
msgid "No mtime"
msgstr ""
#: optionsframe.py:870
msgid "Prefer native HLS"
msgstr ""
#: optionsframe.py:931
msgid "Log Viewer"
msgstr "Günlük Görütünlüyücüsü"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,11 @@ from .utils import (
check_path
)
from .formats import (
OUTPUT_FORMATS,
FORMATS
)
class OptionsManager(object):
@ -87,12 +92,8 @@ class OptionsManager(object):
restrict_filenames (boolean): If True youtube-dl will restrict
the downloaded file filename to ASCII characters only.
output_format (string): This option sets the downloaded file
output template. Available values are 'id', 'title', 'custom'
'id' -> '%(id)s.%(ext)s'
'title' -> '%(title)s.%(ext)s'
'custom' -> Use 'output_template' as output template.
output_format (int): This option sets the downloaded file
output template. See formats.OUTPUT_FORMATS for more info.
output_template (string): Can be any output template supported
by youtube-dl.
@ -198,18 +199,57 @@ class OptionsManager(object):
If window becomes to small the program will reset its size.
See _settings_are_valid method MIN_FRAME_SIZE.
save_path_dirs (list): List that contains temporary save paths.
selected_video_formats (list): List that contains the selected
video formats to display on the main window.
selected_audio_formats (list): List that contains the selected
audio formats to display on the main window.
selected_format (string): Current format selected on the main window.
youtube_dl_debug (boolean): When True will pass '-v' flag to youtube-dl.
ignore_config (boolean): When True will ignore youtube-dl config file options.
confirm_exit (boolean): When True create popup to confirm exiting youtube-dl-gui.
native_hls (boolean): When True youtube-dl will use the native HLS implementation.
show_completion_popup (boolean): When True youtube-dl-gui will create a popup
to inform the user for the download completion.
confirm_deletion (boolean): When True ask user before item removal.
nomtime (boolean): When True will not use the Last-modified header to
set the file modification time.
embed_thumbnail (boolean): When True will embed the thumbnail in
the audio file as cover art.
add_metadata (boolean): When True will write metadata to file.
"""
#REFACTOR Remove old options & check options validation
self.options = {
'save_path': os_path_expanduser('~'),
'save_path_dirs': [
os_path_expanduser('~'),
os.path.join(os_path_expanduser('~'), "Downloads"),
os.path.join(os_path_expanduser('~'), "Desktop"),
os.path.join(os_path_expanduser('~'), "Videos"),
os.path.join(os_path_expanduser('~'), "Music"),
],
'video_format': '0',
'second_video_format': '0',
'to_audio': False,
'keep_video': False,
'audio_format': 'mp3',
'audio_format': '',
'audio_quality': '5',
'restrict_filenames': False,
'output_format': 'title',
'output_template': '%(uploader)s/%(title)s.%(ext)s',
'output_format': 1,
'output_template': os.path.join('%(uploader)s', '%(title)s.%(ext)s'),
'playlist_start': 1,
'playlist_end': 0,
'max_downloads': 0,
@ -223,7 +263,7 @@ class OptionsManager(object):
'embed_subs': False,
'subs_lang': 'en',
'ignore_errors': True,
'open_dl_dir': True,
'open_dl_dir': False,
'write_description': False,
'write_info': False,
'write_thumbnail': False,
@ -239,11 +279,23 @@ class OptionsManager(object):
'youtubedl_path': self.config_path,
'cmd_args': '',
'enable_log': True,
'log_time': False,
'log_time': True,
'workers_number': 3,
'locale_name': 'en_US',
'main_win_size': (700, 490),
'opts_win_size': (640, 270)
'main_win_size': (740, 490),
'opts_win_size': (640, 490),
'selected_video_formats': ['webm', 'mp4'],
'selected_audio_formats': ['mp3', 'm4a', 'vorbis'],
'selected_format': '0',
'youtube_dl_debug': False,
'ignore_config': True,
'confirm_exit': True,
'native_hls': True,
'show_completion_popup': True,
'confirm_deletion': True,
'nomtime': False,
'embed_thumbnail': False,
'add_metadata': False
}
def load_from_file(self):
@ -287,15 +339,13 @@ class OptionsManager(object):
'264', '138', '242', '243', '244', '247', '248', '271', '272', '82',
'83', '84', '85', '100', '101', '102', '139', '140', '141', '171', '172')
VALID_AUDIO_FORMAT = ('mp3', 'wav', 'aac', 'm4a', 'vorbis', 'opus')
VALID_AUDIO_FORMAT = ('mp3', 'wav', 'aac', 'm4a', 'vorbis', 'opus', '')
VALID_AUDIO_QUALITY = ('0', '5', '9')
VALID_OUTPUT_FORMAT = ('title', 'id', 'custom')
VALID_FILESIZE_UNIT = ('', 'k', 'm', 'g', 't', 'p', 'e', 'z', 'y')
VALID_SUB_LANGUAGE = ('en', 'gr', 'pt', 'fr', 'it', 'ru', 'es', 'de')
VALID_SUB_LANGUAGE = ('en', 'el', 'pt', 'fr', 'it', 'ru', 'es', 'de', 'he', 'sv', 'tr')
MIN_FRAME_SIZE = 100
@ -312,11 +362,11 @@ class OptionsManager(object):
# Check if each key has a valid value
rules_dict = {
'video_format': VALID_VIDEO_FORMAT,
'video_format': FORMATS.keys(),
'second_video_format': VALID_VIDEO_FORMAT,
'audio_format': VALID_AUDIO_FORMAT,
'audio_quality': VALID_AUDIO_QUALITY,
'output_format': VALID_OUTPUT_FORMAT,
'output_format': OUTPUT_FORMATS.keys(),
'min_filesize_unit': VALID_FILESIZE_UNIT,
'max_filesize_unit': VALID_FILESIZE_UNIT,
'subs_lang': VALID_SUB_LANGUAGE

View File

@ -97,10 +97,16 @@ class OptionsParser(object):
OptionHolder('save_path', '-o', ''),
OptionHolder('embed_subs', '--embed-subs', False, ['write_auto_subs', 'write_subs']),
OptionHolder('to_audio', '-x', False),
OptionHolder('audio_format', '--audio-format', '', ['to_audio']),
OptionHolder('audio_format', '--audio-format', ''),
OptionHolder('video_format', '-f', '0'),
OptionHolder('subs_lang', '--sub-lang', '', ['write_subs']),
OptionHolder('audio_quality', '--audio-quality', '5', ['to_audio'])
OptionHolder('audio_quality', '--audio-quality', '5', ['to_audio']),
OptionHolder('youtube_dl_debug', '-v', False),
OptionHolder('ignore_config', '--ignore-config', False),
OptionHolder('native_hls', '--hls-prefer-native', False),
OptionHolder('nomtime', '--no-mtime', False),
OptionHolder('embed_thumbnail', '--embed-thumbnail', False),
OptionHolder('add_metadata', '--add-metadata', False)
]
def parse(self, options_dictionary):
@ -128,7 +134,44 @@ class OptionsParser(object):
# Parse basic youtube-dl command line options
for option in self._ydl_options:
if option.check_requirements(options_dict):
#NOTE Special case should be removed
if option.name == "to_audio":
if options_dict["audio_format"] == "":
value = options_dict[option.name]
if value != option.default_value:
options_list.append(option.flag)
elif option.name == "audio_format":
value = options_dict[option.name]
if value != option.default_value:
options_list.append("-x")
options_list.append(option.flag)
options_list.append(to_string(value))
#NOTE Temp fix
# If current 'audio_quality' is not the default one ('5')
# then append the audio quality flag and value to the
# options list
if options_dict["audio_quality"] != "5":
options_list.append("--audio-quality")
options_list.append(to_string(options_dict["audio_quality"]))
elif option.name == "audio_quality":
# If the '--audio-quality' is not already in the options list
# from the above branch then follow the standard procedure.
# We don't have to worry for the sequence in which the code
# will be executed since the 'audio_quality' option is placed
# after the 'audio_format' option in the self._ydl_options list
if option.flag not in options_list:
if option.check_requirements(options_dict):
value = options_dict[option.name]
if value != option.default_value:
options_list.append(option.flag)
options_list.append(to_string(value))
elif option.check_requirements(options_dict):
value = options_dict[option.name]
if value != option.default_value:
@ -155,14 +198,20 @@ class OptionsParser(object):
"""
save_path = remove_shortcuts(options_dict['save_path'])
if options_dict['output_format'] == 'id':
save_path = os.path.join(save_path, '%(id)s.%(ext)s')
elif options_dict['output_format'] == 'title':
save_path = os.path.join(save_path, '%(title)s.%(ext)s')
if options_dict["output_format"] == 0:
template = "%(id)s.%(ext)s"
elif options_dict["output_format"] == 1:
template = "%(title)s.%(ext)s"
elif options_dict["output_format"] == 2:
template = "%(title)s-%(id)s.%(ext)s"
elif options_dict["output_format"] == 4:
template = "%(title)s-%(height)sp.%(ext)s"
elif options_dict["output_format"] == 5:
template = "%(title)s-%(id)s-%(height)sp.%(ext)s"
else:
save_path = os.path.join(save_path, options_dict['output_template'])
template = options_dict["output_template"]
options_dict['save_path'] = save_path
options_dict["save_path"] = os.path.join(save_path, template)
def _build_videoformat(self, options_dict):
"""Build the video format.

View File

@ -14,9 +14,17 @@ from __future__ import unicode_literals
import os
import sys
import json
import math
import locale
import subprocess
try:
from twodict import TwoWayOrderedDict
except ImportError as error:
print error
sys.exit(1)
from .info import __appname__
from .version import __version__
@ -29,6 +37,11 @@ if os.name == 'nt':
YOUTUBEDL_BIN += '.exe'
FILESIZE_METRICS = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"]
KILO_SIZE = 1024.0
def get_encoding():
"""Return system encoding. """
try:
@ -74,7 +87,7 @@ def convert_on_bounds(func):
for sub_item in item:
if isinstance(item, dict):
temp_list.append((sub_item, covert_item(item[sub_item])))
temp_list.append((sub_item, convert_item(item[sub_item])))
else:
temp_list.append(convert_item(sub_item))
@ -92,6 +105,7 @@ def convert_on_bounds(func):
# See: https://github.com/MrS0m30n3/youtube-dl-gui/issues/57
# Patch os functions to convert between 'str' and 'unicode' on app bounds
os_sep = unicode(os.sep)
os_getenv = convert_on_bounds(os.getenv)
os_makedirs = convert_on_bounds(os.makedirs)
os_path_isdir = convert_on_bounds(os.path.isdir)
@ -105,6 +119,12 @@ os_path_expanduser = convert_on_bounds(os.path.expanduser)
if os.name == 'nt':
os_startfile = convert_on_bounds(os.startfile)
def remove_file(filename):
if os_path_exists(filename):
os.remove(filename)
return True
return False
def remove_shortcuts(path):
"""Return given path after removing the shortcuts. """
@ -116,18 +136,22 @@ def absolute_path(filename):
return os_path_dirname(os_path_realpath(os_path_abspath(filename)))
def open_dir(path):
"""Open path using default file navigator.
Return True if path exists else False. """
path = remove_shortcuts(path)
def open_file(file_path):
"""Open file in file_path using the default OS application.
if not os_path_exists(path):
Returns:
True on success else False.
"""
file_path = remove_shortcuts(file_path)
if not os_path_exists(file_path):
return False
if os.name == 'nt':
os_startfile(path)
if os.name == "nt":
os_startfile(file_path)
else:
subprocess.call(('xdg-open', path))
subprocess.call(("xdg-open", file_path))
return True
@ -244,20 +268,16 @@ def get_locale_file():
Note:
Paths that get_locale_file() func searches.
__main__ dir, library dir, /usr/share/youtube-dlg/locale
__main__ dir, library dir
"""
DIR_NAME = 'locale'
DIR_NAME = "locale"
SEARCH_DIRS = [
os.path.join(absolute_path(sys.argv[0]), DIR_NAME),
os.path.join(os_path_dirname(__file__), DIR_NAME),
os.path.join('/usr', 'share', __appname__.lower(), DIR_NAME)
]
if sys.platform == 'darwin':
SEARCH_DIRS.append('/usr/local/Cellar/youtube-dl-gui/{version}/share/locale'.format(version=__version__))
for directory in SEARCH_DIRS:
if os_path_isdir(directory):
return directory
@ -271,242 +291,77 @@ def get_icon_file():
Returns:
The path to youtube-dlg icon file if exists, else returns None.
Note:
Paths that get_icon_file() function searches.
__main__ dir, library dir, /usr/share/pixmaps, $XDG_DATA_DIRS
"""
SIZES = ('256x256', '128x128', '64x64', '48x48', '32x32', '16x16')
ICON_NAME = 'youtube-dl-gui_%s.png'
ICON_NAME = "youtube-dl-gui.png"
ICONS_LIST = [ICON_NAME % size for size in SIZES]
pixmaps_dir = get_pixmaps_dir()
search_dirs = [
os.path.join(absolute_path(sys.argv[0]), 'icons'),
os.path.join(os_path_dirname(__file__), 'icons'),
]
if pixmaps_dir is not None:
icon_file = os.path.join(pixmaps_dir, ICON_NAME)
# Append $XDG_DATA_DIRS on search_dirs
path = os_getenv('XDG_DATA_DIRS')
if path is not None:
for xdg_path in path.split(':'):
xdg_path = os.path.join(xdg_path, 'icons', 'hicolor')
for size in SIZES:
search_dirs.append(os.path.join(xdg_path, size, 'apps'))
# Also append /usr/share/pixmaps on search_dirs
search_dirs.append('/usr/share/pixmaps')
for directory in search_dirs:
for icon in ICONS_LIST:
icon_file = os.path.join(directory, icon)
if os_path_exists(icon_file):
return icon_file
if os_path_exists(icon_file):
return icon_file
return None
class TwoWayOrderedDict(dict):
"""Custom data structure which implements a two way ordrered dictionary.
TwoWayOrderedDict it's a custom dictionary in which you can get the
key:value relationship but you can also get the value:key relationship.
It also remembers the order in which the items were inserted and supports
almost all the features of the build-in dict.
def get_pixmaps_dir():
"""Return absolute path to the pixmaps icons folder.
Note:
Ways to create a new dictionary.
*) d = TwoWayOrderedDict(a=1, b=2) (Unordered)
*) d = TwoWayOrderedDict({'a': 1, 'b': 2}) (Unordered)
*) d = TwoWayOrderedDict([('a', 1), ('b', 2)]) (Ordered)
*) d = TwoWayOrderedDict(zip(['a', 'b', 'c'], [1, 2, 3])) (Ordered)
Examples:
>>> d = TwoWayOrderedDict(a=1, b=2)
>>> d['a']
1
>>> d[1]
'a'
>>> print d
TwoWayOrderedDict([('a', 1), ('b', 2)])
Paths we search: __main__ dir, library dir
"""
search_dirs = [
os.path.join(absolute_path(sys.argv[0]), "data"),
os.path.join(os_path_dirname(__file__), "data")
]
_PREV = 0
_KEY = 1
_NEXT = 2
for directory in search_dirs:
pixmaps_dir = os.path.join(directory, "pixmaps")
def __init__(self, *args, **kwargs):
self._items = item = []
self._items += [item, None, item] # Double linked list [prev, key, next]
self._items_map = {} # Map link list items into keys to speed up lookup
self._load(args, kwargs)
if os_path_exists(pixmaps_dir):
return pixmaps_dir
def __setitem__(self, key, value):
if key in self:
# If self[key] == key for example {'b': 'b'} and we
# do d['b'] = 2 then we dont want to remove the 'b'
# from our linked list because we will lose the order
if self[key] in self._items_map and key != self[key]:
self._remove_mapped_key(self[key])
return None
dict.__delitem__(self, self[key])
if value in self:
# If value == key we dont have to remove the
# value from the items_map because the value is
# the key and we want to keep the key in our
# linked list in order to keep the order.
if value in self._items_map and key != value:
self._remove_mapped_key(value)
def to_bytes(string):
"""Convert given youtube-dl size string to bytes."""
value = 0.0
if self[value] in self._items_map:
self._remove_mapped_key(self[value])
for index, metric in enumerate(reversed(FILESIZE_METRICS)):
if metric in string:
value = float(string.split(metric)[0])
break
# Check if self[value] is in the dict
# for cases like {'a': 'a'} where we
# have only one copy instead of {'a': 1, 1: 'a'}
if self[value] in self:
dict.__delitem__(self, self[value])
exponent = index * (-1) + (len(FILESIZE_METRICS) - 1)
if key not in self._items_map:
last = self._items[self._PREV] # self._items prev always points to the last item
last[self._NEXT] = self._items[self._PREV] = self._items_map[key] = [last, key, self._items]
return round(value * (KILO_SIZE ** exponent), 2)
dict.__setitem__(self, key, value)
dict.__setitem__(self, value, key)
def __delitem__(self, key):
if self[key] in self._items_map:
self._remove_mapped_key(self[key])
def format_bytes(bytes):
"""Format bytes to youtube-dl size output strings."""
if bytes == 0.0:
exponent = 0
else:
exponent = int(math.log(bytes, KILO_SIZE))
if key in self._items_map:
self._remove_mapped_key(key)
suffix = FILESIZE_METRICS[exponent]
output_value = bytes / (KILO_SIZE ** exponent)
dict.__delitem__(self, self[key])
return "%.2f%s" % (output_value, suffix)
# Check if key is in the dict
# for cases like {'a': 'a'} where we
# have only one copy instead of {'a': 1, 1: 'a'}
if key in self:
dict.__delitem__(self, key)
def __len__(self):
return len(self._items_map)
def build_command(options_list, url):
"""Build the youtube-dl command line string."""
def __iter__(self):
curr = self._items[self._NEXT]
while curr is not self._items:
yield curr[self._KEY]
curr = curr[self._NEXT]
# If option has spaces wrap it with double quotes
# Probably not the best solution since if the option already contains
# double quotes it will be a mess, see issue #173
options = ["\"{}\"".format(option) if " " in option else option for option in options_list]
def __reversed__(self):
curr = self._items[self._PREV]
while curr is not self._items:
yield curr[self._KEY]
curr = curr[self._PREV]
# Always wrap the url with double quotes
url = "\"{}\"".format(url)
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.items())
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.items() == other.items()
return False
def __ne__(self, other):
return not self == other
def _remove_mapped_key(self, key):
"""Remove the given key both from the linked list
and the map dictionary. """
prev, __, next = self._items_map.pop(key)
prev[self._NEXT] = next
next[self._PREV] = prev
def _load(self, args, kwargs):
"""Load items into our dictionary. """
for item in args:
if type(item) == dict:
item = item.iteritems()
for key, value in item:
self[key] = value
for key, value in kwargs.items():
self[key] = value
def items(self):
return [(key, self[key]) for key in self]
def values(self):
return [self[key] for key in self]
def keys(self):
return list(self)
def pop(self, key, default=_RANDOM_OBJECT):
try:
value = self[key]
del self[key]
except KeyError as error:
if default == _RANDOM_OBJECT:
raise error
value = default
return value
def popitem(self, last=True):
"""Remove and return a (key, value) pair from the dictionary.
If the dictionary is empty calling popitem() raises a KeyError.
Args:
last (bool): When False popitem() will remove the first item
from the list.
Note:
popitem() is useful to destructively iterate over a dictionary.
Raises:
KeyError
"""
if not self:
raise KeyError('popitem(): dictionary is empty')
if last:
__, key, __ = self._items[self._PREV]
else:
__, key, __ = self._items[self._NEXT]
value = self.pop(key)
return key, value
def update(self, *args, **kwargs):
self._load(args, kwargs)
def setdefault(self, key, default=None):
try:
return self[key]
except KeyError:
self[key] = default
return default
def copy(self):
return self.__class__(self.items())
def clear(self):
self._items = item = []
self._items += [item, None, item]
self._items_map = {}
dict.clear(self)
return " ".join([YOUTUBEDL_BIN] + options + [url])

434
youtube_dl_gui/widgets.py Normal file
View File

@ -0,0 +1,434 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
import sys
try:
import wx
except ImportError as error:
print error
sys.exit(1)
def crt_command_event(event_type, event_id=0):
"""Shortcut to create command events."""
return wx.CommandEvent(event_type.typeId, event_id)
class ListBoxWithHeaders(wx.ListBox):
"""Custom ListBox object that supports 'headers'.
Attributes:
NAME (string): Default name for the name argument of the __init__.
TEXT_PREFIX (string): Text to add before normal items in order to
distinguish them (normal items) from headers.
EVENTS (list): List with events to overwrite to avoid header selection.
"""
NAME = "listBoxWithHeaders"
TEXT_PREFIX = " "
EVENTS = [
wx.EVT_LEFT_DOWN,
wx.EVT_LEFT_DCLICK,
wx.EVT_RIGHT_DOWN,
wx.EVT_RIGHT_DCLICK,
wx.EVT_MIDDLE_DOWN,
wx.EVT_MIDDLE_DCLICK
]
def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize, choices=[], style=0, validator=wx.DefaultValidator, name=NAME):
super(ListBoxWithHeaders, self).__init__(parent, id, pos, size, [], style, validator, name)
self.__headers = set()
# Ignore all key events i'm bored to handle the header selection
self.Bind(wx.EVT_KEY_DOWN, lambda event: None)
# Make sure that a header is never selected
self.Bind(wx.EVT_LISTBOX, self._on_listbox)
for event in self.EVENTS:
self.Bind(event, self._disable_header_selection)
# Append the items in our own way in order to add the TEXT_PREFIX
self.AppendItems(choices)
def _disable_header_selection(self, event):
"""Stop event propagation if the selected item is a header."""
row = self.HitTest(event.GetPosition())
event_skip = True
if row != wx.NOT_FOUND and self.GetString(row) in self.__headers:
event_skip = False
event.Skip(event_skip)
def _on_listbox(self, event):
"""Make sure no header is selected."""
if event.GetString() in self.__headers:
self.Deselect(event.GetSelection())
event.Skip()
def _add_prefix(self, string):
return self.TEXT_PREFIX + string
def _remove_prefix(self, string):
if string[:len(self.TEXT_PREFIX)] == self.TEXT_PREFIX:
return string[len(self.TEXT_PREFIX):]
return string
# wx.ListBox methods
def FindString(self, string):
index = super(ListBoxWithHeaders, self).FindString(string)
if index == wx.NOT_FOUND:
# This time try with prefix
index = super(ListBoxWithHeaders, self).FindString(self._add_prefix(string))
return index
def GetStringSelection(self):
return self._remove_prefix(super(ListBoxWithHeaders, self).GetStringSelection())
def GetString(self, index):
if index < 0 or index >= self.GetCount():
# Return empty string based on the wx.ListBox docs
# for some reason parent GetString does not handle
# invalid indices
return ""
return self._remove_prefix(super(ListBoxWithHeaders, self).GetString(index))
def InsertItems(self, items, pos):
items = [self._add_prefix(item) for item in items]
super(ListBoxWithHeaders, self).InsertItems(items, pos)
def SetSelection(self, index):
if index == wx.NOT_FOUND:
self.Deselect(self.GetSelection())
elif self.GetString(index) not in self.__headers:
super(ListBoxWithHeaders, self).SetSelection(index)
def SetString(self, index, string):
old_string = self.GetString(index)
if old_string in self.__headers and string != old_string:
self.__headers.remove(old_string)
self.__headers.add(string)
super(ListBoxWithHeaders, self).SetString(index, string)
def SetStringSelection(self, string):
if string in self.__headers:
return False
self.SetSelection(self.FindString(string))
return True
# wx.ItemContainer methods
def Append(self, string):
super(ListBoxWithHeaders, self).Append(self._add_prefix(string))
def AppendItems(self, strings):
strings = [self._add_prefix(string) for string in strings]
super(ListBoxWithHeaders, self).AppendItems(strings)
def Clear(self):
self.__headers.clear()
super(ListBoxWithHeaders, self).Clear()
def Delete(self, index):
string = self.GetString(index)
if string in self.__headers:
self.__headers.remove(string)
super(ListBoxWithHeaders, self).Delete(index)
# Extra methods
def add_header(self, header_string):
self.__headers.add(header_string)
super(ListBoxWithHeaders, self).Append(header_string)
def add_item(self, item, with_prefix=True):
if with_prefix:
item = self._add_prefix(item)
super(ListBoxWithHeaders, self).Append(item)
def add_items(self, items, with_prefix=True):
if with_prefix:
items = [self._add_prefix(item) for item in items]
super(ListBoxWithHeaders, self).AppendItems(items)
class ListBoxPopup(wx.PopupTransientWindow):
"""ListBoxWithHeaders as a popup.
This class uses the wx.PopupTransientWindow to create the popup and the
API is based on the wx.combo.ComboPopup class.
Attributes:
EVENTS_TABLE (dict): Dictionary that contains all the events
that this class emits.
"""
EVENTS_TABLE = {
"EVT_COMBOBOX": crt_command_event(wx.EVT_COMBOBOX),
"EVT_COMBOBOX_DROPDOWN" : crt_command_event(wx.EVT_COMBOBOX_DROPDOWN),
"EVT_COMBOBOX_CLOSEUP": crt_command_event(wx.EVT_COMBOBOX_CLOSEUP)
}
def __init__(self, parent=None, flags=wx.BORDER_NONE):
super(ListBoxPopup, self).__init__(parent, flags)
self.__listbox = None
def _on_motion(self, event):
row = self.__listbox.HitTest(event.GetPosition())
if row != wx.NOT_FOUND:
self.__listbox.SetSelection(row)
if self.__listbox.IsSelected(row):
self.curitem = row
def _on_left_down(self, event):
self.value = self.curitem
self.Dismiss()
# Send EVT_COMBOBOX to inform the parent for changes
wx.PostEvent(self, self.EVENTS_TABLE["EVT_COMBOBOX"])
def Popup(self):
super(ListBoxPopup, self).Popup()
wx.PostEvent(self, self.EVENTS_TABLE["EVT_COMBOBOX_DROPDOWN"])
def OnDismiss(self):
wx.PostEvent(self, self.EVENTS_TABLE["EVT_COMBOBOX_CLOSEUP"])
# wx.combo.ComboPopup methods
def Init(self):
self.value = self.curitem = -1
def Create(self, parent):
self.__listbox = ListBoxWithHeaders(parent, style=wx.LB_SINGLE)
self.__listbox.Bind(wx.EVT_MOTION, self._on_motion)
self.__listbox.Bind(wx.EVT_LEFT_DOWN, self._on_left_down)
sizer = wx.BoxSizer()
sizer.Add(self.__listbox, 1, wx.EXPAND)
self.SetSizer(sizer)
return True
def GetAdjustedSize(self, min_width, pref_height, max_height):
width, height = self.GetBestSize()
if width < min_width:
width = min_width
if pref_height != -1:
height = pref_height * self.__listbox.GetCount() + 5
if height > max_height:
height = max_height
return wx.Size(width, height)
def GetControl(self):
return self.__listbox
def GetStringValue(self):
return self.__listbox.GetString(self.value)
#def SetStringValue(self, string):
#self.__listbox.SetStringSelection(string)
class CustomComboBox(wx.Panel):
"""Custom combobox.
Attributes:
CB_READONLY (long): Read-only style. The only one supported from the
wx.ComboBox styles.
NAME (string): Default name for the name argument of the __init__.
"""
#NOTE wx.ComboBox does not support EVT_MOTION inside the popup
#NOTE Tried with ComboCtrl but i was not able to draw the button
CB_READONLY = wx.TE_READONLY
NAME = "customComboBox"
def __init__(self, parent, id=wx.ID_ANY, value="", pos=wx.DefaultPosition,
size=wx.DefaultSize, choices=[], style=0, validator=wx.DefaultValidator, name=NAME):
super(CustomComboBox, self).__init__(parent, id, pos, size, 0, name)
assert style == self.CB_READONLY or style == 0
# Create components
self.textctrl = wx.TextCtrl(self, wx.ID_ANY, style=style, validator=validator)
tc_height = self.textctrl.GetSize()[1]
self.button = wx.Button(self, wx.ID_ANY, "", size=(tc_height, tc_height))
# Create the ListBoxPopup in two steps
self.listbox = ListBoxPopup(self)
self.listbox.Init()
self.listbox.Create(self.listbox)
# Set layout
sizer = wx.BoxSizer()
sizer.Add(self.textctrl, 1, wx.ALIGN_CENTER_VERTICAL)
sizer.Add(self.button)
self.SetSizer(sizer)
# Bind events
self.button.Bind(wx.EVT_BUTTON, self._on_button)
for event in ListBoxPopup.EVENTS_TABLE.values():
self.listbox.Bind(wx.PyEventBinder(event.GetEventType()), self._propagate)
# Append items since the ListBoxPopup does not have the 'choices' arg
self.listbox.GetControl().AppendItems(choices)
self.SetStringSelection(value)
def _propagate(self, event):
if event.GetEventType() == wx.EVT_COMBOBOX.typeId:
self.textctrl.SetValue(self.listbox.GetStringValue())
wx.PostEvent(self, event)
def _on_button(self, event):
self.Popup()
def _calc_popup_position(self):
tc_x_axis, tc_y_axis = self.textctrl.ClientToScreen((0, 0))
_, tc_height = self.textctrl.GetSize()
return tc_x_axis, tc_y_axis + tc_height
def _calc_popup_size(self):
me_width, _ = self.GetSize()
_, tc_height = self.textctrl.GetSize()
_, screen_height = wx.DisplaySize()
_, me_y_axis = self.GetScreenPosition()
available_height = screen_height - (me_y_axis + tc_height)
sug_width, sug_height = self.listbox.GetAdjustedSize(me_width, tc_height, available_height)
return me_width, sug_height
# wx.ComboBox methods
def Dismiss(self):
self.listbox.Dismiss()
def FindString(self, string, caseSensitive=False):
#TODO handle caseSensitive
return self.listbox.GetControl().FindString(string)
def GetCount(self):
return self.listbox.GetControl().GetCount()
def GetCurrentSelection(self):
return self.GetSelection()
def GetInsertionPoint(self):
return self.textctrl.GetInsertionPoint()
def GetSelection(self):
return self.listbox.value
def GetTextSelection(self):
return self.textctrl.GetSelection()
def GetString(self, index):
return self.listbox.GetControl().GetString(index)
def GetStringSelection(self):
return self.listbox.GetStringValue()
def IsListEmpty(self):
return self.listbox.GetControl().GetCount() == 0
def IsTextEmpty(self):
return not self.textctrl.GetValue()
def Popup(self):
self.listbox.SetPosition(self._calc_popup_position())
self.listbox.SetSize(self._calc_popup_size())
self.listbox.Popup()
def SetSelection(self, index):
self.listbox.GetControl().SetSelection(index)
if self.listbox.GetControl().IsSelected(index):
self.listbox.value = index
self.textctrl.SetValue(self.listbox.GetStringValue())
def SetString(self, index, string):
self.listbox.GetControl().SetString(index, string)
def SetTextSelection(self, from_, to_):
self.textctrl.SetSelection(from_, to_)
def SetStringSelection(self, string):
index = self.listbox.GetControl().FindString(string)
self.listbox.GetControl().SetSelection(index)
if index != wx.NOT_FOUND and self.listbox.GetControl().GetSelection() == index:
self.listbox.value = index
self.textctrl.SetValue(string)
def SetValue(self, value):
self.textctrl.SetValue(value)
# wx.ItemContainer methods
def Clear(self):
self.textctrl.Clear()
self.listbox.GetControl().Clear()
def Append(self, item):
self.listbox.GetControl().Append(item)
def AppendItems(self, items):
self.listbox.GetControl().AppendItems(items)
def Delete(self, index):
self.listbox.GetControl().Delete(index)
# wx.TextEntry methods
def GetValue(self):
return self.textctrl.GetValue()
# ListBoxWithHeaders methods
def add_header(self, header):
self.listbox.GetControl().add_header(header)
def add_item(self, item, with_prefix=True):
self.listbox.GetControl().add_item(item, with_prefix)
def add_items(self, items, with_prefix=True):
self.listbox.GetControl().add_items(items, with_prefix)