Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Passed
Pull Request — master (#1145)
by
unknown
02:47
created

LanguageCode::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 10
c 0
b 0
f 0
ccs 6
cts 6
cp 1
rs 10
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
/*
4
 * This file is part of Respect/Validation.
5
 *
6
 * (c) Alexandre Gomes Gaigalas <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the "LICENSE.md"
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace Respect\Validation\Rules;
15
16
use Respect\Validation\Exceptions\ComponentException;
17
use function array_search;
18
use function in_array;
19
use function is_string;
20
use function mb_strtoupper;
21
22
/**
23
 * Validates languages in ISO 639.
24
 *
25
 * @author Danilo Benevides <[email protected]>
26
 * @author Emmerson <[email protected]>
27
 * @author Henrique Moody <[email protected]>
28
 */
29
final class LanguageCode extends AbstractRule
30
{
31
    private const ALPHA2 = 'alpha-2';
32
    private const ALPHA3 = 'alpha-3';
33
34
    /**
35
     * @see http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt
36
     *
37
     * @var array
38
     */
39
    private $languageCodeList = [
40
        ['AA', 'AAR'], // AFAR
41
        ['AB', 'ABK'], // ABKHAZIAN
42
        ['', 'ACE'], // ACHINESE
43
        ['', 'ACH'], // ACOLI
44
        ['', 'ADA'], // ADANGME
45
        ['', 'ADY'], // ADYGHE; ADYGEI
46
        ['', 'AFA'], // AFRO-ASIATIC LANGUAGES
47
        ['', 'AFH'], // AFRIHILI
48
        ['AF', 'AFR'], // AFRIKAANS
49
        ['', 'AIN'], // AINU
50
        ['AK', 'AKA'], // AKAN
51
        ['', 'AKK'], // AKKADIAN
52
        ['SQ', 'ALB'], // ALBANIAN
53
        ['', 'ALE'], // ALEUT
54
        ['', 'ALG'], // ALGONQUIAN LANGUAGES
55
        ['', 'ALT'], // SOUTHERN ALTAI
56
        ['AM', 'AMH'], // AMHARIC
57
        ['', 'ANG'], // ENGLISH, OLD (CA.450-1100)
58
        ['', 'ANP'], // ANGIKA
59
        ['', 'APA'], // APACHE LANGUAGES
60
        ['AR', 'ARA'], // ARABIC
61
        ['', 'ARC'], // OFFICIAL ARAMAIC (700-300 BCE); IMPERIAL ARAMAIC (700-300 BCE)
62
        ['AN', 'ARG'], // ARAGONESE
63
        ['HY', 'ARM'], // ARMENIAN
64
        ['', 'ARN'], // MAPUDUNGUN; MAPUCHE
65
        ['', 'ARP'], // ARAPAHO
66
        ['', 'ART'], // ARTIFICIAL LANGUAGES
67
        ['', 'ARW'], // ARAWAK
68
        ['AS', 'ASM'], // ASSAMESE
69
        ['', 'AST'], // ASTURIAN; BABLE; LEONESE; ASTURLEONESE
70
        ['', 'ATH'], // ATHAPASCAN LANGUAGES
71
        ['', 'AUS'], // AUSTRALIAN LANGUAGES
72
        ['AV', 'AVA'], // AVARIC
73
        ['AE', 'AVE'], // AVESTAN
74
        ['', 'AWA'], // AWADHI
75
        ['AY', 'AYM'], // AYMARA
76
        ['AZ', 'AZE'], // AZERBAIJANI
77
        ['', 'BAD'], // BANDA LANGUAGES
78
        ['', 'BAI'], // BAMILEKE LANGUAGES
79
        ['BA', 'BAK'], // BASHKIR
80
        ['', 'BAL'], // BALUCHI
81
        ['BM', 'BAM'], // BAMBARA
82
        ['', 'BAN'], // BALINESE
83
        ['EU', 'BAQ'], // BASQUE
84
        ['', 'BAS'], // BASA
85
        ['', 'BAT'], // BALTIC LANGUAGES
86
        ['', 'BEJ'], // BEJA; BEDAWIYET
87
        ['BE', 'BEL'], // BELARUSIAN
88
        ['', 'BEM'], // BEMBA
89
        ['BN', 'BEN'], // BENGALI
90
        ['', 'BER'], // BERBER LANGUAGES
91
        ['', 'BHO'], // BHOJPURI
92
        ['BH', 'BIH'], // BIHARI LANGUAGES
93
        ['', 'BIK'], // BIKOL
94
        ['', 'BIN'], // BINI; EDO
95
        ['BI', 'BIS'], // BISLAMA
96
        ['', 'BLA'], // SIKSIKA
97
        ['', 'BNT'], // BANTU (OTHER)
98
        ['BS', 'BOS'], // BOSNIAN
99
        ['', 'BRA'], // BRAJ
100
        ['BR', 'BRE'], // BRETON
101
        ['', 'BTK'], // BATAK LANGUAGES
102
        ['', 'BUA'], // BURIAT
103
        ['', 'BUG'], // BUGINESE
104
        ['BG', 'BUL'], // BULGARIAN
105
        ['MY', 'BUR'], // BURMESE
106
        ['', 'BYN'], // BLIN; BILIN
107
        ['', 'CAD'], // CADDO
108
        ['', 'CAI'], // CENTRAL AMERICAN INDIAN LANGUAGES
109
        ['', 'CAR'], // GALIBI CARIB
110
        ['CA', 'CAT'], // CATALAN; VALENCIAN
111
        ['', 'CAU'], // CAUCASIAN LANGUAGES
112
        ['', 'CEB'], // CEBUANO
113
        ['', 'CEL'], // CELTIC LANGUAGES
114
        ['CH', 'CHA'], // CHAMORRO
115
        ['', 'CHB'], // CHIBCHA
116
        ['CE', 'CHE'], // CHECHEN
117
        ['', 'CHG'], // CHAGATAI
118
        ['ZH', 'CHI'], // CHINESE
119
        ['', 'CHK'], // CHUUKESE
120
        ['', 'CHM'], // MARI
121
        ['', 'CHN'], // CHINOOK JARGON
122
        ['', 'CHO'], // CHOCTAW
123
        ['', 'CHP'], // CHIPEWYAN; DENE SULINE
124
        ['', 'CHR'], // CHEROKEE
125
        ['CU', 'CHU'], // CHURCH SLAVIC; OLD SLAVONIC; CHURCH SLAVONIC; OLD BULGARIAN; OLD CHURCH SLAVONIC
126
        ['CV', 'CHV'], // CHUVASH
127
        ['', 'CHY'], // CHEYENNE
128
        ['', 'CMC'], // CHAMIC LANGUAGES
129
        ['', 'COP'], // COPTIC
130
        ['KW', 'COR'], // CORNISH
131
        ['CO', 'COS'], // CORSICAN
132
        ['', 'CPE'], // CREOLES AND PIDGINS, ENGLISH BASED
133
        ['', 'CPF'], // CREOLES AND PIDGINS, FRENCH-BASED
134
        ['', 'CPP'], // CREOLES AND PIDGINS, PORTUGUESE-BASED
135
        ['CR', 'CRE'], // CREE
136
        ['', 'CRH'], // CRIMEAN TATAR; CRIMEAN TURKISH
137
        ['', 'CRP'], // CREOLES AND PIDGINS
138
        ['', 'CSB'], // KASHUBIAN
139
        ['', 'CUS'], // CUSHITIC LANGUAGES
140
        ['CS', 'CZE'], // CZECH
141
        ['', 'DAK'], // DAKOTA
142
        ['DA', 'DAN'], // DANISH
143
        ['', 'DAR'], // DARGWA
144
        ['', 'DAY'], // LAND DAYAK LANGUAGES
145
        ['', 'DEL'], // DELAWARE
146
        ['', 'DEN'], // SLAVE (ATHAPASCAN)
147
        ['', 'DGR'], // DOGRIB
148
        ['', 'DIN'], // DINKA
149
        ['DV', 'DIV'], // DIVEHI; DHIVEHI; MALDIVIAN
150
        ['', 'DOI'], // DOGRI
151
        ['', 'DRA'], // DRAVIDIAN LANGUAGES
152
        ['', 'DSB'], // LOWER SORBIAN
153
        ['', 'DUA'], // DUALA
154
        ['', 'DUM'], // DUTCH, MIDDLE (CA.1050-1350)
155
        ['NL', 'DUT'], // DUTCH; FLEMISH
156
        ['', 'DYU'], // DYULA
157
        ['DZ', 'DZO'], // DZONGKHA
158
        ['', 'EFI'], // EFIK
159
        ['', 'EGY'], // EGYPTIAN (ANCIENT)
160
        ['', 'EKA'], // EKAJUK
161
        ['', 'ELX'], // ELAMITE
162
        ['EN', 'ENG'], // ENGLISH
163
        ['', 'ENM'], // ENGLISH, MIDDLE (1100-1500)
164
        ['EO', 'EPO'], // ESPERANTO
165
        ['ET', 'EST'], // ESTONIAN
166
        ['EE', 'EWE'], // EWE
167
        ['', 'EWO'], // EWONDO
168
        ['', 'FAN'], // FANG
169
        ['FO', 'FAO'], // FAROESE
170
        ['', 'FAT'], // FANTI
171
        ['FJ', 'FIJ'], // FIJIAN
172
        ['', 'FIL'], // FILIPINO; PILIPINO
173
        ['FI', 'FIN'], // FINNISH
174
        ['', 'FIU'], // FINNO-UGRIAN LANGUAGES
175
        ['', 'FON'], // FON
176
        ['FR', 'FRE'], // FRENCH
177
        ['', 'FRM'], // FRENCH, MIDDLE (CA.1400-1600)
178
        ['', 'FRO'], // FRENCH, OLD (842-CA.1400)
179
        ['', 'FRR'], // NORTHERN FRISIAN
180
        ['', 'FRS'], // EASTERN FRISIAN
181
        ['FY', 'FRY'], // WESTERN FRISIAN
182
        ['FF', 'FUL'], // FULAH
183
        ['', 'FUR'], // FRIULIAN
184
        ['', 'GAA'], // GA
185
        ['', 'GAY'], // GAYO
186
        ['', 'GBA'], // GBAYA
187
        ['', 'GEM'], // GERMANIC LANGUAGES
188
        ['KA', 'GEO'], // GEORGIAN
189
        ['DE', 'GER'], // GERMAN
190
        ['', 'GEZ'], // GEEZ
191
        ['', 'GIL'], // GILBERTESE
192
        ['GD', 'GLA'], // GAELIC; SCOTTISH GAELIC
193
        ['GA', 'GLE'], // IRISH
194
        ['GL', 'GLG'], // GALICIAN
195
        ['GV', 'GLV'], // MANX
196
        ['', 'GMH'], // GERMAN, MIDDLE HIGH (CA.1050-1500)
197
        ['', 'GOH'], // GERMAN, OLD HIGH (CA.750-1050)
198
        ['', 'GON'], // GONDI
199
        ['', 'GOR'], // GORONTALO
200
        ['', 'GOT'], // GOTHIC
201
        ['', 'GRB'], // GREBO
202
        ['', 'GRC'], // GREEK, ANCIENT (TO 1453)
203
        ['EL', 'GRE'], // GREEK, MODERN (1453-)
204
        ['GN', 'GRN'], // GUARANI
205
        ['', 'GSW'], // SWISS GERMAN; ALEMANNIC; ALSATIAN
206
        ['GU', 'GUJ'], // GUJARATI
207
        ['', 'GWI'], // GWICH'IN
208
        ['', 'HAI'], // HAIDA
209
        ['HT', 'HAT'], // HAITIAN; HAITIAN CREOLE
210
        ['HA', 'HAU'], // HAUSA
211
        ['', 'HAW'], // HAWAIIAN
212
        ['HE', 'HEB'], // HEBREW
213
        ['HZ', 'HER'], // HERERO
214
        ['', 'HIL'], // HILIGAYNON
215
        ['', 'HIM'], // HIMACHALI LANGUAGES; WESTERN PAHARI LANGUAGES
216
        ['HI', 'HIN'], // HINDI
217
        ['', 'HIT'], // HITTITE
218
        ['', 'HMN'], // HMONG; MONG
219
        ['HO', 'HMO'], // HIRI MOTU
220
        ['HR', 'HRV'], // CROATIAN
221
        ['', 'HSB'], // UPPER SORBIAN
222
        ['HU', 'HUN'], // HUNGARIAN
223
        ['', 'HUP'], // HUPA
224
        ['', 'IBA'], // IBAN
225
        ['IG', 'IBO'], // IGBO
226
        ['IS', 'ICE'], // ICELANDIC
227
        ['IO', 'IDO'], // IDO
228
        ['II', 'III'], // SICHUAN YI; NUOSU
229
        ['', 'IJO'], // IJO LANGUAGES
230
        ['IU', 'IKU'], // INUKTITUT
231
        ['IE', 'ILE'], // INTERLINGUE; OCCIDENTAL
232
        ['', 'ILO'], // ILOKO
233
        ['IA', 'INA'], // INTERLINGUA (INTERNATIONAL AUXILIARY LANGUAGE ASSOCIATION)
234
        ['', 'INC'], // INDIC LANGUAGES
235
        ['ID', 'IND'], // INDONESIAN
236
        ['', 'INE'], // INDO-EUROPEAN LANGUAGES
237
        ['', 'INH'], // INGUSH
238
        ['IK', 'IPK'], // INUPIAQ
239
        ['', 'IRA'], // IRANIAN LANGUAGES
240
        ['', 'IRO'], // IROQUOIAN LANGUAGES
241
        ['IT', 'ITA'], // ITALIAN
242
        ['JV', 'JAV'], // JAVANESE
243
        ['', 'JBO'], // LOJBAN
244
        ['JA', 'JPN'], // JAPANESE
245
        ['', 'JPR'], // JUDEO-PERSIAN
246
        ['', 'JRB'], // JUDEO-ARABIC
247
        ['', 'KAA'], // KARA-KALPAK
248
        ['', 'KAB'], // KABYLE
249
        ['', 'KAC'], // KACHIN; JINGPHO
250
        ['KL', 'KAL'], // KALAALLISUT; GREENLANDIC
251
        ['', 'KAM'], // KAMBA
252
        ['KN', 'KAN'], // KANNADA
253
        ['', 'KAR'], // KAREN LANGUAGES
254
        ['KS', 'KAS'], // KASHMIRI
255
        ['KR', 'KAU'], // KANURI
256
        ['', 'KAW'], // KAWI
257
        ['KK', 'KAZ'], // KAZAKH
258
        ['', 'KBD'], // KABARDIAN
259
        ['', 'KHA'], // KHASI
260
        ['', 'KHI'], // KHOISAN LANGUAGES
261
        ['KM', 'KHM'], // CENTRAL KHMER
262
        ['', 'KHO'], // KHOTANESE; SAKAN
263
        ['KI', 'KIK'], // KIKUYU; GIKUYU
264
        ['RW', 'KIN'], // KINYARWANDA
265
        ['KY', 'KIR'], // KIRGHIZ; KYRGYZ
266
        ['', 'KMB'], // KIMBUNDU
267
        ['', 'KOK'], // KONKANI
268
        ['KV', 'KOM'], // KOMI
269
        ['KG', 'KON'], // KONGO
270
        ['KO', 'KOR'], // KOREAN
271
        ['', 'KOS'], // KOSRAEAN
272
        ['', 'KPE'], // KPELLE
273
        ['', 'KRC'], // KARACHAY-BALKAR
274
        ['', 'KRL'], // KARELIAN
275
        ['', 'KRO'], // KRU LANGUAGES
276
        ['', 'KRU'], // KURUKH
277
        ['KJ', 'KUA'], // KUANYAMA; KWANYAMA
278
        ['', 'KUM'], // KUMYK
279
        ['KU', 'KUR'], // KURDISH
280
        ['', 'KUT'], // KUTENAI
281
        ['', 'LAD'], // LADINO
282
        ['', 'LAH'], // LAHNDA
283
        ['', 'LAM'], // LAMBA
284
        ['LO', 'LAO'], // LAO
285
        ['LA', 'LAT'], // LATIN
286
        ['LV', 'LAV'], // LATVIAN
287
        ['', 'LEZ'], // LEZGHIAN
288
        ['LI', 'LIM'], // LIMBURGAN; LIMBURGER; LIMBURGISH
289
        ['LN', 'LIN'], // LINGALA
290
        ['LT', 'LIT'], // LITHUANIAN
291
        ['', 'LOL'], // MONGO
292
        ['', 'LOZ'], // LOZI
293
        ['LB', 'LTZ'], // LUXEMBOURGISH; LETZEBURGESCH
294
        ['', 'LUA'], // LUBA-LULUA
295
        ['LU', 'LUB'], // LUBA-KATANGA
296
        ['LG', 'LUG'], // GANDA
297
        ['', 'LUI'], // LUISENO
298
        ['', 'LUN'], // LUNDA
299
        ['', 'LUO'], // LUO (KENYA AND TANZANIA)
300
        ['', 'LUS'], // LUSHAI
301
        ['MK', 'MAC'], // MACEDONIAN
302
        ['', 'MAD'], // MADURESE
303
        ['', 'MAG'], // MAGAHI
304
        ['MH', 'MAH'], // MARSHALLESE
305
        ['', 'MAI'], // MAITHILI
306
        ['', 'MAK'], // MAKASAR
307
        ['ML', 'MAL'], // MALAYALAM
308
        ['', 'MAN'], // MANDINGO
309
        ['MI', 'MAO'], // MAORI
310
        ['', 'MAP'], // AUSTRONESIAN LANGUAGES
311
        ['MR', 'MAR'], // MARATHI
312
        ['', 'MAS'], // MASAI
313
        ['MS', 'MAY'], // MALAY
314
        ['', 'MDF'], // MOKSHA
315
        ['', 'MDR'], // MANDAR
316
        ['', 'MEN'], // MENDE
317
        ['', 'MGA'], // IRISH, MIDDLE (900-1200)
318
        ['', 'MIC'], // MI'KMAQ; MICMAC
319
        ['', 'MIN'], // MINANGKABAU
320
        ['', 'MIS'], // UNCODED LANGUAGES
321
        ['', 'MKH'], // MON-KHMER LANGUAGES
322
        ['MG', 'MLG'], // MALAGASY
323
        ['MT', 'MLT'], // MALTESE
324
        ['', 'MNC'], // MANCHU
325
        ['', 'MNI'], // MANIPURI
326
        ['', 'MNO'], // MANOBO LANGUAGES
327
        ['', 'MOH'], // MOHAWK
328
        ['MN', 'MON'], // MONGOLIAN
329
        ['', 'MOS'], // MOSSI
330
        ['', 'MUL'], // MULTIPLE LANGUAGES
331
        ['', 'MUN'], // MUNDA LANGUAGES
332
        ['', 'MUS'], // CREEK
333
        ['', 'MWL'], // MIRANDESE
334
        ['', 'MWR'], // MARWARI
335
        ['', 'MYN'], // MAYAN LANGUAGES
336
        ['', 'MYV'], // ERZYA
337
        ['', 'NAH'], // NAHUATL LANGUAGES
338
        ['', 'NAI'], // NORTH AMERICAN INDIAN LANGUAGES
339
        ['', 'NAP'], // NEAPOLITAN
340
        ['NA', 'NAU'], // NAURU
341
        ['NV', 'NAV'], // NAVAJO; NAVAHO
342
        ['NR', 'NBL'], // NDEBELE, SOUTH; SOUTH NDEBELE
343
        ['ND', 'NDE'], // NDEBELE, NORTH; NORTH NDEBELE
344
        ['NG', 'NDO'], // NDONGA
345
        ['', 'NDS'], // LOW GERMAN; LOW SAXON; GERMAN, LOW; SAXON, LOW
346
        ['NE', 'NEP'], // NEPALI
347
        ['', 'NEW'], // NEPAL BHASA; NEWARI
348
        ['', 'NIA'], // NIAS
349
        ['', 'NIC'], // NIGER-KORDOFANIAN LANGUAGES
350
        ['', 'NIU'], // NIUEAN
351
        ['NN', 'NNO'], // NORWEGIAN NYNORSK; NYNORSK, NORWEGIAN
352
        ['NB', 'NOB'], // BOKMÅL, NORWEGIAN; NORWEGIAN BOKMÅL
353
        ['', 'NOG'], // NOGAI
354
        ['', 'NON'], // NORSE, OLD
355
        ['NO', 'NOR'], // NORWEGIAN
356
        ['', 'NQO'], // N'KO
357
        ['', 'NSO'], // PEDI; SEPEDI; NORTHERN SOTHO
358
        ['', 'NUB'], // NUBIAN LANGUAGES
359
        ['', 'NWC'], // CLASSICAL NEWARI; OLD NEWARI; CLASSICAL NEPAL BHASA
360
        ['NY', 'NYA'], // CHICHEWA; CHEWA; NYANJA
361
        ['', 'NYM'], // NYAMWEZI
362
        ['', 'NYN'], // NYANKOLE
363
        ['', 'NYO'], // NYORO
364
        ['', 'NZI'], // NZIMA
365
        ['OC', 'OCI'], // OCCITAN (POST 1500); PROVENÇAL
366
        ['OJ', 'OJI'], // OJIBWA
367
        ['OR', 'ORI'], // ORIYA
368
        ['OM', 'ORM'], // OROMO
369
        ['', 'OSA'], // OSAGE
370
        ['OS', 'OSS'], // OSSETIAN; OSSETIC
371
        ['', 'OTA'], // TURKISH, OTTOMAN (1500-1928)
372
        ['', 'OTO'], // OTOMIAN LANGUAGES
373
        ['', 'PAA'], // PAPUAN LANGUAGES
374
        ['', 'PAG'], // PANGASINAN
375
        ['', 'PAL'], // PAHLAVI
376
        ['', 'PAM'], // PAMPANGA; KAPAMPANGAN
377
        ['PA', 'PAN'], // PANJABI; PUNJABI
378
        ['', 'PAP'], // PAPIAMENTO
379
        ['', 'PAU'], // PALAUAN
380
        ['', 'PEO'], // PERSIAN, OLD (CA.600-400 B.C.)
381
        ['FA', 'PER'], // PERSIAN
382
        ['', 'PHI'], // PHILIPPINE LANGUAGES
383
        ['', 'PHN'], // PHOENICIAN
384
        ['PI', 'PLI'], // PALI
385
        ['PL', 'POL'], // POLISH
386
        ['', 'PON'], // POHNPEIAN
387
        ['PT', 'POR'], // PORTUGUESE
388
        ['', 'PRA'], // PRAKRIT LANGUAGES
389
        ['', 'PRO'], // PROVENÇAL, OLD (TO 1500)
390
        ['PS', 'PUS'], // PUSHTO; PASHTO
391
        ['', 'QAA-QTZ'], // RESERVED FOR LOCAL USE
392
        ['QU', 'QUE'], // QUECHUA
393
        ['', 'RAJ'], // RAJASTHANI
394
        ['', 'RAP'], // RAPANUI
395
        ['', 'RAR'], // RAROTONGAN; COOK ISLANDS MAORI
396
        ['', 'ROA'], // ROMANCE LANGUAGES
397
        ['RM', 'ROH'], // ROMANSH
398
        ['', 'ROM'], // ROMANY
399
        ['RO', 'RUM'], // ROMANIAN; MOLDAVIAN; MOLDOVAN
400
        ['RN', 'RUN'], // RUNDI
401
        ['', 'RUP'], // AROMANIAN; ARUMANIAN; MACEDO-ROMANIAN
402
        ['RU', 'RUS'], // RUSSIAN
403
        ['', 'SAD'], // SANDAWE
404
        ['SG', 'SAG'], // SANGO
405
        ['', 'SAH'], // YAKUT
406
        ['', 'SAI'], // SOUTH AMERICAN INDIAN (OTHER)
407
        ['', 'SAL'], // SALISHAN LANGUAGES
408
        ['', 'SAM'], // SAMARITAN ARAMAIC
409
        ['SA', 'SAN'], // SANSKRIT
410
        ['', 'SAS'], // SASAK
411
        ['', 'SAT'], // SANTALI
412
        ['', 'SCN'], // SICILIAN
413
        ['', 'SCO'], // SCOTS
414
        ['', 'SEL'], // SELKUP
415
        ['', 'SEM'], // SEMITIC LANGUAGES
416
        ['', 'SGA'], // IRISH, OLD (TO 900)
417
        ['', 'SGN'], // SIGN LANGUAGES
418
        ['', 'SHN'], // SHAN
419
        ['', 'SID'], // SIDAMO
420
        ['SI', 'SIN'], // SINHALA; SINHALESE
421
        ['', 'SIO'], // SIOUAN LANGUAGES
422
        ['', 'SIT'], // SINO-TIBETAN LANGUAGES
423
        ['', 'SLA'], // SLAVIC LANGUAGES
424
        ['SK', 'SLO'], // SLOVAK
425
        ['SL', 'SLV'], // SLOVENIAN
426
        ['', 'SMA'], // SOUTHERN SAMI
427
        ['SE', 'SME'], // NORTHERN SAMI
428
        ['', 'SMI'], // SAMI LANGUAGES
429
        ['', 'SMJ'], // LULE SAMI
430
        ['', 'SMN'], // INARI SAMI
431
        ['SM', 'SMO'], // SAMOAN
432
        ['', 'SMS'], // SKOLT SAMI
433
        ['SN', 'SNA'], // SHONA
434
        ['SD', 'SND'], // SINDHI
435
        ['', 'SNK'], // SONINKE
436
        ['', 'SOG'], // SOGDIAN
437
        ['SO', 'SOM'], // SOMALI
438
        ['', 'SON'], // SONGHAI LANGUAGES
439
        ['ST', 'SOT'], // SOTHO, SOUTHERN
440
        ['ES', 'SPA'], // SPANISH; CASTILIAN
441
        ['SC', 'SRD'], // SARDINIAN
442
        ['', 'SRN'], // SRANAN TONGO
443
        ['SR', 'SRP'], // SERBIAN
444
        ['', 'SRR'], // SERER
445
        ['', 'SSA'], // NILO-SAHARAN LANGUAGES
446
        ['SS', 'SSW'], // SWATI
447
        ['', 'SUK'], // SUKUMA
448
        ['SU', 'SUN'], // SUNDANESE
449
        ['', 'SUS'], // SUSU
450
        ['', 'SUX'], // SUMERIAN
451
        ['SW', 'SWA'], // SWAHILI
452
        ['SV', 'SWE'], // SWEDISH
453
        ['', 'SYC'], // CLASSICAL SYRIAC
454
        ['', 'SYR'], // SYRIAC
455
        ['TY', 'TAH'], // TAHITIAN
456
        ['', 'TAI'], // TAI LANGUAGES
457
        ['TA', 'TAM'], // TAMIL
458
        ['TT', 'TAT'], // TATAR
459
        ['TE', 'TEL'], // TELUGU
460
        ['', 'TEM'], // TIMNE
461
        ['', 'TER'], // TERENO
462
        ['', 'TET'], // TETUM
463
        ['TG', 'TGK'], // TAJIK
464
        ['TL', 'TGL'], // TAGALOG
465
        ['TH', 'THA'], // THAI
466
        ['BO', 'TIB'], // TIBETAN
467
        ['', 'TIG'], // TIGRE
468
        ['TI', 'TIR'], // TIGRINYA
469
        ['', 'TIV'], // TIV
470
        ['', 'TKL'], // TOKELAU
471
        ['', 'TLH'], // KLINGON; TLHINGAN-HOL
472
        ['', 'TLI'], // TLINGIT
473
        ['', 'TMH'], // TAMASHEK
474
        ['', 'TOG'], // TONGA (NYASA)
475
        ['TO', 'TON'], // TONGA (TONGA ISLANDS)
476
        ['', 'TPI'], // TOK PISIN
477
        ['', 'TSI'], // TSIMSHIAN
478
        ['TN', 'TSN'], // TSWANA
479
        ['TS', 'TSO'], // TSONGA
480
        ['TK', 'TUK'], // TURKMEN
481
        ['', 'TUM'], // TUMBUKA
482
        ['', 'TUP'], // TUPI LANGUAGES
483
        ['TR', 'TUR'], // TURKISH
484
        ['', 'TUT'], // ALTAIC LANGUAGES
485
        ['', 'TVL'], // TUVALU
486
        ['TW', 'TWI'], // TWI
487
        ['', 'TYV'], // TUVINIAN
488
        ['', 'UDM'], // UDMURT
489
        ['', 'UGA'], // UGARITIC
490
        ['UG', 'UIG'], // UIGHUR; UYGHUR
491
        ['UK', 'UKR'], // UKRAINIAN
492
        ['', 'UMB'], // UMBUNDU
493
        ['', 'UND'], // UNDETERMINED
494
        ['UR', 'URD'], // URDU
495
        ['UZ', 'UZB'], // UZBEK
496
        ['', 'VAI'], // VAI
497
        ['VE', 'VEN'], // VENDA
498
        ['VI', 'VIE'], // VIETNAMESE
499
        ['VO', 'VOL'], // VOLAPÜK
500
        ['', 'VOT'], // VOTIC
501
        ['', 'WAK'], // WAKASHAN LANGUAGES
502
        ['', 'WAL'], // WALAMO
503
        ['', 'WAR'], // WARAY
504
        ['', 'WAS'], // WASHO
505
        ['CY', 'WEL'], // WELSH
506
        ['', 'WEN'], // SORBIAN LANGUAGES
507
        ['WA', 'WLN'], // WALLOON
508
        ['WO', 'WOL'], // WOLOF
509
        ['', 'XAL'], // KALMYK; OIRAT
510
        ['XH', 'XHO'], // XHOSA
511
        ['', 'YAO'], // YAO
512
        ['', 'YAP'], // YAPESE
513
        ['YI', 'YID'], // YIDDISH
514
        ['YO', 'YOR'], // YORUBA
515
        ['', 'YPK'], // YUPIK LANGUAGES
516
        ['', 'ZAP'], // ZAPOTEC
517
        ['', 'ZBL'], // BLISSYMBOLS; BLISSYMBOLICS; BLISS
518
        ['', 'ZEN'], // ZENAGA
519
        ['', 'ZGH'], // STANDARD MOROCCAN TAMAZIGHT
520
        ['ZA', 'ZHA'], // ZHUANG; CHUANG
521
        ['', 'ZND'], // ZANDE LANGUAGES
522
        ['ZU', 'ZUL'], // ZULU
523
        ['', 'ZUN'], // ZUNI
524
        ['', 'ZXX'], // NO LINGUISTIC CONTENT; NOT APPLICABLE
525
        ['', 'ZZA'], // ZAZA; DIMILI; DIMLI; KIRDKI; KIRMANJKI; ZAZAKI
526
    ];
527
528
    /**
529
     * @var string
530
     */
531
    private $set;
532
533
    /**
534
     * @var int
535
     */
536
    private $index;
537
538
    /**
539
     * @param string $set
540
     */
541 1
    public function __construct($set = self::ALPHA2)
542
    {
543 1
        $index = array_search($set, self::getAvailableSets(), true);
544
545 1
        if (false === $index) {
546 1
            throw new ComponentException(sprintf('"%s" is not a valid language set for ISO 639', $set));
547
        }
548
549 1
        $this->set = $set;
550 1
        $this->index = $index;
0 ignored issues
show
Documentation Bug introduced by
It seems like $index can also be of type string. However, the property $index is declared as type integer. Maybe add an additional type check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a mixed type is assigned to a property that is type hinted more strictly.

For example, imagine you have a variable $accountId that can either hold an Id object or false (if there is no account id yet). Your code now assigns that value to the id property of an instance of the Account class. This class holds a proper account, so the id value must no longer be false.

Either this assignment is in error or a type check should be added for that assignment.

class Id
{
    public $id;

    public function __construct($id)
    {
        $this->id = $id;
    }

}

class Account
{
    /** @var  Id $id */
    public $id;
}

$account_id = false;

if (starsAreRight()) {
    $account_id = new Id(42);
}

$account = new Account();
if ($account instanceof Id)
{
    $account->id = $account_id;
}
Loading history...
551 1
    }
552
553 1
    public static function getAvailableSets()
554
    {
555
        return [
556 1
            self::ALPHA2,
557 1
            self::ALPHA3,
558
        ];
559
    }
560
561 11
    private function getLanguageCodeList($index)
562
    {
563 11
        $languageList = [];
564
565 11
        foreach ($this->languageCodeList as $language) {
566 11
            $languageList[] = $language[$index];
567
        }
568
569 11
        return $languageList;
570
    }
571
572
    /**
573
     * @{inheritdoc}
574
     */
575 15
    public function validate($input): bool
576
    {
577 15
        if (!is_string($input) || '' === $input) {
578 5
            return false;
579
        }
580
581 11
        return in_array(
582 11
            mb_strtoupper($input),
583 11
            $this->getLanguageCodeList($this->index),
584 11
            true
585
        );
586
    }
587
}
588