Locale   F
last analyzed

Complexity

Total Complexity 71

Size/Duplication

Total Lines 235
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 71
c 2
b 0
f 1
lcom 0
cbo 0
dl 0
loc 235
ccs 201
cts 201
cp 1
rs 2.6315

1 Method

Rating   Name   Duplication   Size   Complexity  
D byCountryAndLanguage() 0 225 71

How to fix   Complexity   

Complex Class

Complex classes like Locale often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Locale, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
namespace Jobles\Careerjet;
4
5
class Locale
6
{
7
8
    /**
9
     * @param string      $country
10
     * @param string|null $language
11
     *
12
     * @return string
13
     */
14 65
    public static function byCountryAndLanguage(string $country, string $language = null) : string
15
    {
16
        switch ($country) {
17 65
            case 'Australia': // English
18 1
                $locale = 'en_AU';
19 1
                break;
20 64
            case 'Austria': // German
21 1
                $locale = 'de_AT';
22 1
                break;
23 63
            case 'Argentina': // Spanish
24 1
                $locale = 'es_AR';
25 1
                break;
26 62
            case 'Belgium':
27
                switch ($language) {
28 2
                    case 'French':
29 1
                        $locale = 'fr_BE';
30 1
                        break;
31 1
                    case 'Dutch':
32
                    default:
33 1
                        $locale = 'nl_BE';
34
                }
35 2
                break;
36 60
            case 'Bolivia': // Spanish
37 1
                $locale = 'es_BO';
38 1
                break;
39 59
            case 'Brazil': // Portuguese
40 1
                $locale = 'pt_BR';
41 1
                break;
42 58
            case 'Canada': // French
43
                switch ($language) {
44 2
                    case 'French':
45 1
                        $locale = 'fr_CA';
46 1
                        break;
47 1
                    case 'English':
48
                    default:
49 1
                        $locale = 'en_CA';
50
                }
51 2
                break;
52 56
            case 'Chile': // Spanish
53 1
                $locale = 'es_CL';
54 1
                break;
55 55
            case 'China':
56
                switch ($language) {
57 2
                    case 'English':
58 1
                        $locale = 'en_CN';
59 1
                        break;
60 1
                    case 'Chinese':
61
                    default:
62 1
                        $locale = 'zh_CN';
63
                }
64 2
                break;
65 53
            case 'Costa Rica': // Spanish
66 1
                $locale = 'es_CR';
67 1
                break;
68 52
            case 'Czech Republic': // Czech
69 1
                $locale = 'cs_CZ';
70 1
                break;
71 51
            case 'Denmark': // Danish
72 1
                $locale = 'da_DK';
73 1
                break;
74 50
            case 'Dominican Republic': // Spanish
75 1
                $locale = 'es_DO';
76 1
                break;
77 49
            case 'Ecuador': // Spanish
78 1
                $locale = 'es_EC';
79 1
                break;
80 48
            case 'Finland': // Finnish
81 1
                $locale = 'fi_FI';
82 1
                break;
83 47
            case 'France': // French
84 1
                $locale = 'fr_FR';
85 1
                break;
86 46
            case 'Germany': // German
87 1
                $locale = 'de_DE';
88 1
                break;
89 45
            case 'Guatemala': // Spanish
90 1
                $locale = 'es_GT';
91 1
                break;
92 44
            case 'Hungary': // Hungarian
93 1
                $locale = 'hu_HU';
94 1
                break;
95 43
            case 'Hong Kong': // English
96 1
                $locale = 'en_HK';
97 1
                break;
98 42
            case 'Italy': // Italian
99 1
                $locale = 'it_IT';
100 1
                break;
101 41
            case 'Ireland': // English
102 1
                $locale = 'en_IE';
103 1
                break;
104 40
            case 'India': // English
105 1
                $locale = 'en_IN';
106 1
                break;
107 39
            case 'Japan': // Japanese
108 1
                $locale = 'ja_JP';
109 1
                break;
110 38
            case 'Korea': // Korean
111 1
                $locale = 'ko_KR';
112 1
                break;
113 37
            case 'Luxembourg': // French
114 1
                $locale = 'fr_LU';
115 1
                break;
116 36
            case 'Malaysia': // English
117 1
                $locale = 'en_MY';
118 1
                break;
119 35
            case 'Mexico': // Spanish
120 1
                $locale = 'es_MX';
121 1
                break;
122 34
            case 'Morocco': // French
123 1
                $locale = 'fr_MA';
124 1
                break;
125 33
            case 'Netherlands': // Dutch
126 1
                $locale = 'nl_NL';
127 1
                break;
128 32
            case 'New Zealand': // English
129 1
                $locale = 'en_NZ';
130 1
                break;
131 31
            case 'Norway': // Norwegian
132 1
                $locale = 'no_NO';
133 1
                break;
134 30
            case 'Oman': // English
135 1
                $locale = 'en_OM';
136 1
                break;
137 29
            case 'Pakistan': // English
138 1
                $locale = 'en_PK';
139 1
                break;
140 28
            case 'Panama': // Spanish
141 1
                $locale = 'es_PA';
142 1
                break;
143 27
            case 'Paraguay': // Spanish
144 1
                $locale = 'es_PY';
145 1
                break;
146 26
            case 'Philippines': // English
147 1
                $locale = 'en_PH';
148 1
                break;
149 25
            case 'Peru': // Spanish
150 1
                $locale = 'es_PE';
151 1
                break;
152 24
            case 'Poland': // Polish
153 1
                $locale = 'pl_PL';
154 1
                break;
155 23
            case 'Portugal': // Portuguese
156 1
                $locale = 'pt_PT';
157 1
                break;
158 22
            case 'Puerto Rico': // Spanish
159 1
                $locale = 'es_PR';
160 1
                break;
161 21
            case 'Qatar': // English
162 1
                $locale = 'en_QA';
163 1
                break;
164 20
            case 'Russia': // Russian
165 1
                $locale = 'ru_RU';
166 1
                break;
167 19
            case 'Singapore': // English
168 1
                $locale = 'en_SG';
169 1
                break;
170 18
            case 'Slovakia': // Slovak
171 1
                $locale = 'sk_SK';
172 1
                break;
173 17
            case 'South Africa': // English
174 1
                $locale = 'en_ZA';
175 1
                break;
176 16
            case 'Spain': // Spanish
177 1
                $locale = 'es_ES';
178 1
                break;
179 15
            case 'Sweden': // Swedish
180 1
                $locale = 'sv_SE';
181 1
                break;
182 14
            case 'Switzerland':
183
                switch ($language) {
184 2
                    case 'German':
185 1
                        $locale = 'de_CH';
186 1
                        break;
187 1
                    case 'French':
188
                    default:
189 1
                        $locale = 'fr_CH';
190
                }
191 2
                break;
192 12
            case 'Taiwan': // English
193 1
                $locale = 'en_TW';
194 1
                break;
195 11
            case 'Turkey': // Turkish
196 1
                $locale = 'tr_TR';
197 1
                break;
198 10
            case 'Ukraine':
199
                switch ($language) {
200 2
                    case 'Russian':
201 1
                        $locale = 'ru_UA';
202 1
                        break;
203 1
                    case 'Ukrainian':
204
                    default:
205 1
                        $locale = 'uk_UA';
206
                }
207 2
                break;
208 8
            case 'United Arab Emirates': // English
209 1
                $locale = 'en_AE';
210 1
                break;
211 7
            case 'United Kingdom': // English
212 1
                $locale = 'en_GB';
213 1
                break;
214 6
            case 'United States': // English
215 1
                $locale = 'en_US';
216 1
                break;
217 5
            case 'Uruguay': // Spanish
218 1
                $locale = 'es_UY';
219 1
                break;
220 4
            case 'Venezuela': // Spanish
221 1
                $locale = 'es_VE';
222 1
                break;
223 3
            case 'Vietnam':
224
                switch ($language) {
225 2
                    case 'English':
226 1
                        $locale = 'en_VN';
227 1
                        break;
228 1
                    case 'Vietnamese':
229
                    default:
230 1
                        $locale = 'vi_VN';
231
                }
232 2
                break;
233
            default:
234 1
                throw new \InvalidArgumentException('Please use a valid country');
235
        }
236
237 64
        return $locale;
238
    }
239
}
240