Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
98.82% covered (success)
98.82%
251 / 254
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ISO639Trait
98.82% covered (success)
98.82%
251 / 254
0.00% covered (danger)
0.00%
0 / 2
254
0.00% covered (danger)
0.00%
0 / 1
 getBy2Code
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 languageFromCountry
99.21% covered (success)
99.21%
251 / 253
0.00% covered (danger)
0.00%
0 / 1
253
1<?php
2/**
3 * Jingga
4 *
5 * PHP Version 8.1
6 *
7 * @package   phpOMS\Localization
8 * @copyright Dennis Eichhorn
9 * @license   OMS License 2.0
10 * @version   1.0.0
11 * @link      https://jingga.app
12 */
13declare(strict_types=1);
14
15namespace phpOMS\Localization;
16
17/**
18 * ISO 639 country -> language trait.
19 *
20 * @package phpOMS\Localization
21 * @license OMS License 2.0
22 * @link    https://jingga.app
23 * @since   1.0.0
24 */
25trait ISO639Trait
26{
27    /**
28     * Get value by 2 code
29     *
30     * @param string $code 2-code
31     *
32     * @return mixed
33     *
34     * @since 1.0.0
35     */
36    public static function getBy2Code(string $code) : mixed
37    {
38        return self::getByName('_' . \strtoupper($code));
39    }
40
41    /**
42     * Get language from country.
43     *
44     * @param string $country Country 2 code
45     *
46     * @return array
47     *
48     * @since 1.0.0
49     */
50    public static function languageFromCountry(string $country) : array
51    {
52        switch (\strtoupper($country)) {
53            case ISO3166TwoEnum::_AFG:
54                return [self::_PS, self::_UZ, self::_TK];
55            case ISO3166TwoEnum::_ATA:
56                return [self::_RU, self::_EN];
57            case ISO3166TwoEnum::_ALA:
58                return [self::_SV];
59            case ISO3166TwoEnum::_ALB:
60                return [self::_SQ];
61            case ISO3166TwoEnum::_DZA:
62                return [self::_AR];
63            case ISO3166TwoEnum::_ASM:
64                return [self::_EN, self::_SM];
65            case ISO3166TwoEnum::_AND:
66                return [self::_CA];
67            case ISO3166TwoEnum::_AGO:
68                return [self::_PT];
69            case ISO3166TwoEnum::_AIA:
70                return [self::_EN];
71            case ISO3166TwoEnum::_ATG:
72                return [self::_EN];
73            case ISO3166TwoEnum::_ARG:
74                return [self::_ES, self::_GN];
75            case ISO3166TwoEnum::_ARM:
76                return [self::_HY, self::_RU];
77            case ISO3166TwoEnum::_ABW:
78                return [self::_NL];
79            case ISO3166TwoEnum::_AUS:
80                return [self::_EN];
81            case ISO3166TwoEnum::_AUT:
82                return [self::_DE];
83            case ISO3166TwoEnum::_AZE:
84                return [self::_AZ, self::_RU, self::_HY];
85            case ISO3166TwoEnum::_BHS:
86                return [self::_EN];
87            case ISO3166TwoEnum::_BHR:
88                return [self::_AR];
89            case ISO3166TwoEnum::_BGD:
90                return [self::_BN];
91            case ISO3166TwoEnum::_BRB:
92                return [self::_EN];
93            case ISO3166TwoEnum::_BLR:
94                return [self::_BE, self::_RU];
95            case ISO3166TwoEnum::_BEL:
96                return [self::_NL, self::_FR, self::_DE];
97            case ISO3166TwoEnum::_BLZ:
98                return [self::_EN];
99            case ISO3166TwoEnum::_BEN:
100                return [self::_FR];
101            case ISO3166TwoEnum::_BMU:
102                return [self::_EN];
103            case ISO3166TwoEnum::_BTN:
104                return [self::_DZ];
105            case ISO3166TwoEnum::_BOL:
106                return [self::_ES, self::_QU, self::_AY];
107            case ISO3166TwoEnum::_BES:
108                return [self::_NL, self::_EN];
109            case ISO3166TwoEnum::_BIH:
110                return [self::_BS, self::_HR, self::_SR];
111            case ISO3166TwoEnum::_BWA:
112                return [self::_EN, self::_TN];
113            case ISO3166TwoEnum::_BVT:
114                return [self::_NO];
115            case ISO3166TwoEnum::_BRA:
116                return [self::_PT];
117            case ISO3166TwoEnum::_IOT:
118                return [self::_EN];
119            case ISO3166TwoEnum::_BRN:
120                return [self::_MS];
121            case ISO3166TwoEnum::_BGR:
122                return [self::_BG];
123            case ISO3166TwoEnum::_BFA:
124                return [self::_FR];
125            case ISO3166TwoEnum::_BDI:
126                return [self::_RN, self::_FR];
127            case ISO3166TwoEnum::_CPV:
128                return [self::_PT];
129            case ISO3166TwoEnum::_KHM:
130                return [self::_KM];
131            case ISO3166TwoEnum::_CMR:
132                return [self::_FR, self::_EN];
133            case ISO3166TwoEnum::_CAN:
134                return [self::_EN, self::_FR];
135            case ISO3166TwoEnum::_CYM:
136                return [self::_EN];
137            case ISO3166TwoEnum::_CAF:
138                return [self::_FR, self::_SG];
139            case ISO3166TwoEnum::_TCD:
140                return [self::_FR, self::_AR];
141            case ISO3166TwoEnum::_CHL:
142                return [self::_ES];
143            case ISO3166TwoEnum::_CHN:
144                return [self::_ZH];
145            case ISO3166TwoEnum::_CXR:
146                return [self::_EN];
147            case ISO3166TwoEnum::_CCK:
148                return [self::_EN];
149            case ISO3166TwoEnum::_COL:
150                return [self::_ES];
151            case ISO3166TwoEnum::_COM:
152                return [self::_AR, self::_FR];
153            case ISO3166TwoEnum::_COG:
154                return [self::_FR, self::_LN, self::_KG, self::_SW];
155            case ISO3166TwoEnum::_COD:
156                return [self::_FR, self::_LN, self::_KG, self::_SW];
157            case ISO3166TwoEnum::_COK:
158                return [self::_EN];
159            case ISO3166TwoEnum::_CRI:
160                return [self::_ES];
161            case ISO3166TwoEnum::_CIV:
162                return [self::_FR];
163            case ISO3166TwoEnum::_HRV:
164                return [self::_HR];
165            case ISO3166TwoEnum::_CUB:
166                return [self::_ES];
167            case ISO3166TwoEnum::_CUW:
168                return [self::_NL, self::_PA, self::_EN];
169            case ISO3166TwoEnum::_CYP:
170                return [self::_EL, self::_TR];
171            case ISO3166TwoEnum::_CZE:
172                return [self::_CS, self::_SK];
173            case ISO3166TwoEnum::_DNK:
174                return [self::_DA];
175            case ISO3166TwoEnum::_DJI:
176                return [self::_FR, self::_AR, self::_SO];
177            case ISO3166TwoEnum::_DMA:
178                return [self::_EN];
179            case ISO3166TwoEnum::_DOM:
180                return [self::_ES];
181            case ISO3166TwoEnum::_ECU:
182                return [self::_ES];
183            case ISO3166TwoEnum::_EGY:
184                return [self::_AR];
185            case ISO3166TwoEnum::_SLV:
186                return [self::_ES];
187            case ISO3166TwoEnum::_GNQ:
188                return [self::_ES, self::_FR, self::_PT];
189            case ISO3166TwoEnum::_ERI:
190                return [self::_TI, self::_AR, self::_EN];
191            case ISO3166TwoEnum::_EST:
192                return [self::_ET];
193            case ISO3166TwoEnum::_ETH:
194                return [self::_AM, self::_OM, self::_TI, self::_SO, self::_AR];
195            case ISO3166TwoEnum::_FLK:
196                return [self::_EN];
197            case ISO3166TwoEnum::_FRO:
198                return [self::_FO];
199            case ISO3166TwoEnum::_FJI:
200                return [self::_EN, self::_FJ, self::_HI, self::_UR];
201            case ISO3166TwoEnum::_FIN:
202                return [self::_FI, self::_SV];
203            case ISO3166TwoEnum::_FRA:
204                return [self::_FR];
205            case ISO3166TwoEnum::_GUF:
206                return [self::_FR];
207            case ISO3166TwoEnum::_PYF:
208                return [self::_FR, self::_TY];
209            case ISO3166TwoEnum::_ATF:
210                return [self::_FR];
211            case ISO3166TwoEnum::_GAB:
212                return [self::_FR];
213            case ISO3166TwoEnum::_GMB:
214                return [self::_EN];
215            case ISO3166TwoEnum::_GEO:
216                return [self::_KA];
217            case ISO3166TwoEnum::_DEU:
218                return [self::_DE];
219            case ISO3166TwoEnum::_GHA:
220                return [self::_EN];
221            case ISO3166TwoEnum::_GIB:
222                return [self::_EN];
223            case ISO3166TwoEnum::_GRC:
224                return [self::_EL];
225            case ISO3166TwoEnum::_GRL:
226                return [self::_KL];
227            case ISO3166TwoEnum::_GRD:
228                return [self::_EN];
229            case ISO3166TwoEnum::_GLP:
230                return [self::_FR];
231            case ISO3166TwoEnum::_GUM:
232                return [self::_EN, self::_CH, self::_ES];
233            case ISO3166TwoEnum::_GTM:
234                return [self::_ES];
235            case ISO3166TwoEnum::_GGY:
236                return [self::_EN, self::_FR];
237            case ISO3166TwoEnum::_GIN:
238                return [self::_FR];
239            case ISO3166TwoEnum::_GNB:
240                return [self::_PT];
241            case ISO3166TwoEnum::_GUY:
242                return [self::_EN];
243            case ISO3166TwoEnum::_HTI:
244                return [self::_FR, self::_HT];
245            case ISO3166TwoEnum::_HMD:
246                return [self::_EN];
247            case ISO3166TwoEnum::_VAT:
248                return [self::_IT, self::_LA];
249            case ISO3166TwoEnum::_HND:
250                return [self::_ES];
251            case ISO3166TwoEnum::_HKG:
252                return [self::_ZH, self::_EN];
253            case ISO3166TwoEnum::_HUN:
254                return [self::_HU];
255            case ISO3166TwoEnum::_ISL:
256                return [self::_IS];
257            case ISO3166TwoEnum::_IND:
258                return [self::_HI, self::_EN];
259            case ISO3166TwoEnum::_IDN:
260                return [self::_ID];
261            case ISO3166TwoEnum::_IRN:
262                return [self::_FA];
263            case ISO3166TwoEnum::_IRQ:
264                return [self::_AR, self::_KU];
265            case ISO3166TwoEnum::_IRL:
266                return [self::_GA, self::_EN];
267            case ISO3166TwoEnum::_IMN:
268                return [self::_EN, self::_GV];
269            case ISO3166TwoEnum::_ISR:
270                return [self::_HE, self::_AR];
271            case ISO3166TwoEnum::_ITA:
272                return [self::_IT];
273            case ISO3166TwoEnum::_JAM:
274                return [self::_EN];
275            case ISO3166TwoEnum::_JPN:
276                return [self::_JA];
277            case ISO3166TwoEnum::_JEY:
278                return [self::_EN, self::_FR];
279            case ISO3166TwoEnum::_JOR:
280                return [self::_AR];
281            case ISO3166TwoEnum::_KAZ:
282                return [self::_KK, self::_RU];
283            case ISO3166TwoEnum::_KEN:
284                return [self::_SW, self::_EN];
285            case ISO3166TwoEnum::_KIR:
286                return [self::_EN];
287            case ISO3166TwoEnum::_PRK:
288                return [self::_KO];
289            case ISO3166TwoEnum::_KOR:
290                return [self::_KO];
291            case ISO3166TwoEnum::_KWT:
292                return [self::_AR];
293            case ISO3166TwoEnum::_KGZ:
294                return [self::_KY, self::_RU];
295            case ISO3166TwoEnum::_LAO:
296                return [self::_LO];
297            case ISO3166TwoEnum::_LVA:
298                return [self::_LV];
299            case ISO3166TwoEnum::_LBN:
300                return [self::_AR, self::_FR];
301            case ISO3166TwoEnum::_LSO:
302                return [self::_EN, self::_ST];
303            case ISO3166TwoEnum::_LBR:
304                return [self::_EN];
305            case ISO3166TwoEnum::_LBY:
306                return [self::_AR];
307            case ISO3166TwoEnum::_LIE:
308                return [self::_DE];
309            case ISO3166TwoEnum::_LTU:
310                return [self::_LT];
311            case ISO3166TwoEnum::_LUX:
312                return [self::_LB, self::_FR, self::_DE];
313            case ISO3166TwoEnum::_MAC:
314                return [self::_ZH, self::_PT];
315            case ISO3166TwoEnum::_MDG:
316                return [self::_MG, self::_FR];
317            case ISO3166TwoEnum::_MWI:
318                return [self::_NY, self::_EN];
319            case ISO3166TwoEnum::_MYS:
320                return [self::_MS];
321            case ISO3166TwoEnum::_MDV:
322                return [self::_DV];
323            case ISO3166TwoEnum::_MLI:
324                return [self::_FR];
325            case ISO3166TwoEnum::_MLT:
326                return [self::_MT, self::_EN];
327            case ISO3166TwoEnum::_MKD:
328                return [self::_MK];
329            case ISO3166TwoEnum::_MHL:
330                return [self::_MH, self::_EN];
331            case ISO3166TwoEnum::_MTQ:
332                return [self::_FR];
333            case ISO3166TwoEnum::_MRT:
334                return [self::_AR, self::_FR];
335            case ISO3166TwoEnum::_MUS:
336                return [self::_EN, self::_FR];
337            case ISO3166TwoEnum::_MYT:
338                return [self::_FR];
339            case ISO3166TwoEnum::_MEX:
340                return [self::_ES];
341            case ISO3166TwoEnum::_FSM:
342                return [self::_EN];
343            case ISO3166TwoEnum::_MDA:
344                return [self::_RO];
345            case ISO3166TwoEnum::_MCO:
346                return [self::_FR];
347            case ISO3166TwoEnum::_MNG:
348                return [self::_MN];
349            case ISO3166TwoEnum::_MNE:
350                return [self::_SR, self::_BS, self::_SQ, self::_HR];
351            case ISO3166TwoEnum::_MSR:
352                return [self::_EN];
353            case ISO3166TwoEnum::_MAR:
354                return [self::_AR];
355            case ISO3166TwoEnum::_MOZ:
356                return [self::_PT];
357            case ISO3166TwoEnum::_MMR:
358                return [self::_MY];
359            case ISO3166TwoEnum::_NAM:
360                return [self::_EN, self::_AF];
361            case ISO3166TwoEnum::_NRU:
362                return [self::_NA, self::_EN];
363            case ISO3166TwoEnum::_NPL:
364                return [self::_NE];
365            case ISO3166TwoEnum::_NLD:
366                return [self::_NL];
367            case ISO3166TwoEnum::_NCL:
368                return [self::_FR];
369            case ISO3166TwoEnum::_NZL:
370                return [self::_EN, self::_MI];
371            case ISO3166TwoEnum::_NIC:
372                return [self::_ES];
373            case ISO3166TwoEnum::_NER:
374                return [self::_FR];
375            case ISO3166TwoEnum::_NGA:
376                return [self::_EN];
377            case ISO3166TwoEnum::_NIU:
378                return [self::_EN];
379            case ISO3166TwoEnum::_NFK:
380                return [self::_EN];
381            case ISO3166TwoEnum::_MNP:
382                return [self::_EN, self::_CH];
383            case ISO3166TwoEnum::_NOR:
384                return [self::_NO, self::_NB, self::_NN];
385            case ISO3166TwoEnum::_OMN:
386                return [self::_AR];
387            case ISO3166TwoEnum::_PAK:
388                return [self::_UR, self::_EN];
389            case ISO3166TwoEnum::_PLW:
390                return [self::_EN, self::_JA, self::_ZH];
391            case ISO3166TwoEnum::_PSE:
392                return [self::_AR];
393            case ISO3166TwoEnum::_PAN:
394                return [self::_ES];
395            case ISO3166TwoEnum::_PNG:
396                return [self::_EN, self::_HO];
397            case ISO3166TwoEnum::_PRY:
398                return [self::_ES, self::_GN];
399            case ISO3166TwoEnum::_PER:
400                return [self::_ES, self::_QU, self::_AY];
401            case ISO3166TwoEnum::_PHL:
402                return [self::_EN];
403            case ISO3166TwoEnum::_PCN:
404                return [self::_EN];
405            case ISO3166TwoEnum::_POL:
406                return [self::_PL];
407            case ISO3166TwoEnum::_PRT:
408                return [self::_PT];
409            case ISO3166TwoEnum::_PRI:
410                return [self::_ES, self::_EN];
411            case ISO3166TwoEnum::_QAT:
412                return [self::_AR];
413            case ISO3166TwoEnum::_REU:
414                return [self::_FR];
415            case ISO3166TwoEnum::_ROU:
416                return [self::_RO];
417            case ISO3166TwoEnum::_RUS:
418                return [self::_RU];
419            case ISO3166TwoEnum::_RWA:
420                return [self::_RW, self::_EN, self::_FR];
421            case ISO3166TwoEnum::_BLM:
422                return [self::_FR];
423            case ISO3166TwoEnum::_SHN:
424                return [self::_EN];
425            case ISO3166TwoEnum::_KNA:
426                return [self::_EN];
427            case ISO3166TwoEnum::_LCA:
428                return [self::_EN];
429            case ISO3166TwoEnum::_MAF:
430                return [self::_FR, self::_EN, self::_NL];
431            case ISO3166TwoEnum::_SPM:
432                return [self::_FR];
433            case ISO3166TwoEnum::_VCT:
434                return [self::_EN];
435            case ISO3166TwoEnum::_WSM:
436                return [self::_SM, self::_EN];
437            case ISO3166TwoEnum::_SMR:
438                return [self::_IT];
439            case ISO3166TwoEnum::_STP:
440                return [self::_PT];
441            case ISO3166TwoEnum::_SAU:
442                return [self::_AR];
443            case ISO3166TwoEnum::_SEN:
444                return [self::_FR, self::_WO];
445            case ISO3166TwoEnum::_SRB:
446                return [self::_SR];
447            case ISO3166TwoEnum::_SYC:
448                return [self::_FR, self::_EN];
449            case ISO3166TwoEnum::_SLE:
450                return [self::_EN];
451            case ISO3166TwoEnum::_SGP:
452                return [self::_EN, self::_MS, self::_TA, self::_ZH];
453            case ISO3166TwoEnum::_SXM:
454                return [self::_NL, self::_EN];
455            case ISO3166TwoEnum::_SVK:
456                return [self::_SK];
457            case ISO3166TwoEnum::_SVN:
458                return [self::_SL];
459            case ISO3166TwoEnum::_SLB:
460                return [self::_EN];
461            case ISO3166TwoEnum::_SOM:
462                return [self::_SO, self::_AR, self::_IT, self::_EN];
463            case ISO3166TwoEnum::_ZAF:
464                return [self::_ZU, self::_XH, self::_AF, self::_EN, self::_TN, self::_ST, self::_TS, self::_SS, self::_VE];
465            case ISO3166TwoEnum::_SGS:
466                return [self::_EN];
467            case ISO3166TwoEnum::_KOR:
468                return [self::_KO];
469            case ISO3166TwoEnum::_SSD:
470                return [self::_EN];
471            case ISO3166TwoEnum::_ESP:
472                return [self::_ES];
473            case ISO3166TwoEnum::_LKA:
474                return [self::_SI, self::_TA, self::_EN];
475            case ISO3166TwoEnum::_SDN:
476                return [self::_AR, self::_EN];
477            case ISO3166TwoEnum::_SUR:
478                return [self::_NL];
479            case ISO3166TwoEnum::_SJM:
480                return [self::_NO];
481            case ISO3166TwoEnum::_SWZ:
482                return [self::_EN, self::_SS];
483            case ISO3166TwoEnum::_SWE:
484                return [self::_SV];
485            case ISO3166TwoEnum::_CHE:
486                return [self::_DE, self::_FR, self::_IT];
487            case ISO3166TwoEnum::_SYR:
488                return [self::_AR];
489            case ISO3166TwoEnum::_TWN:
490                return [self::_ZH];
491            case ISO3166TwoEnum::_TJK:
492                return [self::_TG, self::_RU];
493            case ISO3166TwoEnum::_TZA:
494                return [self::_SW, self::_EN];
495            case ISO3166TwoEnum::_THA:
496                return [self::_TH];
497            case ISO3166TwoEnum::_TLS:
498                return [self::_PT];
499            case ISO3166TwoEnum::_TGO:
500                return [self::_FR];
501            case ISO3166TwoEnum::_TKL:
502                return [self::_EN];
503            case ISO3166TwoEnum::_TON:
504                return [self::_EN, self::_TO];
505            case ISO3166TwoEnum::_TTO:
506                return [self::_EN];
507            case ISO3166TwoEnum::_TUN:
508                return [self::_AR];
509            case ISO3166TwoEnum::_TUR:
510                return [self::_TR];
511            case ISO3166TwoEnum::_TKM:
512                return [self::_TK, self::_RU];
513            case ISO3166TwoEnum::_TCA:
514                return [self::_EN];
515            case ISO3166TwoEnum::_TUV:
516                return [self::_EN];
517            case ISO3166TwoEnum::_UGA:
518                return [self::_EN, self::_SW];
519            case ISO3166TwoEnum::_UKR:
520                return [self::_UK];
521            case ISO3166TwoEnum::_ARE:
522                return [self::_AR];
523            case ISO3166TwoEnum::_GBR:
524                return [self::_EN, self::_CY, self::_GD, self::_GA];
525            case ISO3166TwoEnum::_USA:
526                return [self::_EN, self::_ES];
527            case ISO3166TwoEnum::_UMI:
528                return [self::_EN];
529            case ISO3166TwoEnum::_URY:
530                return [self::_ES];
531            case ISO3166TwoEnum::_UZB:
532                return [self::_UZ, self::_RU];
533            case ISO3166TwoEnum::_VUT:
534                return [self::_BI, self::_EN, self::_FR];
535            case ISO3166TwoEnum::_VEN:
536                return [self::_ES];
537            case ISO3166TwoEnum::_VNM:
538                return [self::_VI];
539            case ISO3166TwoEnum::_VGB:
540                return [self::_EN];
541            case ISO3166TwoEnum::_VIR:
542                return [self::_EN];
543            case ISO3166TwoEnum::_WLF:
544                return [self::_FR];
545            case ISO3166TwoEnum::_ESH:
546                return [self::_AR, self::_ES];
547            case ISO3166TwoEnum::_YEM:
548                return [self::_AR];
549            case ISO3166TwoEnum::_ZMB:
550                return [self::_EN];
551            case ISO3166TwoEnum::_XXK:
552                return [self::_BS, self::_TR];
553            case ISO3166TwoEnum::_ZWE:
554                return [self::_EN, self::_SN, self::_ND];
555            default:
556                return [];
557        }
558    }
559}