Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Plural.php
Go to the documentation of this file.
1 <?php
31 {
37  protected static $_plural = array();
38 
46  public static function getPlural($number, $locale)
47  {
48  if ($locale == "pt_BR") {
49  // temporary set a locale for brasilian
50  $locale = "xbr";
51  }
52 
53  if (strlen($locale) > 3) {
54  $locale = substr($locale, 0, -strlen(strrchr($locale, '_')));
55  }
56 
57  if (isset(self::$_plural[$locale])) {
58  $return = call_user_func(self::$_plural[$locale], $number);
59 
60  if (!is_int($return) || ($return < 0)) {
61  $return = 0;
62  }
63 
64  return $return;
65  }
66 
67  switch($locale) {
68  case 'az':
69  case 'bo':
70  case 'dz':
71  case 'id':
72  case 'ja':
73  case 'jv':
74  case 'ka':
75  case 'km':
76  case 'kn':
77  case 'ko':
78  case 'ms':
79  case 'th':
80  case 'tr':
81  case 'vi':
82  case 'zh':
83  return 0;
84  break;
85 
86  case 'af':
87  case 'bn':
88  case 'bg':
89  case 'ca':
90  case 'da':
91  case 'de':
92  case 'el':
93  case 'en':
94  case 'eo':
95  case 'es':
96  case 'et':
97  case 'eu':
98  case 'fa':
99  case 'fi':
100  case 'fo':
101  case 'fur':
102  case 'fy':
103  case 'gl':
104  case 'gu':
105  case 'ha':
106  case 'he':
107  case 'hu':
108  case 'is':
109  case 'it':
110  case 'ku':
111  case 'lb':
112  case 'ml':
113  case 'mn':
114  case 'mr':
115  case 'nah':
116  case 'nb':
117  case 'ne':
118  case 'nl':
119  case 'nn':
120  case 'no':
121  case 'om':
122  case 'or':
123  case 'pa':
124  case 'pap':
125  case 'ps':
126  case 'pt':
127  case 'so':
128  case 'sq':
129  case 'sv':
130  case 'sw':
131  case 'ta':
132  case 'te':
133  case 'tk':
134  case 'ur':
135  case 'zu':
136  return ($number == 1) ? 0 : 1;
137 
138  case 'am':
139  case 'bh':
140  case 'fil':
141  case 'fr':
142  case 'gun':
143  case 'hi':
144  case 'ln':
145  case 'mg':
146  case 'nso':
147  case 'xbr':
148  case 'ti':
149  case 'wa':
150  return (($number == 0) || ($number == 1)) ? 0 : 1;
151 
152  case 'be':
153  case 'bs':
154  case 'hr':
155  case 'ru':
156  case 'sr':
157  case 'uk':
158  return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
159 
160  case 'cs':
161  case 'sk':
162  return ($number == 1) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2);
163 
164  case 'ga':
165  return ($number == 1) ? 0 : (($number == 2) ? 1 : 2);
166 
167  case 'lt':
168  return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
169 
170  case 'sl':
171  return ($number % 100 == 1) ? 0 : (($number % 100 == 2) ? 1 : ((($number % 100 == 3) || ($number % 100 == 4)) ? 2 : 3));
172 
173  case 'mk':
174  return ($number % 10 == 1) ? 0 : 1;
175 
176  case 'mt':
177  return ($number == 1) ? 0 : ((($number == 0) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3));
178 
179  case 'lv':
180  return ($number == 0) ? 0 : ((($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2);
181 
182  case 'pl':
183  return ($number == 1) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2);
184 
185  case 'cy':
186  return ($number == 1) ? 0 : (($number == 2) ? 1 : ((($number == 8) || ($number == 11)) ? 2 : 3));
187 
188  case 'ro':
189  return ($number == 1) ? 0 : ((($number == 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2);
190 
191  case 'ar':
192  return ($number == 0) ? 0 : (($number == 1) ? 1 : (($number == 2) ? 2 : ((($number >= 3) && ($number <= 10)) ? 3 : ((($number >= 11) && ($number <= 99)) ? 4 : 5))));
193 
194  default:
195  return 0;
196  }
197  }
198 
206  public static function setPlural($rule, $locale)
207  {
208  if ($locale == "pt_BR") {
209  // temporary set a locale for brasilian
210  $locale = "xbr";
211  }
212 
213  if (strlen($locale) > 3) {
214  $locale = substr($locale, 0, -strlen(strrchr($locale, '_')));
215  }
216 
217  if (!is_callable($rule)) {
218  #require_once 'Zend/Translate/Exception.php';
219  throw new Zend_Translate_Exception('The given rule can not be called');
220  }
221 
222  self::$_plural[$locale] = $rule;
223  }
224 }
static setPlural($rule, $locale)
Definition: Plural.php:206
$number
Definition: details.phtml:22
static getPlural($number, $locale)
Definition: Plural.php:46