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; |
|
|
|
|
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
|
|
|
|
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 theid
property of an instance of theAccount
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.