Language::getMap()   B
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 224

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 224
ccs 5
cts 5
cp 1
rs 8
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 2

How to fix   Long Method   

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
namespace CHMLib\Windows;
4
5
/**
6
 * Windows language details.
7
 */
8
class Language
9
{
10
    /**
11
     * Windows language ID.
12
     *
13
     * @var int
14
     */
15
    protected $id;
16
17
    /**
18
     * ISO code of the language.
19
     *
20
     * @var string
21
     */
22
    protected $languageCode;
23
24
    /**
25
     * ISO code of the Country.
26
     *
27
     * @var string
28
     */
29
    protected $countryCode;
30
31
    /**
32
     * English name of the language.
33
     *
34
     * @var string
35
     */
36
    protected $languageName;
37
38
    /**
39
     * English name of the Country.
40
     *
41
     * @var string
42
     */
43
    protected $countryName;
44
45
    /**
46
     * Initializes the instance.
47
     *
48
     * @param int $id The Windows language ID.
49
     */
50 4
    public function __construct($id)
51
    {
52 4
        $this->id = (int) $id;
53 4
        $map = static::getMap();
54 4
        $info = isset($map[$this->id]) ? $map[$this->id] : null;
55 4
        $this->languageCode = ($info === null) ? '' : $info[0];
56 4
        $this->countryCode = ($info === null) ? '' : $info[1];
57 4
        $this->languageName = ($info === null) ? '' : $info[2];
58 4
        $this->countryName = ($info === null) ? '' : $info[3];
59 4
    }
60
61
    /**
62
     * Get the Windows language ID.
63
     *
64
     * @return int
65
     */
66
    public function getID()
67
    {
68
        return $this->id;
69
    }
70
71
    /**
72
     * Get the ISO code of the language (empty string if not available).
73
     *
74
     * @return string
75
     */
76
    public function getLanguageCode()
77
    {
78
        return $this->languageCode;
79
    }
80
81
    /**
82
     * Get the ISO code of the Country (empty string if not available).
83
     *
84
     * @return string
85
     */
86
    public function getCountryCode()
87
    {
88
        return $this->countryCode;
89
    }
90
91
    /**
92
     * Get the English name of the language (empty string if not available).
93
     *
94
     * @return string
95
     */
96
    public function getLanguageName()
97
    {
98
        return $this->languageName;
99
    }
100
101
    /**
102
     * Get the English name of the Country (empty string if not available).
103
     *
104
     * @return string
105
     */
106
    public function getCountryName()
107
    {
108
        return $this->countryName;
109
    }
110
111
    /**
112
     * Returns a string representation of this instance.
113
     *
114
     * @return string
115
     */
116
    public function __toString()
117
    {
118
        if ($this->languageName === '' && $this->countryName === '') {
119
            return 'ID:'.$this->id;
120
        } elseif ($this->countryName === '') {
121
            return $this->languageName;
122
        } elseif ($this->languageName === '') {
123
            return $this->countryName;
124
        } else {
125
            return $this->languageName.' ('.$this->countryName.')';
126
        }
127
    }
128
129
    /**
130
     * Cache the info about the recognized Windows language IDs.
131
     *
132
     * @var array|null
133
     */
134
    protected static $map = null;
135
136
    /**
137
     * Get all the recognized Windows language IDs.
138
     *
139
     * @return array
140
     */
141 4
    protected static function getMap()
142
    {
143 4
        if (!isset(self::$map)) {
144 1
            self::$map = array(
145 1
                0x0436 => array('af', 'ZA', 'Afrikaans', 'South Africa'),
146
                0x041C => array('sq', 'AL', 'Albanian', 'Albania'),
147
                0x0484 => array('gsw', 'FR', 'Alsatian', 'France'),
148
                0x045E => array('am', 'ET', 'Amharic', 'Ethiopia'),
149
                0x1401 => array('ar', 'DZ', 'Arabic', 'Algeria'),
150
                0x3C01 => array('ar', 'BH', 'Arabic', 'Bahrain'),
151
                0x0C01 => array('ar', 'EG', 'Arabic', 'Egypt'),
152
                0x0801 => array('ar', 'IQ', 'Arabic', 'Iraq'),
153
                0x2C01 => array('ar', 'JO', 'Arabic', 'Jordan'),
154
                0x3401 => array('ar', 'KW', 'Arabic', 'Kuwait'),
155
                0x3001 => array('ar', 'LB', 'Arabic', 'Lebanon'),
156
                0x1001 => array('ar', 'LY', 'Arabic', 'Libya'),
157
                0x1801 => array('ar', 'MA', 'Arabic', 'Morocco'),
158
                0x2001 => array('ar', 'OM', 'Arabic', 'Oman'),
159
                0x4001 => array('ar', 'QA', 'Arabic', 'Qatar'),
160
                0x0401 => array('ar', 'SA', 'Arabic', 'Saudi Arabia'),
161
                0x2801 => array('ar', 'SY', 'Arabic', 'Syria'),
162
                0x1C01 => array('ar', 'TN', 'Arabic', 'Tunisia'),
163
                0x3801 => array('ar', 'AE', 'Arabic', 'U.A.E.'),
164
                0x2401 => array('ar', 'YE', 'Arabic', 'Yemen'),
165
                0x042B => array('hy', 'AM', 'Armenian', 'Armenia'),
166
                0x044D => array('as', 'IN', 'Assamese', 'India'),
167
                0x082C => array('az', 'AZ', 'Azerbaijani', 'Azerbaijan, Cyrillic'),
168
                0x042C => array('az', 'AZ', 'Azerbaijani', 'Azerbaijan, Latin'),
169
                0x0445 => array('bn', 'BD', 'Bangla', 'Bangladesh'),
170
                0x046D => array('ba', 'RU', 'Bashkir', 'Russia'),
171
                0x0423 => array('be', 'BY', 'Belarusian', 'Belarus'),
172
                0x201A => array('bs', 'BA', 'Bosnian', 'Bosnia and Herzegovina, Cyrillic'),
173
                0x141A => array('bs', 'BA', 'Bosnian', 'Bosnia and Herzegovina, Latin'),
174
                0x047E => array('br', 'FR', 'Breton', 'France'),
175
                0x0402 => array('bg', 'BG', 'Bulgarian', 'Bulgaria'),
176
                0x0492 => array('ku', 'IQ', 'Central Kurdish', 'Iraq'),
177
                0x0403 => array('ca', 'ES', 'Catalan', 'Spain'),
178
                0x0C04 => array('zh', 'HK', 'Chinese', 'Hong Kong SAR, PRC'),
179
                0x1404 => array('zh', 'MO', 'Chinese', 'Macao SAR'),
180
                0x1004 => array('zh', 'SG', 'Chinese', 'Singapore'),
181
                0x0004 => array('zh', 'CN', 'Chinese', 'Simplified'),
182
                0x7C04 => array('zh', 'TW', 'Chinese', 'Traditional'),
183
                0x0483 => array('co', 'FR', 'Corsican', 'France'),
184
                0x101A => array('hr', 'BA', 'Croatian', 'Bosnia and Herzegovina, Latin'),
185
                0x041A => array('hr', 'HR', 'Croatian', 'Croatia'),
186
                0x0405 => array('cs', 'CZ', 'Czech', 'Czech Republic'),
187
                0x0406 => array('da', 'DK', 'Danish', 'Denmark'),
188
                0x048C => array('prs', 'AF', 'Dari', 'Afghanistan'),
189
                0x0465 => array('dv', 'MV', 'Divehi', 'Maldives'),
190
                0x0813 => array('nl', 'BE', 'Dutch', 'Belgium'),
191
                0x0413 => array('nl', 'NL', 'Dutch', 'Netherlands'),
192
                0x0C09 => array('en', 'AU', 'English', 'Australia'),
193
                0x2809 => array('en', 'BZ', 'English', 'Belize'),
194
                0x1009 => array('en', 'CA', 'English', 'Canada'),
195
                0x2409 => array('en', '29', 'English', 'Caribbean'),
196
                0x4009 => array('en', 'IN', 'English', 'India'),
197
                0x1809 => array('en', 'IE', 'English', 'Ireland'),
198
                0x1809 => array('en', 'IE', 'English', 'Ireland'),
199
                0x2009 => array('en', 'JM', 'English', 'Jamaica'),
200
                0x4409 => array('en', 'MY', 'English', 'Malaysia'),
201
                0x1409 => array('en', 'NZ', 'English', 'New Zealand'),
202
                0x3409 => array('en', 'PH', 'English', 'Philippines'),
203
                0x4809 => array('en', 'SG', 'English', 'Singapore'),
204
                0x1c09 => array('en', 'ZA', 'English', 'South Africa'),
205
                0x2C09 => array('en', 'TT', 'English', 'Trinidad and Tobago'),
206
                0x0809 => array('en', 'GB', 'English', 'United Kingdom'),
207
                0x0409 => array('en', 'US', 'English', 'United States'),
208
                0x3009 => array('en', 'ZW', 'English', 'Zimbabwe'),
209
                0x0425 => array('et', 'EE', 'Estonian', 'Estonia'),
210
                0x0438 => array('fo', 'FO', 'Faroese', 'Faroe Islands'),
211
                0x0464 => array('fil', 'PH', 'Filipino', 'Philippines'),
212
                0x040B => array('fi', 'FI', 'Finnish', 'Finland'),
213
                0x080c => array('fr', 'BE', 'French', 'Belgium'),
214
                0x0C0C => array('fr', 'CA', 'French', 'Canada'),
215
                0x040c => array('fr', 'FR', 'French', 'France'),
216
                0x140C => array('fr', 'LU', 'French', 'Luxembourg'),
217
                0x180C => array('fr', 'MC', 'French', 'Monaco'),
218
                0x100C => array('fr', 'CH', 'French', 'Switzerland'),
219
                0x0462 => array('fy', 'NL', 'Frisian', 'Netherlands'),
220
                0x0456 => array('gl', 'ES', 'Galician', 'Spain'),
221
                0x0437 => array('ka', 'GE', 'Georgian', 'Georgia'),
222
                0x0C07 => array('de', 'AT', 'German', 'Austria'),
223
                0x0407 => array('de', 'DE', 'German', 'Germany'),
224
                0x1407 => array('de', 'LI', 'German', 'Liechtenstein'),
225
                0x1007 => array('de', 'LU', 'German', 'Luxembourg'),
226
                0x0807 => array('de', 'CH', 'German', 'Switzerland'),
227
                0x0408 => array('el', 'GR', 'Greek', 'Greece'),
228
                0x046F => array('kl', 'GL', 'Greenlandic', 'Greenland'),
229
                0x0447 => array('gu', 'IN', 'Gujarati', 'India'),
230
                0x0468 => array('ha', 'NG', 'Hausa', 'Nigeria'),
231
                0x0475 => array('haw', 'US', 'Hawiian', 'United States'),
232
                0x040D => array('he', 'IL', 'Hebrew', 'Israel'),
233
                0x0439 => array('hi', 'IN', 'Hindi', 'India'),
234
                0x040E => array('hu', 'HU', 'Hungarian', 'Hungary'),
235
                0x040F => array('is', 'IS', 'Icelandic', 'Iceland'),
236
                0x0470 => array('ig', 'NG', 'Igbo', 'Nigeria'),
237
                0x0421 => array('id', 'ID', 'Indonesian', 'Indonesia'),
238
                0x085D => array('iu', 'CA', 'Inuktitut', 'Canada, Latin'),
239
                0x045D => array('iu', 'CA', 'Inuktitut', 'Canada, Canadian Syllabics'),
240
                0x083C => array('ga', 'IE', 'Irish', 'Ireland'),
241
                0x0434 => array('xh', 'ZA', 'isiXhosa', 'South Africa'),
242
                0x0435 => array('zu', 'ZA', 'isiZulu', 'South Africa'),
243
                0x0410 => array('it', 'IT', 'Italian', 'Italy'),
244
                0x0810 => array('it', 'CH', 'Italian', 'Switzerland'),
245
                0x0411 => array('ja', 'JP', 'Japanese', 'Japan'),
246
                0x044B => array('kn', 'IN', 'Kannada', 'India'),
247
                0x043F => array('kk', 'KZ', 'Kazakh', 'Kazakhstan'),
248
                0x0453 => array('kh', 'KH', 'Khmer', 'Cambodia'),
249
                0x0486 => array('qut', 'GT', 'K\'iche', 'Guatemala'),
250
                0x0487 => array('rw', 'RW', 'Kinyarwanda', 'Rwanda'),
251
                0x0457 => array('kok', 'IN', 'Konkani', 'India'),
252
                0x0412 => array('ko', 'KR', 'Korean', 'Korea'),
253
                0x0440 => array('ky', 'KG', 'Kyrgyz', 'Kyrgyzstan'),
254
                0x0454 => array('lo', 'LA', 'Lao', 'Lao PDR'),
255
                0x0426 => array('lv', 'LV', 'Latvian', 'Latvia'),
256
                0x0427 => array('lt', 'LT', 'Lithuanian', 'Lithuanian'),
257
                0x082E => array('dsb', 'DE', 'Lower Sorbian', 'Germany'),
258
                0x046E => array('lb', 'LU', 'Luxembourgish', 'Luxembourg'),
259
                0x042F => array('mk', 'MK', 'Macedonian', 'Macedonia - FYROM'),
260
                0x083E => array('ms', 'BN', 'Malay', 'Brunei Darassalam'),
261
                0x043e => array('ms', 'MY', 'Malay', 'Malaysia'),
262
                0x044C => array('ml', 'IN', 'Malayalam', 'India'),
263
                0x043A => array('mt', 'MT', 'Maltese', 'Malta'),
264
                0x0481 => array('mi', 'NZ', 'Maori', 'New Zealand'),
265
                0x047A => array('arn', 'CL', 'Mapudungun', 'Chile'),
266
                0x044E => array('mr', 'IN', 'Marathi', 'India'),
267
                0x047C => array('moh', 'CA', 'Mohawk', 'Canada'),
268
                0x0450 => array('mn', 'MN', 'Mongolian', 'Mongolia, Cyrillic'),
269
                0x0850 => array('mn', 'MN', 'Mongolian', 'Mongolia, Mong'),
270
                0x0461 => array('ne', 'NP', 'Nepali', 'Nepal'),
271
                0x0414 => array('no', 'NO', 'Norwegian', 'Bokmål, Norway'),
272
                0x0814 => array('no', 'NO', 'Norwegian', 'Nynorsk, Norway'),
273
                0x0482 => array('oc', 'FR', 'Occitan', 'France'),
274
                0x0448 => array('or', 'IN', 'Odia', 'India'),
275
                0x0463 => array('ps', 'AF', 'Pashto', 'Afghanistan'),
276
                0x0429 => array('fa', 'IR', 'Persian', 'Iran'),
277
                0x0415 => array('pl', 'PL', 'Polish', 'Poland'),
278
                0x0416 => array('pt', 'BR', 'Portuguese', 'Brazil'),
279
                0x0816 => array('pt', 'PT', 'Portuguese', 'Portugal'),
280
                0x0867 => array('ff', 'SN', 'Pular', 'Senegal'),
281
                0x0446 => array('pa', 'IN', 'Punjabi', 'India, Gurmukhi script'),
282
                0x0846 => array('pa', 'PK', 'Punjabi', 'Pakistan, Arabic script'),
283
                0x046B => array('quz', 'BO', 'Quechua', 'Bolivia'),
284
                0x086B => array('quz', 'EC', 'Quechua', 'Ecuador'),
285
                0x0C6B => array('quz', 'PE', 'Quechua', 'Peru'),
286
                0x0418 => array('ro', 'RO', 'Romanian', 'Romania'),
287
                0x0417 => array('rm', 'CH', 'Romansh', 'Switzerland'),
288
                0x0419 => array('ru', 'RU', 'Russian', 'Russia'),
289
                0x0485 => array('sah', 'RU', 'Sakha', 'Russia'),
290
                0x243B => array('smn', 'FI', 'Sami', 'Inari, Finland'),
291
                0x103B => array('smj', 'NO', 'Sami', 'Lule, Norway'),
292
                0x143B => array('smj', 'SE', 'Sami', 'Lule, Sweden'),
293
                0x0C3B => array('se', 'FI', 'Sami', 'Northern, Finland'),
294
                0x043B => array('se', 'NO', 'Sami', 'Northern, Norway'),
295
                0x083B => array('se', 'SE', 'Sami', 'Northern, Sweden'),
296
                0x203B => array('sms', 'FI', 'Sami', 'Skolt, Finland'),
297
                0x183B => array('sma', 'NO', 'Sami', 'Southern, Norway'),
298
                0x1C3B => array('sma', 'SE', 'Sami', 'Southern, Sweden'),
299
                0x044F => array('sa', 'IN', 'Sanskrit', 'India'),
300
                0x1C1A => array('sr', 'BA', 'Serbian', 'Bosnia and Herzegovina, Cyrillic'),
301
                0x181A => array('sr', 'BA', 'Serbian', 'Bosnia and Herzegovina, Latin'),
302
                0x0C1A => array('sr', 'CS', 'Serbian', 'Serbia and Montenegro - former, Cyrillic'),
303
                0x081A => array('sr', 'CS', 'Serbian', 'Serbia and Montenegro former, Latin'),
304
                0x046C => array('nso', 'ZA', 'Sesotho sa Leboa', 'South Africa'),
305
                0x0832 => array('tn', 'BW', 'Setswana / Tswana', 'Botswana'),
306
                0x0432 => array('tn', 'ZA', 'Setswana / Tswana', 'South Africa'),
307
                0x0859 => array('sd', 'PK', 'Sindhi', 'Pakistan'),
308
                0x045B => array('si', 'LK', 'Sinhala', 'Sri Lanka'),
309
                0x041B => array('sk', 'SK', 'Slovak', 'Slovakia'),
310
                0x0424 => array('sl', 'SI', 'Slovenian', 'Slovenia'),
311
                0x2C0A => array('es', 'AR', 'Spanish', 'Argentina'),
312
                0x400A => array('es', 'BO', 'Spanish', 'Bolivia'),
313
                0x340A => array('es', 'CL', 'Spanish', 'Chile'),
314
                0x240A => array('es', 'CO', 'Spanish', 'Colombia'),
315
                0x140A => array('es', 'CR', 'Spanish', 'Costa Rica'),
316
                0x1C0A => array('es', 'DO', 'Spanish', 'Dominican Republic'),
317
                0x300A => array('es', 'EC', 'Spanish', 'Ecuador'),
318
                0x440A => array('es', 'SV', 'Spanish', 'El Salvador'),
319
                0x100A => array('es', 'GT', 'Spanish', 'Guatemala'),
320
                0x480A => array('es', 'HN', 'Spanish', 'Honduras'),
321
                0x080A => array('es', 'MX', 'Spanish', 'Mexico'),
322
                0x4C0A => array('es', 'NI', 'Spanish', 'Nicaragua'),
323
                0x180A => array('es', 'PA', 'Spanish', 'Panama'),
324
                0x3C0A => array('es', 'PY', 'Spanish', 'Paraguay'),
325
                0x280A => array('es', 'PE', 'Spanish', 'Peru'),
326
                0x500A => array('es', 'PR', 'Spanish', 'Puerto Rico'),
327
                0x0C0A => array('es', 'ES', 'Spanish', 'Spain, Modern Sort'),
328
                0x040A => array('es', 'ES', 'Spanish', 'Spain, Traditional Sort'),
329
                0x540A => array('es', 'US', 'Spanish', 'United States'),
330
                0x380A => array('es', 'UY', 'Spanish', 'Uruguay'),
331
                0x200A => array('es', 'VE', 'Spanish', 'Venezuela'),
332
                0x0441 => array('sw', 'KE', 'Swahili', 'Kenya'),
333
                0x081D => array('sv', 'FI', 'Swedish', 'Finland'),
334
                0x041D => array('sv', 'SE', 'Swedish', 'Sweden'),
335
                0x041D => array('sv', 'SE', 'Swedish', 'Sweden'),
336
                0x045A => array('syr', 'SY', 'Syriac', 'Syria'),
337
                0x0428 => array('tg', 'TJ', 'Tajik', 'Tajikistan, Cyrillic'),
338
                0x085F => array('tzm', 'DZ', 'Tamazight', 'Algeria, Latin'),
339
                0x0449 => array('ta', 'IN', 'Tamil', 'India'),
340
                0x0849 => array('ta', 'LK', 'Tamil', 'Sri Lanka'),
341
                0x0444 => array('tt', 'RU', 'Tatar', 'Russia'),
342
                0x044A => array('te', 'IN', 'Telugu', 'India'),
343
                0x041E => array('th', 'TH', 'Thai', 'Thailand'),
344
                0x0451 => array('bo', 'CN', 'Tibetan', 'PRC'),
345
                0x0873 => array('ti', 'ER', 'Tigrinya', 'Eritrea'),
346
                0x0473 => array('ti', 'ET', 'Tigrinya', 'Ethiopia'),
347
                0x041F => array('tr', 'TR', 'Turkish', 'Turkey'),
348
                0x0442 => array('tk', 'TM', 'Turkmen', 'Turkmenistan'),
349
                0x0422 => array('uk', 'UA', 'Ukrainian', 'Ukraine'),
350
                0x042E => array('hsb', 'DE', 'Upper Sorbian', 'Germany'),
351
                0x0420 => array('ur', 'PK', 'Urdu', 'Pakistan'),
352
                0x0480 => array('ug', 'CN', 'Uyghur', 'PRC'),
353
                0x0843 => array('uz', 'UZ', 'Uzbek', 'Uzbekistan, Cyrillic'),
354
                0x0443 => array('uz', 'UZ', 'Uzbek', 'Uzbekistan, Latin'),
355
                0x042A => array('vi', 'VN', 'Vietnamese', 'Vietnam'),
356
                0x0452 => array('cy', 'GB', 'Welsh', 'United Kingdom'),
357
                0x0488 => array('wo', 'SN', 'Wolof', 'Senegal'),
358
                0x0478 => array('ii', 'CN', 'Yi', 'PRC'),
359
                0x046A => array('yo', 'NG', 'Yoruba', 'Nigeria'),
360
            );
361
        }
362
363 4
        return self::$map;
364
    }
365
}
366