From ef493074d4ff9126255f3d1a27a09d092eeacad2 Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Mon, 2 Dec 2019 22:04:14 +0100 Subject: [PATCH 01/13] Refactor error controller --- controllers/FrontController.php | 54 ++++++++++----------------------- index.php | 2 +- templates/error.tpl | 7 +---- 3 files changed, 18 insertions(+), 45 deletions(-) diff --git a/controllers/FrontController.php b/controllers/FrontController.php index a56af7e..e5e8b47 100644 --- a/controllers/FrontController.php +++ b/controllers/FrontController.php @@ -17,7 +17,7 @@ use Slim\Http\Request; use Slim\Http\Response; use Slim\Views\Smarty; use Symfony\Component\Debug\ExceptionHandler; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Symfony\Component\Debug\Exception\FlattenException; /** * Main controller. @@ -233,62 +233,40 @@ class FrontController extends BaseController * * @param Request $request PSR-7 request * @param Response $response PSR-7 response - * @param Exception $exception Error to display + * @param Throwable $error Error to display * * @return Response HTTP response */ - public function error(Request $request, Response $response, Exception $exception) + public function error(Request $request, Response $response, Throwable $error) { if ($this->config->debug) { + $exception = FlattenException::createFromThrowable($error); $handler = new ExceptionHandler(); - $handler->handle($exception); + $response->getBody()->write($handler->getHtml($exception)); + + return $response->withStatus($exception->getStatusCode()); } else { + if ($error instanceof Exception) { + $message = $error->getMessage(); + } else { + $message = ''; + } + $this->view->render( $response, 'error.tpl', [ 'config' => $this->config, - 'errors' => $exception->getMessage(), + 'error' => $message, 'class' => 'video', 'title' => $this->localeManager->t('Error'), 'canonical' => $this->getCanonicalUrl($request), 'locale' => $this->localeManager->getLocale(), ] ); + + return $response->withStatus(500); } - - return $response->withStatus(500); - } - - /** - * Display an error page for fatal errors. - * - * @param Request $request PSR-7 request - * @param Response $response PSR-7 response - * @param Throwable $error Error to display - * - * @return Response HTTP response - */ - public function fatalError(Request $request, Response $response, Throwable $error) - { - if ($this->config->debug) { - $handler = new ExceptionHandler(); - $handler->handle(new FatalThrowableError($error)); - } else { - $this->view->render( - $response, - 'error.tpl', - [ - 'config' => $this->config, - 'class' => 'video', - 'title' => $this->localeManager->t('Error'), - 'canonical' => $this->getCanonicalUrl($request), - 'locale' => $this->localeManager->getLocale(), - ] - ); - } - - return $response->withStatus(500); } /** diff --git a/index.php b/index.php index b69d13d..6dd0a45 100644 --- a/index.php +++ b/index.php @@ -56,7 +56,7 @@ $downloadController = new DownloadController($container); // Error handling. $container['errorHandler'] = [$frontController, 'error']; -$container['phpErrorHandler'] = [$frontController, 'fatalError']; +$container['phpErrorHandler'] = [$frontController, 'error']; // Routes. $app->get( diff --git a/templates/error.tpl b/templates/error.tpl index 076e15f..55adeb5 100644 --- a/templates/error.tpl +++ b/templates/error.tpl @@ -4,11 +4,6 @@ {include file="inc/logo.tpl"}

{t}An error occurred{/t}

{t}Please check the URL of your video.{/t} -

- {foreach $errors as $error} - {$error|escape} -
- {/foreach} -

+

{$error|escape}

{include file='inc/footer.tpl'} From b3294b3dbc6d8164a3358707a4dfef5a05f8eee5 Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Mon, 16 Dec 2019 22:19:26 +0100 Subject: [PATCH 02/13] youtube-dl update (#253) --- composer.json | 6 +++--- composer.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index 724f8cd..9c14b88 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "phpro/grumphp": "^0.17.0", "phpstan/phpstan": "~0.9.2", "phpunit/phpunit": "^8.4", - "rg3/youtube-dl": "^2019.09", + "rg3/youtube-dl": "^2019.11", "roave/security-advisories": "dev-master", "smarty-gettext/smarty-gettext": "^1.6", "squizlabs/php_codesniffer": "^3.5", @@ -50,10 +50,10 @@ "type": "package", "package": { "name": "rg3/youtube-dl", - "version": "2019.09.28", + "version": "2019.11.28", "dist": { "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2019.09.28.zip" + "url": "https://github.com/rg3/youtube-dl/archive/2019.11.28.zip" } } }, diff --git a/composer.lock b/composer.lock index 0e90c02..1f517e4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3d5ee035d64c39c270806f30282e60c8", + "content-hash": "3d68a20e61fc48bd5ac1bba4b510b733", "packages": [ { "name": "aura/session", @@ -4130,10 +4130,10 @@ }, { "name": "rg3/youtube-dl", - "version": "2019.09.28", + "version": "2019.11.28", "dist": { "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2019.09.28.zip" + "url": "https://github.com/rg3/youtube-dl/archive/2019.11.28.zip" }, "type": "library" }, From ced0c126f12cafb0989937ffa3a9ab0fbae7befa Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Sat, 18 Jan 2020 22:56:55 +0100 Subject: [PATCH 03/13] Add a way to not check the stream checkbox by default (#255) --- config/config.example.yml | 1 + templates/info.tpl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.example.yml b/config/config.example.yml index 022e612..fdf5595 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -35,6 +35,7 @@ phantomjsDir: vendor/bin/ uglyUrls: false # True to stream videos through server +# Set to "ask" if you want to allow it but not enable by default. stream: false # True to enable remux mode (merge best audio and best video) diff --git a/templates/info.tpl b/templates/info.tpl index 6a2d5f9..0a3435d 100644 --- a/templates/info.tpl +++ b/templates/info.tpl @@ -74,7 +74,7 @@

{/if} {if $config->stream} - + stream != 'ask'}checked{/if} name="stream" id="stream"/>

{/if} From 18abd00c9ce0b5fb97ade90e6e35052193f5e38a Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Sun, 9 Feb 2020 15:13:30 +0100 Subject: [PATCH 04/13] Upgrade youtube-dl to 2020.01.24 (fixes #259) --- composer.json | 6 +++--- composer.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index 9c14b88..dc20832 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "phpro/grumphp": "^0.17.0", "phpstan/phpstan": "~0.9.2", "phpunit/phpunit": "^8.4", - "rg3/youtube-dl": "^2019.11", + "rg3/youtube-dl": "^2020.01", "roave/security-advisories": "dev-master", "smarty-gettext/smarty-gettext": "^1.6", "squizlabs/php_codesniffer": "^3.5", @@ -50,10 +50,10 @@ "type": "package", "package": { "name": "rg3/youtube-dl", - "version": "2019.11.28", + "version": "2020.01.24", "dist": { "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2019.11.28.zip" + "url": "https://github.com/rg3/youtube-dl/archive/2020.01.24.zip" } } }, diff --git a/composer.lock b/composer.lock index 1f517e4..9e715ef 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3d68a20e61fc48bd5ac1bba4b510b733", + "content-hash": "2bd1e21d4b8b3a7c138effac43143028", "packages": [ { "name": "aura/session", @@ -4130,10 +4130,10 @@ }, { "name": "rg3/youtube-dl", - "version": "2019.11.28", + "version": "2020.01.24", "dist": { "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2019.11.28.zip" + "url": "https://github.com/rg3/youtube-dl/archive/2020.01.24.zip" }, "type": "library" }, From 4d43bb07f0479a989550cfe40c008dc1004af16a Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Sun, 23 Feb 2020 17:14:05 +0100 Subject: [PATCH 05/13] Upgrade jawira/case-converter (fixes #262) --- composer.json | 2 +- composer.lock | 36 +++++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/composer.json b/composer.json index dc20832..fe1bd53 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "aura/session": "~2.1.0", "barracudanetworks/archivestream-php": "~1.0.5", "guzzlehttp/guzzle": "~6.3.0", - "jawira/case-converter": "^1.2", + "jawira/case-converter": "^3.4", "mathmarques/smarty-view": "~1.1.0", "npm-asset/open-sans-fontface": "^1.4", "rinvex/countries": "~3.1.0", diff --git a/composer.lock b/composer.lock index 9e715ef..68da680 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2bd1e21d4b8b3a7c138effac43143028", + "content-hash": "5d5031247a278c06162e69efb70e4b92", "packages": [ { "name": "aura/session", @@ -329,24 +329,25 @@ }, { "name": "jawira/case-converter", - "version": "v1.2.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/jawira/case-converter.git", - "reference": "79716629a298e44507a8eed9b997968f39367abc" + "reference": "756089a523ce268fb173a9f4af4ca95629b3a7f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jawira/case-converter/zipball/79716629a298e44507a8eed9b997968f39367abc", - "reference": "79716629a298e44507a8eed9b997968f39367abc", + "url": "https://api.github.com/repos/jawira/case-converter/zipball/756089a523ce268fb173a9f4af4ca95629b3a7f0", + "reference": "756089a523ce268fb173a9f4af4ca95629b3a7f0", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=5.4" + "php": "^7.1" }, "suggest": { - "pds/skeleton": "PHP Package Development Standards" + "pds/skeleton": "PHP Package Development Standards", + "phing/phing": "PHP Build Tool" }, "type": "library", "autoload": { @@ -360,16 +361,29 @@ ], "authors": [ { - "name": "Jawira Portugal" + "name": "Jawira Portugal", + "email": "dev@tugal.be", + "homepage": "http://jawira.com/" } ], - "description": "Convert string between **Camel Case** ?, **Snake Case** ?and **Kebab Case** ?.", + "description": "Convert strings between 13 naming conventions: Snake case, Camel case, Pascal case, Kebab case, Ada case, Train case, Cobol case, Macro case, Upper case, Lower case, Sentence case, Title case and Dot notation.", + "homepage": "https://jawira.github.io/case-converter/", "keywords": [ + "Ada case", + "Cobol case", + "Macro case", + "Train case", "camel case", + "dot notation", "kebab case", - "snake case" + "lower case", + "pascal case", + "sentence case", + "snake case", + "title case", + "upper case" ], - "time": "2019-03-18T05:59:08+00:00" + "time": "2019-12-15T14:31:43+00:00" }, { "name": "mathmarques/smarty-view", From 0c18535ac1db1b3dd4df88eea725f8c5e7753ccc Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Sun, 23 Feb 2020 17:26:21 +0100 Subject: [PATCH 06/13] Useless parameter --- classes/Config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Config.php b/classes/Config.php index 0da9ada..3598c36 100644 --- a/classes/Config.php +++ b/classes/Config.php @@ -240,7 +240,7 @@ class Config { foreach (get_object_vars($this) as $prop => $value) { $convert = new Convert($prop); - $env = getenv($convert->toSnake(true)); + $env = getenv($convert->toSnake()); if ($env) { $this->$prop = Yaml::parse($env); } From 09bbe3c196d7a3fee1ba5716d1fd24d6df4583df Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Sun, 23 Feb 2020 17:30:34 +0100 Subject: [PATCH 07/13] fixup! Upgrade jawira/case-converter (fixes #262) --- classes/Config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Config.php b/classes/Config.php index 3598c36..367c0cb 100644 --- a/classes/Config.php +++ b/classes/Config.php @@ -240,7 +240,7 @@ class Config { foreach (get_object_vars($this) as $prop => $value) { $convert = new Convert($prop); - $env = getenv($convert->toSnake()); + $env = getenv($convert->toMacro()); if ($env) { $this->$prop = Yaml::parse($env); } From 6b6e571b71b9dd3f17e563e7b0258e68f5063b55 Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Thu, 19 Mar 2020 10:01:55 +0100 Subject: [PATCH 08/13] Explain that the Video class accepts any youtube-dl format string (see #260) --- classes/Video.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/classes/Video.php b/classes/Video.php index b784fe1..9c6adbf 100644 --- a/classes/Video.php +++ b/classes/Video.php @@ -86,6 +86,8 @@ class Video * * @param string $webpageUrl URL of the page containing the video * @param string $requestedFormat Requested video format + * (can be any format string accepted by youtube-dl, + * including selectors like "[height<=720]") * @param string $password Password */ public function __construct($webpageUrl, $requestedFormat = 'best', $password = null) From e2d284399ab23eb6f19386a7245f869692ba00eb Mon Sep 17 00:00:00 2001 From: daCaPo Date: Thu, 27 Feb 2020 14:07:30 +0100 Subject: [PATCH 09/13] Switch from rg3/youtube-dl to ytdl-org/youtube-dl --- classes/Config.php | 2 +- composer.json | 12 ++++++------ composer.lock | 22 +++++++++++----------- config/config.example.yml | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/classes/Config.php b/classes/Config.php index 367c0cb..270d394 100644 --- a/classes/Config.php +++ b/classes/Config.php @@ -27,7 +27,7 @@ class Config * * @var string */ - public $youtubedl = 'vendor/rg3/youtube-dl/youtube_dl/__main__.py'; + public $youtubedl = 'vendor/ytdl-org/youtube-dl/youtube_dl/__main__.py'; /** * python binary path. diff --git a/composer.json b/composer.json index fe1bd53..64d3ec8 100644 --- a/composer.json +++ b/composer.json @@ -27,12 +27,12 @@ "phpro/grumphp": "^0.17.0", "phpstan/phpstan": "~0.9.2", "phpunit/phpunit": "^8.4", - "rg3/youtube-dl": "^2020.01", "roave/security-advisories": "dev-master", "smarty-gettext/smarty-gettext": "^1.6", "squizlabs/php_codesniffer": "^3.5", "symfony/debug": "^4.0", - "symfony/var-dumper": "^4.0" + "symfony/var-dumper": "^4.0", + "ytdl-org/youtube-dl": "^2020.02" }, "extra": { "paas": { @@ -49,11 +49,11 @@ { "type": "package", "package": { - "name": "rg3/youtube-dl", - "version": "2020.01.24", + "name": "ytdl-org/youtube-dl", + "version": "2020.02.16", "dist": { "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2020.01.24.zip" + "url": "https://github.com/ytdl-org/youtube-dl/archive/2020.02.16.zip" } } }, @@ -104,7 +104,7 @@ "tsmarty2c.php templates > i18n/template.pot", "xgettext --omit-header -kt -j -o i18n/template.pot classes/*.php classes/*/*.php controllers/*" ], - "youtube-dl": "vendor/rg3/youtube-dl/youtube_dl/__main__.py" + "youtube-dl": "vendor/ytdl-org/youtube-dl/youtube_dl/__main__.py" }, "config": { "sort-packages": true, diff --git a/composer.lock b/composer.lock index 68da680..680a092 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5d5031247a278c06162e69efb70e4b92", + "content-hash": "bcc40aec18060593e21a8157b07c4f55", "packages": [ { "name": "aura/session", @@ -486,7 +486,7 @@ "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/FontFaceKit/open-sans.git", + "url": "git@github.com:FontFaceKit/open-sans.git", "reference": "2285c0300e6a4c8b102b98fb030fb38c26aa081c" }, "dist": { @@ -4142,15 +4142,6 @@ ], "time": "2018-11-20T15:27:04+00:00" }, - { - "name": "rg3/youtube-dl", - "version": "2020.01.24", - "dist": { - "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2020.01.24.zip" - }, - "type": "library" - }, { "name": "roave/security-advisories", "version": "dev-master", @@ -6023,6 +6014,15 @@ "validate" ], "time": "2019-11-24T13:36:37+00:00" + }, + { + "name": "ytdl-org/youtube-dl", + "version": "2020.02.16", + "dist": { + "type": "zip", + "url": "https://github.com/ytdl-org/youtube-dl/archive/2020.02.16.zip" + }, + "type": "library" } ], "aliases": [], diff --git a/config/config.example.yml b/config/config.example.yml index fdf5595..7bf520c 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -1,6 +1,6 @@ --- # Path to your youtube-dl binary -youtubedl: vendor/rg3/youtube-dl/youtube_dl/__main__.py +youtubedl: vendor/ytdl-org/youtube-dl/youtube_dl/__main__.py # Path to your python binary python: /usr/bin/python From c3b45fe128f679865ff11d55f5ac0fa317fc2f96 Mon Sep 17 00:00:00 2001 From: daCaPo Date: Thu, 27 Feb 2020 14:12:08 +0100 Subject: [PATCH 10/13] Switch to ytdl-org/youtube-dl --- templates/inc/footer.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/inc/footer.tpl b/templates/inc/footer.tpl index dd4ec6f..2a889ca 100644 --- a/templates/inc/footer.tpl +++ b/templates/inc/footer.tpl @@ -23,7 +23,7 @@ · - {$youtubedl=" + {$youtubedl=" youtube-dl "} {t params=['@youtubedl'=>$youtubedl]}Based on @youtubedl{/t} From 20c10a36a3aa9eb35b3caf7913d8a4bb5760c766 Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Thu, 19 Mar 2020 10:16:26 +0100 Subject: [PATCH 11/13] Validate Composer files with GrumPHP --- grumphp.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/grumphp.yml b/grumphp.yml index 0ff23bb..466e31a 100644 --- a/grumphp.yml +++ b/grumphp.yml @@ -5,6 +5,7 @@ parameters: jsonlint: ~ xmllint: ~ yamllint: ~ + composer: ~ phpcs: standard: PSR12 ignore_patterns: From 74bb14cffea5be1ed5dc31429d2bbea3740d9f12 Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Thu, 19 Mar 2020 10:19:36 +0100 Subject: [PATCH 12/13] youtube-dl doc has moved --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c268e39..a1fcbcc 100644 --- a/README.md +++ b/README.md @@ -181,7 +181,7 @@ We also provide a JSON API that you can use like this: [/json?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ](https://alltubedownload.net/json?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ) It returns a JSON object generated by youtube-dl. -You can find a list of all the properties [in the youtube-dl documentation](https://github.com/rg3/youtube-dl#output-template). +You can find a list of all the properties [in the youtube-dl documentation](https://github.com/ytdl-org/youtube-dl#output-template). ## FAQ From d910c2b47f6a40ddb1c64f72f65a425e3e85d613 Mon Sep 17 00:00:00 2001 From: Pierre Rudloff Date: Thu, 19 Mar 2020 10:29:28 +0100 Subject: [PATCH 13/13] New Turkish locale (provided by @urasbey) --- classes/LocaleManager.php | 2 +- i18n/tr_TR/LC_MESSAGES/Alltube.po | 247 ++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 i18n/tr_TR/LC_MESSAGES/Alltube.po diff --git a/classes/LocaleManager.php b/classes/LocaleManager.php index 3364740..e34e6f5 100644 --- a/classes/LocaleManager.php +++ b/classes/LocaleManager.php @@ -21,7 +21,7 @@ class LocaleManager * * @var array */ - private $supportedLocales = ['en_US', 'fr_FR', 'zh_CN', 'es_ES', 'pt_BR', 'de_DE', 'ar', 'pl_PL']; + private $supportedLocales = ['en_US', 'fr_FR', 'zh_CN', 'es_ES', 'pt_BR', 'de_DE', 'ar', 'pl_PL', 'tr_TR']; /** * Current locale. diff --git a/i18n/tr_TR/LC_MESSAGES/Alltube.po b/i18n/tr_TR/LC_MESSAGES/Alltube.po new file mode 100644 index 0000000..52f9e5f --- /dev/null +++ b/i18n/tr_TR/LC_MESSAGES/Alltube.po @@ -0,0 +1,247 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: POEditor.com\n" +"Project-Id-Version: Alltube\n" +"Language: tr\n" + +#: templates/playlist.tpl:13 +msgid "Videos extracted from @title:" +msgstr "@title`dan çıkarılan videolar." + +#: templates/playlist.tpl:38 templates/password.tpl:11 templates/index.tpl:19 +#: templates/info.tpl:98 +msgid "Download" +msgstr "İndir" + +#: templates/playlist.tpl:39 +msgid "More options" +msgstr "Daha fazla seçenek" + +#: templates/inc/header.tpl:4 +msgid "Switch language" +msgstr "Dil Değiştir" + +#: templates/inc/header.tpl:8 +msgid "Set language" +msgstr "Dil Ayarla" + +#: templates/inc/footer.tpl:8 +msgid "Code by @dev" +msgstr "Kodlama " + +#: templates/inc/footer.tpl:16 +msgid "Design by @designer" +msgstr "Tasarım " + +#: templates/inc/footer.tpl:21 +msgid "Get the code" +msgstr "Kodu edin" + +#: templates/inc/footer.tpl:29 +msgid "Based on @youtubedl" +msgstr "Altyapı " + +#: templates/inc/footer.tpl:33 +msgid "Donate using Liberapay" +msgstr "Liberapay kullanarak bağış yapın" + +#: templates/inc/footer.tpl:35 +msgid "Donate" +msgstr "Bağış" + +#: templates/password.tpl:5 +msgid "This video is protected" +msgstr "Bu video parola korumalı" + +#: templates/password.tpl:6 +msgid "You need a password in order to download this video." +msgstr "Bu videoyu indirmek için bir parolaya ihtiyacınız var." + +#: templates/password.tpl:8 +msgid "Video password" +msgstr "Video parolası" + +#: templates/index.tpl:8 +msgid "Copy here the URL of your video (Youtube, Dailymotion, etc.)" +msgstr "Videonuzun URL'sini buraya kopyalayın (Youtube, Dailymotion, vb.)" + +#: templates/index.tpl:25 +msgid "Audio only (MP3)" +msgstr "Sadece ses (MP3)" + +#: templates/index.tpl:28 +msgid "From" +msgstr "Başlangıç" + +#: templates/index.tpl:29 +msgid "to" +msgstr "Bitiş" + +#: templates/index.tpl:36 +msgid "See all supported websites" +msgstr "Desteklenen tüm web sitelerini görün" + +#: templates/index.tpl:38 +msgid "Drag this to your bookmarks bar:" +msgstr "Bunu yer işaretleri çubuğunuza sürükleyin:" + +#: templates/index.tpl:39 +msgid "Bookmarklet" +msgstr "Bookmarklet" + +#: templates/info.tpl:13 +msgid "You are going to download @title." +msgstr "@title İndirilecek." + +#: templates/info.tpl:31 +msgid "Available formats:" +msgstr "Kullanılabilir dosya biçimleri:" + +#: templates/info.tpl:33 +msgid "Generic formats" +msgstr "Genel biçimler" + +#: templates/info.tpl:38 +msgid "Detailed formats" +msgstr "Ayrıntılı biçimler" + +#: templates/info.tpl:80 +msgid "Stream the video through the server" +msgstr "Videoyu sunucu üzerinden aktarın" + +#: templates/info.tpl:85 +msgid "Convert into a custom format:" +msgstr "Özel bir biçime dönüştürün:" + +#: templates/info.tpl:86 +msgid "Custom format" +msgstr "Özel biçim" + +#: templates/info.tpl:86 +msgid "Format to convert to" +msgstr "Dönüştürülecek biçim" + +#: templates/info.tpl:91 +msgid "with" +msgstr "ile" + +#: templates/info.tpl:92 +msgid "Bit rate" +msgstr "Bit hızı" + +#: templates/info.tpl:93 +msgid "Custom bitrate" +msgstr "Özel bit hızı" + +#: templates/info.tpl:95 +msgid "kbit/s audio" +msgstr "kbit/s ses" + +#: templates/error.tpl:5 +msgid "An error occurred" +msgstr "Bir hata oluştu" + +#: templates/error.tpl:6 +msgid "Please check the URL of your video." +msgstr "Lütfen videonuzun URL'sini kontrol edin." + +#: templates/extractors.tpl:4 controllers/FrontController.php:109 +msgid "Supported websites" +msgstr "Desteklenen web siteleri" + +#: classes/Config.php:158 +msgid "Best" +msgstr "En İyi" + +#: classes/Config.php:159 +msgid "Remux best video with best audio" +msgstr "En kaliteli görüntüyü en kalitesli sesle birleştirin" + +#: classes/Config.php:160 +msgid "Worst" +msgstr "En Kötü" + +#: classes/Video.php:159 +msgid "Wrong password" +msgstr "Hatalı parola" + +#: classes/Video.php:250 +msgid "youtube-dl returned an empty URL." +msgstr "youtube-dl boş bir URL döndürdü." + +#: classes/Video.php:361 classes/Video.php:465 +msgid "Can't find avconv or ffmpeg at @path." +msgstr "@path yolunda avconv veya ffmpeg bulunamıyor." + +#: classes/Video.php:377 +msgid "Invalid start time: @from." +msgstr "Hatalı başlangıç zamanı: @from." + +#: classes/Video.php:384 +msgid "Invalid end time: @to." +msgstr "Hatalı bitiş zamanı: @to." + +#: classes/Video.php:430 +msgid "Conversion of playlists is not supported." +msgstr "Oynatma listelerinin dönüştürülmesi desteklenmiyor." + +#: classes/Video.php:435 classes/Video.php:578 +msgid "Conversion of M3U8 files is not supported." +msgstr "M3U8 dosyaların dönüştürülmesi desteklenmiyor." + +#: classes/Video.php:437 +msgid "Conversion of DASH segments is not supported." +msgstr "DASH segmentleri desteklenmiyor." + +#: classes/Video.php:446 classes/Video.php:488 classes/Video.php:525 +#: classes/Video.php:558 classes/Video.php:586 +msgid "Could not open popen stream." +msgstr "Popen akışı açılamadı." + +#: classes/Video.php:506 +msgid "This video does not have two URLs." +msgstr "Bu videonun iki URL'si yok." + +#: controllers/DownloadController.php:215 +msgid "You need to enable remux mode to merge two formats." +msgstr "İki biçimi birleştirmek için remux modunu etkinleştirmeniz gerekir." + +#: controllers/DownloadController.php:255 +msgid "Can't find URL of video." +msgstr "Video URL'si bulunamadı." + +#: controllers/FrontController.php:64 +msgid "Easily download videos from Youtube, Dailymotion, Vimeo and other websites." +msgstr "Youtube, Dailymotion, Vimeo ve diğer web sitelerinden videoları kolayca indirin." + +#: controllers/FrontController.php:110 +msgid "List of all supported websites from which Alltube Download can extract video or audio files" +msgstr "Alltube Download'un video veya ses dosyalarını indirebileceğiniz, desteklenen tüm web sitelerinin listesi" + +#: controllers/FrontController.php:136 +msgid "Password prompt" +msgstr "Parola istemi" + +#: controllers/FrontController.php:138 +msgid "You need a password in order to download this video with Alltube Download" +msgstr "Bu videoyu Alltube Download ile indirmek için bir parolaya ihtiyacınız var" + +#: controllers/FrontController.php:169 +msgid "Video download" +msgstr "Video indirme" + +#: controllers/FrontController.php:171 +msgid "Download video from @extractor" +msgstr "@extractor kaynağından video indiriliyor" + +#: controllers/FrontController.php:177 +msgid "Download @title from @extractor" +msgstr "@extractor kaynağından @title indiriliyor." + +#: controllers/FrontController.php:253 controllers/FrontController.php:284 +msgid "Error" +msgstr "Hata" +