Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
1016 / 1016
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
LocationService
100.00% covered (success)
100.00%
1016 / 1016
100.00% covered (success)
100.00%
5 / 5
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1008 / 1008
100.00% covered (success)
100.00%
1 / 1
1
 getCountryLabel
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getContinent
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getContinentLabel
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 isValidCountryCode
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Drupal\visitors\Service;
4
5use Drupal\Component\Render\MarkupInterface;
6use Drupal\Core\StringTranslation\StringTranslationTrait;
7use Drupal\Core\StringTranslation\TranslationInterface;
8use Drupal\visitors\VisitorsLocationInterface;
9
10/**
11 * The location service.
12 */
13class LocationService implements VisitorsLocationInterface {
14  use StringTranslationTrait;
15
16  /**
17   * List of countries.
18   *
19   * @var array
20   */
21  protected $countries = [];
22
23  /**
24   * List of continents.
25   *
26   * @var array
27   */
28  protected $continents = [];
29
30  /**
31   * Constructs a new LocationService object.
32   *
33   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
34   *   The string translation service.
35   */
36  public function __construct(TranslationInterface $string_translation) {
37
38    $this->setStringTranslation($string_translation);
39
40    $this->continents = [
41      'AF' => $this->t('Africa'),
42      'AS' => $this->t('Asia'),
43      'EU' => $this->t('Europe'),
44      'NA' => $this->t('North America'),
45      'OC' => $this->t('Oceania'),
46      'SA' => $this->t('South America'),
47      'AQ' => $this->t('Antarctica'),
48    ];
49
50    $this->countries = [
51      'AF' => [
52        'label' => $this->t('Afghanistan'),
53        'continent' => 'AS',
54      ],
55      'AX' => [
56        'label' => $this->t('Aland Islands'),
57        'continent' => 'EU',
58      ],
59      'AL' => [
60        'label' => $this->t('Albania'),
61        'continent' => 'EU',
62      ],
63      'DZ' => [
64        'label' => $this->t('Algeria'),
65        'continent' => 'AF',
66      ],
67      'AS' => [
68        'label' => $this->t('American Samoa'),
69        'continent' => 'OC',
70      ],
71      'AD' => [
72        'label' => $this->t('Andorra'),
73        'continent' => 'EU',
74      ],
75      'AO' => [
76        'label' => $this->t('Angola'),
77        'continent' => 'AF',
78      ],
79      'AI' => [
80        'label' => $this->t('Anguilla'),
81        'continent' => 'NA',
82      ],
83      'AQ' => [
84        'label' => $this->t('Antarctica'),
85        'continent' => 'AQ',
86      ],
87      'AG' => [
88        'label' => $this->t('Antigua and Barbuda'),
89        'continent' => 'NA',
90      ],
91      'AR' => [
92        'label' => $this->t('Argentina'),
93        'continent' => 'SA',
94      ],
95      'AM' => [
96        'label' => $this->t('Armenia'),
97        'continent' => 'AS',
98      ],
99      'AW' => [
100        'label' => $this->t('Aruba'),
101        'continent' => 'SA',
102      ],
103      'AU' => [
104        'label' => $this->t('Australia'),
105        'continent' => 'OC',
106      ],
107      'AT' => [
108        'label' => $this->t('Austria'),
109        'continent' => 'EU',
110      ],
111      'AZ' => [
112        'label' => $this->t('Azerbaijan'),
113        'continent' => 'AS',
114      ],
115      'BS' => [
116        'label' => $this->t('Bahamas'),
117        'continent' => 'NA',
118      ],
119      'BH' => [
120        'label' => $this->t('Bahrain'),
121        'continent' => 'AS',
122      ],
123      'BD' => [
124        'label' => $this->t('Bangladesh'),
125        'continent' => 'AS',
126      ],
127      'BB' => [
128        'label' => $this->t('Barbados'),
129        'continent' => 'SA',
130      ],
131      'BY' => [
132        'label' => $this->t('Belarus'),
133        'continent' => 'EU',
134      ],
135      'BE' => [
136        'label' => $this->t('Belgium'),
137        'continent' => 'EU',
138      ],
139      'BZ' => [
140        'label' => $this->t('Belize'),
141        'continent' => 'NA"',
142      ],
143      'BJ' => [
144        'label' => $this->t('Benin'),
145        'continent' => 'AF',
146      ],
147      'BM' => [
148        'label' => $this->t('Bermuda'),
149        'continent' => 'NA',
150      ],
151      'BT' => [
152        'label' => $this->t('Bhutan'),
153        'continent' => 'AS',
154      ],
155      'BO' => [
156        'label' => $this->t('Bolivia'),
157        'continent' => 'SA',
158      ],
159      'BQ' => [
160        'label' => $this->t('Bonaire, Sint Eustatius and Saba'),
161        'continent' => 'SA',
162      ],
163      'BA' => [
164        'label' => $this->t('Bosnia and Herzegovina'),
165        'continent' => 'EU',
166      ],
167      'BW' => [
168        'label' => $this->t('Botswana'),
169        'continent' => 'AF',
170      ],
171      'BV' => [
172        'label' => $this->t('Bouvet Island'),
173        'continent' => 'SA',
174      ],
175      'BR' => [
176        'label' => $this->t('Brazil'),
177        'continent' => 'SA',
178      ],
179      'IO' => [
180        'label' => $this->t('British Indian Ocean Territory'),
181        'continent' => 'AF',
182      ],
183      'BN' => [
184        'label' => $this->t('Brunei Darussalam'),
185        'continent' => 'AS',
186      ],
187      'BG' => [
188        'label' => $this->t('Bulgaria'),
189        'continent' => 'EU',
190      ],
191      'BF' => [
192        'label' => $this->t('Burkina Faso'),
193        'continent' => 'AF',
194      ],
195      'BI' => [
196        'label' => $this->t('Burundi'),
197        'continent' => 'AF',
198      ],
199      'CV' => [
200        'label' => $this->t('Cabo Verde'),
201        'continent' => 'AF',
202      ],
203      'KH' => [
204        'label' => $this->t('Cambodia'),
205        'continent' => 'AS',
206      ],
207      'CM' => [
208        'label' => $this->t('Cameroon'),
209        'continent' => 'AF',
210      ],
211      'CA' => [
212        'label' => $this->t('Canada'),
213        'continent' => 'NA',
214      ],
215      'KY' => [
216        'label' => $this->t('Cayman Islands'),
217        'continent' => 'NA',
218      ],
219      'CF' => [
220        'label' => $this->t('Central African Republic'),
221        'continent' => 'AF',
222      ],
223      'TD' => [
224        'label' => $this->t('Chad'),
225        'continent' => 'AF',
226      ],
227      'CL' => [
228        'label' => $this->t('Chile'),
229        'continent' => 'SA',
230      ],
231      'CN' => [
232        'label' => $this->t('China'),
233        'continent' => 'AS',
234      ],
235      'CX' => [
236        'label' => $this->t('Christmas Island'),
237        'continent' => 'OC',
238      ],
239      'CC' => [
240        'label' => $this->t('Cocos (Keeling) Islands'),
241        'continent' => 'OC',
242      ],
243      'CO' => [
244        'label' => $this->t('Colombia'),
245        'continent' => 'SA',
246      ],
247      'KM' => [
248        'label' => $this->t('Comoros'),
249        'continent' => 'AF',
250      ],
251      'CG' => [
252        'label' => $this->t('Congo'),
253        'continent' => 'AF',
254      ],
255      'CD' => [
256        'label' => $this->t('Congo, Democratic Republic of the'),
257        'continent' => 'AF',
258      ],
259      'CK' => [
260        'label' => $this->t('Cook Islands'),
261        'continent' => 'OC',
262      ],
263      'CR' => [
264        'label' => $this->t('Costa Rica'),
265        'continent' => 'NA',
266      ],
267      'CI' => [
268        'label' => $this->t("Côte d'Ivoire"),
269        'continent' => 'AF',
270      ],
271      'HR' => [
272        'label' => $this->t('Croatia'),
273        'continent' => 'EU',
274      ],
275      'CU' => [
276        'label' => $this->t('Cuba'),
277        'continent' => 'NA',
278      ],
279      'CW' => [
280        'label' => $this->t('Curaçao'),
281        'continent' => 'SA',
282      ],
283      'CY' => [
284        'label' => $this->t('Cyprus'),
285        'continent' => 'AS',
286      ],
287      'CZ' => [
288        'label' => $this->t('Czechia'),
289        'continent' => 'EU',
290      ],
291      'DK' => [
292        'label' => $this->t('Denmark'),
293        'continent' => 'EU',
294      ],
295      'DJ' => [
296        'label' => $this->t('Djibouti'),
297        'continent' => 'AF',
298      ],
299      'DM' => [
300        'label' => $this->t('Dominica'),
301        'continent' => 'SA',
302      ],
303      'DO' => [
304        'label' => $this->t('Dominican Republic'),
305        'continent' => 'NA',
306      ],
307      'EC' => [
308        'label' => $this->t('Ecuador'),
309        'continent' => 'SA',
310      ],
311      'EG' => [
312        'label' => $this->t('Egypt'),
313        'continent' => 'AF',
314      ],
315      'SV' => [
316        'label' => $this->t('El Salvador'),
317        'continent' => 'SA',
318      ],
319      'GQ' => [
320        'label' => $this->t('Equatorial Guinea'),
321        'continent' => 'AF',
322      ],
323      'ER' => [
324        'label' => $this->t('Eritrea'),
325        'continent' => 'AF',
326      ],
327      'EE' => [
328        'label' => $this->t('Estonia'),
329        'continent' => 'EU',
330      ],
331      'SZ' => [
332        'label' => $this->t('Eswatini'),
333        'continent' => 'AF',
334      ],
335      'ET' => [
336        'label' => $this->t('Ethiopia'),
337        'continent' => 'AF',
338      ],
339      'FK' => [
340        'label' => $this->t('Falkland Islands (Malvinas)'),
341        'continent' => 'SA',
342      ],
343      'FO' => [
344        'label' => $this->t('Faroe Islands'),
345        'continent' => 'EU',
346      ],
347      'FJ' => [
348        'label' => $this->t('Fiji'),
349        'continent' => 'OC',
350      ],
351      'FI' => [
352        'label' => $this->t('Finland'),
353        'continent' => 'EU',
354      ],
355      'FR' => [
356        'label' => $this->t('France'),
357        'continent' => 'EU',
358      ],
359      'GF' => [
360        'label' => $this->t('French Guiana'),
361        'continent' => 'SA',
362      ],
363      'PF' => [
364        'label' => $this->t('French Polynesia'),
365        'continent' => 'OC',
366      ],
367      'TF' => [
368        'label' => $this->t('French Southern Territories'),
369        'continent' => 'AF',
370      ],
371      'GA' => [
372        'label' => $this->t('Gabon'),
373        'continent' => 'AF',
374      ],
375      'GM' => [
376        'label' => $this->t('Gambia'),
377        'continent' => 'AF',
378      ],
379      'GE' => [
380        'label' => $this->t('Georgia'),
381        'continent' => 'AS',
382      ],
383      'DE' => [
384        'label' => $this->t('Germany'),
385        'continent' => 'EU',
386      ],
387      'GH' => [
388        'label' => $this->t('Ghana'),
389        'continent' => 'AF',
390      ],
391      'GI' => [
392        'label' => $this->t('Gibraltar'),
393        'continent' => 'EU',
394      ],
395      'GR' => [
396        'label' => $this->t('Greece'),
397        'continent' => 'EU',
398      ],
399      'GL' => [
400        'label' => $this->t('Greenland'),
401        'continent' => 'NA',
402      ],
403      'GD' => [
404        'label' => $this->t('Grenada'),
405        'continent' => 'SA',
406      ],
407      'GP' => [
408        'label' => $this->t('Guadeloupe'),
409        'continent' => 'SA',
410      ],
411      'GU' => [
412        'label' => $this->t('Guam'),
413        'continent' => 'OC',
414      ],
415      'GT' => [
416        'label' => $this->t('Guatemala'),
417        'continent' => 'NA',
418      ],
419      'GG' => [
420        'label' => $this->t('Guernsey'),
421        'continent' => 'EU',
422      ],
423      'GN' => [
424        'label' => $this->t('Guinea'),
425        'continent' => 'AF',
426      ],
427      'GW' => [
428        'label' => $this->t('Guinea-Bissau'),
429        'continent' => 'AF',
430      ],
431      'GY' => [
432        'label' => $this->t('Guyana'),
433        'continent' => 'SA',
434      ],
435      'HT' => [
436        'label' => $this->t('Haiti'),
437        'continent' => 'NA',
438      ],
439      'HM' => [
440        'label' => $this->t('Heard Island and McDonald Islands'),
441        'continent' => 'OC',
442      ],
443      'VA' => [
444        'label' => $this->t('Holy See'),
445        'continent' => 'EU',
446      ],
447      'HN' => [
448        'label' => $this->t('Honduras'),
449        'continent' => 'NA',
450      ],
451      'HK' => [
452        'label' => $this->t('Hong Kong'),
453        'continent' => 'AS',
454      ],
455      'HU' => [
456        'label' => $this->t('Hungary'),
457        'continent' => 'EU',
458      ],
459      'IS' => [
460        'label' => $this->t('Iceland'),
461        'continent' => 'EU',
462      ],
463      'IN' => [
464        'label' => $this->t('India'),
465        'continent' => 'AS',
466      ],
467      'ID' => [
468        'label' => $this->t('Indonesia'),
469        'continent' => 'AS',
470      ],
471      'IR' => [
472        'label' => $this->t('Iran'),
473        'continent' => 'AS',
474      ],
475      'IQ' => [
476        'label' => $this->t('Iraq'),
477        'continent' => 'AS',
478      ],
479      'IE' => [
480        'label' => $this->t('Ireland'),
481        'continent' => 'EU',
482      ],
483      'IM' => [
484        'label' => $this->t('Isle of Man'),
485        'continent' => 'EU',
486      ],
487      'IL' => [
488        'label' => $this->t('Israel'),
489        'continent' => 'AS',
490      ],
491      'IT' => [
492        'label' => $this->t('Italy'),
493        'continent' => 'EU',
494      ],
495      'JM' => [
496        'label' => $this->t('Jamaica'),
497        'continent' => 'NA',
498      ],
499      'JP' => [
500        'label' => $this->t('Japan'),
501        'continent' => 'AS',
502      ],
503      'JE' => [
504        'label' => $this->t('Jersey'),
505        'continent' => 'EU',
506      ],
507      'JO' => [
508        'label' => $this->t('Jordan'),
509        'continent' => 'AS',
510      ],
511      'KZ' => [
512        'label' => $this->t('Kazakhstan'),
513        'continent' => 'AS',
514      ],
515      'KE' => [
516        'label' => $this->t('Kenya,KE,AF'),
517        'continent' => 'AF',
518      ],
519      'KI' => [
520        'label' => $this->t('Kiribati'),
521        'continent' => 'OC',
522      ],
523      'KP' => [
524        'label' => $this->t("Korea (Democratic People's Republic of)"),
525        'continent' => 'AS',
526      ],
527      'KR' => [
528        'label' => $this->t('Korea, Republic of'),
529        'continent' => 'AS',
530      ],
531      'KW' => [
532        'label' => $this->t('Kuwait'),
533        'continent' => 'AS',
534      ],
535      'KG' => [
536        'label' => $this->t('Kyrgyzstan'),
537        'continent' => 'AS',
538      ],
539      'LA' => [
540        'label' => $this->t("Lao People's Democratic Republic"),
541        'continent' => 'SA',
542      ],
543      'LV' => [
544        'label' => $this->t('Latvia'),
545        'continent' => 'EU',
546      ],
547      'LB' => [
548        'label' => $this->t('Lebanon'),
549        'continent' => 'AS',
550      ],
551      'LS' => [
552        'label' => $this->t('Lesotho'),
553        'continent' => 'AF',
554      ],
555      'LR' => [
556        'label' => $this->t('Liberia'),
557        'continent' => 'AF',
558      ],
559      'LY' => [
560        'label' => $this->t('Libya'),
561        'continent' => 'AF',
562      ],
563      'LI' => [
564        'label' => $this->t('Liechtenstein'),
565        'continent' => 'EU',
566      ],
567      'LT' => [
568        'label' => $this->t('Lithuania'),
569        'continent' => 'EU',
570      ],
571      'LU' => [
572        'label' => $this->t('Luxembourg'),
573        'continent' => 'EU',
574      ],
575      'MO' => [
576        'label' => $this->t('Macao'),
577        'continent' => 'AS',
578      ],
579      'MG' => [
580        'label' => $this->t('Madagascar'),
581        'continent' => 'AF',
582      ],
583      'MW' => [
584        'label' => $this->t('Malawi'),
585        'continent' => 'AF',
586      ],
587      'MY' => [
588        'label' => $this->t('Malaysia'),
589        'continent' => 'AS',
590      ],
591      'MV' => [
592        'label' => $this->t('Maldives'),
593        'continent' => 'AS',
594      ],
595      'ML' => [
596        'label' => $this->t('Mali'),
597        'continent' => 'AF',
598      ],
599      'MT' => [
600        'label' => $this->t('Malta'),
601        'continent' => 'EU',
602      ],
603      'MH' => [
604        'label' => $this->t('Marshall Islands'),
605        'continent' => 'OC',
606      ],
607      'MQ' => [
608        'label' => $this->t('Martinique'),
609        'continent' => 'SA',
610      ],
611      'MR' => [
612        'label' => $this->t('Mauritania'),
613        'continent' => 'AF',
614      ],
615      'MU' => [
616        'label' => $this->t('Mauritius'),
617        'continent' => 'AF',
618      ],
619      'YT' => [
620        'label' => $this->t('Mayotte'),
621        'continent' => 'AF',
622      ],
623      'MX' => [
624        'label' => $this->t('Mexico'),
625        'continent' => 'NA',
626      ],
627      'FM' => [
628        'label' => $this->t('Micronesia (Federated States of)'),
629        'continent' => 'OC',
630      ],
631      'MD' => [
632        'label' => $this->t('Moldova, Republic of'),
633        'continent' => 'EU',
634      ],
635      'MC' => [
636        'label' => $this->t('Monaco'),
637        'continent' => 'EU',
638      ],
639      'MN' => [
640        'label' => $this->t('Mongolia'),
641        'continent' => 'AS',
642      ],
643      'ME' => [
644        'label' => $this->t('Montenegro'),
645        'continent' => 'EU',
646      ],
647      'MS' => [
648        'label' => $this->t('Montserrat'),
649        'continent' => 'SA',
650      ],
651      'MA' => [
652        'label' => $this->t('Morocco'),
653        'continent' => 'AF',
654      ],
655      'MZ' => [
656        'label' => $this->t('Mozambique'),
657        'continent' => 'AF',
658      ],
659      'MM' => [
660        'label' => $this->t('Myanmar'),
661        'continent' => 'AS',
662      ],
663      'NA' => [
664        'label' => $this->t('Namibia'),
665        'continent' => 'AF',
666      ],
667      'NR' => [
668        'label' => $this->t('Nauru'),
669        'continent' => 'OC',
670      ],
671      'NP' => [
672        'label' => $this->t('Nepal'),
673        'continent' => 'AS',
674      ],
675      'NL' => [
676        'label' => $this->t('Netherlands'),
677        'continent' => 'EU',
678      ],
679      'NC' => [
680        'label' => $this->t('New Caledonia'),
681        'continent' => 'OC',
682      ],
683      'NZ' => [
684        'label' => $this->t('New Zealand'),
685        'continent' => 'OC',
686      ],
687      'NI' => [
688        'label' => $this->t('Nicaragua'),
689        'continent' => 'NA',
690      ],
691      'NE' => [
692        'label' => $this->t('Niger'),
693        'continent' => 'AF',
694      ],
695      'NG' => [
696        'label' => $this->t('Nigeria'),
697        'continent' => 'AF',
698      ],
699      'NU' => [
700        'label' => $this->t('Niue'),
701        'continent' => 'OC',
702      ],
703      'NF' => [
704        'label' => $this->t('Norfolk Island'),
705        'continent' => 'OC',
706      ],
707      'MK' => [
708        'label' => $this->t('North Macedonia'),
709        'continent' => 'EU',
710      ],
711      'MP' => [
712        'label' => $this->t('Northern Mariana Islands'),
713        'continent' => 'OC',
714      ],
715      'NO' => [
716        'label' => $this->t('Norway'),
717        'continent' => 'EU',
718      ],
719      'OM' => [
720        'label' => $this->t('Oman'),
721        'continent' => 'AS',
722      ],
723      'PK' => [
724        'label' => $this->t('Pakistan'),
725        'continent' => 'AS',
726      ],
727      'PW' => [
728        'label' => $this->t('Palau'),
729        'continent' => 'OC',
730      ],
731      'PS' => [
732        'label' => $this->t('Palestine'),
733        'continent' => 'AS',
734      ],
735      'PA' => [
736        'label' => $this->t('Panama'),
737        'continent' => 'NA',
738      ],
739      'PG' => [
740        'label' => $this->t('Papua New Guinea'),
741        'continent' => 'OC',
742      ],
743      'PY' => [
744        'label' => $this->t('Paraguay'),
745        'continent' => 'SA',
746      ],
747      'PE' => [
748        'label' => $this->t('Peru'),
749        'continent' => 'SA',
750      ],
751      'PH' => [
752        'label' => $this->t('Philippines'),
753        'continent' => 'AS',
754      ],
755      'PN' => [
756        'label' => $this->t('Pitcairn'),
757        'continent' => 'OC',
758      ],
759      'PL' => [
760        'label' => $this->t('Poland'),
761        'continent' => 'EU',
762      ],
763      'PT' => [
764        'label' => $this->t('Portugal'),
765        'continent' => 'EU',
766      ],
767      'PR' => [
768        'label' => $this->t('Puerto Rico'),
769        'continent' => 'NA',
770      ],
771      'QA' => [
772        'label' => $this->t('Qatar'),
773        'continent' => 'AS',
774      ],
775      'RE' => [
776        'label' => $this->t('Réunion'),
777        'continent' => 'AF',
778      ],
779      'RO' => [
780        'label' => $this->t('Romania'),
781        'continent' => 'EU',
782      ],
783      'RU' => [
784        'label' => $this->t('Russia'),
785        'continent' => 'EU',
786      ],
787      'RW' => [
788        'label' => $this->t('Rwanda'),
789        'continent' => 'AF',
790      ],
791      'BL' => [
792        'label' => $this->t('Saint Barthélemy'),
793        'continent' => 'SA',
794      ],
795      'SH' => [
796        'label' => $this->t('Saint Helena, Ascension and Tristan da Cunha'),
797        'continent' => 'AF',
798      ],
799      'KN' => [
800        'label' => $this->t('Saint Kitts and Nevis'),
801        'continent' => 'SA',
802      ],
803      'LC' => [
804        'label' => $this->t('Saint Lucia'),
805        'continent' => 'SA',
806      ],
807      'MF' => [
808        'label' => $this->t('Saint Martin (French part)'),
809        'continent' => 'SA',
810      ],
811      'PM' => [
812        'label' => $this->t('Saint Pierre and Miquelon'),
813        'continent' => 'NA',
814      ],
815      'VC' => [
816        'label' => $this->t('Saint Vincent and the Grenadines'),
817        'continent' => 'SA',
818      ],
819      'WS' => [
820        'label' => $this->t('Samoa'),
821        'continent' => 'OC',
822      ],
823      'SM' => [
824        'label' => $this->t('San Marino'),
825        'continent' => 'EU',
826      ],
827      'ST' => [
828        'label' => $this->t('Sao Tome and Principe'),
829        'continent' => 'AF',
830      ],
831      'SA' => [
832        'label' => $this->t('Saudi Arabia'),
833        'continent' => 'AS',
834      ],
835      'SN' => [
836        'label' => $this->t('Senegal'),
837        'continent' => 'AF',
838      ],
839      'RS' => [
840        'label' => $this->t('Serbia'),
841        'continent' => 'EU',
842      ],
843      'SC' => [
844        'label' => $this->t('Seychelles'),
845        'continent' => 'AF',
846      ],
847      'SL' => [
848        'label' => $this->t('Sierra Leone'),
849        'continent' => 'AF',
850      ],
851      'SG' => [
852        'label' => $this->t('Singapore'),
853        'continent' => 'AS',
854      ],
855      'SX' => [
856        'label' => $this->t('Sint Maarten (Dutch part)'),
857        'continent' => 'SA',
858      ],
859      'SK' => [
860        'label' => $this->t('Slovakia'),
861        'continent' => 'EU',
862      ],
863      'SI' => [
864        'label' => $this->t('Slovenia'),
865        'continent' => 'EU',
866      ],
867      'SB' => [
868        'label' => $this->t('Solomon Islands'),
869        'continent' => 'OC',
870      ],
871      'SO' => [
872        'label' => $this->t('Somalia'),
873        'continent' => 'AF',
874      ],
875      'ZA' => [
876        'label' => $this->t('South Africa'),
877        'continent' => 'AF',
878      ],
879      'GS' => [
880        'label' => $this->t('South Georgia and the South Sandwich Islands'),
881        'continent' => 'SA',
882      ],
883      'SS' => [
884        'label' => $this->t('South Sudan'),
885        'continent' => 'AF',
886      ],
887      'ES' => [
888        'label' => $this->t('Spain'),
889        'continent' => 'EU',
890      ],
891      'LK' => [
892        'label' => $this->t('Sri Lanka'),
893        'continent' => 'AS',
894      ],
895      'SD' => [
896        'label' => $this->t('Sudan'),
897        'continent' => 'AF',
898      ],
899      'SR' => [
900        'label' => $this->t('Suriname'),
901        'continent' => 'SA',
902      ],
903      'SJ' => [
904        'label' => $this->t('Svalbard and Jan Mayen'),
905        'continent' => 'EU',
906      ],
907      'SE' => [
908        'label' => $this->t('Sweden'),
909        'continent' => 'EU',
910      ],
911      'CH' => [
912        'label' => $this->t('Switzerland'),
913        'continent' => 'EU',
914      ],
915      'SY' => [
916        'label' => $this->t('Syria'),
917        'continent' => 'AS',
918      ],
919      'TW' => [
920        'label' => $this->t('Taiwan'),
921        'continent' => 'AS',
922      ],
923      'TJ' => [
924        'label' => $this->t('Tajikistan'),
925        'continent' => 'AS',
926      ],
927      'TZ' => [
928        'label' => $this->t('Tanzania'),
929        'continent' => 'AF',
930      ],
931      'TH' => [
932        'label' => $this->t('Thailand'),
933        'continent' => 'AS',
934      ],
935      'TL' => [
936        'label' => $this->t('Timor-Leste'),
937        'continent' => 'AS',
938      ],
939      'TG' => [
940        'label' => $this->t('Togo'),
941        'continent' => 'AF',
942      ],
943      'TK' => [
944        'label' => $this->t('Tokelau'),
945        'continent' => 'OC',
946      ],
947      'TO' => [
948        'label' => $this->t('Tonga'),
949        'continent' => 'OC',
950      ],
951      'TT' => [
952        'label' => $this->t('Trinidad and Tobago'),
953        'continent' => 'SA',
954      ],
955      'TN' => [
956        'label' => $this->t('Tunisia'),
957        'continent' => 'AF',
958      ],
959      'TR' => [
960        'label' => $this->t('Turkey'),
961        'continent' => 'AS',
962      ],
963      'TM' => [
964        'label' => $this->t('Turkmenistan'),
965        'continent' => 'AS',
966      ],
967      'TC' => [
968        'label' => $this->t('Turks and Caicos Islands'),
969        'continent' => 'NA',
970      ],
971      'TV' => [
972        'label' => $this->t('Tuvalu'),
973        'continent' => 'OC',
974      ],
975      'UG' => [
976        'label' => $this->t('Uganda'),
977        'continent' => 'AF',
978      ],
979      'UA' => [
980        'label' => $this->t('Ukraine'),
981        'continent' => 'EU',
982      ],
983      'AE' => [
984        'label' => $this->t('United Arab Emirates'),
985        'continent' => 'AS',
986      ],
987      'GB' => [
988        'label' => $this->t('United Kingdom'),
989        'continent' => 'EU',
990      ],
991      'US' => [
992        'label' => $this->t('United States'),
993        'continent' => 'NA',
994      ],
995      'UM' => [
996        'label' => $this->t('United States Minor Outlying Islands'),
997        'continent' => 'OC',
998      ],
999      'UY' => [
1000        'label' => $this->t('Uruguay'),
1001        'continent' => 'SA',
1002      ],
1003      'UZ' => [
1004        'label' => $this->t('Uzbekistan'),
1005        'continent' => 'AS',
1006      ],
1007      'VU' => [
1008        'label' => $this->t('Vanuatu'),
1009        'continent' => 'OC',
1010      ],
1011      'VE' => [
1012        'label' => $this->t('Venezuela'),
1013        'continent' => 'SA',
1014      ],
1015      'VN' => [
1016        'label' => $this->t('Vietnam'),
1017        'continent' => 'AS',
1018      ],
1019      'VG' => [
1020        'label' => $this->t('Virgin Islands, British'),
1021        'continent' => 'NA',
1022      ],
1023      'VI' => [
1024        'label' => $this->t('Virgin Islands, US'),
1025        'continent' => 'NA',
1026      ],
1027      'WF' => [
1028        'label' => $this->t('Wallis and Futuna'),
1029        'continent' => 'OC',
1030      ],
1031      'EH' => [
1032        'label' => $this->t('Western Sahara'),
1033        'continent' => 'AF',
1034      ],
1035      'YE' => [
1036        'label' => $this->t('Yemen'),
1037        'continent' => 'AS',
1038      ],
1039      'ZM' => [
1040        'label' => $this->t('Zambia'),
1041        'continent' => 'AF',
1042      ],
1043      'ZW' => [
1044        'label' => $this->t('Zimbabwe'),
1045        'continent' => 'AF',
1046      ],
1047    ];
1048  }
1049
1050  /**
1051   * {@inheritdoc}
1052   */
1053  public function getCountryLabel($country_code): MarkupInterface {
1054    $country_code = strtoupper($country_code);
1055    return $this->countries[$country_code]['label'] ?? $this->t('Unknown');
1056  }
1057
1058  /**
1059   * {@inheritdoc}
1060   */
1061  public function getContinent($country_code): string {
1062    $country_code = strtoupper($country_code);
1063    return $this->countries[$country_code]['continent'] ?? '';
1064  }
1065
1066  /**
1067   * {@inheritdoc}
1068   */
1069  public function getContinentLabel($continent_code): MarkupInterface {
1070    $continent_code = strtoupper($continent_code);
1071    return $this->continents[$continent_code] ?? $this->t('Unknown');
1072  }
1073
1074  /**
1075   * {@inheritdoc}
1076   */
1077  public function isValidCountryCode($country_code): bool {
1078    $country_code = strtoupper($country_code);
1079    return isset($this->countries[$country_code]);
1080  }
1081
1082}