Merge branch '4.2'

* 4.2:
  [Console] Fix auto-complete for ChoiceQuestion (multi-select answers)
  Translated form, security, validators resources into Belarusian (be)
  [WebProfilerBundle] Don't filter submitted IP values
  [Intl] Cleanup
  bumped Symfony version to 4.2.9
  updated VERSION for 4.2.8
  updated CHANGELOG for 4.2.8
  bumped Symfony version to 3.4.28
  updated VERSION for 3.4.27
  update CONTRIBUTORS for 3.4.27
  updated CHANGELOG for 3.4.27
This commit is contained in:
Fabien Potencier 2019-05-07 08:08:50 +02:00
commit 2e872c4be0
22 changed files with 608 additions and 196 deletions

View File

@ -7,6 +7,25 @@ in 4.2 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.2.0...v4.2.1
* 4.2.8 (2019-05-01)
* bug #31338 Revert "bug #30620 [FrameworkBundle][HttpFoundation] make session service resettable (dmaicher)" (nicolas-grekas)
* bug #31326 fix ConsoleFormatter - call to a member function format() on string (keksa)
* bug #31331 [Workflow] Fixed dumping when many transition with same name exist (lyrixx)
* bug #31302 [FramworkBundle] mark any env vars found in the ide setting as used (nicolas-grekas)
* bug #31290 [TwigBundle] Use the apply tag instead of the filter tag (greg0ire)
* bug #31275 [Translator] Preserve default domain when extracting strings from php files (Stadly)
* bug #31240 Fix url matcher edge cases with trailing slash (arjenm)
* bug #31201 [Form] resolve class name parameters (xabbuh)
* bug #31213 [WebProfilerBundle] Intercept redirections only for HTML format (javiereguiluz)
* bug #31210 [PhpUnitBridge] fix reading phpunit.xml on bootstrap (nicolas-grekas)
* bug #31023 [Routing] Fix route URL generation in CLI context (X-Coder264)
* bug #31117 [FrameworkBundle] fix math depth handler configuration (Raulnet)
* bug #31182 [Routing] fix trailing slash matching with empty-matching trailing vars (nicolas-grekas)
* bug #31167 [Routing] fix matching trailing vars with defaults (nicolas-grekas)
* bug #31164 [Validator] fix LegacyTranslatorProxy (nicolas-grekas)
* bug #31156 [FrameworkBundle] call method with Translator component only (xabbuh)
* 4.2.7 (2019-04-17)
* bug #31107 [Routing] fix trailing slash redirection with non-greedy trailing vars (nicolas-grekas)

View File

