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

Completed
Pull Request — master (#923)
by lee
03:57
created

LanguageCode::validate()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

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