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.Locale;
22 import org.springframework.util.StringUtils;
23
24 /**
25 * ISO 639-1 language codes from Java Locale.
26 *
27 * @author Christian Bremer
28 */
29 public enum TwoLetterLanguageCode {
30
31 /**
32 * Afar (aa).
33 */
34 AA("aa"),
35
36 /**
37 * Abchasisch (ab).
38 */
39 AB("ab"),
40
41 /**
42 * Avestisch (ae).
43 */
44 AE("ae"),
45
46 /**
47 * Afrikaans (af).
48 */
49 AF("af"),
50
51 /**
52 * Akan (ak).
53 */
54 AK("ak"),
55
56 /**
57 * Amharisch (am).
58 */
59 AM("am"),
60
61 /**
62 * Aragonesisch (an).
63 */
64 AN("an"),
65
66 /**
67 * Arabisch (ar).
68 */
69 AR("ar"),
70
71 /**
72 * Assamesisch (as).
73 */
74 AS("as"),
75
76 /**
77 * Awarisch (av).
78 */
79 AV("av"),
80
81 /**
82 * Aymara (ay).
83 */
84 AY("ay"),
85
86 /**
87 * Aserbaidschanisch (az).
88 */
89 AZ("az"),
90
91 /**
92 * Baschkirisch (ba).
93 */
94 BA("ba"),
95
96 /**
97 * Weißrussisch (be).
98 */
99 BE("be"),
100
101 /**
102 * Bulgarisch (bg).
103 */
104 BG("bg"),
105
106 /**
107 * Biharisch (bh).
108 */
109 BH("bh"),
110
111 /**
112 * Bislama (bi).
113 */
114 BI("bi"),
115
116 /**
117 * Bambara (bm).
118 */
119 BM("bm"),
120
121 /**
122 * Bengalisch (bn).
123 */
124 BN("bn"),
125
126 /**
127 * Tibetisch (bo).
128 */
129 BO("bo"),
130
131 /**
132 * Bretonisch (br).
133 */
134 BR("br"),
135
136 /**
137 * Bosnisch (bs).
138 */
139 BS("bs"),
140
141 /**
142 * Katalanisch (ca).
143 */
144 CA("ca"),
145
146 /**
147 * Tschetschenisch (ce).
148 */
149 CE("ce"),
150
151 /**
152 * Chamorro (ch).
153 */
154 CH("ch"),
155
156 /**
157 * Korsisch (co).
158 */
159 CO("co"),
160
161 /**
162 * Cree (cr).
163 */
164 CR("cr"),
165
166 /**
167 * Tschechisch (cs).
168 */
169 CS("cs"),
170
171 /**
172 * Kirchenslawisch (cu).
173 */
174 CU("cu"),
175
176 /**
177 * Tschuwaschisch (cv).
178 */
179 CV("cv"),
180
181 /**
182 * Walisisch (cy).
183 */
184 CY("cy"),
185
186 /**
187 * Dänisch (da).
188 */
189 DA("da"),
190
191 /**
192 * Deutsch (de).
193 */
194 DE("de"),
195
196 /**
197 * Dhivehi (dv).
198 */
199 DV("dv"),
200
201 /**
202 * Dzongkha (dz).
203 */
204 DZ("dz"),
205
206 /**
207 * Ewe (ee).
208 */
209 EE("ee"),
210
211 /**
212 * Griechisch (el).
213 */
214 EL("el"),
215
216 /**
217 * Englisch (en).
218 */
219 EN("en"),
220
221 /**
222 * Esperanto (eo).
223 */
224 EO("eo"),
225
226 /**
227 * Spanisch (es).
228 */
229 ES("es"),
230
231 /**
232 * Estnisch (et).
233 */
234 ET("et"),
235
236 /**
237 * Baskisch (eu).
238 */
239 EU("eu"),
240
241 /**
242 * Persisch (fa).
243 */
244 FA("fa"),
245
246 /**
247 * Ful (ff).
248 */
249 FF("ff"),
250
251 /**
252 * Finnisch (fi).
253 */
254 FI("fi"),
255
256 /**
257 * Fidschi (fj).
258 */
259 FJ("fj"),
260
261 /**
262 * Färöisch (fo).
263 */
264 FO("fo"),
265
266 /**
267 * Französisch (fr).
268 */
269 FR("fr"),
270
271 /**
272 * Westfriesisch (fy).
273 */
274 FY("fy"),
275
276 /**
277 * Irisch (ga).
278 */
279 GA("ga"),
280
281 /**
282 * Schottisches Gälisch (gd).
283 */
284 GD("gd"),
285
286 /**
287 * Galicisch (gl).
288 */
289 GL("gl"),
290
291 /**
292 * Guaraní (gn).
293 */
294 GN("gn"),
295
296 /**
297 * Gujarati (gu).
298 */
299 GU("gu"),
300
301 /**
302 * Manx (gv).
303 */
304 GV("gv"),
305
306 /**
307 * Haussa (ha).
308 */
309 HA("ha"),
310
311 /**
312 * Hebräisch (he).
313 */
314 HE("he"),
315
316 /**
317 * Hindi (hi).
318 */
319 HI("hi"),
320
321 /**
322 * Hiri-Motu (ho).
323 */
324 HO("ho"),
325
326 /**
327 * Kroatisch (hr).
328 */
329 HR("hr"),
330
331 /**
332 * Haiti-Kreolisch (ht).
333 */
334 HT("ht"),
335
336 /**
337 * Ungarisch (hu).
338 */
339 HU("hu"),
340
341 /**
342 * Armenisch (hy).
343 */
344 HY("hy"),
345
346 /**
347 * Herero (hz).
348 */
349 HZ("hz"),
350
351 /**
352 * Interlingua (ia).
353 */
354 IA("ia"),
355
356 /**
357 * Indonesisch (id).
358 */
359 ID("id"),
360
361 /**
362 * Interlingue (ie).
363 */
364 IE("ie"),
365
366 /**
367 * Igbo (ig).
368 */
369 IG("ig"),
370
371 /**
372 * Yi (ii).
373 */
374 II("ii"),
375
376 /**
377 * Inupiak (ik).
378 */
379 IK("ik"),
380
381 /**
382 * Indonesisch (in).
383 */
384 IN("in"),
385
386 /**
387 * Ido (io).
388 */
389 IO("io"),
390
391 /**
392 * Isländisch (is).
393 */
394 IS("is"),
395
396 /**
397 * Italienisch (it).
398 */
399 IT("it"),
400
401 /**
402 * Inuktitut (iu).
403 */
404 IU("iu"),
405
406 /**
407 * Hebräisch (iw).
408 */
409 IW("iw"),
410
411 /**
412 * Japanisch (ja).
413 */
414 JA("ja"),
415
416 /**
417 * Jiddish (ji).
418 */
419 JI("ji"),
420
421 /**
422 * Javanisch (jv).
423 */
424 JV("jv"),
425
426 /**
427 * Georgisch (ka).
428 */
429 KA("ka"),
430
431 /**
432 * Kongolesisch (kg).
433 */
434 KG("kg"),
435
436 /**
437 * Kikuyu (ki).
438 */
439 KI("ki"),
440
441 /**
442 * Kwanyama (kj).
443 */
444 KJ("kj"),
445
446 /**
447 * Kasachisch (kk).
448 */
449 KK("kk"),
450
451 /**
452 * Grönländisch (kl).
453 */
454 KL("kl"),
455
456 /**
457 * Khmer (km).
458 */
459 KM("km"),
460
461 /**
462 * Kannada (kn).
463 */
464 KN("kn"),
465
466 /**
467 * Koreanisch (ko).
468 */
469 KO("ko"),
470
471 /**
472 * Kanuri (kr).
473 */
474 KR("kr"),
475
476 /**
477 * Kaschmiri (ks).
478 */
479 KS("ks"),
480
481 /**
482 * Kurdisch (ku).
483 */
484 KU("ku"),
485
486 /**
487 * Komi (kv).
488 */
489 KV("kv"),
490
491 /**
492 * Kornisch (kw).
493 */
494 KW("kw"),
495
496 /**
497 * Kirgisisch (ky).
498 */
499 KY("ky"),
500
501 /**
502 * Latein (la).
503 */
504 LA("la"),
505
506 /**
507 * Luxemburgisch (lb).
508 */
509 LB("lb"),
510
511 /**
512 * Ganda (lg).
513 */
514 LG("lg"),
515
516 /**
517 * Limburgisch (li).
518 */
519 LI("li"),
520
521 /**
522 * Lingala (ln).
523 */
524 LN("ln"),
525
526 /**
527 * Laotisch (lo).
528 */
529 LO("lo"),
530
531 /**
532 * Litauisch (lt).
533 */
534 LT("lt"),
535
536 /**
537 * Luba-Katanga (lu).
538 */
539 LU("lu"),
540
541 /**
542 * Lettisch (lv).
543 */
544 LV("lv"),
545
546 /**
547 * Madagassisch (mg).
548 */
549 MG("mg"),
550
551 /**
552 * Marschallesisch (mh).
553 */
554 MH("mh"),
555
556 /**
557 * Maori (mi).
558 */
559 MI("mi"),
560
561 /**
562 * Mazedonisch (mk).
563 */
564 MK("mk"),
565
566 /**
567 * Malayalam (ml).
568 */
569 ML("ml"),
570
571 /**
572 * Mongolisch (mn).
573 */
574 MN("mn"),
575
576 /**
577 * Moldavisch (mo).
578 */
579 MO("mo"),
580
581 /**
582 * Marathi (mr).
583 */
584 MR("mr"),
585
586 /**
587 * Malaiisch (ms).
588 */
589 MS("ms"),
590
591 /**
592 * Maltesisch (mt).
593 */
594 MT("mt"),
595
596 /**
597 * Birmanisch (my).
598 */
599 MY("my"),
600
601 /**
602 * Nauruisch (na).
603 */
604 NA("na"),
605
606 /**
607 * Norwegisch Bokmål (nb).
608 */
609 NB("nb"),
610
611 /**
612 * Nord-Ndebele (nd).
613 */
614 ND("nd"),
615
616 /**
617 * Nepalesisch (ne).
618 */
619 NE("ne"),
620
621 /**
622 * Ndonga (ng).
623 */
624 NG("ng"),
625
626 /**
627 * Niederländisch (nl).
628 */
629 NL("nl"),
630
631 /**
632 * Norwegisch Nynorsk (nn).
633 */
634 NN("nn"),
635
636 /**
637 * Norwegisch (no).
638 */
639 NO("no"),
640
641 /**
642 * Süd-Ndebele (nr).
643 */
644 NR("nr"),
645
646 /**
647 * Navajo (nv).
648 */
649 NV("nv"),
650
651 /**
652 * Nyanja (ny).
653 */
654 NY("ny"),
655
656 /**
657 * Okzitanisch (oc).
658 */
659 OC("oc"),
660
661 /**
662 * Ojibwa (oj).
663 */
664 OJ("oj"),
665
666 /**
667 * Oromo (om).
668 */
669 OM("om"),
670
671 /**
672 * Oriya (or).
673 */
674 OR("or"),
675
676 /**
677 * Ossetisch (os).
678 */
679 OS("os"),
680
681 /**
682 * Punjabi (pa).
683 */
684 PA("pa"),
685
686 /**
687 * Pali (pi).
688 */
689 PI("pi"),
690
691 /**
692 * Polnisch (pl).
693 */
694 PL("pl"),
695
696 /**
697 * Paschtu (ps).
698 */
699 PS("ps"),
700
701 /**
702 * Portugiesisch (pt).
703 */
704 PT("pt"),
705
706 /**
707 * Quechua (qu).
708 */
709 QU("qu"),
710
711 /**
712 * Rätoromanisch (rm).
713 */
714 RM("rm"),
715
716 /**
717 * Rundi (rn).
718 */
719 RN("rn"),
720
721 /**
722 * Rumänisch (ro).
723 */
724 RO("ro"),
725
726 /**
727 * Russisch (ru).
728 */
729 RU("ru"),
730
731 /**
732 * Kinyarwanda (rw).
733 */
734 RW("rw"),
735
736 /**
737 * Sanskrit (sa).
738 */
739 SA("sa"),
740
741 /**
742 * Sardisch (sc).
743 */
744 SC("sc"),
745
746 /**
747 * Sindhi (sd).
748 */
749 SD("sd"),
750
751 /**
752 * Nordsamisch (se).
753 */
754 SE("se"),
755
756 /**
757 * Sango (sg).
758 */
759 SG("sg"),
760
761 /**
762 * Singhalesisch (si).
763 */
764 SI("si"),
765
766 /**
767 * Slowakisch (sk).
768 */
769 SK("sk"),
770
771 /**
772 * Slowenisch (sl).
773 */
774 SL("sl"),
775
776 /**
777 * Samoanisch (sm).
778 */
779 SM("sm"),
780
781 /**
782 * Shona (sn).
783 */
784 SN("sn"),
785
786 /**
787 * Somali (so).
788 */
789 SO("so"),
790
791 /**
792 * Albanisch (sq).
793 */
794 SQ("sq"),
795
796 /**
797 * Serbisch (sr).
798 */
799 SR("sr"),
800
801 /**
802 * Swazi (ss).
803 */
804 SS("ss"),
805
806 /**
807 * Süd-Sotho (st).
808 */
809 ST("st"),
810
811 /**
812 * Sundanesisch (su).
813 */
814 SU("su"),
815
816 /**
817 * Schwedisch (sv).
818 */
819 SV("sv"),
820
821 /**
822 * Suaheli (sw).
823 */
824 SW("sw"),
825
826 /**
827 * Tamil (ta).
828 */
829 TA("ta"),
830
831 /**
832 * Telugu (te).
833 */
834 TE("te"),
835
836 /**
837 * Tadschikisch (tg).
838 */
839 TG("tg"),
840
841 /**
842 * Thailändisch (th).
843 */
844 TH("th"),
845
846 /**
847 * Tigrinya (ti).
848 */
849 TI("ti"),
850
851 /**
852 * Turkmenisch (tk).
853 */
854 TK("tk"),
855
856 /**
857 * Tagalog (tl).
858 */
859 TL("tl"),
860
861 /**
862 * Tswana (tn).
863 */
864 TN("tn"),
865
866 /**
867 * Tongaisch (to).
868 */
869 TO("to"),
870
871 /**
872 * Türkisch (tr).
873 */
874 TR("tr"),
875
876 /**
877 * Tsonga (ts).
878 */
879 TS("ts"),
880
881 /**
882 * Tatarisch (tt).
883 */
884 TT("tt"),
885
886 /**
887 * Twi (tw).
888 */
889 TW("tw"),
890
891 /**
892 * Tahitisch (ty).
893 */
894 TY("ty"),
895
896 /**
897 * Uigurisch (ug).
898 */
899 UG("ug"),
900
901 /**
902 * Ukrainisch (uk).
903 */
904 UK("uk"),
905
906 /**
907 * Urdu (ur).
908 */
909 UR("ur"),
910
911 /**
912 * Usbekisch (uz).
913 */
914 UZ("uz"),
915
916 /**
917 * Venda (ve).
918 */
919 VE("ve"),
920
921 /**
922 * Vietnamesisch (vi).
923 */
924 VI("vi"),
925
926 /**
927 * Volapük (vo).
928 */
929 VO("vo"),
930
931 /**
932 * Wallonisch (wa).
933 */
934 WA("wa"),
935
936 /**
937 * Wolof (wo).
938 */
939 WO("wo"),
940
941 /**
942 * Xhosa (xh).
943 */
944 XH("xh"),
945
946 /**
947 * Jiddish (yi).
948 */
949 YI("yi"),
950
951 /**
952 * Yoruba (yo).
953 */
954 YO("yo"),
955
956 /**
957 * Zhuang (za).
958 */
959 ZA("za"),
960
961 /**
962 * Chinesisch (zh).
963 */
964 ZH("zh"),
965
966 /**
967 * Zulu (zu).
968 */
969 ZU("zu");
970
971 private final String value;
972
973 TwoLetterLanguageCode(final String value) {
974 this.value = value;
975 }
976
977 @Override
978 @JsonValue
979 public String toString() {
980 return value;
981 }
982
983 /**
984 * To locale.
985 *
986 * @return the locale
987 */
988 public Locale toLocale() {
989 return new Locale(value);
990 }
991
992 /**
993 * From two letter language code.
994 *
995 * @param text the text
996 * @return the two letter language code
997 */
998 @JsonCreator
999 public static TwoLetterLanguageCode fromValue(final String text) {
1000 return fromValue(text, null);
1001 }
1002
1003 /**
1004 * From value two letter language code.
1005 *
1006 * @param text the text
1007 * @param defaultCode the default code
1008 * @return the two letter language code
1009 */
1010 @SuppressWarnings("DuplicatedCode")
1011 public static TwoLetterLanguageCode fromValue(
1012 final String text,
1013 final TwoLetterLanguageCode defaultCode) {
1014
1015 String source = text != null ? text.trim().toLowerCase() : null;
1016 if (source == null || source.length() < 2) {
1017 return defaultCode;
1018 }
1019 source = source.replace("-", "_");
1020 int index = source.indexOf('_');
1021 if (index > -1) {
1022 source = source.substring(0, index).trim();
1023 }
1024 if (source.length() < 2) {
1025 return defaultCode;
1026 }
1027 if (source.length() > 2) {
1028 ThreeLetterLanguageCode threeLetterLanguageCode = ThreeLetterLanguageCode.fromValue(text);
1029 if (threeLetterLanguageCode != null && threeLetterLanguageCode.hasTwoLetterCode()) {
1030 return threeLetterLanguageCode.getTwoLetterLanguageCode();
1031 } else {
1032 return defaultCode;
1033 }
1034 }
1035 for (TwoLetterLanguageCode b : TwoLetterLanguageCode.values()) {
1036 if (b.value.equals(source)) {
1037 return b;
1038 }
1039 }
1040 return defaultCode;
1041 }
1042
1043 /**
1044 * From locale.
1045 *
1046 * @param locale the locale
1047 * @return the two letter language code
1048 */
1049 public static TwoLetterLanguageCode fromLocale(final Locale locale) {
1050 return fromLocale(locale, null);
1051 }
1052
1053 /**
1054 * From locale.
1055 *
1056 * @param locale the locale
1057 * @param defaultCode the default code
1058 * @return the two letter language code
1059 */
1060 public static TwoLetterLanguageCode fromLocale(
1061 final Locale locale,
1062 final TwoLetterLanguageCode defaultCode) {
1063 if (locale == null || !StringUtils.hasText(locale.getLanguage())) {
1064 return defaultCode;
1065 }
1066 return fromValue(locale.getLanguage(), defaultCode);
1067 }
1068
1069 }
1070