diff --git a/phpunit b/phpunit index 437f7b9b44..7b0b47cf7b 100755 --- a/phpunit +++ b/phpunit @@ -1,7 +1,7 @@ #!/usr/bin/env php The CSRF token is invalid. Please try to resubmit the form. CSRF-token er ugyldig. - - This value is not a valid currency. - Denne værdi er ikke en gyldig valuta. - - - This value should be equal to {{ compared_value }}. - Denne værdi skal være lig med {{ compared_value }}. - - - This value should be greater than {{ compared_value }}. - Denne værdi skal være større end {{ compared_value }}. - - - This value should be greater than or equal to {{ compared_value }}. - Denne værdi skal være større end eller lig med {{ compared_value }}. - - - This value should be identical to {{ compared_value_type }} {{ compared_value }}. - Denne værdi skal være identisk med {{ compared_value_type }} {{ compared_value }}. - - - This value should be less than {{ compared_value }}. - Denne værdi skal være mindre end {{ compared_value }}. - - - This value should be less than or equal to {{ compared_value }}. - Denne værdi skal være mindre end eller lig med {{ compared_value }}. - - - This value should not be equal to {{ compared_value }}. - Denne værdi bør ikke være lig med {{ compared_value }}. - - - This value should not be identical to {{ compared_value_type }} {{ compared_value }}. - Denne værdi bør ikke være identisk med {{ compared_value_type }} {{ compared_value }}. - - - The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}. - Billedforholdet er for stort ({{ratio}}). Tilladt maksimumsforhold er {{ max_ratio }}. - - - The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}. - Billedforholdet er for lille ({{ ratio }}). Minimumsforventet forventet er {{ min_ratio }}. - - - The image is square ({{ width }}x{{ height }}px). Square images are not allowed. - Billedet er firkantet ({{ width }} x {{ height }} px). Firkantede billeder er ikke tilladt. - - - The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed. - Billedet er landskabsorienteret ({{width}} x {{height}} px). Landskabsorienterede billeder er ikke tilladt - - - The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed. - Billedet er portrætorienteret ({{ width }}x{{ height }}px). Portrætorienterede billeder er ikke tilladt. - - - An empty file is not allowed. - En tom fil er ikke tilladt. - - - The host could not be resolved. - Værten kunne ikke løses. - - - This value does not match the expected {{ charset }} charset. - Denne værdi stemmer ikke overens med den forventede {{ charset }} charset. - - - This is not a valid Business Identifier Code (BIC). - Dette er ikke en gyldig Business Identifier Code (BIC).a - - - This is not a valid UUID. - Dette er ikke en gyldig UUID. - - - This value should be a multiple of {{ compared_value }}. - Denne værdi skal være et flertal af {{ compared_value }}. - - - This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}. - Denne Business Identifier Code (BIC) er ikke forbundet med IBAN {{ iban }}. - - - This value should be valid JSON. - Denne værdi skal være gyldig JSON. - - - This collection should contain only unique elements. - Denne samling bør kun indeholde unikke elementer. - - - This value should be positive. - Denne værdi skal være positiv. - - - This value should be either positive or zero. - Denne værdi skal være enten positiv eller nul. - - - This value should be negative. - Denne værdi skal være negativ. - - - This value should be either negative or zero. - Denne værdi skal være enten negativ eller nul. - - - This value is not a valid timezone. - Denne værdi er ikke en gyldig tidszone. - - - This password has been leaked in a data breach, it must not be used. Please use another password. - Denne adgangskode er blevet lækket i et databrud, det må ikke bruges. Brug venligst en anden adgangskode. - diff --git a/src/Symfony/Component/Serializer/Normalizer/DateIntervalNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/DateIntervalNormalizer.php index 0b2d4214bf..87acdb14de 100644 --- a/src/Symfony/Component/Serializer/Normalizer/DateIntervalNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/DateIntervalNormalizer.php @@ -25,7 +25,7 @@ class DateIntervalNormalizer implements NormalizerInterface, DenormalizerInterfa const FORMAT_KEY = 'dateinterval_format'; private $defaultContext = [ - self::FORMAT_KEY => 'P%yY%mM%dDT%hH%iM%sS', + self::FORMAT_KEY => '%rP%yY%mM%dDT%hH%iM%sS', ]; /** @@ -90,12 +90,34 @@ class DateIntervalNormalizer implements NormalizerInterface, DenormalizerInterfa $dateIntervalFormat = $context[self::FORMAT_KEY] ?? $this->defaultContext[self::FORMAT_KEY]; - $valuePattern = '/^'.preg_replace('/%([yYmMdDhHiIsSwW])(\w)/', '(?P<$1>\d+)$2', $dateIntervalFormat).'$/'; + $signPattern = ''; + switch (substr($dateIntervalFormat, 0, 2)) { + case '%R': + $signPattern = '[-+]'; + $dateIntervalFormat = substr($dateIntervalFormat, 2); + break; + case '%r': + $signPattern = '-?'; + $dateIntervalFormat = substr($dateIntervalFormat, 2); + break; + } + $valuePattern = '/^'.$signPattern.preg_replace('/%([yYmMdDhHiIsSwW])(\w)/', '(?P<$1>\d+)$2', $dateIntervalFormat).'$/'; if (!preg_match($valuePattern, $data)) { throw new UnexpectedValueException(sprintf('Value "%s" contains intervals not accepted by format "%s".', $data, $dateIntervalFormat)); } try { + if ('-' === $data[0]) { + $interval = new \DateInterval(substr($data, 1)); + $interval->invert = 1; + + return $interval; + } + + if ('+' === $data[0]) { + return new \DateInterval(substr($data, 1)); + } + return new \DateInterval($data); } catch (\Exception $e) { throw new UnexpectedValueException($e->getMessage(), $e->getCode(), $e); @@ -112,6 +134,6 @@ class DateIntervalNormalizer implements NormalizerInterface, DenormalizerInterfa private function isISO8601($string) { - return preg_match('/^P(?=\w*(?:\d|%\w))(?:\d+Y|%[yY]Y)?(?:\d+M|%[mM]M)?(?:(?:\d+D|%[dD]D)|(?:\d+W|%[wW]W))?(?:T(?:\d+H|[hH]H)?(?:\d+M|[iI]M)?(?:\d+S|[sS]S)?)?$/', $string); + return preg_match('/^[\-+]?P(?=\w*(?:\d|%\w))(?:\d+Y|%[yY]Y)?(?:\d+M|%[mM]M)?(?:(?:\d+D|%[dD]D)|(?:\d+W|%[wW]W))?(?:T(?:\d+H|[hH]H)?(?:\d+M|[iI]M)?(?:\d+S|[sS]S)?)?$/', $string); } } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/DateIntervalNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/DateIntervalNormalizerTest.php index aaff973665..3e60a360ec 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/DateIntervalNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/DateIntervalNormalizerTest.php @@ -29,6 +29,11 @@ class DateIntervalNormalizerTest extends TestCase ['P%yY%mM%dDT%hH%iM', 'P10Y2M3DT16H5M', 'P10Y2M3DT16H5M'], ['P%yY%mM%dDT%hH', 'P10Y2M3DT16H', 'P10Y2M3DT16H'], ['P%yY%mM%dD', 'P10Y2M3D', 'P10Y2M3DT0H'], + ['%RP%yY%mM%dD', '-P10Y2M3D', '-P10Y2M3DT0H'], + ['%RP%yY%mM%dD', '+P10Y2M3D', '+P10Y2M3DT0H'], + ['%RP%yY%mM%dD', '+P10Y2M3D', 'P10Y2M3DT0H'], + ['%rP%yY%mM%dD', '-P10Y2M3D', '-P10Y2M3DT0H'], + ['%rP%yY%mM%dD', 'P10Y2M3D', 'P10Y2M3DT0H'], ]; return $data; @@ -50,7 +55,7 @@ class DateIntervalNormalizerTest extends TestCase */ public function testNormalizeUsingFormatPassedInContext($format, $output, $input) { - $this->assertEquals($output, $this->normalizer->normalize(new \DateInterval($input), null, [DateIntervalNormalizer::FORMAT_KEY => $format])); + $this->assertEquals($output, $this->normalizer->normalize($this->getInterval($input), null, [DateIntervalNormalizer::FORMAT_KEY => $format])); } /** @@ -72,7 +77,7 @@ class DateIntervalNormalizerTest extends TestCase private function doTestNormalizeUsingFormatPassedInConstructor($format, $output, $input, bool $legacy = false) { $normalizer = $legacy ? new DateIntervalNormalizer($format) : new DateIntervalNormalizer([DateIntervalNormalizer::FORMAT_KEY => $format]); - $this->assertEquals($output, $normalizer->normalize(new \DateInterval($input))); + $this->assertEquals($output, $normalizer->normalize($this->getInterval($input))); } public function testNormalizeInvalidObjectThrowsException() @@ -98,7 +103,7 @@ class DateIntervalNormalizerTest extends TestCase */ public function testDenormalizeUsingFormatPassedInContext($format, $input, $output) { - $this->assertDateIntervalEquals(new \DateInterval($output), $this->normalizer->denormalize($input, \DateInterval::class, null, [DateIntervalNormalizer::FORMAT_KEY => $format])); + $this->assertDateIntervalEquals($this->getInterval($output), $this->normalizer->denormalize($input, \DateInterval::class, null, [DateIntervalNormalizer::FORMAT_KEY => $format])); } /** @@ -120,7 +125,7 @@ class DateIntervalNormalizerTest extends TestCase private function doTestDenormalizeUsingFormatPassedInConstructor($format, $input, $output, bool $legacy = false) { $normalizer = $legacy ? new DateIntervalNormalizer($format) : new DateIntervalNormalizer([DateIntervalNormalizer::FORMAT_KEY => $format]); - $this->assertDateIntervalEquals(new \DateInterval($output), $normalizer->denormalize($input, \DateInterval::class)); + $this->assertDateIntervalEquals($this->getInterval($output), $normalizer->denormalize($input, \DateInterval::class)); } public function testDenormalizeExpectsString() @@ -152,4 +157,20 @@ class DateIntervalNormalizerTest extends TestCase { $this->assertEquals($expected->format('%RP%yY%mM%dDT%hH%iM%sS'), $actual->format('%RP%yY%mM%dDT%hH%iM%sS')); } + + private function getInterval($data) + { + if ('-' === $data[0]) { + $interval = new \DateInterval(substr($data, 1)); + $interval->invert = 1; + + return $interval; + } + + if ('+' === $data[0]) { + return new \DateInterval(substr($data, 1)); + } + + return new \DateInterval($data); + } } diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf index e27bb2930f..2bc33a7b43 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf @@ -242,10 +242,126 @@ This value is not a valid ISSN. Værdien er ikke en gyldig ISSN. + + This value is not a valid currency. + Denne værdi er ikke en gyldig valuta. + + + This value should be equal to {{ compared_value }}. + Denne værdi skal være lig med {{ compared_value }}. + + + This value should be greater than {{ compared_value }}. + Denne værdi skal være større end {{ compared_value }}. + + + This value should be greater than or equal to {{ compared_value }}. + Denne værdi skal være større end eller lig med {{ compared_value }}. + + + This value should be identical to {{ compared_value_type }} {{ compared_value }}. + Denne værdi skal være identisk med {{ compared_value_type }} {{ compared_value }}. + + + This value should be less than {{ compared_value }}. + Denne værdi skal være mindre end {{ compared_value }}. + + + This value should be less than or equal to {{ compared_value }}. + Denne værdi skal være mindre end eller lig med {{ compared_value }}. + + + This value should not be equal to {{ compared_value }}. + Denne værdi bør ikke være lig med {{ compared_value }}. + + + This value should not be identical to {{ compared_value_type }} {{ compared_value }}. + Denne værdi bør ikke være identisk med {{ compared_value_type }} {{ compared_value }}. + + + The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}. + Billedforholdet er for stort ({{ratio}}). Tilladt maksimumsforhold er {{ max_ratio }}. + + + The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}. + Billedforholdet er for lille ({{ ratio }}). Minimumsforventet forventet er {{ min_ratio }}. + + + The image is square ({{ width }}x{{ height }}px). Square images are not allowed. + Billedet er firkantet ({{ width }} x {{ height }} px). Firkantede billeder er ikke tilladt. + + + The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed. + Billedet er landskabsorienteret ({{width}} x {{height}} px). Landskabsorienterede billeder er ikke tilladt + + + The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed. + Billedet er portrætorienteret ({{ width }}x{{ height }}px). Portrætorienterede billeder er ikke tilladt. + + + An empty file is not allowed. + En tom fil er ikke tilladt. + + + The host could not be resolved. + Værten kunne ikke løses. + + + This value does not match the expected {{ charset }} charset. + Denne værdi stemmer ikke overens med den forventede {{ charset }} charset. + + + This is not a valid Business Identifier Code (BIC). + Dette er ikke en gyldig Business Identifier Code (BIC).a + Error Fejl + + This is not a valid UUID. + Dette er ikke en gyldig UUID. + + + This value should be a multiple of {{ compared_value }}. + Denne værdi skal være et flertal af {{ compared_value }}. + + + This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}. + Denne Business Identifier Code (BIC) er ikke forbundet med IBAN {{ iban }}. + + + This value should be valid JSON. + Denne værdi skal være gyldig JSON. + + + This collection should contain only unique elements. + Denne samling bør kun indeholde unikke elementer. + + + This value should be positive. + Denne værdi skal være positiv. + + + This value should be either positive or zero. + Denne værdi skal være enten positiv eller nul. + + + This value should be negative. + Denne værdi skal være negativ. + + + This value should be either negative or zero. + Denne værdi skal være enten negativ eller nul. + + + This value is not a valid timezone. + Denne værdi er ikke en gyldig tidszone. + + + This password has been leaked in a data breach, it must not be used. Please use another password. + Denne adgangskode er blevet lækket i et databrud, det må ikke bruges. Brug venligst en anden adgangskode. + This value should be between {{ min }} and {{ max }}. Værdien skal være mellem {{ min }} og {{ max }}. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf index 8ddb66d9c0..a161ddbfe8 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf @@ -314,6 +314,58 @@ This is not a valid Business Identifier Code (BIC). Táto hodnota nie je platný identifikačný kód podniku (BIC). + + Error + Chyba + + + This is not a valid UUID. + Táto hodnota nie je platný UUID. + + + This value should be a multiple of {{ compared_value }}. + Táto hodnota by mala byť násobkom {{ compared_value }}. + + + This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}. + Tento identifikačný kód podniku (BIC) nie je spojený s IBAN {{ iban }}. + + + This value should be valid JSON. + Táto hodnota by mala byť platný JSON. + + + This collection should contain only unique elements. + Táto kolekcia by mala obsahovať len unikátne prkvy. + + + This value should be positive. + Táto hodnota by mala byť kladná. + + + This value should be either positive or zero. + Táto hodnota by mala byť kladná alebo nulová. + + + This value should be negative. + Táto hodnota by mala byť záporná. + + + This value should be either negative or zero. + Táto hodnota by mala byť záporná alebo nulová. + + + This value is not a valid timezone. + Táto hodnota nie je platné časové pásmo. + + + This password has been leaked in a data breach, it must not be used. Please use another password. + Toto heslo uniklo pri narušení ochrany dát, nie je možné ho použiť. Prosím, použite iné heslo. + + + This value should be between {{ min }} and {{ max }}. + Táto hodnota by mala byť medzi {{ min }} a {{ max }}. +