@ -20,12 +20,12 @@ Symfony is the result of the work of many people who made the code better
- Johannes S (johannes)
- Javier Eguiluz (javier.eguiluz)
- Kris Wallsmith (kriswallsmith)
- Grégoire Pineau (lyrixx)
- Roland Franssen (ro0)
- Grégoire Pineau (lyrixx)
- Hugo Hamon (hhamon)
- Abdellatif Ait boudad (aitboudad)
- Romain Neutron (romain)
- Samuel ROZE (sroze)
- Romain Neutron (romain)
- Pascal Borreli (pborreli)
- Wouter De Jong (wouterj)
- Joseph Bielawski (stloyd)
@ -40,8 +40,8 @@ Symfony is the result of the work of many people who made the code better
- Igor Wiedler (igorw)
- Eriksen Costa (eriksencosta)
- Guilhem Niot (energetick)
- Sarah Khalil (saro0h)
- Hamza Amrouche (simperfit)
- Sarah Khalil (saro0h)
- Jonathan Wage (jwage)
- Tobias Nyholm (tobias)
- Lynn van der Berg (kjarli)
@ -68,10 +68,10 @@ Symfony is the result of the work of many people who made the code better
- Gábor Egyed (1ed)
- Bilal Amarni (bamarni)
- Titouan Galopin (tgalopin)
- Grégoire Paris (greg0ire)
- Mathieu Piot (mpiot)
- David Maicher (dmaicher)
- Florin Patan (florinpatan)
- Grégoire Paris (greg0ire)
- Gabriel Ostrolucký (gadelat)
- Valentin Udaltsov (vudaltsov)
- Vladimir Reznichenko (kalessil)
@ -93,6 +93,7 @@ Symfony is the result of the work of many people who made the code better
- Brandon Turner
- Luis Cordova (cordoval)
- Graham Campbell (graham)
- David Buchmann (dbu)
- Daniel Holmes (dholmes)
- Toni Uebernickel (havvg)
- Bart van den Burg (burgov)
@ -101,7 +102,6 @@ Symfony is the result of the work of many people who made the code better
- John Wards (johnwards)
- Thomas Calvet (fancyweb)
- Fran Moreno (franmomu)
- David Buchmann (dbu)
- Antoine Hérault (herzult)
- Paráda József (paradajozsef)
- Arnaud Le Blanc (arnaud-lb)
@ -142,6 +142,7 @@ Symfony is the result of the work of many people who made the code better
- Alex Pott
- Vincent AUBERT (vincent)
- Juti Noppornpitak (shiroyuki)
- Teoh Han Hui (teohhanhui)
- Anthony MARTIN (xurudragon)
- Tigran Azatyan (tigranazatyan)
- Sebastian Hörl (blogsh)
@ -151,7 +152,6 @@ Symfony is the result of the work of many people who made the code better
- Arnaud Kleinpeter (nanocom)
- Jannik Zschiesche (apfelbox)
- Guilherme Blanco (guilhermeblanco)
- Teoh Han Hui (teohhanhui)
- SpacePossum
- Pablo Godel (pgodel)
- Jérémie Augustin (jaugustin)
@ -181,6 +181,7 @@ Symfony is the result of the work of many people who made the code better
- Artur Kotyrba
- Tyson Andre
- GDIBass
- Jan Schädlich (jschaedl)
- jeremyFreeAgent (Jérémy Romey) (jeremyfreeagent)
- James Halsall (jaitsu)
- Matthieu Napoli (mnapoli)
@ -192,6 +193,7 @@ Symfony is the result of the work of many people who made the code better
- Daniel Espendiller
- Possum
- Dorian Villet (gnutix)
- George Mponos (gmponos)
- Sergey Linnik (linniksa)
- Richard Miller (mr_r_miller)
- Albert Casademont (acasademont)
@ -199,6 +201,7 @@ Symfony is the result of the work of many people who made the code better
- Dennis Benkert (denderello)
- DQNEO
- Samuel NELA (snela)
- Alexander Schranz (alexander-schranz)
- Gregor Harlan (gharlan)
- Gary PEGEOT (gary-p)
- Ruben Gonzalez (rubenrua)
@ -213,7 +216,6 @@ Symfony is the result of the work of many people who made the code better
- bronze1man
- sun (sun)
- Larry Garfield (crell)
- George Mponos (gmponos)
- Michaël Perrin (michael.perrin)
- Nikolay Labinskiy (e-moe)
- Martin Schuhfuß (usefulthink)
@ -225,7 +227,6 @@ Symfony is the result of the work of many people who made the code better
- Dominique Bongiraud
- Jeremy Livingston (jeremylivingston)
- Vincent Touzet (vincenttouzet)
- Jan Schädlich (jschaedl)
- Michael Lee (zerustech)
- Matthieu Auger (matthieuauger)
- Leszek Prabucki (l3l0)
@ -237,7 +238,6 @@ Symfony is the result of the work of many people who made the code better
- Andreas Schempp (aschempp)
- Justin Hileman (bobthecow)
- Blanchon Vincent (blanchonvincent)
- Alexander Schranz (alexander-schranz)
- Michele Orselli (orso)
- Sven Paulus (subsven)
- Maxime Veber (nek-)
@ -303,12 +303,14 @@ Symfony is the result of the work of many people who made the code better
- Bob den Otter (bopp)
- Thomas Schulz (king2500)
- Frank de Jonge (frenkynet)
- Andre Rømcke (andrerom)
- Nikita Konstantinov
- Wodor Wodorski
- Thomas Lallement (raziel057)
- mcfedr (mcfedr)
- Colin O'Dell (colinodell)
- Giorgio Premi
- renanbr
- Alex Rock (pierstoval)
- Ben Davies (bendavies)
- Beau Simensen (simensen)
@ -371,7 +373,6 @@ Symfony is the result of the work of many people who made the code better
- Ricard Clau (ricardclau)
- Mark Challoner (markchalloner)
- Gennady Telegin (gtelegin)
- renanbr
- Erin Millard
- Artur Melo (restless)
- Matthew Lewinski (lewinski)
@ -380,7 +381,6 @@ Symfony is the result of the work of many people who made the code better
- Nicolas LEFEVRE (nicoweb)
- alquerci
- Mateusz Sip (mateusz_sip)
- Andre Rømcke (andrerom)
- Francesco Levorato
- Dmitrii Poddubnyi (karser)
- Vitaliy Zakharov (zakharovvi)
@ -391,6 +391,7 @@ Symfony is the result of the work of many people who made the code better
- Tomasz Kowalczyk (thunderer)
- Artur Eshenbrener
- Andreas Braun
- Arjen van der Meijden
- Damien Alexandre (damienalexandre)
- Thomas Perez (scullwm)
- Felix Labrecque
@ -411,6 +412,7 @@ Symfony is the result of the work of many people who made the code better
- Grzegorz (Greg) Zdanowski (kiler129)
- Iker Ibarguren (ikerib)
- Kirill chEbba Chebunin (chebba)
- Stadly
- Greg Thornton (xdissent)
- Quynh Xuan Nguyen (xuanquynh)
- Martin Hujer (martinhujer)
@ -558,10 +560,10 @@ Symfony is the result of the work of many people who made the code better
- Jakub Škvára (jskvara)
- Andrew Udvare (audvare)
- alexpods
- Arjen van der Meijden
- Adam Szaraniec (mimol)
- Dariusz Ruminski
- Erik Trapman (eriktrapman)
- Rokas Mikalkėnas (rokasm)
- De Cock Xavier (xdecock)
- Almog Baku (almogbaku)
- Scott Arciszewski
@ -806,7 +808,6 @@ Symfony is the result of the work of many people who made the code better
- John Bohn (jbohn)
- Marc Morera (mmoreram)
- Saif Eddin Gmati (azjezz)
- Stadly
- Andrew Hilobok (hilobok)
- Noah Heck (myesain)
- Christian Soronellas (theunic)
@ -960,7 +961,6 @@ Symfony is the result of the work of many people who made the code better
- Benoît Merlet (trompette)
- Koen Kuipers
- datibbaw
- Rokas Mikalkėnas (rokasm)
- Erik Saunier (snickers)
- Rootie
- Kyle
@ -968,6 +968,7 @@ Symfony is the result of the work of many people who made the code better
- sensio
- Chris Tanaskoski
- Thomas Jarrand
- Antoine Bluchet (soyuka)
- Sebastien Morel (plopix)
- Patrick Kaufmann
- Anton Dyshkant
@ -1009,6 +1010,7 @@ Symfony is the result of the work of many people who made the code better
- Joost van Driel
- Icode4Food (icode4food)
- Radosław Benkel
- EStyles (insidestyles)
- kevin.nadin
- jean pasqualini (darkilliant)
- Ross Motley (rossmotley)
@ -1035,6 +1037,7 @@ Symfony is the result of the work of many people who made the code better
- Ashura
- Hryhorii Hrebiniuk
- johnstevenson
- Antonio Pauletich (x-coder264)
- hamza
- dantleech
- Bastien DURAND (deamon)
@ -1054,6 +1057,7 @@ Symfony is the result of the work of many people who made the code better
- chispita
- Wojciech Sznapka
- Gavin Staniforth
- Ksaveras Šakys (xawiers)
- Ariel J. Birnbaum
- Danijel Obradović
- Pablo Borowicz
@ -1078,6 +1082,7 @@ Symfony is the result of the work of many people who made the code better
- Mert Simsek (mrtsmsk0)
- Lin Clark
- Jeremy David (jeremy.david)
- Jordi Rejas
- Troy McCabe
- Ville Mattila
- ilyes kooli
@ -1204,6 +1209,7 @@ Symfony is the result of the work of many people who made the code better
- antograssiot
- Ilya Vertakov
- Brooks Boyd
- johnillo
- Roger Webb
- Dmitriy Simushev
- Pawel Smolinski
@ -1272,6 +1278,7 @@ Symfony is the result of the work of many people who made the code better
- Lars Ambrosius Wallenborn (larsborn)
- Oriol Mangas Abellan (oriolman)
- Sebastian Göttschkes (sgoettschkes)
- Toni Peric (tperic)
- Tatsuya Tsuruoka
- Ross Tuck
- Andreas Erhard
@ -1407,6 +1414,7 @@ Symfony is the result of the work of many people who made the code better
- Jon Gotlin (jongotlin)
- Michael Dowling (mtdowling)
- Karlos Presumido (oneko)
- Tony Vermeiren (tony)
- Thomas Counsell
- BilgeXA
- r1pp3rj4ck
@ -1519,6 +1527,7 @@ Symfony is the result of the work of many people who made the code better
- Francisco Facioni (fran6co)
- Iwan van Staveren (istaveren)
- Povilas S. (povilas)
- Laurent Negre (raulnet)
- Evrard Boulou
- pborreli
- Boris Betzholz
@ -1716,6 +1725,7 @@ Symfony is the result of the work of many people who made the code better
- Dmitriy Fedorenko
- vlakoff
- bertillon
- thib92
- Rudolf Ratusiński
- Bertalan Attila
- AmsTaFF (amstaff)
@ -1882,6 +1892,7 @@ Symfony is the result of the work of many people who made the code better
- Yorkie Chadwick (yorkie76)
- GuillaumeVerdon
- Philipp Keck
- Angel Fernando Quiroz Campos
- Ondrej Mirtes
- akimsko
- Youpie
@ -2129,6 +2140,7 @@ Symfony is the result of the work of many people who made the code better
- samuel laulhau (lalop)
- Laurent Bachelier (laurentb)
- Luís Cobucci (lcobucci)
- Mehdi Achour (machour)
- Marcos Gómez Vilches (markitosgv)
- Matthieu Mota (matthieumota)
- Matthieu Moquet (mattketmo)

