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 (#838)
by Jens
04:03
created

LanguageCode   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 546
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 54.55%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
lcom 1
cbo 2
dl 0
loc 546
ccs 12
cts 22
cp 0.5455
rs 10
c 1
b 0
f 0

4 Methods

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