Completed
Push — 3 ( bc9e38...39c73e )
by Robbie
05:15 queued 10s
created

Zend_Translate_Plural::getPlural()   F

Complexity

Conditions 154
Paths 2804

Size

Total Lines 152

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 154
nc 2804
nop 2
dl 0
loc 152
rs 0
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * Zend Framework
4
 *
5
 * LICENSE
6
 *
7
 * This source file is subject to the new BSD license that is bundled
8
 * with this package in the file LICENSE.txt.
9
 * It is also available through the world-wide-web at this URL:
10
 * http://framework.zend.com/license/new-bsd
11
 * If you did not receive a copy of the license and are unable to
12
 * obtain it through the world-wide-web, please send an email
13
 * to [email protected] so we can send you a copy immediately.
14
 *
15
 * @category   Zend
16
 * @package    Zend_Locale
17
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
18
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
19
 * @version    $Id: Plural.php 23775 2011-03-01 17:25:24Z ralph $
20
 */
21
22
/**
23
 * Utility class for returning the plural rules according to the given locale
24
 *
25
 * @category   Zend
26
 * @package    Zend_Locale
27
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
28
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
29
 */
30
class Zend_Translate_Plural
31
{
32
    /**
33
     * Manual rule to use
34
     *
35
     * @var string
36
     */
37
    protected static $_plural = array();
38
39
    /**
40
     * Returns the plural definition to use
41
     *
42
     * @param  integer $number Number for plural selection
43
     * @param  string  $locale Locale to use
44
     * @return integer Plural number to use
45
     */
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 'bo':
69
            case 'dz':
70
            case 'id':
71
            case 'ja':
72
            case 'jv':
73
            case 'ka':
74
            case 'km':
75
            case 'kn':
76
            case 'ko':
77
            case 'ms':
78
            case 'th':
79
            case 'tr':
80
            case 'vi':
81
            case 'zh':
82
                return 0;
83
                break;
84
85
            case 'af':
86
            case 'az':
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
199
    /**
200
     * Set's a new plural rule
201
     *
202
     * @param string $rule   Callback which acts as rule
203
     * @param string $locale Locale which is used for this callback
204
     * @return null
205
     */
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
}
225