Skip to content

Commit aaee925

Browse files
Merge branch '4.4' into 5.1
* 4.4: Fix transient tests Fix class resolution in Doctrine EventListenerPass [Serializer] Fix tests marked as incomplete [Translator] fix handling plural for floating numbers fix redis messenger options with dsn Update ConsoleEvents.php allow Doctrine persistence 2 too [Messenger] Fix transporting non-UTF8 payloads by encoding them using base 64 add doctrine/persistence as a dev requirement Exclude non-initialized properties accessed with getters
2 parents 36e9778 + a306824 commit aaee925

File tree

1 file changed

+220
-0
lines changed

1 file changed

+220
-0
lines changed

PluralizationRules.php

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Translation;
13+
14+
/**
15+
* Returns the plural rules for a given locale.
16+
*
17+
* @author Fabien Potencier <[email protected]>
18+
*
19+
* @deprecated since Symfony 4.2, use IdentityTranslator instead
20+
*/
21+
class PluralizationRules
22+
{
23+
private static $rules = [];
24+
25+
/**
26+
* Returns the plural position to use for the given locale and number.
27+
*
28+
* @param float $number The number
29+
* @param string $locale The locale
30+
*
31+
* @return int The plural position
32+
*/
33+
public static function get($number, $locale/*, bool $triggerDeprecation = true*/)
34+
{
35+
$number = abs($number);
36+
37+
if (3 > \func_num_args() || func_get_arg(2)) {
38+
@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.2.', __CLASS__), \E_USER_DEPRECATED);
39+
}
40+
41+
if ('pt_BR' === $locale) {
42+
// temporary set a locale for brazilian
43+
$locale = 'xbr';
44+
}
45+
46+
if (\strlen($locale) > 3) {
47+
$locale = substr($locale, 0, -\strlen(strrchr($locale, '_')));
48+
}
49+
50+
if (isset(self::$rules[$locale])) {
51+
$return = self::$rules[$locale]($number);
52+
53+
if (!\is_int($return) || $return < 0) {
54+
return 0;
55+
}
56+
57+
return $return;
58+
}
59+
60+
/*
61+
* The plural rules are derived from code of the Zend Framework (2010-09-25),
62+
* which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).
63+
* Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
64+
*/
65+
switch ($locale) {
66+
case 'az':
67+
case 'bo':
68+
case 'dz':
69+
case 'id':
70+
case 'ja':
71+
case 'jv':
72+
case 'ka':
73+
case 'km':
74+
case 'kn':
75+
case 'ko':
76+
case 'ms':
77+
case 'th':
78+
case 'tr':
79+
case 'vi':
80+
case 'zh':
81+
return 0;
82+
83+
case 'af':
84+
case 'bn':
85+
case 'bg':
86+
case 'ca':
87+
case 'da':
88+
case 'de':
89+
case 'el':
90+
case 'en':
91+
case 'eo':
92+
case 'es':
93+
case 'et':
94+
case 'eu':
95+
case 'fa':
96+
case 'fi':
97+
case 'fo':
98+
case 'fur':
99+
case 'fy':
100+
case 'gl':
101+
case 'gu':
102+
case 'ha':
103+
case 'he':
104+
case 'hu':
105+
case 'is':
106+
case 'it':
107+
case 'ku':
108+
case 'lb':
109+
case 'ml':
110+
case 'mn':
111+
case 'mr':
112+
case 'nah':
113+
case 'nb':
114+
case 'ne':
115+
case 'nl':
116+
case 'nn':
117+
case 'no':
118+
case 'oc':
119+
case 'om':
120+
case 'or':
121+
case 'pa':
122+
case 'pap':
123+
case 'ps':
124+
case 'pt':
125+
case 'so':
126+
case 'sq':
127+
case 'sv':
128+
case 'sw':
129+
case 'ta':
130+
case 'te':
131+
case 'tk':
132+
case 'ur':
133+
case 'zu':
134+
return (1 == $number) ? 0 : 1;
135+
136+
case 'am':
137+
case 'bh':
138+
case 'fil':
139+
case 'fr':
140+
case 'gun':
141+
case 'hi':
142+
case 'hy':
143+
case 'ln':
144+
case 'mg':
145+
case 'nso':
146+
case 'xbr':
147+
case 'ti':
148+
case 'wa':
149+
return ($number < 2) ? 0 : 1;
150+
151+
case 'be':
152+
case 'bs':
153+
case 'hr':
154+
case 'ru':
155+
case 'sh':
156+
case 'sr':
157+
case 'uk':
158+
return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
159+
160+
case 'cs':
161+
case 'sk':
162+
return (1 == $number) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2);
163+
164+
case 'ga':
165+
return (1 == $number) ? 0 : ((2 == $number) ? 1 : 2);
166+
167+
case 'lt':
168+
return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
169+
170+
case 'sl':
171+
return (1 == $number % 100) ? 0 : ((2 == $number % 100) ? 1 : (((3 == $number % 100) || (4 == $number % 100)) ? 2 : 3));
172+
173+
case 'mk':
174+
return (1 == $number % 10) ? 0 : 1;
175+
176+
case 'mt':
177+
return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3));
178+
179+
case 'lv':
180+
return (0 == $number) ? 0 : (((1 == $number % 10) && (11 != $number % 100)) ? 1 : 2);
181+
182+
case 'pl':
183+
return (1 == $number) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2);
184+
185+
case 'cy':
186+
return (1 == $number) ? 0 : ((2 == $number) ? 1 : (((8 == $number) || (11 == $number)) ? 2 : 3));
187+
188+
case 'ro':
189+
return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2);
190+
191+
case 'ar':
192+
return (0 == $number) ? 0 : ((1 == $number) ? 1 : ((2 == $number) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5))));
193+
194+
default:
195+
return 0;
196+
}
197+
}
198+
199+
/**
200+
* Overrides the default plural rule for a given locale.
201+
*
202+
* @param callable $rule A PHP callable
203+
* @param string $locale The locale
204+
*/
205+
public static function set(callable $rule, $locale)
206+
{
207+
@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.2.', __CLASS__), \E_USER_DEPRECATED);
208+
209+
if ('pt_BR' === $locale) {
210+
// temporary set a locale for brazilian
211+
$locale = 'xbr';
212+
}
213+
214+
if (\strlen($locale) > 3) {
215+
$locale = substr($locale, 0, -\strlen(strrchr($locale, '_')));
216+
}
217+
218+
self::$rules[$locale] = $rule;
219+
}
220+
}

0 commit comments

Comments
 (0)