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.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