View Javadoc
1   /*
2    * Copyright 2018-2020 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.bremersee.common.model;
18  
19  import com.fasterxml.jackson.annotation.JsonCreator;
20  import com.fasterxml.jackson.annotation.JsonValue;
21  import java.util.Arrays;
22  import java.util.Locale;
23  import java.util.MissingResourceException;
24  import org.springframework.util.StringUtils;
25  
26  /**
27   * ISO 639-2 language codes from Java Locale.
28   *
29   * @author Christian Bremer
30   */
31  public enum ThreeLetterLanguageCode {
32  
33    /**
34     * Afar (aar).
35     */
36    AAR("aar", TwoLetterLanguageCode.AA),
37  
38    /**
39     * Abchasisch (abk).
40     */
41    ABK("abk", TwoLetterLanguageCode.AB),
42  
43    /**
44     * Afrikaans (afr).
45     */
46    AFR("afr", TwoLetterLanguageCode.AF),
47  
48    /**
49     * Aghem (Kamerun) (agq).
50     */
51    AGQ("agq"),
52  
53    /**
54     * Akan (Ghana) (aka).
55     */
56    AKA("aka", TwoLetterLanguageCode.AK),
57  
58    /**
59     * Amharisch (amh).
60     */
61    AMH("amh", TwoLetterLanguageCode.AM),
62  
63    /**
64     * Arabisch (Tschad) (ara).
65     */
66    ARA("ara", TwoLetterLanguageCode.AR),
67  
68    /**
69     * Aragonesisch (arg).
70     */
71    ARG("arg", TwoLetterLanguageCode.AN),
72  
73    /**
74     * Asu (Tansania) (asa).
75     */
76    ASA("asa"),
77  
78    /**
79     * Assamesisch (asm).
80     */
81    ASM("asm", TwoLetterLanguageCode.AS),
82  
83    /**
84     * Asturianisch (ast).
85     */
86    AST("ast"),
87  
88    /**
89     * Awarisch (ava).
90     */
91    AVA("ava", TwoLetterLanguageCode.AV),
92  
93    /**
94     * Avestisch (ave).
95     */
96    AVE("ave", TwoLetterLanguageCode.AE),
97  
98    /**
99     * Aymara (aym).
100    */
101   AYM("aym", TwoLetterLanguageCode.AY),
102 
103   /**
104    * Aserbaidschanisch (aze).
105    */
106   AZE("aze", TwoLetterLanguageCode.AZ),
107 
108   /**
109    * Baschkirisch (bak).
110    */
111   BAK("bak", TwoLetterLanguageCode.BA),
112 
113   /**
114    * Bambara (Mali) (bam).
115    */
116   BAM("bam", TwoLetterLanguageCode.BM),
117 
118   /**
119    * Basaa (Kamerun) (bas).
120    */
121   BAS("bas"),
122 
123   /**
124    * Weißrussisch (bel).
125    */
126   BEL("bel", TwoLetterLanguageCode.BE),
127 
128   /**
129    * Bemba (bem).
130    */
131   BEM("bem"),
132 
133   /**
134    * Bengalisch (ben).
135    */
136   BEN("ben", TwoLetterLanguageCode.BN),
137 
138   /**
139    * Bena (Tansania) (bez).
140    */
141   BEZ("bez"),
142 
143   /**
144    * Biharisch (bih).
145    */
146   BIH("bih", TwoLetterLanguageCode.BH),
147 
148   /**
149    * Bislama (bis).
150    */
151   BIS("bis", TwoLetterLanguageCode.BI),
152 
153   /**
154    * Tibetisch (bod).
155    */
156   BOD("bod", TwoLetterLanguageCode.BO),
157 
158   /**
159    * Bosnisch (Lateinisch, Bosnien und Herzegowina) (bos).
160    */
161   BOS("bos", TwoLetterLanguageCode.BS),
162 
163   /**
164    * Bretonisch (bre).
165    */
166   BRE("bre", TwoLetterLanguageCode.BR),
167 
168   /**
169    * Bodo (Indien) (brx).
170    */
171   BRX("brx"),
172 
173   /**
174    * Bulgarisch (bul).
175    */
176   BUL("bul", TwoLetterLanguageCode.BG),
177 
178   /**
179    * Katalanisch (Frankreich) (cat).
180    */
181   CAT("cat", TwoLetterLanguageCode.CA),
182 
183   /**
184    * ccp (ccp).
185    */
186   CCP("ccp"),
187 
188   /**
189    * Cebuano (ceb).
190    */
191   CEB("ceb"),
192 
193   /**
194    * Tschechisch (ces).
195    */
196   CES("ces", TwoLetterLanguageCode.CS),
197 
198   /**
199    * Rukiga (cgg).
200    */
201   CGG("cgg"),
202 
203   /**
204    * Chamorro (cha).
205    */
206   CHA("cha", TwoLetterLanguageCode.CH),
207 
208   /**
209    * Tschetschenisch (Russland) (che).
210    */
211   CHE("che", TwoLetterLanguageCode.CE),
212 
213   /**
214    * Cherokee (chr).
215    */
216   CHR("chr"),
217 
218   /**
219    * Kirchenslawisch (Russland) (chu).
220    */
221   CHU("chu", TwoLetterLanguageCode.CU),
222 
223   /**
224    * Tschuwaschisch (chv).
225    */
226   CHV("chv", TwoLetterLanguageCode.CV),
227 
228   /**
229    * Zentralkurdisch (ckb).
230    */
231   CKB("ckb"),
232 
233   /**
234    * Kornisch (Vereinigtes Königreich) (cor).
235    */
236   COR("cor", TwoLetterLanguageCode.KW),
237 
238   /**
239    * Korsisch (cos).
240    */
241   COS("cos", TwoLetterLanguageCode.CO),
242 
243   /**
244    * Cree (cre).
245    */
246   CRE("cre", TwoLetterLanguageCode.CR),
247 
248   /**
249    * Walisisch (cym).
250    */
251   CYM("cym", TwoLetterLanguageCode.CY),
252 
253   /**
254    * Dänisch (Dänemark) (dan).
255    */
256   DAN("dan", TwoLetterLanguageCode.DA),
257 
258   /**
259    * Taita (dav).
260    */
261   DAV("dav"),
262 
263   /**
264    * Deutsch (Italien) (deu).
265    */
266   DEU("deu", TwoLetterLanguageCode.DE),
267 
268   /**
269    * Dhivehi (div).
270    */
271   DIV("div", TwoLetterLanguageCode.DV),
272 
273   /**
274    * Zarma (Niger) (dje).
275    */
276   DJE("dje"),
277 
278   /**
279    * Niedersorbisch (Deutschland) (dsb).
280    */
281   DSB("dsb"),
282 
283   /**
284    * Duala (Kamerun) (dua).
285    */
286   DUA("dua"),
287 
288   /**
289    * Diola (Senegal) (dyo).
290    */
291   DYO("dyo"),
292 
293   /**
294    * Dzongkha (Bhutan) (dzo).
295    */
296   DZO("dzo", TwoLetterLanguageCode.DZ),
297 
298   /**
299    * Embu (ebu).
300    */
301   EBU("ebu"),
302 
303   /**
304    * Griechisch (ell).
305    */
306   ELL("ell", TwoLetterLanguageCode.EL),
307 
308   /**
309    * Englisch (Niue) (eng).
310    */
311   ENG("eng", TwoLetterLanguageCode.EN),
312 
313   /**
314    * Esperanto (Welt) (epo).
315    */
316   EPO("epo", TwoLetterLanguageCode.EO),
317 
318   /**
319    * Estnisch (Estland) (est).
320    */
321   EST("est", TwoLetterLanguageCode.ET),
322 
323   /**
324    * Baskisch (eus).
325    */
326   EUS("eus", TwoLetterLanguageCode.EU),
327 
328   /**
329    * Ewe (ewe).
330    */
331   EWE("ewe", TwoLetterLanguageCode.EE),
332 
333   /**
334    * Ewondo (ewo).
335    */
336   EWO("ewo"),
337 
338   /**
339    * Färöisch (Dänemark) (fao).
340    */
341   FAO("fao", TwoLetterLanguageCode.FO),
342 
343   /**
344    * Persisch (fas).
345    */
346   FAS("fas", TwoLetterLanguageCode.FA),
347 
348   /**
349    * Fidschi (fij).
350    */
351   FIJ("fij", TwoLetterLanguageCode.FJ),
352 
353   /**
354    * Filipino (Philippinen) (fil).
355    */
356   FIL("fil"),
357 
358   /**
359    * Finnisch (Finnland) (fin).
360    */
361   FIN("fin", TwoLetterLanguageCode.FI),
362 
363   /**
364    * Französisch (St. Pierre und Miquelon) (fra).
365    */
366   FRA("fra", TwoLetterLanguageCode.FR),
367 
368   /**
369    * Westfriesisch (Niederlande) (fry).
370    */
371   FRY("fry", TwoLetterLanguageCode.FY),
372 
373   /**
374    * Ful (Lateinisch, Mauretanien) (ful).
375    */
376   FUL("ful", TwoLetterLanguageCode.FF),
377 
378   /**
379    * Friaulisch (fur).
380    */
381   FUR("fur"),
382 
383   /**
384    * Schottisches Gälisch (Vereinigtes Königreich) (gla).
385    */
386   GLA("gla", TwoLetterLanguageCode.GD),
387 
388   /**
389    * Irisch (gle).
390    */
391   GLE("gle", TwoLetterLanguageCode.GA),
392 
393   /**
394    * Galicisch (glg).
395    */
396   GLG("glg", TwoLetterLanguageCode.GL),
397 
398   /**
399    * Manx (Isle of Man) (glv).
400    */
401   GLV("glv", TwoLetterLanguageCode.GV),
402 
403   /**
404    * Guaraní (grn).
405    */
406   GRN("grn", TwoLetterLanguageCode.GN),
407 
408   /**
409    * Schweizerdeutsch (gsw).
410    */
411   GSW("gsw"),
412 
413   /**
414    * Gujarati (guj).
415    */
416   GUJ("guj", TwoLetterLanguageCode.GU),
417 
418   /**
419    * Gusii (Kenia) (guz).
420    */
421   GUZ("guz"),
422 
423   /**
424    * Haiti-Kreolisch (hat).
425    */
426   HAT("hat", TwoLetterLanguageCode.HT),
427 
428   /**
429    * Haussa (hau).
430    */
431   HAU("hau", TwoLetterLanguageCode.HA),
432 
433   /**
434    * Hawaiisch (Vereinigte Staaten) (haw).
435    */
436   HAW("haw"),
437 
438   /**
439    * Hebräisch (heb).
440    */
441   HEB("heb", TwoLetterLanguageCode.IW, TwoLetterLanguageCode.HE),
442 
443   /**
444    * Herero (her).
445    */
446   HER("her", TwoLetterLanguageCode.HZ),
447 
448   /**
449    * Hindi (hin).
450    */
451   HIN("hin", TwoLetterLanguageCode.HI),
452 
453   /**
454    * Hiri-Motu (hmo).
455    */
456   HMO("hmo", TwoLetterLanguageCode.HO),
457 
458   /**
459    * Kroatisch (Kroatien) (hrv).
460    */
461   HRV("hrv", TwoLetterLanguageCode.HR),
462 
463   /**
464    * Obersorbisch (hsb).
465    */
466   HSB("hsb"),
467 
468   /**
469    * Ungarisch (Ungarn) (hun).
470    */
471   HUN("hun", TwoLetterLanguageCode.HU),
472 
473   /**
474    * Armenisch (hye).
475    */
476   HYE("hye", TwoLetterLanguageCode.HY),
477 
478   /**
479    * Igbo (ibo).
480    */
481   IBO("ibo", TwoLetterLanguageCode.IG),
482 
483   /**
484    * Ido (ido).
485    */
486   IDO("ido", TwoLetterLanguageCode.IO),
487 
488   /**
489    * Yi (iii).
490    */
491   III("iii", TwoLetterLanguageCode.II),
492 
493   /**
494    * Inuktitut (iku).
495    */
496   IKU("iku", TwoLetterLanguageCode.IU),
497 
498   /**
499    * Interlingue (ile).
500    */
501   ILE("ile", TwoLetterLanguageCode.IE),
502 
503   /**
504    * Interlingua (Welt) (ina).
505    */
506   INA("ina", TwoLetterLanguageCode.IA),
507 
508   /**
509    * Indonesisch (ind).
510    */
511   IND("ind", TwoLetterLanguageCode.IN, TwoLetterLanguageCode.ID),
512 
513   /**
514    * Inupiak (ipk).
515    */
516   IPK("ipk", TwoLetterLanguageCode.IK),
517 
518   /**
519    * Isländisch (Island) (isl).
520    */
521   ISL("isl", TwoLetterLanguageCode.IS),
522 
523   /**
524    * Italienisch (San Marino) (ita).
525    */
526   ITA("ita", TwoLetterLanguageCode.IT),
527 
528   /**
529    * Javanisch (jav).
530    */
531   JAV("jav", TwoLetterLanguageCode.JV),
532 
533   /**
534    * Ngomba (jgo).
535    */
536   JGO("jgo"),
537 
538   /**
539    * Machame (Tansania) (jmc).
540    */
541   JMC("jmc"),
542 
543   /**
544    * Japanisch (Japan, JP, Japanischer Kalender) (jpn).
545    */
546   JPN("jpn", TwoLetterLanguageCode.JA),
547 
548   /**
549    * Kabylisch (kab).
550    */
551   KAB("kab"),
552 
553   /**
554    * Grönländisch (Grönland) (kal).
555    */
556   KAL("kal", TwoLetterLanguageCode.KL),
557 
558   /**
559    * Kamba (kam).
560    */
561   KAM("kam"),
562 
563   /**
564    * Kannada (Indien) (kan).
565    */
566   KAN("kan", TwoLetterLanguageCode.KN),
567 
568   /**
569    * Kaschmiri (Indien) (kas).
570    */
571   KAS("kas", TwoLetterLanguageCode.KS),
572 
573   /**
574    * Georgisch (Georgien) (kat).
575    */
576   KAT("kat", TwoLetterLanguageCode.KA),
577 
578   /**
579    * Kanuri (kau).
580    */
581   KAU("kau", TwoLetterLanguageCode.KR),
582 
583   /**
584    * Kasachisch (kaz).
585    */
586   KAZ("kaz", TwoLetterLanguageCode.KK),
587 
588   /**
589    * Makonde (Tansania) (kde).
590    */
591   KDE("kde"),
592 
593   /**
594    * Kabuverdianu (Cabo Verde) (kea).
595    */
596   KEA("kea"),
597 
598   /**
599    * Khmer (khm).
600    */
601   KHM("khm", TwoLetterLanguageCode.KM),
602 
603   /**
604    * Koyra Chiini (khq).
605    */
606   KHQ("khq"),
607 
608   /**
609    * Kikuyu (Kenia) (kik).
610    */
611   KIK("kik", TwoLetterLanguageCode.KI),
612 
613   /**
614    * Kinyarwanda (kin).
615    */
616   KIN("kin", TwoLetterLanguageCode.RW),
617 
618   /**
619    * Kirgisisch (Kirgisistan) (kir).
620    */
621   KIR("kir", TwoLetterLanguageCode.KY),
622 
623   /**
624    * Kako (kkj).
625    */
626   KKJ("kkj"),
627 
628   /**
629    * Kalenjin (kln).
630    */
631   KLN("kln"),
632 
633   /**
634    * Konkani (kok).
635    */
636   KOK("kok"),
637 
638   /**
639    * Komi (kom).
640    */
641   KOM("kom", TwoLetterLanguageCode.KV),
642 
643   /**
644    * Kongolesisch (kon).
645    */
646   KON("kon", TwoLetterLanguageCode.KG),
647 
648   /**
649    * Koreanisch (Nordkorea) (kor).
650    */
651   KOR("kor", TwoLetterLanguageCode.KO),
652 
653   /**
654    * Shambala (ksb).
655    */
656   KSB("ksb"),
657 
658   /**
659    * Bafia (Kamerun) (ksf).
660    */
661   KSF("ksf"),
662 
663   /**
664    * Kölsch (Deutschland) (ksh).
665    */
666   KSH("ksh"),
667 
668   /**
669    * Kwanyama (kua).
670    */
671   KUA("kua", TwoLetterLanguageCode.KJ),
672 
673   /**
674    * Kurdisch (Türkei) (kur).
675    */
676   KUR("kur", TwoLetterLanguageCode.KU),
677 
678   /**
679    * Langi (lag).
680    */
681   LAG("lag"),
682 
683   /**
684    * Laotisch (lao).
685    */
686   LAO("lao", TwoLetterLanguageCode.LO),
687 
688   /**
689    * Latein (lat).
690    */
691   LAT("lat", TwoLetterLanguageCode.LA),
692 
693   /**
694    * Lettisch (lav).
695    */
696   LAV("lav", TwoLetterLanguageCode.LV),
697 
698   /**
699    * Limburgisch (lim).
700    */
701   LIM("lim", TwoLetterLanguageCode.LI),
702 
703   /**
704    * Lingala (Kongo-Kinshasa) (lin).
705    */
706   LIN("lin", TwoLetterLanguageCode.LN),
707 
708   /**
709    * Litauisch (Litauen) (lit).
710    */
711   LIT("lit", TwoLetterLanguageCode.LT),
712 
713   /**
714    * Lakota (Vereinigte Staaten) (lkt).
715    */
716   LKT("lkt"),
717 
718   /**
719    * Nördliches Luri (Iran) (lrc).
720    */
721   LRC("lrc"),
722 
723   /**
724    * Luxemburgisch (Luxemburg) (ltz).
725    */
726   LTZ("ltz", TwoLetterLanguageCode.LB),
727 
728   /**
729    * Luba-Katanga (Kongo-Kinshasa) (lub).
730    */
731   LUB("lub", TwoLetterLanguageCode.LU),
732 
733   /**
734    * Ganda (Uganda) (lug).
735    */
736   LUG("lug", TwoLetterLanguageCode.LG),
737 
738   /**
739    * Luo (luo).
740    */
741   LUO("luo"),
742 
743   /**
744    * Luhya (Kenia) (luy).
745    */
746   LUY("luy"),
747 
748   /**
749    * Marschallesisch (mah).
750    */
751   MAH("mah", TwoLetterLanguageCode.MH),
752 
753   /**
754    * Malayalam (Indien) (mal).
755    */
756   MAL("mal", TwoLetterLanguageCode.ML),
757 
758   /**
759    * Marathi (Indien) (mar).
760    */
761   MAR("mar", TwoLetterLanguageCode.MR),
762 
763   /**
764    * Massai (Kenia) (mas).
765    */
766   MAS("mas"),
767 
768   /**
769    * Meru (Kenia) (mer).
770    */
771   MER("mer"),
772 
773   /**
774    * Morisyen (Mauritius) (mfe).
775    */
776   MFE("mfe"),
777 
778   /**
779    * Makhuwa-Meetto (mgh).
780    */
781   MGH("mgh"),
782 
783   /**
784    * Meta’ (mgo).
785    */
786   MGO("mgo"),
787 
788   /**
789    * Mazedonisch (Nordmazedonien) (mkd).
790    */
791   MKD("mkd", TwoLetterLanguageCode.MK),
792 
793   /**
794    * Madagassisch (mlg).
795    */
796   MLG("mlg", TwoLetterLanguageCode.MG),
797 
798   /**
799    * Maltesisch (mlt).
800    */
801   MLT("mlt", TwoLetterLanguageCode.MT),
802 
803   /**
804    * Moldavisch (mol).
805    */
806   MOL("mol", TwoLetterLanguageCode.MO),
807 
808   /**
809    * Mongolisch (Mongolei) (mon).
810    */
811   MON("mon", TwoLetterLanguageCode.MN),
812 
813   /**
814    * Maori (Neuseeland) (mri).
815    */
816   MRI("mri", TwoLetterLanguageCode.MI),
817 
818   /**
819    * Malaiisch (Malaysia) (msa).
820    */
821   MSA("msa", TwoLetterLanguageCode.MS),
822 
823   /**
824    * Mundang (mua).
825    */
826   MUA("mua"),
827 
828   /**
829    * Birmanisch (Myanmar) (mya).
830    */
831   MYA("mya", TwoLetterLanguageCode.MY),
832 
833   /**
834    * Masanderanisch (Iran) (mzn).
835    */
836   MZN("mzn"),
837 
838   /**
839    * Nama (naq).
840    */
841   NAQ("naq"),
842 
843   /**
844    * Nauruisch (nau).
845    */
846   NAU("nau", TwoLetterLanguageCode.NA),
847 
848   /**
849    * Navajo (nav).
850    */
851   NAV("nav", TwoLetterLanguageCode.NV),
852 
853   /**
854    * Süd-Ndebele (nbl).
855    */
856   NBL("nbl", TwoLetterLanguageCode.NR),
857 
858   /**
859    * Nord-Ndebele (nde).
860    */
861   NDE("nde", TwoLetterLanguageCode.ND),
862 
863   /**
864    * Ndonga (ndo).
865    */
866   NDO("ndo", TwoLetterLanguageCode.NG),
867 
868   /**
869    * Niederdeutsch (nds).
870    */
871   NDS("nds"),
872 
873   /**
874    * Nepalesisch (Indien) (nep).
875    */
876   NEP("nep", TwoLetterLanguageCode.NE),
877 
878   /**
879    * Niederländisch (Niederlande) (nld).
880    */
881   NLD("nld", TwoLetterLanguageCode.NL),
882 
883   /**
884    * Kwasio (nmg).
885    */
886   NMG("nmg"),
887 
888   /**
889    * Ngiemboon (Kamerun) (nnh).
890    */
891   NNH("nnh"),
892 
893   /**
894    * Norwegisch Nynorsk (nno).
895    */
896   NNO("nno", TwoLetterLanguageCode.NN),
897 
898   /**
899    * Norwegisch Bokmål (Spitzbergen und Jan Mayen) (nob).
900    */
901   NOB("nob", TwoLetterLanguageCode.NB),
902 
903   /**
904    * Norwegisch (Norwegen, Nynorsk) (nor).
905    */
906   NOR("nor", TwoLetterLanguageCode.NO),
907 
908   /**
909    * Nuer (Südsudan) (nus).
910    */
911   NUS("nus"),
912 
913   /**
914    * Nyanja (nya).
915    */
916   NYA("nya", TwoLetterLanguageCode.NY),
917 
918   /**
919    * Nyankole (Uganda) (nyn).
920    */
921   NYN("nyn"),
922 
923   /**
924    * Okzitanisch (oci).
925    */
926   OCI("oci", TwoLetterLanguageCode.OC),
927 
928   /**
929    * Ojibwa (oji).
930    */
931   OJI("oji", TwoLetterLanguageCode.OJ),
932 
933   /**
934    * Oriya (Indien) (ori).
935    */
936   ORI("ori", TwoLetterLanguageCode.OR),
937 
938   /**
939    * Oromo (Kenia) (orm).
940    */
941   ORM("orm", TwoLetterLanguageCode.OM),
942 
943   /**
944    * Ossetisch (oss).
945    */
946   OSS("oss", TwoLetterLanguageCode.OS),
947 
948   /**
949    * Punjabi (Gurmukhi, Indien) (pan).
950    */
951   PAN("pan", TwoLetterLanguageCode.PA),
952 
953   /**
954    * Pali (pli).
955    */
956   PLI("pli", TwoLetterLanguageCode.PI),
957 
958   /**
959    * Polnisch (Polen) (pol).
960    */
961   POL("pol", TwoLetterLanguageCode.PL),
962 
963   /**
964    * Portugiesisch (Sonderverwaltungsregion Macau) (por).
965    */
966   POR("por", TwoLetterLanguageCode.PT),
967 
968   /**
969    * Altpreußisch (prg).
970    */
971   PRG("prg"),
972 
973   /**
974    * Paschtu (pus).
975    */
976   PUS("pus", TwoLetterLanguageCode.PS),
977 
978   /**
979    * Quechua (que).
980    */
981   QUE("que", TwoLetterLanguageCode.QU),
982 
983   /**
984    * Rombo (Tansania) (rof).
985    */
986   ROF("rof"),
987 
988   /**
989    * Rätoromanisch (roh).
990    */
991   ROH("roh", TwoLetterLanguageCode.RM),
992 
993   /**
994    * Rumänisch (ron).
995    */
996   RON("ron", TwoLetterLanguageCode.RO),
997 
998   /**
999    * Rundi (run).
1000    */
1001   RUN("run", TwoLetterLanguageCode.RN),
1002 
1003   /**
1004    * Russisch (rus).
1005    */
1006   RUS("rus", TwoLetterLanguageCode.RU),
1007 
1008   /**
1009    * Rwa (Tansania) (rwk).
1010    */
1011   RWK("rwk"),
1012 
1013   /**
1014    * Sango (Zentralafrikanische Republik) (sag).
1015    */
1016   SAG("sag", TwoLetterLanguageCode.SG),
1017 
1018   /**
1019    * Jakutisch (sah).
1020    */
1021   SAH("sah"),
1022 
1023   /**
1024    * Sanskrit (san).
1025    */
1026   SAN("san", TwoLetterLanguageCode.SA),
1027 
1028   /**
1029    * Samburu (saq).
1030    */
1031   SAQ("saq"),
1032 
1033   /**
1034    * Sangu (sbp).
1035    */
1036   SBP("sbp"),
1037 
1038   /**
1039    * Sena (seh).
1040    */
1041   SEH("seh"),
1042 
1043   /**
1044    * Koyra Senni (ses).
1045    */
1046   SES("ses"),
1047 
1048   /**
1049    * Taschelhit (Tifinagh, Marokko) (shi).
1050    */
1051   SHI("shi"),
1052 
1053   /**
1054    * Singhalesisch (Sri Lanka) (sin).
1055    */
1056   SIN("sin", TwoLetterLanguageCode.SI),
1057 
1058   /**
1059    * Slowakisch (slk).
1060    */
1061   SLK("slk", TwoLetterLanguageCode.SK),
1062 
1063   /**
1064    * Slowenisch (slv).
1065    */
1066   SLV("slv", TwoLetterLanguageCode.SL),
1067 
1068   /**
1069    * Nordsamisch (Norwegen) (sme).
1070    */
1071   SME("sme", TwoLetterLanguageCode.SE),
1072 
1073   /**
1074    * Inari-Samisch (smn).
1075    */
1076   SMN("smn"),
1077 
1078   /**
1079    * Samoanisch (smo).
1080    */
1081   SMO("smo", TwoLetterLanguageCode.SM),
1082 
1083   /**
1084    * Shona (sna).
1085    */
1086   SNA("sna", TwoLetterLanguageCode.SN),
1087 
1088   /**
1089    * Sindhi (snd).
1090    */
1091   SND("snd", TwoLetterLanguageCode.SD),
1092 
1093   /**
1094    * Somali (Kenia) (som).
1095    */
1096   SOM("som", TwoLetterLanguageCode.SO),
1097 
1098   /**
1099    * Süd-Sotho (sot).
1100    */
1101   SOT("sot", TwoLetterLanguageCode.ST),
1102 
1103   /**
1104    * Spanisch (Bolivien) (spa).
1105    */
1106   SPA("spa", TwoLetterLanguageCode.ES),
1107 
1108   /**
1109    * Albanisch (Nordmazedonien) (sqi).
1110    */
1111   SQI("sqi", TwoLetterLanguageCode.SQ),
1112 
1113   /**
1114    * Sardisch (srd).
1115    */
1116   SRD("srd", TwoLetterLanguageCode.SC),
1117 
1118   /**
1119    * Serbisch (Kyrillisch, Montenegro) (srp).
1120    */
1121   SRP("srp", TwoLetterLanguageCode.SR),
1122 
1123   /**
1124    * Swazi (ssw).
1125    */
1126   SSW("ssw", TwoLetterLanguageCode.SS),
1127 
1128   /**
1129    * Sundanesisch (sun).
1130    */
1131   SUN("sun", TwoLetterLanguageCode.SU),
1132 
1133   /**
1134    * Suaheli (Uganda) (swa).
1135    */
1136   SWA("swa", TwoLetterLanguageCode.SW),
1137 
1138   /**
1139    * Schwedisch (Schweden) (swe).
1140    */
1141   SWE("swe", TwoLetterLanguageCode.SV),
1142 
1143   /**
1144    * Tahitisch (tah).
1145    */
1146   TAH("tah", TwoLetterLanguageCode.TY),
1147 
1148   /**
1149    * Tamil (Singapur) (tam).
1150    */
1151   TAM("tam", TwoLetterLanguageCode.TA),
1152 
1153   /**
1154    * Tatarisch (Russland) (tat).
1155    */
1156   TAT("tat", TwoLetterLanguageCode.TT),
1157 
1158   /**
1159    * Telugu (tel).
1160    */
1161   TEL("tel", TwoLetterLanguageCode.TE),
1162 
1163   /**
1164    * Teso (teo).
1165    */
1166   TEO("teo"),
1167 
1168   /**
1169    * Tadschikisch (Tadschikistan) (tgk).
1170    */
1171   TGK("tgk", TwoLetterLanguageCode.TG),
1172 
1173   /**
1174    * Tagalog (tgl).
1175    */
1176   TGL("tgl", TwoLetterLanguageCode.TL),
1177 
1178   /**
1179    * Thailändisch (Thailand, TH, Thai-Ziffern) (tha).
1180    */
1181   THA("tha", TwoLetterLanguageCode.TH),
1182 
1183   /**
1184    * Tigrinya (Äthiopien) (tir).
1185    */
1186   TIR("tir", TwoLetterLanguageCode.TI),
1187 
1188   /**
1189    * Tongaisch (ton).
1190    */
1191   TON("ton", TwoLetterLanguageCode.TO),
1192 
1193   /**
1194    * Tswana (tsn).
1195    */
1196   TSN("tsn", TwoLetterLanguageCode.TN),
1197 
1198   /**
1199    * Tsonga (tso).
1200    */
1201   TSO("tso", TwoLetterLanguageCode.TS),
1202 
1203   /**
1204    * Turkmenisch (Turkmenistan) (tuk).
1205    */
1206   TUK("tuk", TwoLetterLanguageCode.TK),
1207 
1208   /**
1209    * Türkisch (Türkei) (tur).
1210    */
1211   TUR("tur", TwoLetterLanguageCode.TR),
1212 
1213   /**
1214    * Twi (twi).
1215    */
1216   TWI("twi", TwoLetterLanguageCode.TW),
1217 
1218   /**
1219    * Tasawaq (Niger) (twq).
1220    */
1221   TWQ("twq"),
1222 
1223   /**
1224    * Zentralatlas-Tamazight (tzm).
1225    */
1226   TZM("tzm"),
1227 
1228   /**
1229    * Uigurisch (China) (uig).
1230    */
1231   UIG("uig", TwoLetterLanguageCode.UG),
1232 
1233   /**
1234    * Ukrainisch (Ukraine) (ukr).
1235    */
1236   UKR("ukr", TwoLetterLanguageCode.UK),
1237 
1238   /**
1239    * Urdu (Pakistan) (urd).
1240    */
1241   URD("urd", TwoLetterLanguageCode.UR),
1242 
1243   /**
1244    * Usbekisch (Lateinisch, Usbekistan) (uzb).
1245    */
1246   UZB("uzb", TwoLetterLanguageCode.UZ),
1247 
1248   /**
1249    * Vai (Vai) (vai).
1250    */
1251   VAI("vai"),
1252 
1253   /**
1254    * Venda (ven).
1255    */
1256   VEN("ven", TwoLetterLanguageCode.VE),
1257 
1258   /**
1259    * Vietnamesisch (Vietnam) (vie).
1260    */
1261   VIE("vie", TwoLetterLanguageCode.VI),
1262 
1263   /**
1264    * Volapük (Welt) (vol).
1265    */
1266   VOL("vol", TwoLetterLanguageCode.VO),
1267 
1268   /**
1269    * Vunjo (Tansania) (vun).
1270    */
1271   VUN("vun"),
1272 
1273   /**
1274    * Walliserdeutsch (wae).
1275    */
1276   WAE("wae"),
1277 
1278   /**
1279    * Wallonisch (wln).
1280    */
1281   WLN("wln", TwoLetterLanguageCode.WA),
1282 
1283   /**
1284    * Wolof (wol).
1285    */
1286   WOL("wol", TwoLetterLanguageCode.WO),
1287 
1288   /**
1289    * Xhosa (Südafrika) (xho).
1290    */
1291   XHO("xho", TwoLetterLanguageCode.XH),
1292 
1293   /**
1294    * Soga (Uganda) (xog).
1295    */
1296   XOG("xog"),
1297 
1298   /**
1299    * Yangben (yav).
1300    */
1301   YAV("yav"),
1302 
1303   /**
1304    * Jiddish (yid).
1305    */
1306   YID("yid", TwoLetterLanguageCode.JI, TwoLetterLanguageCode.YI),
1307 
1308   /**
1309    * Yoruba (Nigeria) (yor).
1310    */
1311   YOR("yor", TwoLetterLanguageCode.YO),
1312 
1313   /**
1314    * Kantonesisch (Vereinfacht, China) (yue).
1315    */
1316   YUE("yue"),
1317 
1318   /**
1319    * Tamazight (zgh).
1320    */
1321   ZGH("zgh"),
1322 
1323   /**
1324    * Zhuang (zha).
1325    */
1326   ZHA("zha", TwoLetterLanguageCode.ZA),
1327 
1328   /**
1329    * Chinesisch (Vereinfacht, Singapur) (zho).
1330    */
1331   ZHO("zho", TwoLetterLanguageCode.ZH),
1332 
1333   /**
1334    * Zulu (Südafrika) (zul).
1335    */
1336   ZUL("zul", TwoLetterLanguageCode.ZU);
1337 
1338   private final String value;
1339 
1340   private final TwoLetterLanguageCode[] twoLetterLanguageCodes;
1341 
1342   ThreeLetterLanguageCode(
1343       final String value,
1344       final TwoLetterLanguageCode... twoLetterLanguageCodes) {
1345 
1346     this.value = value;
1347     this.twoLetterLanguageCodes = twoLetterLanguageCodes;
1348   }
1349 
1350   /**
1351    * Gets two letter language code.
1352    *
1353    * @return the two letter language code
1354    */
1355   public TwoLetterLanguageCode getTwoLetterLanguageCode() {
1356     return twoLetterLanguageCodes != null
1357         && twoLetterLanguageCodes.length > 0 ? twoLetterLanguageCodes[0] : null;
1358   }
1359 
1360   @Override
1361   @JsonValue
1362   public String toString() {
1363     return value;
1364   }
1365 
1366   /**
1367    * Has two letter code boolean.
1368    *
1369    * @return the boolean
1370    */
1371   public boolean hasTwoLetterCode() {
1372     return getTwoLetterLanguageCode() != null;
1373   }
1374 
1375   /**
1376    * To locale.
1377    *
1378    * @return the locale
1379    */
1380   public Locale toLocale() {
1381     return Arrays
1382         .stream(Locale.getAvailableLocales())
1383         .filter(this::hasIsoLanguage)
1384         .filter(locale -> value.equalsIgnoreCase(locale.getISO3Language()))
1385         .findAny()
1386         .map(locale -> new Locale(locale.getLanguage()))
1387         .orElseGet(() -> Arrays.stream(Locale.getISOLanguages())
1388             .map(Locale::new)
1389             .filter(this::hasIsoLanguage)
1390             .filter(locale -> value.equalsIgnoreCase(locale.getISO3Language()))
1391             .findAny()
1392             .map(locale -> new Locale(locale.getLanguage()))
1393             .orElse(null));
1394   }
1395 
1396   private boolean hasIsoLanguage(final Locale locale) {
1397     try {
1398       return StringUtils.hasText(locale.getISO3Language());
1399     } catch (MissingResourceException e) {
1400       return false;
1401     }
1402   }
1403 
1404   /**
1405    * From three letter language code.
1406    *
1407    * @param text the text
1408    * @return the three letter language code
1409    */
1410   @JsonCreator
1411   public static ThreeLetterLanguageCode fromValue(final String text) {
1412     return fromValue(text, null);
1413   }
1414 
1415   /**
1416    * From value three letter language code.
1417    *
1418    * @param text the text
1419    * @param defaultCode the default code
1420    * @return the three letter language code
1421    */
1422   @SuppressWarnings("DuplicatedCode")
1423   public static ThreeLetterLanguageCode fromValue(
1424       final String text,
1425       final ThreeLetterLanguageCode defaultCode) {
1426 
1427     String source = text != null ? text.trim().toLowerCase() : null;
1428     if (source == null || source.length() < 2) {
1429       return defaultCode;
1430     }
1431     source = source.replace("-", "_");
1432     int index = source.indexOf('_');
1433     if (index > -1) {
1434       source = source.substring(0, index).trim();
1435     }
1436     if (source.length() < 2 || source.length() > 3) {
1437       return defaultCode;
1438     }
1439     for (ThreeLetterLanguageCode b : ThreeLetterLanguageCode.values()) {
1440       if (b.value.equals(source) || contains(b.twoLetterLanguageCodes, source)) {
1441         return b;
1442       }
1443     }
1444     return defaultCode;
1445   }
1446 
1447   private static boolean contains(TwoLetterLanguageCode[] codes, String text) {
1448     return codes != null && Arrays.stream(codes)
1449         .map(TwoLetterLanguageCode::toString).anyMatch(code -> code.equals(text));
1450   }
1451 
1452   /**
1453    * From locale.
1454    *
1455    * @param locale the locale
1456    * @return the three letter language code
1457    */
1458   public static ThreeLetterLanguageCode fromLocale(final Locale locale) {
1459     return fromLocale(locale, null);
1460   }
1461 
1462   /**
1463    * From locale three letter language code.
1464    *
1465    * @param locale the locale
1466    * @param defaultCode the default code
1467    * @return the three letter language code
1468    */
1469   public static ThreeLetterLanguageCode fromLocale(
1470       final Locale locale,
1471       final ThreeLetterLanguageCode defaultCode) {
1472     if (locale == null || !StringUtils.hasText(locale.getISO3Language())) {
1473       return defaultCode;
1474     }
1475     return fromValue(locale.getISO3Language(), defaultCode);
1476   }
1477 
1478 }
1479