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
Push — master ( d6699a...9595b3 )
by Henrique
04:59
created

LanguageCode::getAvailableSets()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
c 0
b 0
f 0
ccs 3
cts 3
cp 1
rs 10
cc 1
nc 1
nop 0
crap 1
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_column;
18
use function array_filter;
19
use function array_search;
20
21
/**
22
 * Validates whether the input is language code based on ISO 639.
23
 *
24
 * @author Danilo Benevides <[email protected]>
25
 * @author Emmerson <[email protected]>
26
 * @author Henrique Moody <[email protected]>
27
 */
28
final class LanguageCode extends AbstractEnvelope
29
{
30
    public const ALPHA2 = 'alpha-2';
31
    public const ALPHA3 = 'alpha-3';
32
    public const AVAILABLE_SETS = [
33
        self::ALPHA2,
34
        self::ALPHA3,
35
    ];
36
37
    /**
38
     * @see http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt
39
     *
40
     * @var array
41
     */
42
    public const LANGUAGE_CODES = [
43
        ['aa', 'aar'], // Afar
44
        ['ab', 'abk'], // Abkhazian
45
        ['', 'ace'], // Achinese
46
        ['', 'ach'], // Acoli
47
        ['', 'ada'], // Adangme
48
        ['', 'ady'], // Adyghe; Adygei
49
        ['', 'afa'], // Afro-asiatic languages
50
        ['', 'afh'], // Afrihili
51
        ['af', 'afr'], // Afrikaans
52
        ['', 'ain'], // Ainu
53
        ['ak', 'aka'], // Akan
54
        ['', 'akk'], // Akkadian
55
        ['sq', 'alb'], // Albanian
56
        ['', 'ale'], // Aleut
57
        ['', 'alg'], // Algonquian languages
58
        ['', 'alt'], // Southern altai
59
        ['am', 'amh'], // Amharic
60
        ['', 'ang'], // English, old (ca.450-1100)
61
        ['', 'anp'], // Angika
62
        ['', 'apa'], // Apache languages
63
        ['ar', 'ara'], // Arabic
64
        ['', 'arc'], // Official aramaic (700-300 bce); Imperial aramaic (700-300 bce)
65
        ['an', 'arg'], // Aragonese
66
        ['hy', 'arm'], // Armenian
67
        ['', 'arn'], // Mapudungun; Mapuche
68
        ['', 'arp'], // Arapaho
69
        ['', 'art'], // Artificial languages
70
        ['', 'arw'], // Arawak
71
        ['as', 'asm'], // Assamese
72
        ['', 'ast'], // Asturian; Bable; Leonese; Asturleonese
73
        ['', 'ath'], // Athapascan languages
74
        ['', 'aus'], // Australian languages
75
        ['av', 'ava'], // Avaric
76
        ['ae', 'ave'], // Avestan
77
        ['', 'awa'], // Awadhi
78
        ['ay', 'aym'], // Aymara
79
        ['az', 'aze'], // Azerbaijani
80
        ['', 'bad'], // Banda languages
81
        ['', 'bai'], // Bamileke languages
82
        ['ba', 'bak'], // Bashkir
83
        ['', 'bal'], // Baluchi
84
        ['bm', 'bam'], // Bambara
85
        ['', 'ban'], // Balinese
86
        ['eu', 'baq'], // Basque
87
        ['', 'bas'], // Basa
88
        ['', 'bat'], // Baltic languages
89
        ['', 'bej'], // Beja; Bedawiyet
90
        ['be', 'bel'], // Belarusian
91
        ['', 'bem'], // Bemba
92
        ['bn', 'ben'], // Bengali
93
        ['', 'ber'], // Berber languages
94
        ['', 'bho'], // Bhojpuri
95
        ['bh', 'bih'], // Bihari languages
96
        ['', 'bik'], // Bikol
97
        ['', 'bin'], // Bini; Edo
98
        ['bi', 'bis'], // Bislama
99
        ['', 'bla'], // Siksika
100
        ['', 'bnt'], // Bantu (other)
101
        ['bs', 'bos'], // Bosnian
102
        ['', 'bra'], // Braj
103
        ['br', 'bre'], // Breton
104
        ['', 'btk'], // Batak languages
105
        ['', 'bua'], // Buriat
106
        ['', 'bug'], // Buginese
107
        ['bg', 'bul'], // Bulgarian
108
        ['my', 'bur'], // Burmese
109
        ['', 'byn'], // Blin; Bilin
110
        ['', 'cad'], // Caddo
111
        ['', 'cai'], // Central american indian languages
112
        ['', 'car'], // Galibi carib
113
        ['ca', 'cat'], // Catalan; Valencian
114
        ['', 'cau'], // Caucasian languages
115
        ['', 'ceb'], // Cebuano
116
        ['', 'cel'], // Celtic languages
117
        ['ch', 'cha'], // Chamorro
118
        ['', 'chb'], // Chibcha
119
        ['ce', 'che'], // Chechen
120
        ['', 'chg'], // Chagatai
121
        ['zh', 'chi'], // Chinese
122
        ['', 'chk'], // Chuukese
123
        ['', 'chm'], // Mari
124
        ['', 'chn'], // Chinook jargon
125
        ['', 'cho'], // Choctaw
126
        ['', 'chp'], // Chipewyan; Dene suline
127
        ['', 'chr'], // Cherokee
128
        ['cu', 'chu'], // Church slavic; Old slavonic; Church slavonic; Old bulgarian; Old church slavonic
129
        ['cv', 'chv'], // Chuvash
130
        ['', 'chy'], // Cheyenne
131
        ['', 'cmc'], // Chamic languages
132
        ['', 'cop'], // Coptic
133
        ['kw', 'cor'], // Cornish
134
        ['co', 'cos'], // Corsican
135
        ['', 'cpe'], // Creoles and pidgins, english based
136
        ['', 'cpf'], // Creoles and pidgins, french-based
137
        ['', 'cpp'], // Creoles and pidgins, portuguese-based
138
        ['cr', 'cre'], // Cree
139
        ['', 'crh'], // Crimean tatar; Crimean turkish
140
        ['', 'crp'], // Creoles and pidgins
141
        ['', 'csb'], // Kashubian
142
        ['', 'cus'], // Cushitic languages
143
        ['cs', 'cze'], // Czech
144
        ['', 'dak'], // Dakota
145
        ['da', 'dan'], // Danish
146
        ['', 'dar'], // Dargwa
147
        ['', 'day'], // Land dayak languages
148
        ['', 'del'], // Delaware
149
        ['', 'den'], // Slave (athapascan)
150
        ['', 'dgr'], // Dogrib
151
        ['', 'din'], // Dinka
152
        ['dv', 'div'], // Divehi; Dhivehi; Maldivian
153
        ['', 'doi'], // Dogri
154
        ['', 'dra'], // Dravidian languages
155
        ['', 'dsb'], // Lower sorbian
156
        ['', 'dua'], // Duala
157
        ['', 'dum'], // Dutch, middle (ca.1050-1350)
158
        ['nl', 'dut'], // Dutch; Flemish
159
        ['', 'dyu'], // Dyula
160
        ['dz', 'dzo'], // Dzongkha
161
        ['', 'efi'], // Efik
162
        ['', 'egy'], // Egyptian (ancient)
163
        ['', 'eka'], // Ekajuk
164
        ['', 'elx'], // Elamite
165
        ['en', 'eng'], // English
166
        ['', 'enm'], // English, middle (1100-1500)
167
        ['eo', 'epo'], // Esperanto
168
        ['et', 'est'], // Estonian
169
        ['ee', 'ewe'], // Ewe
170
        ['', 'ewo'], // Ewondo
171
        ['', 'fan'], // Fang
172
        ['fo', 'fao'], // Faroese
173
        ['', 'fat'], // Fanti
174
        ['fj', 'fij'], // Fijian
175
        ['', 'fil'], // Filipino; Pilipino
176
        ['fi', 'fin'], // Finnish
177
        ['', 'fiu'], // Finno-ugrian languages
178
        ['', 'fon'], // Fon
179
        ['fr', 'fre'], // French
180
        ['', 'frm'], // French, middle (ca.1400-1600)
181
        ['', 'fro'], // French, old (842-ca.1400)
182
        ['', 'frr'], // Northern frisian
183
        ['', 'frs'], // Eastern frisian
184
        ['fy', 'fry'], // Western frisian
185
        ['ff', 'ful'], // Fulah
186
        ['', 'fur'], // Friulian
187
        ['', 'gaa'], // Ga
188
        ['', 'gay'], // Gayo
189
        ['', 'gba'], // Gbaya
190
        ['', 'gem'], // Germanic languages
191
        ['ka', 'geo'], // Georgian
192
        ['de', 'ger'], // German
193
        ['', 'gez'], // Geez
194
        ['', 'gil'], // Gilbertese
195
        ['gd', 'gla'], // Gaelic; Scottish gaelic
196
        ['ga', 'gle'], // Irish
197
        ['gl', 'glg'], // Galician
198
        ['gv', 'glv'], // Manx
199
        ['', 'gmh'], // German, middle high (ca.1050-1500)
200
        ['', 'goh'], // German, old high (ca.750-1050)
201
        ['', 'gon'], // Gondi
202
        ['', 'gor'], // Gorontalo
203
        ['', 'got'], // Gothic
204
        ['', 'grb'], // Grebo
205
        ['', 'grc'], // Greek, ancient (to 1453)
206
        ['el', 'gre'], // Greek, modern (1453-)
207
        ['gn', 'grn'], // Guarani
208
        ['', 'gsw'], // Swiss german; Alemannic; Alsatian
209
        ['gu', 'guj'], // Gujarati
210
        ['', 'gwi'], // Gwich'in
211
        ['', 'hai'], // Haida
212
        ['ht', 'hat'], // Haitian; Haitian creole
213
        ['ha', 'hau'], // Hausa
214
        ['', 'haw'], // Hawaiian
215
        ['he', 'heb'], // Hebrew
216
        ['hz', 'her'], // Herero
217
        ['', 'hil'], // Hiligaynon
218
        ['', 'him'], // Himachali languages; Western pahari languages
219
        ['hi', 'hin'], // Hindi
220
        ['', 'hit'], // Hittite
221
        ['', 'hmn'], // Hmong; Mong
222
        ['ho', 'hmo'], // Hiri motu
223
        ['hr', 'hrv'], // Croatian
224
        ['', 'hsb'], // Upper sorbian
225
        ['hu', 'hun'], // Hungarian
226
        ['', 'hup'], // Hupa
227
        ['', 'iba'], // Iban
228
        ['ig', 'ibo'], // Igbo
229
        ['is', 'ice'], // Icelandic
230
        ['io', 'ido'], // Ido
231
        ['ii', 'iii'], // Sichuan yi; Nuosu
232
        ['', 'ijo'], // Ijo languages
233
        ['iu', 'iku'], // Inuktitut
234
        ['ie', 'ile'], // Interlingue; Occidental
235
        ['', 'ilo'], // Iloko
236
        ['ia', 'ina'], // Interlingua (international auxiliary language association)
237
        ['', 'inc'], // Indic languages
238
        ['id', 'ind'], // Indonesian
239
        ['', 'ine'], // Indo-european languages
240
        ['', 'inh'], // Ingush
241
        ['ik', 'ipk'], // Inupiaq
242
        ['', 'ira'], // Iranian languages
243
        ['', 'iro'], // Iroquoian languages
244
        ['it', 'ita'], // Italian
245
        ['jv', 'jav'], // Javanese
246
        ['', 'jbo'], // Lojban
247
        ['ja', 'jpn'], // Japanese
248
        ['', 'jpr'], // Judeo-persian
249
        ['', 'jrb'], // Judeo-arabic
250
        ['', 'kaa'], // Kara-kalpak
251
        ['', 'kab'], // Kabyle
252
        ['', 'kac'], // Kachin; Jingpho
253
        ['kl', 'kal'], // Kalaallisut; Greenlandic
254
        ['', 'kam'], // Kamba
255
        ['kn', 'kan'], // Kannada
256
        ['', 'kar'], // Karen languages
257
        ['ks', 'kas'], // Kashmiri
258
        ['kr', 'kau'], // Kanuri
259
        ['', 'kaw'], // Kawi
260
        ['kk', 'kaz'], // Kazakh
261
        ['', 'kbd'], // Kabardian
262
        ['', 'kha'], // Khasi
263
        ['', 'khi'], // Khoisan languages
264
        ['km', 'khm'], // Central khmer
265
        ['', 'kho'], // Khotanese; Sakan
266
        ['ki', 'kik'], // Kikuyu; Gikuyu
267
        ['rw', 'kin'], // Kinyarwanda
268
        ['ky', 'kir'], // Kirghiz; Kyrgyz
269
        ['', 'kmb'], // Kimbundu
270
        ['', 'kok'], // Konkani
271
        ['kv', 'kom'], // Komi
272
        ['kg', 'kon'], // Kongo
273
        ['ko', 'kor'], // Korean
274
        ['', 'kos'], // Kosraean
275
        ['', 'kpe'], // Kpelle
276
        ['', 'krc'], // Karachay-balkar
277
        ['', 'krl'], // Karelian
278
        ['', 'kro'], // Kru languages
279
        ['', 'kru'], // Kurukh
280
        ['kj', 'kua'], // Kuanyama; Kwanyama
281
        ['', 'kum'], // Kumyk
282
        ['ku', 'kur'], // Kurdish
283
        ['', 'kut'], // Kutenai
284
        ['', 'lad'], // Ladino
285
        ['', 'lah'], // Lahnda
286
        ['', 'lam'], // Lamba
287
        ['lo', 'lao'], // Lao
288
        ['la', 'lat'], // Latin
289
        ['lv', 'lav'], // Latvian
290
        ['', 'lez'], // Lezghian
291
        ['li', 'lim'], // Limburgan; Limburger; Limburgish
292
        ['ln', 'lin'], // Lingala
293
        ['lt', 'lit'], // Lithuanian
294
        ['', 'lol'], // Mongo
295
        ['', 'loz'], // Lozi
296
        ['lb', 'ltz'], // Luxembourgish; Letzeburgesch
297
        ['', 'lua'], // Luba-lulua
298
        ['lu', 'lub'], // Luba-katanga
299
        ['lg', 'lug'], // Ganda
300
        ['', 'lui'], // Luiseno
301
        ['', 'lun'], // Lunda
302
        ['', 'luo'], // Luo (kenya and tanzania)
303
        ['', 'lus'], // Lushai
304
        ['mk', 'mac'], // Macedonian
305
        ['', 'mad'], // Madurese
306
        ['', 'mag'], // Magahi
307
        ['mh', 'mah'], // Marshallese
308
        ['', 'mai'], // Maithili
309
        ['', 'mak'], // Makasar
310
        ['ml', 'mal'], // Malayalam
311
        ['', 'man'], // Mandingo
312
        ['mi', 'mao'], // Maori
313
        ['', 'map'], // Austronesian languages
314
        ['mr', 'mar'], // Marathi
315
        ['', 'mas'], // Masai
316
        ['ms', 'may'], // Malay
317
        ['', 'mdf'], // Moksha
318
        ['', 'mdr'], // Mandar
319
        ['', 'men'], // Mende
320
        ['', 'mga'], // Irish, middle (900-1200)
321
        ['', 'mic'], // Mi'kmaq; Micmac
322
        ['', 'min'], // Minangkabau
323
        ['', 'mis'], // Uncoded languages
324
        ['', 'mkh'], // Mon-khmer languages
325
        ['mg', 'mlg'], // Malagasy
326
        ['mt', 'mlt'], // Maltese
327
        ['', 'mnc'], // Manchu
328
        ['', 'mni'], // Manipuri
329
        ['', 'mno'], // Manobo languages
330
        ['', 'moh'], // Mohawk
331
        ['mn', 'mon'], // Mongolian
332
        ['', 'mos'], // Mossi
333
        ['', 'mul'], // Multiple languages
334
        ['', 'mun'], // Munda languages
335
        ['', 'mus'], // Creek
336
        ['', 'mwl'], // Mirandese
337
        ['', 'mwr'], // Marwari
338
        ['', 'myn'], // Mayan languages
339
        ['', 'myv'], // Erzya
340
        ['', 'nah'], // Nahuatl languages
341
        ['', 'nai'], // North american indian languages
342
        ['', 'nap'], // Neapolitan
343
        ['na', 'nau'], // Nauru
344
        ['nv', 'nav'], // Navajo; Navaho
345
        ['nr', 'nbl'], // Ndebele, south; South ndebele
346
        ['nd', 'nde'], // Ndebele, north; North ndebele
347
        ['ng', 'ndo'], // Ndonga
348
        ['', 'nds'], // Low german; Low saxon; German, low; Saxon, low
349
        ['ne', 'nep'], // Nepali
350
        ['', 'new'], // Nepal bhasa; Newari
351
        ['', 'nia'], // Nias
352
        ['', 'nic'], // Niger-kordofanian languages
353
        ['', 'niu'], // Niuean
354
        ['nn', 'nno'], // Norwegian nynorsk; Nynorsk, norwegian
355
        ['nb', 'nob'], // Bokmål, norwegian; Norwegian bokmål
356
        ['', 'nog'], // Nogai
357
        ['', 'non'], // Norse, old
358
        ['no', 'nor'], // Norwegian
359
        ['', 'nqo'], // N'ko
360
        ['', 'nso'], // Pedi; Sepedi; Northern sotho
361
        ['', 'nub'], // Nubian languages
362
        ['', 'nwc'], // Classical newari; Old newari; Classical nepal bhasa
363
        ['ny', 'nya'], // Chichewa; Chewa; Nyanja
364
        ['', 'nym'], // Nyamwezi
365
        ['', 'nyn'], // Nyankole
366
        ['', 'nyo'], // Nyoro
367
        ['', 'nzi'], // Nzima
368
        ['oc', 'oci'], // Occitan (post 1500); Provençal
369
        ['oj', 'oji'], // Ojibwa
370
        ['or', 'ori'], // Oriya
371
        ['om', 'orm'], // Oromo
372
        ['', 'osa'], // Osage
373
        ['os', 'oss'], // Ossetian; Ossetic
374
        ['', 'ota'], // Turkish, ottoman (1500-1928)
375
        ['', 'oto'], // Otomian languages
376
        ['', 'paa'], // Papuan languages
377
        ['', 'pag'], // Pangasinan
378
        ['', 'pal'], // Pahlavi
379
        ['', 'pam'], // Pampanga; Kapampangan
380
        ['pa', 'pan'], // Panjabi; Punjabi
381
        ['', 'pap'], // Papiamento
382
        ['', 'pau'], // Palauan
383
        ['', 'peo'], // Persian, old (ca.600-400 b.c.)
384
        ['fa', 'per'], // Persian
385
        ['', 'phi'], // Philippine languages
386
        ['', 'phn'], // Phoenician
387
        ['pi', 'pli'], // Pali
388
        ['pl', 'pol'], // Polish
389
        ['', 'pon'], // Pohnpeian
390
        ['pt', 'por'], // Portuguese
391
        ['', 'pra'], // Prakrit languages
392
        ['', 'pro'], // Provençal, old (to 1500)
393
        ['ps', 'pus'], // Pushto; Pashto
394
        ['', 'qaa-qtz'], // Reserved for local use
395
        ['qu', 'que'], // Quechua
396
        ['', 'raj'], // Rajasthani
397
        ['', 'rap'], // Rapanui
398
        ['', 'rar'], // Rarotongan; Cook islands maori
399
        ['', 'roa'], // Romance languages
400
        ['rm', 'roh'], // Romansh
401
        ['', 'rom'], // Romany
402
        ['ro', 'rum'], // Romanian; Moldavian; Moldovan
403
        ['rn', 'run'], // Rundi
404
        ['', 'rup'], // Aromanian; Arumanian; Macedo-romanian
405
        ['ru', 'rus'], // Russian
406
        ['', 'sad'], // Sandawe
407
        ['sg', 'sag'], // Sango
408
        ['', 'sah'], // Yakut
409
        ['', 'sai'], // South american indian (other)
410
        ['', 'sal'], // Salishan languages
411
        ['', 'sam'], // Samaritan aramaic
412
        ['sa', 'san'], // Sanskrit
413
        ['', 'sas'], // Sasak
414
        ['', 'sat'], // Santali
415
        ['', 'scn'], // Sicilian
416
        ['', 'sco'], // Scots
417
        ['', 'sel'], // Selkup
418
        ['', 'sem'], // Semitic languages
419
        ['', 'sga'], // Irish, old (to 900)
420
        ['', 'sgn'], // Sign languages
421
        ['', 'shn'], // Shan
422
        ['', 'sid'], // Sidamo
423
        ['si', 'sin'], // Sinhala; Sinhalese
424
        ['', 'sio'], // Siouan languages
425
        ['', 'sit'], // Sino-tibetan languages
426
        ['', 'sla'], // Slavic languages
427
        ['sk', 'slo'], // Slovak
428
        ['sl', 'slv'], // Slovenian
429
        ['', 'sma'], // Southern sami
430
        ['se', 'sme'], // Northern sami
431
        ['', 'smi'], // Sami languages
432
        ['', 'smj'], // Lule sami
433
        ['', 'smn'], // Inari sami
434
        ['sm', 'smo'], // Samoan
435
        ['', 'sms'], // Skolt sami
436
        ['sn', 'sna'], // Shona
437
        ['sd', 'snd'], // Sindhi
438
        ['', 'snk'], // Soninke
439
        ['', 'sog'], // Sogdian
440
        ['so', 'som'], // Somali
441
        ['', 'son'], // Songhai languages
442
        ['st', 'sot'], // Sotho, southern
443
        ['es', 'spa'], // Spanish; Castilian
444
        ['sc', 'srd'], // Sardinian
445
        ['', 'srn'], // Sranan tongo
446
        ['sr', 'srp'], // Serbian
447
        ['', 'srr'], // Serer
448
        ['', 'ssa'], // Nilo-saharan languages
449
        ['ss', 'ssw'], // Swati
450
        ['', 'suk'], // Sukuma
451
        ['su', 'sun'], // Sundanese
452
        ['', 'sus'], // Susu
453
        ['', 'sux'], // Sumerian
454
        ['sw', 'swa'], // Swahili
455
        ['sv', 'swe'], // Swedish
456
        ['', 'syc'], // Classical syriac
457
        ['', 'syr'], // Syriac
458
        ['ty', 'tah'], // Tahitian
459
        ['', 'tai'], // Tai languages
460
        ['ta', 'tam'], // Tamil
461
        ['tt', 'tat'], // Tatar
462
        ['te', 'tel'], // Telugu
463
        ['', 'tem'], // Timne
464
        ['', 'ter'], // Tereno
465
        ['', 'tet'], // Tetum
466
        ['tg', 'tgk'], // Tajik
467
        ['tl', 'tgl'], // Tagalog
468
        ['th', 'tha'], // Thai
469
        ['bo', 'tib'], // Tibetan
470
        ['', 'tig'], // Tigre
471
        ['ti', 'tir'], // Tigrinya
472
        ['', 'tiv'], // Tiv
473
        ['', 'tkl'], // Tokelau
474
        ['', 'tlh'], // Klingon; Tlhingan-hol
475
        ['', 'tli'], // Tlingit
476
        ['', 'tmh'], // Tamashek
477
        ['', 'tog'], // Tonga (nyasa)
478
        ['to', 'ton'], // Tonga (tonga islands)
479
        ['', 'tpi'], // Tok pisin
480
        ['', 'tsi'], // Tsimshian
481
        ['tn', 'tsn'], // Tswana
482
        ['ts', 'tso'], // Tsonga
483
        ['tk', 'tuk'], // Turkmen
484
        ['', 'tum'], // Tumbuka
485
        ['', 'tup'], // Tupi languages
486
        ['tr', 'tur'], // Turkish
487
        ['', 'tut'], // Altaic languages
488
        ['', 'tvl'], // Tuvalu
489
        ['tw', 'twi'], // Twi
490
        ['', 'tyv'], // Tuvinian
491
        ['', 'udm'], // Udmurt
492
        ['', 'uga'], // Ugaritic
493
        ['ug', 'uig'], // Uighur; Uyghur
494
        ['uk', 'ukr'], // Ukrainian
495
        ['', 'umb'], // Umbundu
496
        ['', 'und'], // Undetermined
497
        ['ur', 'urd'], // Urdu
498
        ['uz', 'uzb'], // Uzbek
499
        ['', 'vai'], // Vai
500
        ['ve', 'ven'], // Venda
501
        ['vi', 'vie'], // Vietnamese
502
        ['vo', 'vol'], // Volapük
503
        ['', 'vot'], // Votic
504
        ['', 'wak'], // Wakashan languages
505
        ['', 'wal'], // Walamo
506
        ['', 'war'], // Waray
507
        ['', 'was'], // Washo
508
        ['cy', 'wel'], // Welsh
509
        ['', 'wen'], // Sorbian languages
510
        ['wa', 'wln'], // Walloon
511
        ['wo', 'wol'], // Wolof
512
        ['', 'xal'], // Kalmyk; Oirat
513
        ['xh', 'xho'], // Xhosa
514
        ['', 'yao'], // Yao
515
        ['', 'yap'], // Yapese
516
        ['yi', 'yid'], // Yiddish
517
        ['yo', 'yor'], // Yoruba
518
        ['', 'ypk'], // Yupik languages
519
        ['', 'zap'], // Zapotec
520
        ['', 'zbl'], // Blissymbols; Blissymbolics; Bliss
521
        ['', 'zen'], // Zenaga
522
        ['', 'zgh'], // Standard moroccan tamazight
523
        ['za', 'zha'], // Zhuang; Chuang
524
        ['', 'znd'], // Zande languages
525
        ['zu', 'zul'], // Zulu
526
        ['', 'zun'], // Zuni
527
        ['', 'zxx'], // No linguistic content; Not applicable
528
        ['', 'zza'], // Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki
529
    ];
530
531
    /**
532
     * Initializes the rule defining the ISO 639 set.
533
     *
534
     * @param string $set
535
     *
536
     * @throws ComponentException
537
     */
538 2
    public function __construct(string $set = self::ALPHA2)
539
    {
540 2
        $index = array_search($set, self::AVAILABLE_SETS, true);
541 2
        if (false === $index) {
542 1
            throw new ComponentException(sprintf('"%s" is not a valid language set for ISO 639', $set));
543
        }
544
545 1
        parent::__construct(new In($this->getHaystack($index), true), ['set' => $set]);
0 ignored issues
show
Bug introduced by
It seems like $index can also be of type string; however, parameter $index of Respect\Validation\Rules...uageCode::getHaystack() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

545
        parent::__construct(new In($this->getHaystack(/** @scrutinizer ignore-type */ $index), true), ['set' => $set]);
Loading history...
546 1
    }
547
548 1
    private function getHaystack(int $index): array
549
    {
550 1
        return array_filter(array_column(self::LANGUAGE_CODES, $index));
551
    }
552
}
553