View File

@ -262,7 +262,7 @@ class ProfilerController
{
$this->denyAccessIfProfilerDisabled();
$ip = preg_replace('/[^:\d\.]/', '', $request->query->get('ip'));
$ip = $request->query->get('ip');
$method = $request->query->get('method');
$statusCode = $request->query->get('status_code');
$url = $request->query->get('url');

View File

@ -198,6 +198,7 @@ class QuestionHelper extends Helper
*/
private function autocomplete(OutputInterface $output, Question $question, $inputStream, callable $autocomplete): string
{
$fullChoice = '';
$ret = '';
$i = 0;
@ -224,6 +225,7 @@ class QuestionHelper extends Helper
} elseif ("\177" === $c) { // Backspace Character
if (0 === $numMatches && 0 !== $i) {
--$i;
$fullChoice = substr($fullChoice, 0, -1);
// Move cursor backwards
$output->write("\033[1D");
}
@ -260,8 +262,10 @@ class QuestionHelper extends Helper
if ($numMatches > 0 && -1 !== $ofs) {
$ret = (string) $matches[$ofs];
// Echo out remaining chars for current match
$output->write(substr($ret, $i));
$i = \strlen($ret);
$remainingCharacters = substr($ret, \strlen(trim($this->mostRecentlyEnteredValue($fullChoice))));
$output->write($remainingCharacters);
$fullChoice .= $remainingCharacters;
$i = \strlen($fullChoice);
$matches = array_filter(
$autocomplete($ret),
@ -287,14 +291,21 @@ class QuestionHelper extends Helper
$output->write($c);
$ret .= $c;
$fullChoice .= $c;
++$i;
$tempRet = $ret;
if ($question instanceof ChoiceQuestion && $question->isMultiselect()) {
$tempRet = $this->mostRecentlyEnteredValue($fullChoice);
}
$numMatches = 0;
$ofs = 0;
foreach ($autocomplete($ret) as $value) {
// If typed characters match the beginning chunk of value (e.g. [AcmeDe]moBundle)
if (0 === strpos($value, $ret)) {
if (0 === strpos($value, $tempRet)) {
$matches[$numMatches++] = $value;
}
}
@ -306,8 +317,9 @@ class QuestionHelper extends Helper
if ($numMatches > 0 && -1 !== $ofs) {
// Save cursor position
$output->write("\0337");
// Write highlighted text
$output->write('<hl>'.OutputFormatter::escapeTrailingBackslash(substr($matches[$ofs], $i)).'</hl>');
// Write highlighted text, complete the partially entered response
$charactersEntered = \strlen(trim($this->mostRecentlyEnteredValue($fullChoice)));
$output->write('<hl>'.OutputFormatter::escapeTrailingBackslash(substr($matches[$ofs], $charactersEntered)).'</hl>');
// Restore cursor position
$output->write("\0338");
}
@ -316,7 +328,24 @@ class QuestionHelper extends Helper
// Reset stty so it behaves normally again
shell_exec(sprintf('stty %s', $sttyMode));
return $ret;
return $fullChoice;
}
private function mostRecentlyEnteredValue($entered)
{
$tempEntered = $entered;
// Determine the most recent value that the user entered
if (false !== strpos($entered, ',')) {
$choices = explode(',', $entered);
$lastChoice = trim($choices[\count($choices) - 1]);
if (\strlen($lastChoice) > 0) {
$tempEntered = $lastChoice;
}
}
return $tempEntered;
}
/**

View File

@ -728,6 +728,37 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
$this->assertEquals('FooBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
}
public function testTraversableMultiselectAutocomplete()
{
// <NEWLINE>
// F<TAB><NEWLINE>
// A<3x UP ARROW><TAB>,F<TAB><NEWLINE>
// F00<BACKSPACE><BACKSPACE>o<TAB>,A<DOWN ARROW>,<SPACE>SecurityBundle<NEWLINE>
// Acme<TAB>,<SPACE>As<TAB><29x BACKSPACE>S<TAB><NEWLINE>
// Ac<TAB>,As<TAB><3x BACKSPACE>d<TAB><NEWLINE>
$inputStream = $this->getInputStream("\nF\t\nA\033[A\033[A\033[A\t,F\t\nF00\177\177o\t,A\033[B\t, SecurityBundle\nAcme\t, As\t\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177S\t\nAc\t,As\t\177\177\177d\t\n");
$dialog = new QuestionHelper();
$helperSet = new HelperSet([new FormatterHelper()]);
$dialog->setHelperSet($helperSet);
$question = new ChoiceQuestion(
'Please select a bundle (defaults to AcmeDemoBundle and AsseticBundle)',
['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle'],
'0,1'
);
// This tests that autocomplete works for all multiselect choices entered by the user
$question->setMultiselect(true);
$this->assertEquals(['AcmeDemoBundle', 'AsseticBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
$this->assertEquals(['FooBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
$this->assertEquals(['AsseticBundle', 'FooBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
$this->assertEquals(['FooBundle', 'AsseticBundle', 'SecurityBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
$this->assertEquals(['SecurityBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
$this->assertEquals(['AcmeDemoBundle', 'AsseticBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
}
protected function getInputStream($input)
{
$stream = fopen('php://memory', 'r+', false);

View File

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="28">
<source>This form should not contain extra fields.</source>
<target>Гэта форма не павінна мець дадатковых палей.</target>
</trans-unit>
<trans-unit id="29">
<source>The uploaded file was too large. Please try to upload a smaller file.</source>
<target>Запампаваны файл быў занадта вялікім. Калі ласка, паспрабуйце запампаваць файл меншага памеру.</target>
</trans-unit>
<trans-unit id="30">
<source>The CSRF token is invalid. Please try to resubmit the form.</source>
<target>CSRF-токен не сапраўдны. Калі ласка, паспрабуйце яшчэ раз адправіць форму.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -1,91 +0,0 @@
Contributing to the Intl component
==================================
A very good way of contributing to the Intl component is by updating the
included data for the ICU version you have installed on your system.
Preparation
-----------
To prepare, you need to install the development dependencies of the component.
$ cd /path/to/Symfony/Component/Intl
$ composer install
Determining your ICU version
---------------------------
The ICU version installed in your PHP environment can be found by running
icu-version.php:
$ php Resources/bin/icu-version.php
Updating the ICU data
---------------------
To update the data files, run the update-icu-component.php script:
$ php Resources/bin/update-icu-component.php
The script needs the binaries "svn" and "make" to be available on your system.
It will download the latest version of the ICU sources for the ICU version
installed in your PHP environment. The script will then compile the "genrb"
binary and use it to compile the ICU data files to binaries. The binaries are
copied to the Resources/ directory of the Icu component found in the
vendor/symfony/icu/ directory.
Updating the stub data
----------------------
In the previous step you updated the Icu component for the ICU version
installed on your system. If you are using the latest ICU version, you should
also create the stub data files which will be used by people who don't have
the intl extension installed.
To update the stub files, run the update-stubs.php script:
$ php Resources/bin/update-stubs.php
The script will fail if you don't have the latest ICU version. If you want to
upgrade the ICU version, adjust the return value of the
`Intl::getIcuStubVersion()` before you run the script.
The script creates copies of the binary resource bundles in the Icu component
and stores them in the Resources/ directory of the Intl component. The copies
are made for the locale "en" only and are stored in .php files, so that they
can be read even if the intl extension is not available.
Creating a pull request
-----------------------
You need to create up to two pull requests:
* If you updated the Icu component, you need to push that change and create a
pull request in the `symfony/Icu` repository. Make sure to submit the pull
request to the correct master branch. If you updated the ICU data for version
4.8, your pull request goes to branch `48-master`, for version 49 to
`49-master` and so on.
* If you updated the stub files of the Intl component, you need to push that
change and create a pull request in the `symfony/symfony` repository. The
pull request should be based on the `master` branch.
Combining .res files to a .dat-package
--------------------------------------
The individual *.res files can be combined into a single .dat-file.
Unfortunately, PHP's `ResourceBundle` class is currently not able to handle
.dat-files.
Once it is, the following steps have to be followed to build the .dat-file:
1. Package the resource bundles into a single file
$ find . -name *.res | sed -e "s/\.\///g" > packagelist.txt
$ pkgdata -p region -T build -d . packagelist.txt
2. Clean up
$ rm -rf build packagelist.txt
3. You can now move region.dat to replace the version bundled with Symfony.

View File

@ -25,37 +25,20 @@ use Symfony\Component\Intl\Data\Util\LocaleScanner;
*/
class CurrencyDataGenerator extends AbstractDataGenerator
{
const UNKNOWN_CURRENCY_ID = 'XXX';
const EUROPEAN_COMPOSITE_UNIT_ID = 'XBA';
const EUROPEAN_MONETARY_UNIT_ID = 'XBB';
const EUROPEAN_UNIT_OF_ACCOUNT_XBC_ID = 'XBC';
const EUROPEAN_UNIT_OF_ACCOUNT_XBD_ID = 'XBD';
const TESTING_CURRENCY_CODE_ID = 'XTS';
const ADB_UNIT_OF_ACCOUNT_ID = 'XUA';
const GOLD_ID = 'XAU';
const SILVER_ID = 'XAG';
const PLATINUM_ID = 'XPT';
const PALLADIUM_ID = 'XPD';
const SUCRE_ID = 'XSU';
const SPECIAL_DRAWING_RIGHTS_ID = 'XDR';
/**
* Monetary units excluded from generation.
*/
private static $blacklist = [
self::UNKNOWN_CURRENCY_ID => true,
self::EUROPEAN_COMPOSITE_UNIT_ID => true,
self::EUROPEAN_MONETARY_UNIT_ID => true,
self::EUROPEAN_UNIT_OF_ACCOUNT_XBC_ID => true,
self::EUROPEAN_UNIT_OF_ACCOUNT_XBD_ID => true,
self::TESTING_CURRENCY_CODE_ID => true,
self::ADB_UNIT_OF_ACCOUNT_ID => true,
self::GOLD_ID => true,
self::SILVER_ID => true,
self::PLATINUM_ID => true,
self::PALLADIUM_ID => true,
self::SUCRE_ID => true,
self::SPECIAL_DRAWING_RIGHTS_ID => true,
'XBA' => true, // European Composite Unit
'XBB' => true, // European Monetary Unit
'XBC' => true, // European Unit of Account (XBC)
'XBD' => true, // European Unit of Account (XBD)
'XUA' => true, // ADB Unit of Account
'XAU' => true, // Gold
'XAG' => true, // Silver
'XPT' => true, // Platinum
'XPD' => true, // Palladium
'XSU' => true, // Sucre
'XDR' => true, // Special Drawing Rights
'XTS' => true, // Testing Currency Code
'XXX' => true, // Unknown Currency
];
/**

View File

@ -27,32 +27,18 @@ use Symfony\Component\Intl\Data\Util\LocaleScanner;
*/
class RegionDataGenerator extends AbstractDataGenerator
{
const UNKNOWN_REGION_ID = 'ZZ';
const OUTLYING_OCEANIA_REGION_ID = 'QO';
const EUROPEAN_UNION_ID = 'EU';
const NETHERLANDS_ANTILLES_ID = 'AN';
const BOUVET_ISLAND_ID = 'BV';
const HEARD_MCDONALD_ISLANDS_ID = 'HM';
const CLIPPERTON_ISLAND_ID = 'CP';
const EUROZONE_ID = 'EZ';
const UNITED_NATIONS_ID = 'UN';
/**
* Regions excluded from generation.
*/
private static $blacklist = [
self::UNKNOWN_REGION_ID => true,
// Look like countries, but are sub-continents
self::OUTLYING_OCEANIA_REGION_ID => true,
self::EUROPEAN_UNION_ID => true,
self::EUROZONE_ID => true,
self::UNITED_NATIONS_ID => true,
// No longer exists
self::NETHERLANDS_ANTILLES_ID => true,
'QO' => true, // Outlying Oceania
'EU' => true, // European Union
'EZ' => true, // Eurozone
'UN' => true, // United Nations
// Uninhabited islands
self::BOUVET_ISLAND_ID => true,
self::HEARD_MCDONALD_ISLANDS_ID => true,
self::CLIPPERTON_ISLAND_ID => true,
'BV' => true, // Bouvet Island
'HM' => true, // Heard & McDonald Islands
'CP' => true, // Clipperton Island
// Misc
'ZZ' => true, // Unknown Region
];
/**

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Intl\Data\Provider;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Exception\MissingResourceException;
use Symfony\Component\Intl\Locale;
/**
* Data provider for currency-related data.
@ -53,7 +52,7 @@ class CurrencyDataProvider
public function getSymbol($currency, $displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
return $this->reader->readEntry($this->path, $displayLocale, ['Names', $currency, static::INDEX_SYMBOL]);
@ -62,7 +61,7 @@ class CurrencyDataProvider
public function getName($currency, $displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
return $this->reader->readEntry($this->path, $displayLocale, ['Names', $currency, static::INDEX_NAME]);
@ -71,7 +70,7 @@ class CurrencyDataProvider
public function getNames($displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
// ====================================================================

View File

@ -12,7 +12,6 @@
namespace Symfony\Component\Intl\Data\Provider;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Locale;
/**
* Data provider for language-related ICU data.
@ -57,7 +56,7 @@ class LanguageDataProvider
public function getName($language, $displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
return $this->reader->readEntry($this->path, $displayLocale, ['Names', $language]);
@ -69,7 +68,7 @@ class LanguageDataProvider
public function getNames($displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
$languages = $this->reader->readEntry($this->path, $displayLocale, ['Names']);

View File

@ -12,7 +12,6 @@
namespace Symfony\Component\Intl\Data\Provider;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Locale;
/**
* Data provider for locale-related ICU data.
@ -57,7 +56,7 @@ class LocaleDataProvider
public function getName($locale, $displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
return $this->reader->readEntry($this->path, $displayLocale, ['Names', $locale]);
@ -66,7 +65,7 @@ class LocaleDataProvider
public function getNames($displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
$names = $this->reader->readEntry($this->path, $displayLocale, ['Names']);

View File

@ -12,7 +12,6 @@
namespace Symfony\Component\Intl\Data\Provider;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Locale;
/**
* Data provider for region-related ICU data.
@ -49,7 +48,7 @@ class RegionDataProvider
public function getName($region, $displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
return $this->reader->readEntry($this->path, $displayLocale, ['Names', $region]);
@ -61,7 +60,7 @@ class RegionDataProvider
public function getNames($displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
$names = $this->reader->readEntry($this->path, $displayLocale, ['Names']);

View File

@ -12,7 +12,6 @@
namespace Symfony\Component\Intl\Data\Provider;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Locale;
/**
* Data provider for script-related ICU data.
@ -49,7 +48,7 @@ class ScriptDataProvider
public function getName($script, $displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
return $this->reader->readEntry($this->path, $displayLocale, ['Names', $script]);
@ -61,7 +60,7 @@ class ScriptDataProvider
public function getNames($displayLocale = null)
{
if (null === $displayLocale) {
$displayLocale = Locale::getDefault();
$displayLocale = \Locale::getDefault();
}
$names = $this->reader->readEntry($this->path, $displayLocale, ['Names']);

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Intl\Tests\Data\Provider;
use Symfony\Component\Intl\Data\Provider\CurrencyDataProvider;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Locale;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
@ -633,7 +632,7 @@ abstract class AbstractCurrencyDataProviderTest extends AbstractDataProviderTest
public function testGetNamesDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$this->assertSame(
$this->dataProvider->getNames('de_AT'),
@ -672,7 +671,7 @@ abstract class AbstractCurrencyDataProviderTest extends AbstractDataProviderTest
public function testGetNameDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$expected = $this->dataProvider->getNames('de_AT');
$actual = [];

View File

@ -705,7 +705,7 @@ abstract class AbstractDataProviderTest extends TestCase
protected function setUp()
{
Locale::setDefault('en');
\Locale::setDefault('en');
Locale::setDefaultFallback('en');
}

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Intl\Tests\Data\Provider;
use Symfony\Component\Intl\Data\Provider\LanguageDataProvider;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Locale;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
@ -864,7 +863,7 @@ abstract class AbstractLanguageDataProviderTest extends AbstractDataProviderTest
public function testGetNamesDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$this->assertSame(
$this->dataProvider->getNames('de_AT'),
@ -900,7 +899,7 @@ abstract class AbstractLanguageDataProviderTest extends AbstractDataProviderTest
public function testGetNameDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$names = $this->dataProvider->getNames('de_AT');

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Intl\Tests\Data\Provider;
use Symfony\Component\Intl\Data\Provider\LocaleDataProvider;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Locale;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
@ -66,7 +65,7 @@ abstract class AbstractLocaleDataProviderTest extends AbstractDataProviderTest
public function testGetNamesDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$this->assertSame(
$this->dataProvider->getNames('de_AT'),
@ -102,7 +101,7 @@ abstract class AbstractLocaleDataProviderTest extends AbstractDataProviderTest
public function testGetNameDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$names = $this->dataProvider->getNames('de_AT');

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Intl\Tests\Data\Provider;
use Symfony\Component\Intl\Data\Provider\RegionDataProvider;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Locale;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
@ -318,7 +317,7 @@ abstract class AbstractRegionDataProviderTest extends AbstractDataProviderTest
public function testGetNamesDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$this->assertSame(
$this->dataProvider->getNames('de_AT'),

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Intl\Tests\Data\Provider;
use Symfony\Component\Intl\Data\Provider\ScriptDataProvider;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Locale;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
@ -256,7 +255,7 @@ abstract class AbstractScriptDataProviderTest extends AbstractDataProviderTest
public function testGetNamesDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$this->assertSame(
$this->dataProvider->getNames('de_AT'),
@ -292,7 +291,7 @@ abstract class AbstractScriptDataProviderTest extends AbstractDataProviderTest
public function testGetNameDefaultLocale()
{
Locale::setDefault('de_AT');
\Locale::setDefault('de_AT');
$names = $this->dataProvider->getNames('de_AT');

View File

@ -0,0 +1,67 @@
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>An authentication exception occurred.</source>
<target>Памылка аўтэнтыфікацыі.</target>
</trans-unit>
<trans-unit id="2">
<source>Authentication credentials could not be found.</source>
<target>Дадзеныя аўтэнтыфікацыі не знойдзены.</target>
</trans-unit>
<trans-unit id="3">
<source>Authentication request could not be processed due to a system problem.</source>
<target>Запыт аўтэнтыфікацыі не можа быць апрацаваны ў сувязі з праблемай у сістэме.</target>
</trans-unit>
<trans-unit id="4">
<source>Invalid credentials.</source>
<target>Несапраўдныя дадзеныя аўтэнтыфікацыі.</target>
</trans-unit>
<trans-unit id="5">
<source>Cookie has already been used by someone else.</source>
<target>Нехта іншы ўжо выкарыстаў гэтыя кукі (cookie).</target>
</trans-unit>
<trans-unit id="6">
<source>Not privileged to request the resource.</source>
<target>Адсутнічаюць правы на запыт гэтага рэсурсу.</target>
</trans-unit>
<trans-unit id="7">
<source>Invalid CSRF token.</source>
<target>Несапраўдны CSRF-токен.</target>
</trans-unit>
<trans-unit id="9">
<source>No authentication provider found to support the authentication token.</source>
<target>Не знойдзен правайдар аўтэнтыфікацыі, які можа падтрымліваць гэты токен аўтэнтыфікацыі.</target>
</trans-unit>
<trans-unit id="10">
<source>No session available, it either timed out or cookies are not enabled.</source>
<target>Сесія не даступна, яе час скончыўся, або кукі (cookies) выключаны.</target>
</trans-unit>
<trans-unit id="11">
<source>No token could be found.</source>
<target>Токен не знойдзен.</target>
</trans-unit>
<trans-unit id="12">
<source>Username could not be found.</source>
<target>Імя карыстальніка не знойдзена.</target>
</trans-unit>
<trans-unit id="13">
<source>Account has expired.</source>
<target>Скончыўся тэрмін дзеяння акаўнта.</target>
</trans-unit>
<trans-unit id="14">
<source>Credentials have expired.</source>
<target>Скончыўся тэрмін дзеяння дадзеных аўтэнтыфікацыі.</target>
</trans-unit>
<trans-unit id="15">
<source>Account is disabled.</source>
<target>Акаўнт адключан.</target>
</trans-unit>
<trans-unit id="16">
<source>Account is locked.</source>
<target>Акаўнт заблакіраван.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -0,0 +1,367 @@
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>This value should be false.</source>
<target>Значэнне павінна быць Не.</target>
</trans-unit>
<trans-unit id="2">
<source>This value should be true.</source>
<target>Значэнне павінна быць Так.</target>
</trans-unit>
<trans-unit id="3">
<source>This value should be of type {{ type }}.</source>
<target>Тып значэння павінен быць {{ type }}.</target>
</trans-unit>
<trans-unit id="4">
<source>This value should be blank.</source>
<target>Значэнне павінна быць пустым.</target>
</trans-unit>
<trans-unit id="5">
<source>The value you selected is not a valid choice.</source>
<target>Абранае вамі значэнне не сапраўднае.</target>
</trans-unit>
<trans-unit id="6">
<source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
<target>Вы павінны выбраць хаця б {{ limit }} варыянт.|Вы павінны выбраць хаця б {{ limit }} варыянтаў.</target>
</trans-unit>
<trans-unit id="7">
<source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
<target>Вы павінны выбраць не больш за {{ limit }} варыянт.|Вы павінны выбраць не больш за {{ limit }} варыянтаў.</target>
</trans-unit>
<trans-unit id="8">
<source>One or more of the given values is invalid.</source>
<target>Адзін або некалькі пазначаных значэнняў з'яўляецца несапраўдным.</target>
</trans-unit>
<trans-unit id="9">
<source>This field was not expected.</source>
<target>Гэта поле не чакаецца.</target>
</trans-unit>
<trans-unit id="10">
<source>This field is missing.</source>
<target>Гэта поле адсутнічае.</target>
</trans-unit>
<trans-unit id="11">
<source>This value is not a valid date.</source>
<target>Гэта значэнне не з'яўляецца карэктнай датай.</target>
</trans-unit>
<trans-unit id="12">
<source>This value is not a valid datetime.</source>
<target>Гэта значэнне не з'яўляецца карэктнай датай i часом.</target>
</trans-unit>
<trans-unit id="13">
<source>This value is not a valid email address.</source>
<target>Гэта значэнне не з'яўляецца карэктным адрасам электроннай пошты.</target>
</trans-unit>
<trans-unit id="14">
<source>The file could not be found.</source>
<target>Файл не знойдзен.</target>
</trans-unit>
<trans-unit id="15">
<source>The file is not readable.</source>
<target>Файл не чытаецца.</target>
</trans-unit>
<trans-unit id="16">
<source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
<target>Файл занадта вялікі ({{ size }} {{ suffix }}). Максімальна дазволены памер {{ limit }} {{ suffix }}.</target>
</trans-unit>
<trans-unit id="17">
<source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
<target>MIME-тып файлу некарэкты ({{ type }}). Дазволеныя MIME-тыпы файлу {{ types }}.</target>
</trans-unit>
<trans-unit id="18">
<source>This value should be {{ limit }} or less.</source>
<target>Значэнне павінна быць {{ limit }} або менш.</target>
</trans-unit>
<trans-unit id="19">
<source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
<target>Значэнне занадта доўгае. Яно павінна мець {{ limit }} сімвал або менш.|Значэнне занадта доўгае. Яно павінна мець {{ limit }} сімвалаў або менш.</target>
</trans-unit>
<trans-unit id="20">
<source>This value should be {{ limit }} or more.</source>
<target>Значэнне павінна быць {{ limit }} або больш.</target>
</trans-unit>
<trans-unit id="21">
<source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
<target>Значэнне занадта кароткае. Яно павінна мець прынамсі {{ limit }} сімвал.|Значэнне занадта кароткае. Яно павінна мець прынамсі {{ limit }} сімвалаў.</target>
</trans-unit>
<trans-unit id="22">
<source>This value should not be blank.</source>
<target>Значэнне не павінна быць пустым.</target>
</trans-unit>
<trans-unit id="23">
<source>This value should not be null.</source>
<target>Значэнне не павінна быць null.</target>
</trans-unit>
<trans-unit id="24">
<source>This value should be null.</source>
<target>Значэнне павінна быць null.</target>
</trans-unit>
<trans-unit id="25">
<source>This value is not valid.</source>
<target>Значэнне з'яўляецца не сапраўдным.</target>
</trans-unit>
<trans-unit id="26">
<source>This value is not a valid time.</source>
<target>Значэнне не з'яўляецца сапраўдным часам.</target>
</trans-unit>
<trans-unit id="27">
<source>This value is not a valid URL.</source>
<target>Значэнне не з'яўляецца сапраўдным URL-адрасам.</target>
</trans-unit>
<trans-unit id="31">
<source>The two values should be equal.</source>
<target>Абодва значэнні павінны быць аднолькавымі.</target>
</trans-unit>
<trans-unit id="32">
<source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
<target>Файл занадта вялікі. Максімальна дазволены памер {{ limit }} {{ suffix }}.</target>
</trans-unit>
<trans-unit id="33">
<source>The file is too large.</source>
<target>Файл занадта вялікі.</target>
</trans-unit>
<trans-unit id="34">
<source>The file could not be uploaded.</source>
<target>Немагчыма запампаваць файл.</target>
</trans-unit>
<trans-unit id="35">
<source>This value should be a valid number.</source>
<target>Значэнне павінна быць лікам.</target>
</trans-unit>
<trans-unit id="36">
<source>This file is not a valid image.</source>
<target>Гэты файл не з'яўляецца сапраўднай выявай.</target>
</trans-unit>
<trans-unit id="37">
<source>This is not a valid IP address.</source>
<target>Значэнне не з'яўляецца сапраўдным IP-адрасам.</target>
</trans-unit>
<trans-unit id="38">
<source>This value is not a valid language.</source>
<target>Значэнне не з'яўляецца сапраўдным мовай.</target>
</trans-unit>
<trans-unit id="39">
<source>This value is not a valid locale.</source>
<target>Значэнне не з'яўляецца сапраўднай лакаллю.</target>
</trans-unit>
<trans-unit id="40">
<source>This value is not a valid country.</source>
<target>Значэнне не з'яўляецца сапраўднай краінай.</target>
</trans-unit>
<trans-unit id="41">
<source>This value is already used.</source>
<target>Гэта значэнне ўжо выкарыстоўваецца.</target>
</trans-unit>
<trans-unit id="42">
<source>The size of the image could not be detected.</source>
<target>Немагчыма вызначыць памер выявы.</target>
</trans-unit>
<trans-unit id="43">
<source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
<target>Гэта выява занадта вялікая ({{ width }}px). Дазваляецца максімальная шырыня {{ max_width }}px.</target>
</trans-unit>
<trans-unit id="44">
<source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
<target>Гэта выява занадта маленькая ({{ width }}px). Дазваляецца мінімальная шырыня {{ min_width }}px.</target>
</trans-unit>
<trans-unit id="45">
<source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
<target>Гэты выява занадта вялікая ({{ width }}px). Дазваляецца максімальная вышыня {{ max_width }}px.</target>
</trans-unit>
<trans-unit id="46">
<source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
<target>Гэта выява занадта маленькая ({{ width }}px). Дазваляецца мінімальная вышыня {{ min_width }}px.</target>
</trans-unit>
<trans-unit id="47">
<source>This value should be the user's current password.</source>
<target>Значэнне павінна быць цяперашнім паролем карыстальніка.</target>
</trans-unit>
<trans-unit id="48">
<source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
<target>Значэнне павінна мець {{ limit }} сімвал.|Значэнне павінна мець {{ limit }} сімвалаў.</target>
</trans-unit>
<trans-unit id="49">
<source>The file was only partially uploaded.</source>
<target>Файл быў запампаваны толькі часткова.</target>
</trans-unit>
<trans-unit id="50">
<source>No file was uploaded.</source>
<target>Файл не быў запампаваны.</target>
</trans-unit>
<trans-unit id="51">
<source>No temporary folder was configured in php.ini.</source>
<target>У php.ini не была налажана часовая папка, або часовая папка не існуе.</target>
</trans-unit>
<trans-unit id="52">
<source>Cannot write temporary file to disk.</source>
<target>Немагчыма запісаць часовы файл на дыск.</target>
</trans-unit>
<trans-unit id="53">
<source>A PHP extension caused the upload to fail.</source>
<target>Пашырэнне PHP выклікала памылку загрузкі.</target>
</trans-unit>
<trans-unit id="54">
<source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
<target>Калекцыя павінна змяшчаць прынамсі {{ limit }} элемент.|Калекцыя павінна змяшчаць прынамсі {{ limit }} элементаў.</target>
</trans-unit>
<trans-unit id="55">
<source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
<target>Калекцыя павінна змяшчаць {{ limit }} або менш элемент.|Калекцыя павінна змяшчаць {{ limit }} або менш элементаў.</target>
</trans-unit>
<trans-unit id="56">
<source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
<target>Калекцыя павінна змяшчаць роўна {{ limit }} элемент.|Калекцыя павінна змяшчаць роўна {{ limit }} элементаў.</target>
</trans-unit>
<trans-unit id="57">
<source>Invalid card number.</source>
<target>Несапраўдны нумар карты.</target>
</trans-unit>
<trans-unit id="58">
<source>Unsupported card type or invalid card number.</source>
<target>Тып карты не падтрымліваецца або несапраўдны нумар карты.</target>
</trans-unit>
<trans-unit id="59">
<source>This is not a valid International Bank Account Number (IBAN).</source>
<target>Несапраўдны міжнародны нумар банкаўскага рахунку (IBAN).</target>
</trans-unit>
<trans-unit id="60">
<source>This value is not a valid ISBN-10.</source>
<target>Гэта значэнне не з'яўляецца сапраўдным ISBN-10.</target>
</trans-unit>
<trans-unit id="61">
<source>This value is not a valid ISBN-13.</source>
<target>Гэта значэнне не з'яўляецца сапраўдным ISBN-13.</target>
</trans-unit>
<trans-unit id="62">
<source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
<target>Гэта значэнне не з'яўляецца сапраўдным ISBN-10 або ISBN-13.</target>
</trans-unit>
<trans-unit id="63">
<source>This value is not a valid ISSN.</source>
<target>Гэта значэнне не з'яўляецца сапраўдным ISSN.</target>
</trans-unit>
<trans-unit id="64">
<source>This value is not a valid currency.</source>
<target>Гэта значэнне не з'яўляецца сапраўднай валютай.</target>
</trans-unit>
<trans-unit id="65">
<source>This value should be equal to {{ compared_value }}.</source>
<target>Значэнне павінна раўняцца {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="66">
<source>This value should be greater than {{ compared_value }}.</source>
<target>Значэнне павінна быць больш чым {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="67">
<source>This value should be greater than or equal to {{ compared_value }}.</source>
<target>Значэнне павінна быць больш чым або раўняцца {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="68">
<source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
<target>Значэнне павінна быць ідэнтычным {{ compared_value_type }} {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="69">
<source>This value should be less than {{ compared_value }}.</source>
<target>Значэнне павінна быць менш чым {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="70">
<source>This value should be less than or equal to {{ compared_value }}.</source>
<target>Значэнне павінна быць менш чым або раўняцца {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="71">
<source>This value should not be equal to {{ compared_value }}.</source>
<target>Значэнне не павінна раўняцца {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="72">
<source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
<target>Значэнне не павінна быць ідэнтычным {{ compared_value_type }} {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="73">
<source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
<target>Суадносіны бакоў выявы з'яўляецца занадта вялікім ({{ ratio }}). Дазваляецца максімальныя суадносіны {{max_ratio}} .</target>
</trans-unit>
<trans-unit id="74">
<source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
<target>Суадносіны бакоў выявы з'яўляецца занадта маленькімі ({{ ratio }}). Дазваляецца мінімальныя суадносіны {{ min_ratio }}.</target>
</trans-unit>
<trans-unit id="75">
<source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
<target>Выява квадратная ({{width}}x{{height}}px). Квадратныя выявы не дазволены.</target>
</trans-unit>
<trans-unit id="76">
<source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
<target>Выява ў альбомнай арыентацыі ({{ width }}x{{ height }}px). Выявы ў альбомнай арыентацыі не дазволены.</target>
</trans-unit>
<trans-unit id="77">
<source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
<target>Выява ў партрэтнай арыентацыі ({{ width }}x{{ height }}px). Выявы ў партрэтнай арыентацыі не дазволены.</target>
</trans-unit>
<trans-unit id="78">
<source>An empty file is not allowed.</source>
<target>Пусты файл не дазволены.</target>
</trans-unit>
<trans-unit id="79">
<source>The host could not be resolved.</source>
<target>Не магчыма знайсці імя хоста.</target>
</trans-unit>
<trans-unit id="80">
<source>This value does not match the expected {{ charset }} charset.</source>
<target>Гэта значэнне не супадае з чаканай {{ charset }} кадыроўкай.</target>
</trans-unit>
<trans-unit id="81">
<source>This is not a valid Business Identifier Code (BIC).</source>
<target>Несапраўдны банкаўскі ідэнтыфікацыйны код (BIC).</target>
</trans-unit>
<trans-unit id="82">
<source>Error</source>
<target>Памылка</target>
</trans-unit>
<trans-unit id="83">
<source>This is not a valid UUID.</source>
<target>Гэта несапраўдны UUID.</target>
</trans-unit>
<trans-unit id="84">
<source>This value should be a multiple of {{ compared_value }}.</source>
<target>Значэнне павінна быць кратным {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="85">
<source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
<target>Банкаўскі ідэнтыфікацыйны код (BIC) не звязан з IBAN {{ iban }}.</target>
</trans-unit>
<trans-unit id="86">
<source>This value should be valid JSON.</source>
<target>Гэта значэнне павінна быць у фармаце JSON.</target>
</trans-unit>
<trans-unit id="87">
<source>This collection should contain only unique elements.</source>
<target>Калекцыя павінна змяшчаць толькі ўнікальныя элементы.</target>
</trans-unit>
<trans-unit id="88">
<source>This value should be positive.</source>
<target>Значэнне павінна быць дадатным.</target>
</trans-unit>
<trans-unit id="89">
<source>This value should be either positive or zero.</source>
<target>Значэнне павінна быць дадатным ці нуль.</target>
</trans-unit>
<trans-unit id="90">
<source>This value should be negative.</source>
<target>Значэнне павінна быць адмоўным.</target>
</trans-unit>
<trans-unit id="91">
<source>This value should be either negative or zero.</source>
<target>Значэнне павінна быць адмоўным ці нуль.</target>
</trans-unit>
<trans-unit id="92">
<source>This value is not a valid timezone.</source>
<target>Значэнне не з'яўляецца сапраўдным гадзінным поясам.</target>
</trans-unit>
<trans-unit id="93">
<source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
<target>Гэты пароль быў выкрадзены ў выніку ўзлому дадзеных, таму яго нельга выкарыстоўваць. Калі ласка, выкарыстоўвайце іншы пароль.</target>
</trans-unit>
</body>
</file>
</xliff>