Skip to content

Commit 149a905

Browse files
committed
Fix #30215 handle plural for floating numbers
1 parent 6dd5078 commit 149a905

File tree

4 files changed

+9
-4
lines changed

4 files changed

+9
-4
lines changed

src/Symfony/Component/Translation/IdentityTranslator.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public function transChoice($id, $number, array $parameters = [], $domain = null
7070
return $this->trans($id, ['%count%' => $number] + $parameters, $domain, $locale);
7171
}
7272

73-
private function getPluralizationRule(int $number, string $locale): int
73+
private function getPluralizationRule(float $number, string $locale): int
7474
{
7575
return PluralizationRules::get($number, $locale, false);
7676
}

src/Symfony/Component/Translation/PluralizationRules.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public static function get($number, $locale/*, bool $triggerDeprecation = true*/
144144
case 'xbr':
145145
case 'ti':
146146
case 'wa':
147-
return ((0 == $number) || (1 == $number)) ? 0 : 1;
147+
return ($number < 2) ? 0 : 1;
148148

149149
case 'be':
150150
case 'bs':

src/Symfony/Component/Translation/Tests/TranslatorTest.php

+5
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,11 @@ public function getTransChoiceTests()
612612

613613
// Override %count% with a custom value
614614
['Il y a quelques pommes', 'one: There is one apple|more: There are %count% apples', 'one: Il y a %count% pomme|more: Il y a quelques pommes', 2, ['%count%' => 'quelques'], 'fr', ''],
615+
616+
// Floating values
617+
// https://github.com/symfony/symfony/issues/30215
618+
['1.5 liters', 'key', '%count% liter|%count% liters', 1.5, ['%count%' => 1.5], 'en', ''],
619+
['1.5 litre', 'key', '%count% litre|%count% litres', 1.5, ['%count%' => 1.5], 'fr', ''],
615620
];
616621
}
617622

src/Symfony/Contracts/Translation/TranslatorTrait.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public function trans($id, array $parameters = [], $domain = null, $locale = nul
136136
* which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).
137137
* Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
138138
*/
139-
private function getPluralizationRule(int $number, string $locale): int
139+
private function getPluralizationRule(float $number, string $locale): int
140140
{
141141
switch ('pt_BR' !== $locale && \strlen($locale) > 3 ? substr($locale, 0, strrpos($locale, '_')) : $locale) {
142142
case 'af':
@@ -205,7 +205,7 @@ private function getPluralizationRule(int $number, string $locale): int
205205
case 'pt_BR':
206206
case 'ti':
207207
case 'wa':
208-
return ((0 == $number) || (1 == $number)) ? 0 : 1;
208+
return ($number < 2) ? 0 : 1;
209209

210210
case 'be':
211211
case 'bs':

0 commit comments

Comments
 (0)