1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
26
27
28
29 public enum TwoLetterLanguageCode {
30
31
32
33
34 AA("aa"),
35
36
37
38
39 AB("ab"),
40
41
42
43
44 AE("ae"),
45
46
47
48
49 AF("af"),
50
51
52
53
54 AK("ak"),
55
56
57
58
59 AM("am"),
60
61
62
63
64 AN("an"),
65
66
67
68
69 AR("ar"),
70
71
72
73
74 AS("as"),
75
76
77
78
79 AV("av"),
80
81
82
83
84 AY("ay"),
85
86
87
88
89 AZ("az"),
90
91
92
93
94 BA("ba"),
95
96
97
98
99 BE("be"),
100
101
102
103
104 BG("bg"),
105
106
107
108
109 BH("bh"),
110
111
112
113
114 BI("bi"),
115
116
117
118
119 BM("bm"),
120
121
122
123
124 BN("bn"),
125
126
127
128
129 BO("bo"),
130
131
132
133
134 BR("br"),
135
136
137
138
139 BS("bs"),
140
141
142
143
144 CA("ca"),
145
146
147
148
149 CE("ce"),
150
151
152
153
154 CH("ch"),
155
156
157
158
159 CO("co"),
160
161
162
163
164 CR("cr"),
165
166
167
168
169 CS("cs"),
170
171
172
173
174 CU("cu"),
175
176
177
178
179 CV("cv"),
180
181
182
183
184 CY("cy"),
185
186
187
188
189 DA("da"),
190
191
192
193
194 DE("de"),
195
196
197
198
199 DV("dv"),
200
201
202
203
204 DZ("dz"),
205
206
207
208
209 EE("ee"),
210
211
212
213
214 EL("el"),
215
216
217
218
219 EN("en"),
220
221
222
223
224 EO("eo"),
225
226
227
228
229 ES("es"),
230
231
232
233
234 ET("et"),
235
236
237
238
239 EU("eu"),
240
241
242
243
244 FA("fa"),
245
246
247
248
249 FF("ff"),
250
251
252
253
254 FI("fi"),
255
256
257
258
259 FJ("fj"),
260
261
262
263
264 FO("fo"),
265
266
267
268
269 FR("fr"),
270
271
272
273
274 FY("fy"),
275
276
277
278
279 GA("ga"),
280
281
282
283
284 GD("gd"),
285
286
287
288
289 GL("gl"),
290
291
292
293
294 GN("gn"),
295
296
297
298
299 GU("gu"),
300
301
302
303
304 GV("gv"),
305
306
307
308
309 HA("ha"),
310
311
312
313
314 HE("he"),
315
316
317
318
319 HI("hi"),
320
321
322
323
324 HO("ho"),
325
326
327
328
329 HR("hr"),
330
331
332
333
334 HT("ht"),
335
336
337
338
339 HU("hu"),
340
341
342
343
344 HY("hy"),
345
346
347
348
349 HZ("hz"),
350
351
352
353
354 IA("ia"),
355
356
357
358
359 ID("id"),
360
361
362
363
364 IE("ie"),
365
366
367
368
369 IG("ig"),
370
371
372
373
374 II("ii"),
375
376
377
378
379 IK("ik"),
380
381
382
383
384 IN("in"),
385
386
387
388
389 IO("io"),
390
391
392
393
394 IS("is"),
395
396
397
398
399 IT("it"),
400
401
402
403
404 IU("iu"),
405
406
407
408
409 IW("iw"),
410
411
412
413
414 JA("ja"),
415
416
417
418
419 JI("ji"),
420
421
422
423
424 JV("jv"),
425
426
427
428
429 KA("ka"),
430
431
432
433
434 KG("kg"),
435
436
437
438
439 KI("ki"),
440
441
442
443
444 KJ("kj"),
445
446
447
448
449 KK("kk"),
450
451
452
453
454 KL("kl"),
455
456
457
458
459 KM("km"),
460
461
462
463
464 KN("kn"),
465
466
467
468
469 KO("ko"),
470
471
472
473
474 KR("kr"),
475
476
477
478
479 KS("ks"),
480
481
482
483
484 KU("ku"),
485
486
487
488
489 KV("kv"),
490
491
492
493
494 KW("kw"),
495
496
497
498
499 KY("ky"),
500
501
502
503
504 LA("la"),
505
506
507
508
509 LB("lb"),
510
511
512
513
514 LG("lg"),
515
516
517
518
519 LI("li"),
520
521
522
523
524 LN("ln"),
525
526
527
528
529 LO("lo"),
530
531
532
533
534 LT("lt"),
535
536
537
538
539 LU("lu"),
540
541
542
543
544 LV("lv"),
545
546
547
548
549 MG("mg"),
550
551
552
553
554 MH("mh"),
555
556
557
558
559 MI("mi"),
560
561
562
563
564 MK("mk"),
565
566
567
568
569 ML("ml"),
570
571
572
573
574 MN("mn"),
575
576
577
578
579 MO("mo"),
580
581
582
583
584 MR("mr"),
585
586
587
588
589 MS("ms"),
590
591
592
593
594 MT("mt"),
595
596
597
598
599 MY("my"),
600
601
602
603
604 NA("na"),
605
606
607
608
609 NB("nb"),
610
611
612
613
614 ND("nd"),
615
616
617
618
619 NE("ne"),
620
621
622
623
624 NG("ng"),
625
626
627
628
629 NL("nl"),
630
631
632
633
634 NN("nn"),
635
636
637
638
639 NO("no"),
640
641
642
643
644 NR("nr"),
645
646
647
648
649 NV("nv"),
650
651
652
653
654 NY("ny"),
655
656
657
658
659 OC("oc"),
660
661
662
663
664 OJ("oj"),
665
666
667
668
669 OM("om"),
670
671
672
673
674 OR("or"),
675
676
677
678
679 OS("os"),
680
681
682
683
684 PA("pa"),
685
686
687
688
689 PI("pi"),
690
691
692
693
694 PL("pl"),
695
696
697
698
699 PS("ps"),
700
701
702
703
704 PT("pt"),
705
706
707
708
709 QU("qu"),
710
711
712
713
714 RM("rm"),
715
716
717
718
719 RN("rn"),
720
721
722
723
724 RO("ro"),
725
726
727
728
729 RU("ru"),
730
731
732
733
734 RW("rw"),
735
736
737
738
739 SA("sa"),
740
741
742
743
744 SC("sc"),
745
746
747
748
749 SD("sd"),
750
751
752
753
754 SE("se"),
755
756
757
758
759 SG("sg"),
760
761
762
763
764 SI("si"),
765
766
767
768
769 SK("sk"),
770
771
772
773
774 SL("sl"),
775
776
777
778
779 SM("sm"),
780
781
782
783
784 SN("sn"),
785
786
787
788
789 SO("so"),
790
791
792
793
794 SQ("sq"),
795
796
797
798
799 SR("sr"),
800
801
802
803
804 SS("ss"),
805
806
807
808
809 ST("st"),
810
811
812
813
814 SU("su"),
815
816
817
818
819 SV("sv"),
820
821
822
823
824 SW("sw"),
825
826
827
828
829 TA("ta"),
830
831
832
833
834 TE("te"),
835
836
837
838
839 TG("tg"),
840
841
842
843
844 TH("th"),
845
846
847
848
849 TI("ti"),
850
851
852
853
854 TK("tk"),
855
856
857
858
859 TL("tl"),
860
861
862
863
864 TN("tn"),
865
866
867
868
869 TO("to"),
870
871
872
873
874 TR("tr"),
875
876
877
878
879 TS("ts"),
880
881
882
883
884 TT("tt"),
885
886
887
888
889 TW("tw"),
890
891
892
893
894 TY("ty"),
895
896
897
898
899 UG("ug"),
900
901
902
903
904 UK("uk"),
905
906
907
908
909 UR("ur"),
910
911
912
913
914 UZ("uz"),
915
916
917
918
919 VE("ve"),
920
921
922
923
924 VI("vi"),
925
926
927
928
929 VO("vo"),
930
931
932
933
934 WA("wa"),
935
936
937
938
939 WO("wo"),
940
941
942
943
944 XH("xh"),
945
946
947
948
949 YI("yi"),
950
951
952
953
954 YO("yo"),
955
956
957
958
959 ZA("za"),
960
961
962
963
964 ZH("zh"),
965
966
967
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
985
986
987
988 public Locale toLocale() {
989 return new Locale(value);
990 }
991
992
993
994
995
996
997
998 @JsonCreator
999 public static TwoLetterLanguageCode fromValue(final String text) {
1000 return fromValue(text, null);
1001 }
1002
1003
1004
1005
1006
1007
1008
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
1045
1046
1047
1048
1049 public static TwoLetterLanguageCode fromLocale(final Locale locale) {
1050 return fromLocale(locale, null);
1051 }
1052
1053
1054
1055
1056
1057
1058
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