diff --git a/CHANGELOG-4.4.md b/CHANGELOG-4.4.md index c16001b9e6c21..a265a13db9965 100644 --- a/CHANGELOG-4.4.md +++ b/CHANGELOG-4.4.md @@ -7,6 +7,17 @@ in 4.4 minor versions. To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v4.4.0...v4.4.1 +* 4.4.48 (2022-10-28) + + * bug #47907 [Console] Update Application.php (aleksandr-shevchenko) + * bug #47932 Throw LogicException instead of Error when trying to generate logout-… (addiks) + * bug #47857 [HttpKernel] Fix empty request stack when terminating with exception (krzyc) + * bug #47878 [HttpKernel] Remove EOL when using error_log() in HttpKernel Logger (cyve) + * bug #47883 [Console] Fix error output on windows cli (Maximilian.Beckers) + * bug #47884 [Cache] Reserve numeric keys when doing memory leak prevention (simoheinonen) + * bug #47822 [Mailer] fix: use message object from event (rogamoore) + * bug #47858 [DoctrineBridge] Implement `EventManager::getAllListeners()` (derrabus) + * 4.4.47 (2022-10-12) * bug #47621 [Serializer] Allow getting discriminated type by class name (TamasSzigeti) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index baf049c540d1d..72ef68321528f 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -47,9 +47,9 @@ The Symfony Connect username in parenthesis allows to get more information - Jean-François Simon (jfsimon) - Benjamin Eberlei (beberlei) - Igor Wiedler + - HypeMC (hypemc) - Valentin Udaltsov (vudaltsov) - Vasilij Duško (staff) - - HypeMC (hypemc) - Matthias Pigulla (mpdude) - Laurent VOULLEMIER (lvo) - Antoine Makdessi (amakdessi) @@ -64,6 +64,7 @@ The Symfony Connect username in parenthesis allows to get more information - Alexander Schranz (alexander-schranz) - ornicar - Dany Maillard (maidmaid) + - Mathieu Santostefano (welcomattic) - Eriksen Costa - Diego Saint Esteben (dosten) - stealth35 ‏ (stealth35) @@ -72,7 +73,6 @@ The Symfony Connect username in parenthesis allows to get more information - Francis Besset (francisbesset) - Alexandre Daubois (alexandre-daubois) - Vasilij Dusko | CREATION - - Mathieu Santostefano (welcomattic) - Bulat Shakirzyanov (avalanche123) - Iltar van der Berg - Miha Vrhovnik (mvrhov) @@ -112,17 +112,17 @@ The Symfony Connect username in parenthesis allows to get more information - Przemysław Bogusz (przemyslaw-bogusz) - Henrik Westphal (snc) - Dariusz Górecki (canni) + - Mathieu Lechat (mat_the_cat) - Maxime Helias (maxhelias) - Ener-Getick - Ruud Kamphuis (ruudk) - - Mathieu Lechat (mat_the_cat) + - Antoine Lamirault - Sebastiaan Stok (sstok) - Jérôme Vasseur (jvasseur) - Ion Bazan (ionbazan) - Lee McDermott - Brandon Turner - Luis Cordova (cordoval) - - Antoine Lamirault - Daniel Holmes (dholmes) - Toni Uebernickel (havvg) - Bart van den Burg (burgov) @@ -177,12 +177,13 @@ The Symfony Connect username in parenthesis allows to get more information - HeahDude - Richard van Laak (rvanlaak) - Paráda József (paradajozsef) + - Christopher Hertel (chertel) - Alessandro Lai (jean85) - Alexander Schwenn (xelaris) - Fabien Pennequin (fabienpennequin) - Gordon Franke (gimler) - François-Xavier de Guillebon (de-gui_f) - - Christopher Hertel (chertel) + - Andreas Schempp (aschempp) - Gabriel Caruso - Anthony GRASSIOT (antograssiot) - Jan Rosier (rosier) @@ -196,7 +197,6 @@ The Symfony Connect username in parenthesis allows to get more information - Tigran Azatyan (tigranazatyan) - Eric GELOEN (gelo) - Matthieu Napoli (mnapoli) - - Andreas Schempp (aschempp) - Tomáš Votruba (tomas_votruba) - Joshua Thijssen - Stefano Sala (stefano.sala) @@ -223,16 +223,17 @@ The Symfony Connect username in parenthesis allows to get more information - Daniel Gomes (danielcsgomes) - Michael Käfer (michael_kaefer) - Hidenori Goto (hidenorigoto) + - Dāvis Zālītis (k0d3r1s) - Albert Casademont (acasademont) - Arnaud Kleinpeter (nanocom) - Guilherme Blanco (guilhermeblanco) - Chi-teck - Michael Voříšek + - Farhad Safarov (safarov) - SpacePossum - Pablo Godel (pgodel) - Romaric Drigon (romaricdrigon) - Andréia Bohner (andreia) - - Dāvis Zālītis (k0d3r1s) - Jannik Zschiesche - Rafael Dohms (rdohms) - George Mponos (gmponos) @@ -243,7 +244,6 @@ The Symfony Connect username in parenthesis allows to get more information - David Prévot - Vincent Touzet (vincenttouzet) - Fabien Bourigault (fbourigault) - - Farhad Safarov (safarov) - Jérémy Derussé - Nicolas Philippe (nikophil) - Hubert Lenoir (hubert_lenoir) @@ -262,6 +262,7 @@ The Symfony Connect username in parenthesis allows to get more information - Andre Rømcke (andrerom) - Dmitrii Poddubnyi (karser) - soyuka + - Sergey (upyx) - Rouven Weßling (realityking) - BoShurik - Zmey @@ -287,13 +288,13 @@ The Symfony Connect username in parenthesis allows to get more information - Artur Kotyrba - Tyson Andre - Thomas Landauer (thomas-landauer) + - Phil Taylor (prazgod) - GDIBass - Samuel NELA (snela) - dFayet - Karoly Gossler (connorhu) - Vincent AUBERT (vincent) - Sebastien Morel (plopix) - - Sergey (upyx) - Yoann RENARD (yrenard) - Thomas Lallement (raziel057) - Timothée Barray (tyx) @@ -334,6 +335,7 @@ The Symfony Connect username in parenthesis allows to get more information - Islam Israfilov (islam93) - Oleg Andreyev (oleg.andreyev) - Daniel Gorgan + - Sébastien Alfaiate (seb33300) - Hendrik Luup (hluup) - Martin Herndl (herndlm) - Ruben Gonzalez (rubenrua) @@ -361,7 +363,6 @@ The Symfony Connect username in parenthesis allows to get more information - Philipp Wahala (hifi) - Nikolay Labinskiy (e-moe) - Martin Schuhfuß (usefulthink) - - Phil Taylor (prazgod) - apetitpa - Vladyslav Loboda - Pierre Minnieur (pminnieur) @@ -399,7 +400,6 @@ The Symfony Connect username in parenthesis allows to get more information - Tristan Darricau (tristandsensio) - Fabien S (bafs) - Victor Bocharsky (bocharsky_bw) - - Sébastien Alfaiate (seb33300) - Jan Sorgalla (jsor) - henrikbjorn - Alex Bowers @@ -409,6 +409,7 @@ The Symfony Connect username in parenthesis allows to get more information - Craig Duncan (duncan3dc) - Mantis Development - Pablo Lozano (arkadis) + - Romain Monteil (ker0x) - quentin neyrat (qneyrat) - Antonio Jose Cerezo (ajcerezo) - Marcin Szepczynski (czepol) @@ -496,7 +497,6 @@ The Symfony Connect username in parenthesis allows to get more information - Thomas Schulz (king2500) - Benjamin Morel - Bernd Stellwag - - Romain Monteil (ker0x) - Frank de Jonge - Chris Tanaskoski - julien57 @@ -531,6 +531,7 @@ The Symfony Connect username in parenthesis allows to get more information - Giso Stallenberg (gisostallenberg) - Blanchon Vincent (blanchonvincent) - William Arslett (warslett) + - Jérémy REYNAUD (babeuloula) - Christian Schmidt - Gonzalo Vilaseca (gonzalovilaseca) - Vadim Borodavko (javer) @@ -721,7 +722,6 @@ The Symfony Connect username in parenthesis allows to get more information - Guillaume Verstraete - vladimir.panivko - Jason Tan (jt2k) - - Jérémy REYNAUD (babeuloula) - Costin Bereveanu (schniper) - kick-the-bucket - Marek Kalnik (marekkalnik) @@ -834,12 +834,15 @@ The Symfony Connect username in parenthesis allows to get more information - Daniel González (daniel.gonzalez) - Renan (renanbr) - Webnet team (webnet) + - Tobias Bönner - Berny Cantos (xphere81) - Mátyás Somfai (smatyas) - Jan Schumann + - Matheo Daninos (mathdns) - Niklas Fiekas - Mark Challoner (markchalloner) - Markus Bachmann (baachi) + - Philippe SEGATORI (tigitz) - Roger Guasch (rogerguasch) - Luis Tacón (lutacon) - Alex Hofbauer (alexhofbauer) @@ -933,11 +936,13 @@ The Symfony Connect username in parenthesis allows to get more information - Vicent Soria Durá (vicentgodella) - Michael Moravec - Anthony Ferrara + - Glodzienski - Christian Gripp (core23) - Marcel Hernandez - Ioan Negulescu - Jakub Škvára (jskvara) - Andrew Udvare (audvare) + - Volodymyr Panivko - alexpods - Dennis Langen (nijusan) - Adam Szaraniec @@ -1051,7 +1056,6 @@ The Symfony Connect username in parenthesis allows to get more information - Grégoire Hébert (gregoirehebert) - alcaeus - Fred Cox - - Matheo Daninos (mathdns) - Iliya Miroslavov Iliev (i.miroslavov) - Safonov Nikita (ns3777k) - Simon DELICATA @@ -1081,7 +1085,6 @@ The Symfony Connect username in parenthesis allows to get more information - pizzaminded - Matthieu Calie (matth--) - Stéphane Escandell (sescandell) - - Philippe SEGATORI (tigitz) - ivan - linh - Oleg Krasavin (okwinza) @@ -1353,7 +1356,6 @@ The Symfony Connect username in parenthesis allows to get more information - Grinbergs Reinis (shima5) - Ruud Arentsen - Harald Tollefsen - - Tobias Bönner - Arend-Jan Tetteroo - Mbechezi Nawo - Andre Eckardt (korve) @@ -1433,6 +1435,7 @@ The Symfony Connect username in parenthesis allows to get more information - Gladhon - Kai - Bartłomiej Zając + - Maximilian.Beckers - Grégoire Penverne (gpenverne) - Venu - Jonatan Männchen @@ -1545,7 +1548,6 @@ The Symfony Connect username in parenthesis allows to get more information - Vitali Tsyrkin - Juga Paazmaya - afaricamp - - Glodzienski - riadh26 - Konstantinos Alexiou - Dilek Erkut @@ -1737,7 +1739,6 @@ The Symfony Connect username in parenthesis allows to get more information - Antoine M - Frank Jogeleit - Ondřej Frei - - Volodymyr Panivko - Jenne van der Meer - Storkeus - Anton Zagorskii @@ -1793,6 +1794,7 @@ The Symfony Connect username in parenthesis allows to get more information - Morgan Auchede - Christian Morgan - Alexander Miehe + - Simon (kosssi) - Sascha Dens (saschadens) - Maxime Aknin (3m1x4m) - Geordie @@ -1976,6 +1978,7 @@ The Symfony Connect username in parenthesis allows to get more information - Anton Dyshkant - Kirill Nesmeyanov (serafim) - Reece Fowell (reecefowell) + - Muhammad Aakash - Guillaume Gammelin - Valérian Galliat - d-ph @@ -2064,6 +2067,7 @@ The Symfony Connect username in parenthesis allows to get more information - Ariel J. Birnbaum - Danijel Obradović - Pablo Borowicz + - Ondřej Frei - Máximo Cuadros (mcuadros) - Lukas Mencl - EXT - THERAGE Kevin @@ -2207,6 +2211,7 @@ The Symfony Connect username in parenthesis allows to get more information - David de Boer (ddeboer) - Eno Mullaraj (emullaraj) - Stephan Vock (glaubinix) + - Guillem Fondin (guillemfondin) - Ryan Rogers - Arnaud - Klaus Purer @@ -2258,6 +2263,7 @@ The Symfony Connect username in parenthesis allows to get more information - gndk - Alberto Aldegheri - Dalibor Karlović + - Cyril Vermandé (cyve) - Dmitri Petmanson - heccjj - Alexandre Melard @@ -2331,6 +2337,7 @@ The Symfony Connect username in parenthesis allows to get more information - Clément LEFEBVRE (nemoneph) - Walter Dal Mut (wdalmut) - abluchet + - PabloKowalczyk - Matthieu - Albin Kerouaton - Sébastien HOUZÉ @@ -2372,6 +2379,7 @@ The Symfony Connect username in parenthesis allows to get more information - Sandro Hopf (senaria) - ChrisC - jack.shpartko + - Willem Verspyck - Kim Laï Trinh - Jason Desrosiers - m.chwedziak @@ -2386,6 +2394,7 @@ The Symfony Connect username in parenthesis allows to get more information - Ilya Biryukov (ibiryukov) - Roma (memphys) - Giorgio Premi + - Krzysztof Pyrkosz - ncou - Ian Carroll - caponica @@ -2418,6 +2427,7 @@ The Symfony Connect username in parenthesis allows to get more information - Emmanuel Vella (emmanuel.vella) - Guillaume BRETOU (guiguiboy) - Ibon Conesa (ibonkonesa) + - Yoann Chocteau (kezaweb) - nuryagdy mustapayev (nueron) - Carsten Nielsen (phreaknerd) - Jay Severson @@ -2443,6 +2453,7 @@ The Symfony Connect username in parenthesis allows to get more information - Pieter Jordaan - Tournoud (damientournoud) - Michael Dowling (mtdowling) + - Arnaud POINTET (oipnet) - Karlos Presumido (oneko) - Tony Vermeiren (tony) - Thomas Counsell @@ -2490,6 +2501,7 @@ The Symfony Connect username in parenthesis allows to get more information - James Cowgill - sensio - Julien Menth (cfjulien) + - Lyubomir Grozdanov (lubo13) - Nicolas Schwartz (nicoschwartz) - Tim Jabs (rubinum) - Stéphane Seng (stephaneseng) @@ -2541,6 +2553,7 @@ The Symfony Connect username in parenthesis allows to get more information - Alex Teterin (errogaht) - Gunnar Lium (gunnarlium) - Malte Wunsch (maltewunsch) + - Simo Heinonen (simoheinonen) - Tiago Garcia (tiagojsag) - Artiom - Jakub Simon @@ -2571,6 +2584,7 @@ The Symfony Connect username in parenthesis allows to get more information - Boris Betzholz - Eric Caron - Arnau González + - GurvanVgx - 2manypeople - Wing - Thomas Bibb @@ -2713,6 +2727,7 @@ The Symfony Connect username in parenthesis allows to get more information - Milos Colakovic (project2481) - Rénald Casagraude (rcasagraude) - Robin Duval (robin-duval) + - Mohammad Ali Sarbanha (sarbanha) - Artem Lopata (bumz) - alex - Roman Orlov @@ -2849,6 +2864,7 @@ The Symfony Connect username in parenthesis allows to get more information - Jelle Kapitein - Jochen Mandl - Marin Nicolae + - Gerrit Addiks - Albert Prat - Alessandro Loffredo - Ian Phillips @@ -2910,6 +2926,7 @@ The Symfony Connect username in parenthesis allows to get more information - Tomáš Polívka (draczris) - Dennis Smink (dsmink) - Franz Liedke (franzliedke) + - Alex (garrett) - Gaylord Poillon (gaylord_p) - gondo (gondo) - Joris Garonian (grifx) @@ -2955,6 +2972,7 @@ The Symfony Connect username in parenthesis allows to get more information - Francois Martin - Saem Ghani - Stefan Oderbolz + - Tamás Szigeti - Gabriel Moreira - Alexey Popkov - ChS @@ -2975,7 +2993,6 @@ The Symfony Connect username in parenthesis allows to get more information - HADJEDJ Vincent (hadjedjvincent) - Daniele Cesarini (ijanki) - Ismail Asci (ismailasci) - - Simon (kosssi) - Ondřej Mirtes (mirtes) - Paulius Jarmalavičius (pjarmalavicius) - Ramon Ornelas (ramonornela) @@ -3020,6 +3037,7 @@ The Symfony Connect username in parenthesis allows to get more information - Vyacheslav Slinko - Benjamin Laugueux - Jakub Chábek + - William Pinaud (DocFX) - Johannes - Jörg Rühl - wesleyh @@ -3067,6 +3085,7 @@ The Symfony Connect username in parenthesis allows to get more information - Skorney - Lucas Matte - fmarchalemisys + - MGatner - mieszko4 - Steve Preston - ibasaw @@ -3265,6 +3284,7 @@ The Symfony Connect username in parenthesis allows to get more information - Konstantin Scheumann - Michael - fh-github@fholzhauer.de + - rogamoore - AbdElKader Bouadjadja - DSeemiller - Jan Emrich diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md index 67b5ef02c3787..17dbdc4759b88 100644 --- a/UPGRADE-5.0.md +++ b/UPGRADE-5.0.md @@ -525,10 +525,6 @@ Serializer were removed, use the default context instead. * The `AbstractNormalizer::handleCircularReference()` method has two new `$format` and `$context` arguments. * Removed support for instantiating a `DataUriNormalizer` with a default MIME type guesser when the `symfony/mime` component isn't installed. - -Serializer ----------- - * Removed the `XmlEncoder::TYPE_CASE_ATTRIBUTES` constant. Use `XmlEncoder::TYPE_CAST_ATTRIBUTES` instead. Stopwatch diff --git a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php index 48385c93ac19e..bb0f62a95c76f 100644 --- a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php +++ b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php @@ -72,15 +72,23 @@ public function dispatchEvent($eventName, EventArgs $eventArgs = null) */ public function getListeners($event = null) { + if (null === $event) { + return $this->getAllListeners(); + } if (!$this->initializedSubscribers) { $this->initializeSubscribers(); } - if (null !== $event) { - if (!isset($this->initialized[$event])) { - $this->initializeListeners($event); - } + if (!isset($this->initialized[$event])) { + $this->initializeListeners($event); + } - return $this->listeners[$event]; + return $this->listeners[$event]; + } + + public function getAllListeners(): array + { + if (!$this->initializedSubscribers) { + $this->initializeSubscribers(); } foreach ($this->listeners as $event => $listeners) { diff --git a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php index e9d260ec26608..868fc25cf6151 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php @@ -165,6 +165,15 @@ public function testGetListeners() $this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners()['foo'])); } + public function testGetAllListeners() + { + $this->container->set('lazy', $listener1 = new MyListener()); + $this->evm->addEventListener('foo', 'lazy'); + $this->evm->addEventListener('foo', $listener2 = new MyListener()); + + $this->assertSame([$listener1, $listener2], array_values($this->evm->getAllListeners()['foo'])); + } + public function testRemoveEventListener() { $this->container->set('lazy', $listener1 = new MyListener()); diff --git a/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php b/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php index 3d950f9352756..fd263da3cd58f 100644 --- a/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php @@ -204,7 +204,7 @@ protected function doInvalidate(array $tagIds): bool // and removes the linked items. When the set is still not empty after // the scan, it means we're in cluster mode and that the linked items // are on other nodes: we move the links to a temporary set and we - // gargage collect that set from the client side. + // garbage collect that set from the client side. $lua = <<<'EOLUA' redis.replicate_commands() diff --git a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php index 01f17fdb8a729..60449e1d24bcc 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php @@ -331,6 +331,19 @@ public function testNullByteInKey() $this->assertSame(123, $cache->getItem("a\0b")->get()); } + + public function testNumericKeysWorkAfterMemoryLeakPrevention() + { + $cache = $this->createCachePool(0, __FUNCTION__); + + for ($i = 0; $i < 1001; ++$i) { + $cacheItem = $cache->getItem((string) $i); + $cacheItem->set('value-'.$i); + $cache->save($cacheItem); + } + + $this->assertEquals('value-50', $cache->getItem((string) 50)->get()); + } } class NotUnserializable diff --git a/src/Symfony/Component/Cache/Traits/AbstractTrait.php b/src/Symfony/Component/Cache/Traits/AbstractTrait.php index f4902917d38b0..b047880661ff9 100644 --- a/src/Symfony/Component/Cache/Traits/AbstractTrait.php +++ b/src/Symfony/Component/Cache/Traits/AbstractTrait.php @@ -290,7 +290,7 @@ private function getId($key): string $this->ids[$key] = $key; if (\count($this->ids) > 1000) { - array_splice($this->ids, 0, 500); // stop memory leak if there are many keys + $this->ids = \array_slice($this->ids, 500, null, true); // stop memory leak if there are many keys } if (null === $this->maxIdLength) { diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php index 1021a900f0972..42c4911a0f888 100644 --- a/src/Symfony/Component/Console/Application.php +++ b/src/Symfony/Component/Console/Application.php @@ -254,7 +254,9 @@ public function doRun(InputInterface $input, OutputInterface $output) $alternative = $alternatives[0]; $style = new SymfonyStyle($input, $output); - $style->block(sprintf("\nCommand \"%s\" is not defined.\n", $name), null, 'error'); + $output->writeln(''); + $formattedBlock = (new FormatterHelper())->formatBlock(sprintf('Command "%s" is not defined.', $name), 'error', true); + $output->writeln($formattedBlock); if (!$style->confirm(sprintf('Do you want to run "%s" instead? ', $alternative), false)) { if (null !== $this->dispatcher) { $event = new ConsoleErrorEvent($input, $output, $e); @@ -955,11 +957,21 @@ protected function configureIO(InputInterface $input, OutputInterface $output) } switch ($shellVerbosity = (int) getenv('SHELL_VERBOSITY')) { - case -1: $output->setVerbosity(OutputInterface::VERBOSITY_QUIET); break; - case 1: $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); break; - case 2: $output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE); break; - case 3: $output->setVerbosity(OutputInterface::VERBOSITY_DEBUG); break; - default: $shellVerbosity = 0; break; + case -1: + $output->setVerbosity(OutputInterface::VERBOSITY_QUIET); + break; + case 1: + $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); + break; + case 2: + $output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE); + break; + case 3: + $output->setVerbosity(OutputInterface::VERBOSITY_DEBUG); + break; + default: + $shellVerbosity = 0; + break; } if (true === $input->hasParameterOption(['--quiet', '-q'], true)) { diff --git a/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php b/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php index 7917f4a543da9..e5056d897fc9d 100644 --- a/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php +++ b/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php @@ -15,7 +15,7 @@ * A list of choices with arbitrary data types. * * The user of this class is responsible for assigning string values to the - * choices annd for their uniqueness. + * choices and for their uniqueness. * Both the choices and their values are passed to the constructor. * Each choice must have a corresponding value (with the same key) in * the values array. diff --git a/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf b/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf index e7c90c793ede1..54711cb5f88b0 100644 --- a/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf +++ b/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf @@ -132,7 +132,7 @@ Please enter a valid week. - Lūdzu, ievadiet derīgu nedeļu. + Lūdzu, ievadiet derīgu nedēļu. diff --git a/src/Symfony/Component/Form/Resources/translations/validators.ur.xlf b/src/Symfony/Component/Form/Resources/translations/validators.ur.xlf new file mode 100644 index 0000000000000..1ec61be6d840c --- /dev/null +++ b/src/Symfony/Component/Form/Resources/translations/validators.ur.xlf @@ -0,0 +1,139 @@ + + + + + + This form should not contain extra fields. + اس فارم میں اضافی فیلڈز نہیں ہونی چاہئیں + + + The uploaded file was too large. Please try to upload a smaller file. + اپ لوڈ کردھ فائل بہت بڑی تھی۔ براہ کرم ایک چھوٹی فائل اپ لوڈ کرنے کی کوشش کریں + + + The CSRF token is invalid. Please try to resubmit the form. + ٹوکن غلط ہے۔ براۓ کرم فارم کو دوبارہ جمع کرانے کی کوشش کریں CSRF + + + This value is not a valid HTML5 color. + ر نگ نھیں ھےHTML یھ ولیو در ست + + + Please enter a valid birthdate. + براۓ کرم درست تاریخ پیدائش درج کریں + + + The selected choice is invalid. + منتخب کردہ انتخاب غلط ہے + + + The collection is invalid. + یھ مجموعہ غلط ہے + + + Please select a valid color. + براۓ کرم ایک درست رنگ منتخب کریں + + + Please select a valid country. + براۓ کرم ایک درست ملک منتخب کریں + + + Please select a valid currency. + براۓ کرم ایک درست کرنسی منتخب کریں + + + Please choose a valid date interval. + براۓ کرم ایک درست تاریخی وقفھہ منتخب کریں + + + Please enter a valid date and time. + براۓ کرم ایک درست تاریخ اور وقت درج کریں + + + Please enter a valid date. + براۓ کرم ایک درست تاریخ درج کریں + + + Please select a valid file. + براۓ کرم ایک درست فائل منتخب کریں + + + The hidden field is invalid. + پوشیدھہ فیلڈ غلط ہے + + + Please enter an integer. + براۓ کرم ایک عدد درج کریں + + + Please select a valid language. + براۓ کرم ایک درست زبان منتخب کریں + + + Please select a valid locale. + براۓ کرم ایک درست مقام منتخب کریں + + + Please enter a valid money amount. + براۓ کرم ایک درست رقم درج کریں + + + Please enter a number. + براۓ کرم ایک نمبر درج کریں + + + The password is invalid. + پاس ورڈ غلط ہے + + + Please enter a percentage value. + براہ کرم فیصد کی ويلو درج کریں + + + The values do not match. + ويليوذ ٹھيک نہیں ہیں + + + Please enter a valid time. + براۓ کرم ایک درست وقت درج کریں + + + Please select a valid timezone. + براۓ کرم ایک درست ٹائم زون منتخب کریں + + + Please enter a valid URL. + براۓ کرم ایک درست ادريس درج کریں + + + Please enter a valid search term. + براۓ کرم ایک درست ويلو تلاش کيلۓ درج کریں + + + Please provide a valid phone number. + براۓ کرم ایک درست فون نمبر فراہم کریں + + + The checkbox has an invalid value. + چیک باکس میں ایک غلط ويلو ہے + + + Please enter a valid email address. + براۓ مہربانی قابل قبول ای میل ایڈریس لکھیں + + + Please select a valid option. + براۓ کرم ایک درست آپشن منتخب کریں + + + Please select a valid range. + براۓ کرم ایک درست رینج منتخب کریں + + + Please enter a valid week. + براۓ کرم ایک درست ہفتہ درج کریں + + + + diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc index fd662e3a16236..ef87754235891 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc @@ -54,10 +54,12 @@ ob_start(); class TestSessionHandler extends AbstractSessionHandler { private $data; + private $sessionId; - public function __construct($data = '') + public function __construct($data = '', $sessionId = null) { $this->data = $data; + $this->sessionId = $sessionId; } public function open($path, $name): bool @@ -131,7 +133,13 @@ class TestSessionHandler extends AbstractSessionHandler protected function doRead($sessionId): string { - echo __FUNCTION__.': ', $this->data, "\n"; + if (isset($this->sessionId) && $sessionId !== $this->sessionId) { + echo __FUNCTION__ . ": invalid sessionId\n"; + + return ''; + } + echo __FUNCTION__ . ': ', $this->data, "\n"; + $this->sessionId = $sessionId; return $this->data; } @@ -139,6 +147,7 @@ class TestSessionHandler extends AbstractSessionHandler protected function doWrite($sessionId, $data): bool { echo __FUNCTION__.': ', $data, "\n"; + $this->sessionId = $sessionId; return true; } @@ -146,6 +155,7 @@ class TestSessionHandler extends AbstractSessionHandler protected function doDestroy($sessionId): bool { echo __FUNCTION__, "\n"; + $this->sessionId = ''; return true; } diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected index d825f44f7cb86..95c96f0cccdf7 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected @@ -9,9 +9,8 @@ close open validateId read -doRead: abc|i:123; +doRead: invalid sessionId read -doRead: abc|i:123; write doWrite: abc|i:123; diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected index 8b5fc08bd375b..b7cae201ccb76 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected @@ -8,7 +8,7 @@ close open validateId read -doRead: +doRead: invalid sessionId read write diff --git a/src/Symfony/Component/HttpKernel/HttpKernel.php b/src/Symfony/Component/HttpKernel/HttpKernel.php index d53b80665b467..e23023d3c40ff 100644 --- a/src/Symfony/Component/HttpKernel/HttpKernel.php +++ b/src/Symfony/Component/HttpKernel/HttpKernel.php @@ -112,7 +112,17 @@ public function terminateWithException(\Throwable $exception, Request $request = throw $exception; } - $response = $this->handleThrowable($exception, $request, self::MASTER_REQUEST); + if ($pop = $request !== $this->requestStack->getMasterRequest()) { + $this->requestStack->push($request); + } + + try { + $response = $this->handleThrowable($exception, $request, self::MASTER_REQUEST); + } finally { + if ($pop) { + $this->requestStack->pop(); + } + } $response->sendHeaders(); $response->sendContent(); diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index f944b3d9e6ac6..54ea465379ba1 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -76,11 +76,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private static $freshCache = []; - public const VERSION = '4.4.47'; - public const VERSION_ID = 40447; + public const VERSION = '4.4.48'; + public const VERSION_ID = 40448; public const MAJOR_VERSION = 4; public const MINOR_VERSION = 4; - public const RELEASE_VERSION = 47; + public const RELEASE_VERSION = 48; public const EXTRA_VERSION = ''; public const END_OF_MAINTENANCE = '11/2022'; diff --git a/src/Symfony/Component/HttpKernel/Log/Logger.php b/src/Symfony/Component/HttpKernel/Log/Logger.php index d7f297f5864cd..1238517f64e5d 100644 --- a/src/Symfony/Component/HttpKernel/Log/Logger.php +++ b/src/Symfony/Component/HttpKernel/Log/Logger.php @@ -44,10 +44,14 @@ public function __construct(string $minLevel = null, $output = null, callable $f if (isset($_ENV['SHELL_VERBOSITY']) || isset($_SERVER['SHELL_VERBOSITY'])) { switch ((int) ($_ENV['SHELL_VERBOSITY'] ?? $_SERVER['SHELL_VERBOSITY'])) { - case -1: $minLevel = LogLevel::ERROR; break; - case 1: $minLevel = LogLevel::NOTICE; break; - case 2: $minLevel = LogLevel::INFO; break; - case 3: $minLevel = LogLevel::DEBUG; break; + case -1: $minLevel = LogLevel::ERROR; + break; + case 1: $minLevel = LogLevel::NOTICE; + break; + case 2: $minLevel = LogLevel::INFO; + break; + case 3: $minLevel = LogLevel::DEBUG; + break; } } } @@ -80,7 +84,7 @@ public function log($level, $message, array $context = []) $formatter = $this->formatter; if ($this->handle) { - @fwrite($this->handle, $formatter($level, $message, $context)); + @fwrite($this->handle, $formatter($level, $message, $context).\PHP_EOL); } else { error_log($formatter($level, $message, $context, false)); } @@ -105,7 +109,7 @@ private function format(string $level, string $message, array $context, bool $pr $message = strtr($message, $replacements); } - $log = sprintf('[%s] %s', $level, $message).\PHP_EOL; + $log = sprintf('[%s] %s', $level, $message); if ($prefixDate) { $log = date(\DateTime::RFC3339).' '.$log; } diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php index 53e5f547d249f..a163715f81b22 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php @@ -20,6 +20,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\ControllerDoesNotReturnResponseException; @@ -340,6 +341,22 @@ public function testTerminate() $this->assertEquals($response, $capturedResponse); } + public function testTerminateWithException() + { + $dispatcher = new EventDispatcher(); + $requestStack = new RequestStack(); + $kernel = $this->getHttpKernel($dispatcher, null, $requestStack); + + $dispatcher->addListener(KernelEvents::EXCEPTION, function (ExceptionEvent $event) use (&$capturedRequest, $requestStack) { + $capturedRequest = $requestStack->getCurrentRequest(); + $event->setResponse(new Response()); + }); + + $kernel->terminateWithException(new \Exception('boo'), $request = Request::create('/')); + $this->assertSame($request, $capturedRequest); + $this->assertNull($requestStack->getCurrentRequest()); + } + public function testVerifyRequestStackPushPopDuringHandle() { $request = new Request(); diff --git a/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php b/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php index fb2b43cc82aed..5996e6e72ad35 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php @@ -48,7 +48,7 @@ protected function tearDown(): void public static function assertLogsMatch(array $expected, array $given) { foreach ($given as $k => $line) { - self::assertThat(1 === preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[\+-][0-9]{2}:[0-9]{2} '.preg_quote($expected[$k]).'/', $line), self::isTrue(), "\"$line\" do not match expected pattern \"$expected[$k]\""); + self::assertSame(1, preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[\+-][0-9]{2}:[0-9]{2} '.preg_quote($expected[$k]).'/', $line), "\"$line\" do not match expected pattern \"$expected[$k]\""); } } @@ -186,7 +186,7 @@ public function testContextExceptionKeyCanBeExceptionOrOtherValues() public function testFormatter() { $this->logger = new Logger(LogLevel::DEBUG, $this->tmpFile, function ($level, $message, $context) { - return json_encode(['level' => $level, 'message' => $message, 'context' => $context]).\PHP_EOL; + return json_encode(['level' => $level, 'message' => $message, 'context' => $context]); }); $this->logger->error('An error', ['foo' => 'bar']); @@ -196,6 +196,26 @@ public function testFormatter() '{"level":"warning","message":"A warning","context":{"baz":"bar"}}', ], $this->getLogs()); } + + public function testLogsWithoutOutput() + { + $oldErrorLog = ini_set('error_log', $this->tmpFile); + + $logger = new Logger(); + $logger->error('test'); + $logger->critical('test'); + + $expected = [ + '[error] test', + '[critical] test', + ]; + + foreach ($this->getLogs() as $k => $line) { + $this->assertSame(1, preg_match('/\[[\w\/\-: ]+\] '.preg_quote($expected[$k]).'/', $line), "\"$line\" do not match expected pattern \"$expected[$k]\""); + } + + ini_set('error_log', $oldErrorLog); + } } class DummyTest diff --git a/src/Symfony/Component/Mailer/Transport/AbstractTransport.php b/src/Symfony/Component/Mailer/Transport/AbstractTransport.php index 7ee4513190b33..31dddaa63ace3 100644 --- a/src/Symfony/Component/Mailer/Transport/AbstractTransport.php +++ b/src/Symfony/Component/Mailer/Transport/AbstractTransport.php @@ -61,6 +61,7 @@ public function send(RawMessage $message, Envelope $envelope = null): ?SentMessa $event = new MessageEvent($message, $envelope, (string) $this); $this->dispatcher->dispatch($event); $envelope = $event->getEnvelope(); + $message = $event->getMessage(); } $message = new SentMessage($message, $envelope); diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf index 735de0786567c..ca4401adad3e5 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf @@ -70,6 +70,14 @@ Invalid or expired login link. Yanlış və ya müddəti keçmiş giriş keçidi. + + Too many failed login attempts, please try again in %minutes% minute. + Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın. + + + Too many failed login attempts, please try again in %minutes% minutes. + Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf index bdb4a22357f4b..0833b026f3961 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf @@ -24,7 +24,7 @@ Not privileged to request the resource. - Nav tiesību ši resursa izsaukšanai. + Nav tiesību šī resursa izsaukšanai. Invalid CSRF token. @@ -64,11 +64,11 @@ Too many failed login attempts, please try again later. - Pārāk daudz atteiktu ieejas mēģinājumu, lūdzu, mēģiniet vēlreiz vēlāk. + Pārāk daudz atteiktu autentifikācijas mēģinājumu, lūdzu, mēģiniet vēlreiz vēlāk. Invalid or expired login link. - Ieejas saite ir nederīga vai arī tai ir beidzies derīguma termiņš. + Autentifikācijas saite ir nederīga vai arī tai ir beidzies derīguma termiņš. Too many failed login attempts, please try again in %minutes% minute. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf new file mode 100644 index 0000000000000..8fd59b691b8ee --- /dev/null +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf @@ -0,0 +1,83 @@ + + + + + + An authentication exception occurred. + ایک تصدیقي خرابی پیش آگئی ۓ + + + Authentication credentials could not be found. + درج کردھ ریکارڈ نہیں مل سکا + + + Authentication request could not be processed due to a system problem. + سسٹم کی خرابی کی وجہ سے تصدیق کی درخواست پر کارروائی نہیں ہو سکی + + + Invalid credentials. + غلط ڈیٹا + + + Cookie has already been used by someone else. + کوکی پہلے ہی کسی اور کے ذریعہ استعمال ہو چکی ہے + + + Not privileged to request the resource. + وسائل کی درخواست کرنے کا اختیار نہیں ہے + + + Invalid CSRF token. + ٹوکن غلط ہے CSRF + + + No authentication provider found to support the authentication token. + تصدیقی ٹوکن کو سپورٹ کرنے کے لیے کوئی تصدیقی کنندہ نہیں ملا + + + No session available, it either timed out or cookies are not enabled. + کوئی سیشن دستیاب نہیں ہے، یا تو اس کا وقت ختم ہو گیا ہے یا کوکیز فعال نہیں ہیں + + + No token could be found. + کوئی ٹوکن نہیں مل سکا + + + Username could not be found. + يوذر نہیں مل سکا + + + Account has expired. + اکاؤنٹ کی میعاد ختم ہو گئی ہے + + + Credentials have expired. + اسناد کی میعاد ختم ہو چکی ہے + + + Account is disabled. + اکاؤنٹ بند کر دیا گیا ہے + + + Account is locked. + اکاؤنٹ لاک ہے + + + Too many failed login attempts, please try again later. + لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم بعد میں دوبارہ کوشش کریں + + + Invalid or expired login link. + غلط یا ختم شدھ لاگ ان لنک + + + Too many failed login attempts, please try again in %minutes% minute. + منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں + + + Too many failed login attempts, please try again in %minutes% minutes. + منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں + + + + diff --git a/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php b/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php index 0ec1d60c90649..49638f3ced344 100644 --- a/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php +++ b/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php @@ -107,6 +107,10 @@ private function generateLogoutUrl(?string $key, int $referenceType): string $request = $this->requestStack->getCurrentRequest(); + if (!$request) { + throw new \LogicException('Unable to generate the logout URL without a Request.'); + } + $url = UrlGeneratorInterface::ABSOLUTE_URL === $referenceType ? $request->getUriForPath($logoutPath) : $request->getBaseUrl().$logoutPath; if (!empty($parameters)) { diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf index 61b9eac232ca1..d1dcf3ec8fa50 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf @@ -382,6 +382,22 @@ This value is not a valid International Securities Identification Number (ISIN). Hierdie waarde is nie 'n geldige Internasionale veiligheidsidentifikasienommer (ISIN) nie. + + This value should be a valid expression. + Hierdie waarde moet 'n geldige uitdrukking wees. + + + This value is not a valid CSS color. + Hierdie waarde is nie 'n geldige CSS-kleur nie. + + + This value is not a valid CIDR notation. + Hierdie waarde is nie 'n geldige CIDR-notasie nie. + + + The value of the netmask should be between {{ min }} and {{ max }}. + Die waarde van die netmasker moet tussen {{ min }} en {{ max }} wees. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf index 59480874fd387..b3e0999304ae7 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf @@ -386,6 +386,22 @@ This value is not a valid International Securities Identification Number (ISIN). Bu dəyər doğru bir Qiymətli Kağızın Beynəlxalq İdentifikasiya Kodu (ISIN) deyil. + + This value should be a valid expression. + Bu dəyər etibarlı ifadə olmalıdır. + + + This value is not a valid CSS color. + Bu dəyər etibarlı CSS rəngi deyil. + + + This value is not a valid CIDR notation. + Bu dəyər etibarlı CIDR notasiyası deyil. + + + The value of the netmask should be between {{ min }} and {{ max }}. + Şəbəkə maskasının dəyəri {{ min }} və {{ max }} arasında olmalıdır. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf new file mode 100644 index 0000000000000..c2b114942972f --- /dev/null +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf @@ -0,0 +1,407 @@ + + + + + + This value should be false. + یہ ويليو غلط ہونی چاہیے + + + This value should be true. + یہ ويليو درست ہونی چاہیے + + + This value should be of type {{ type }}. + قسم کی ہونی چاہیے {{type}} يھ ويليو + + + This value should be blank. + یہ ويليو خالی ہونی چاہیے + + + The value you selected is not a valid choice. + آپ نے جو ويليو منتخب کی ہے وہ درست انتخاب نہیں ہے + + + You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices. + کا انتخاب کرنا چاہیے {{limit}} کا انتخاب کرنا چاہیے ۔آّپ کو کم اذ کم {{limit}} آپ کو کم از کم + + + You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices. + کا انتخاب کرنا چاہیے {{limit}} کا انتخاب کرنا چاہیے ۔آّپ کو ذيادھ سے ذيادھ {{limit}} آپ کو ذيادھ سے ذيادھ + + + One or more of the given values is invalid. + دی گئی ويليوذ میں سے ایک یا زیادھ ويليوذ غلط ہیں + + + This field was not expected. + اس فیلڈ کی توقع نہیں تھی + + + This field is missing. + یہ فیلڈ غائب ہے + + + This value is not a valid date. + یہ ويليو درست تاریخ نہیں ہے + + + This value is not a valid datetime. + یہ ويليو درست تاریخ وقت نہیں ہے + + + This value is not a valid email address. + یہ ويليو درست ای میل ایڈریس نہیں ہے + + + The file could not be found. + فائل نہیں مل سکی + + + The file is not readable. + فائل پڑھنے کے قابل نہیں ہے + + + The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}. + {{ suffix }} {{ limit }} زیادہ سے زیادہ سائز کی اجازت ہے {{ suffix }}) ({{ size }} فائل بہت بڑی ہے + + + The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}. + ہیں {{ types }} مائیم کی قسمیں ({{ type }}) فائل کی ماۂيم قسم غلط ہے + + + This value should be {{ limit }} or less. + یا اس سے کم ہونی چاہیے {{ limit }} یہ ويليو + + + This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less. + حروف یا اس سے کم ہونے چاہئیں {{ limit }} حرف یا اس سے کم ہونا چاہیے۔|یہ ويليو بہت لمبی ہے۔ اس میں{{ limit }} یہ ويليو بہت لمبی ہے۔ اس میں + + + This value should be {{ limit }} or more. + یا اس سے زیادہ ہونی چاہیے {{ limit }} یہ ويليو + + + This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more. + حروف یا اس سے زیادہ ہونے چاہئیں {{ limit }} حرف یا اس سے زیادہ ہونا چاہیے۔|یہ ويليو بہت چھوٹی ہے۔ اس میں{{ limit }} یہ ويليو بہت مختصر ہے۔ اس میں + + + This value should not be blank. + یہ ويليو خالی نہیں ہونی چاہیے + + + This value should not be null. + یہ ويليو خالی نہیں ہونی چاہیے + + + This value should be null. + یہ ويليو خالی ہونی چاہیے + + + This value is not valid. + یہ ويليو درست نہیں ہے + + + This value is not a valid time. + یہ ويليو درست وقت نہیں ہے + + + This value is not a valid URL. + نہیں ہے URL یہ ويليو درست + + + The two values should be equal. + دونوں ويليوذ برابر ہونی چاہئیں + + + The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}. + {{ suffix }} {{ limit }} فائل بہت بڑی ہے۔ زیادہ سے زیادہ سائز کی اجازت ہے + + + The file is too large. + فائل بہت بڑی ہے + + + The file could not be uploaded. + فائل اپ لوڈ نہیں ہو سکی + + + This value should be a valid number. + یہ ويليو ایک درست نمبر ہونی چاہیے + + + This file is not a valid image. + یہ فائل درست تصویر نہیں ہے + + + This is not a valid IP address. + ایڈریس نہیں ہے IP یہ ایک درست + + + This value is not a valid language. + یہ ويليو درست زبان نہیں ہے + + + This value is not a valid locale. + یہ ويليو درست مقام نہیں ہے + + + This value is not a valid country. + یہ ويليو ایک درست ملک نہیں ہے + + + This value is already used. + یہ ويليو پہلے ہی استعمال ہو چکی ہے + + + The size of the image could not be detected. + تصویر کے سائز کا پتہ نہیں چل سکا + + + The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px. + ہے {{ max_width }}px اجازت دی گئی زیادہ سے زیاد چوڑائی ({{ width }}px) تصویر کی چوڑائی بہت بڑی ہے + + + The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px. + ہے {{ min_width }}px کم از کم چوڑائی متوقع({{ width }}px) تصویر کی چوڑائی بہت چھوٹی ہے + + + The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px. + ہے {{ max_height }}px اجازت دی گئی زیادہ سے زیاد اونچائی ({{ height }}px) تصویر کی اونچائی بہت بڑی ہے + + + The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px. + ہے {{ min_height }}px متوقع کم از کم اونچائی ({{ height }}px) تصویر کی اونچائی بہت چھوٹی ہے + + + This value should be the user's current password. + یہ ويليو صارف کا موجودہ پاس ورڈ ہونا چاہیے + + + This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters. + حروف ہونے چاہئیں {{ limit }} حرف ہونا چاہیے۔|اس ويليو میں بالکل {{ limit }} اس ويليو میں بالکل + + + The file was only partially uploaded. + فائل صرف جزوی طور پر اپ لوڈ کی گئی تھی + + + No file was uploaded. + کوئی فائل اپ لوڈ نہیں کی گئی + + + No temporary folder was configured in php.ini. + میں کوئی عارضی فولڈر کنفیگر نہیں کیا گیا، یا کنفیگرڈ فولڈر موجود نہیں ہے php.ini + + + Cannot write temporary file to disk. + عارضی فائل کو ڈسک پر نہیں لکھا جا سکتا + + + A PHP extension caused the upload to fail. + پی ایچ پی کی توسیع کی وجہ سے اپ لوڈ ناکام ہو گیا + + + This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more. + عناصر یا اس سے زیادہ ہونا چاہیے {{ limit } عنصر یا اس سے زیادہ ہونا چاہیے۔|اس مجموعہ میں {{ limit }} اس مجموعہ میں + + + This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less. + عناصر یا اس سے کم ہونا چاہیے {{ limit } عنصر یا اس سے کم ہونا چاہیے۔|اس مجموعہ میں {{ limit }} اس مجموعہ میں + + + This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements. + عنصر ہونا چاہیے {{ limit }} عنصر ہونا چاہیے۔|اس مجموعے میں بالکل {{ limit }} اس مجموعہ میں بالکل + + + Invalid card number. + غلط کارڈ نمبر + + + Unsupported card type or invalid card number. + غیر تعاون یافتہ کارڈ کی قسم یا غلط کارڈ نمبر + + + This is not a valid International Bank Account Number (IBAN). + (IBAN)یہ ایک درست بین الاقوامی بینک اکاؤنٹ نمبر نہیں ہے + + + This value is not a valid ISBN-10. + نہیں ہے ISBN-10 یھ ويليو درست۔ + + + This value is not a valid ISBN-13. + نہیں ہے ISBN-13 یھ ويليو درست۔ + + + This value is neither a valid ISBN-10 nor a valid ISBN-13. + ISBN-13 ے اور نہ ہی درست ISBN-10 یہ ويليو نہ تو درست + + + This value is not a valid ISSN. + نہیں ہے ISSNیھ ويليو درست۔ + + + This value is not a valid currency. + یہ ويليو درست کرنسی نہیں ہے + + + This value should be equal to {{ compared_value }}. + کے برابر ہونا چاہیے {{ compared_value }} یھ ويليو + + + This value should be greater than {{ compared_value }}. + سے بڈي ہوني چاہیے {{ compared_value }} یھ ويليو + + + This value should be greater than or equal to {{ compared_value }}. + سے بڈي یا برابر ہوني چاہیے {{ compared_value }} یھ ويليو + + + This value should be identical to {{ compared_value_type }} {{ compared_value }}. + {{ compared_value }} {{ compared_value_type }} یہ ويليو ایک جیسی ہونی چاہیے۔ + + + This value should be less than {{ compared_value }}. + سے کم ہوني چاہیے {{ compared_value }} یھ ويليو + + + This value should be less than or equal to {{ compared_value }}. + سے کم یا برابر ہوني چاہیے {{ compared_value }} یھ ويليو + + + This value should not be equal to {{ compared_value }}. + کے برابر نھيں ہوني چاہیے {{ compared_value }} یھ ويليو + + + This value should not be identical to {{ compared_value_type }} {{ compared_value }}. + ایک جیسی نیيں ہونی چاہیے {{ compared_value }} {{ compared_value_type }} یہ ويليو + + + The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}. + ہے {{ max_ratio }} اجازت شدہ زیادہ سے زیادہ تناسب ({{ ratio }}) تصویر کا تناسب بہت بڑا ہے + + + The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}. + ہے{{ min_ratio }} ratio متوقع کم از کم ({{ ratio }}) بہت چھوٹا ہے ratio تصویر کا + + + The image is square ({{ width }}x{{ height }}px). Square images are not allowed. + مربع تصاویر کی اجازت نہیں ہے (px{{ height }}x{{ width }}) تصویر مربع ہے + + + The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed. + زمین کی تزئین پر مبنی تصاویر کی اجازت نہیں ہے ({{ width }}x{{ height }}px) تصویر زمین کی تزئین پر مبنی ہے + + + The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed. + پورٹریٹ پر مبنی تصاویر کی اجازت نہیں ہے ({{ width }}x{{ height }}px) تصویر پورٹریٹ پر مبنی ہے + + + An empty file is not allowed. + خالی فائل کی اجازت نہیں ہے + + + The host could not be resolved. + میزبان حل نہیں ہو سکا + + + This value does not match the expected {{ charset }} charset. + کے جيسي نہیں ہے charset {{ charset }} یہ ويليو متوقع + + + This is not a valid Business Identifier Code (BIC). + (BIC)یہ ایک درست کاروباری شناخت کنندہ کوڈ نہیں ہے + + + Error + خرابی + + + This is not a valid UUID. + نہیں ہے UUID یہ درست + + + This value should be a multiple of {{ compared_value }}. + کا ضرب ہوني چاہیے {{ compared_value }} یہ ويليو + + + This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}. + سے وابستہ نہیں ہے IBAN {{ iban }} (BIC) یہ کاروباری شناختی کوڈ + + + This value should be valid JSON. + ہونی چاہیے JSON یہ ويليو درست + + + This collection should contain only unique elements. + یہ مجموعہ صرف منفرد عناصر پر مشتمل ہونا چاہیے + + + This value should be positive. + یہ ويليو مثبت ہونی چاہیے + + + This value should be either positive or zero. + یہ ويليو یا تو مثبت یا صفر ہونی چاہیے + + + This value should be negative. + یہ ويليو منفی ہونی چاہیے + + + This value should be either negative or zero. + یہ ويليو یا تو منفی یا صفر ہونی چاہیے + + + This value is not a valid timezone. + یہ ويليو درست ٹائم زون نہیں ہے + + + This password has been leaked in a data breach, it must not be used. Please use another password. + یہ پاس ورڈ ڈیٹا کی خلاف ورزی میں لیک ہو گیا ہے، اسے استعمال نہیں کرنا چاہیے۔ براۓ کرم دوسرا پاس ورڈ استعمال کریں + + + This value should be between {{ min }} and {{ max }}. + کے درمیان ہونی چاہیے {{ max }} اور {{ min }} یہ ويليو + + + This value is not a valid hostname. + نہیں ہے hostname یہ ويليو درست + + + The number of elements in this collection should be a multiple of {{ compared_value }}. + کی ضرب ہونی چاہیے {{ compared_value }} اس مجموعہ میں عناصر کی تعداد + + + This value should satisfy at least one of the following constraints: + اس ويليو کو درج ذیل رکاوٹوں میں سے کم از کم ایک کو پورا کرنا چاہیے + + + Each element of this collection should satisfy its own set of constraints. + اس مجموعے کے ہر عنصر کو اپنی پابندیوں کے سیٹ کو پورا کرنا چاہیے + + + This value is not a valid International Securities Identification Number (ISIN). + نہیں ہے (ISIN) یہ ويليو درست بین الاقوامی سیکیورٹیز شناختی نمبر + + + This value should be a valid expression. + یہ ويليو ایک درست اظہار ہوني چاہیے + + + This value is not a valid CSS color. + رنگ نہیں ہے CSS یہ ويليو درست + + + This value is not a valid CIDR notation. + نوٹیشن نہیں ہے CIDR یہ ويليو ایک درست + + + The value of the netmask should be between {{ min }} and {{ max }}. + کے درمیان ہونی چاہیے {{ max }} اور {{ min }} نیٹ ماسک کی ويليو + + + +