1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.opencastproject.transcription.amberscript;
22
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import java.util.HashMap;
27 import java.util.LinkedList;
28 import java.util.List;
29 import java.util.Locale;
30 import java.util.Map;
31
32
33
34
35
36 public final class AmberscriptLangUtil {
37
38 private static final Logger logger = LoggerFactory.getLogger(AmberscriptLangUtil.class);
39
40
41 private List<String> availableAmberscriptLangs;
42
43
44 private Map<String, String> langMap;
45
46
47 private static AmberscriptLangUtil amberscriptLangUtil;
48
49
50 public static AmberscriptLangUtil getInstance() {
51 if (amberscriptLangUtil == null) {
52 amberscriptLangUtil = new AmberscriptLangUtil();
53 }
54 return amberscriptLangUtil;
55 }
56
57
58 private AmberscriptLangUtil() {
59 populateLangMap();
60 }
61
62
63
64
65
66
67 private void populateLangMap() {
68 langMap = new HashMap<>();
69 availableAmberscriptLangs = new LinkedList<>();
70 availableAmberscriptLangs.add("af-za");
71 availableAmberscriptLangs.add("sq-al");
72 availableAmberscriptLangs.add("am-et");
73 availableAmberscriptLangs.add("ar");
74 availableAmberscriptLangs.add("hy-am");
75 availableAmberscriptLangs.add("az-az");
76 availableAmberscriptLangs.add("id-id");
77 availableAmberscriptLangs.add("eu-es");
78 availableAmberscriptLangs.add("bn-bd");
79 availableAmberscriptLangs.add("bn-in");
80 availableAmberscriptLangs.add("bs-ba");
81 availableAmberscriptLangs.add("bg");
82 availableAmberscriptLangs.add("my-mm");
83 availableAmberscriptLangs.add("ca");
84 availableAmberscriptLangs.add("cmn");
85 availableAmberscriptLangs.add("hr");
86 availableAmberscriptLangs.add("cs");
87 availableAmberscriptLangs.add("da");
88 availableAmberscriptLangs.add("nl");
89 availableAmberscriptLangs.add("en-au");
90 availableAmberscriptLangs.add("en-uk");
91 availableAmberscriptLangs.add("en");
92 availableAmberscriptLangs.add("et-ee");
93 availableAmberscriptLangs.add("fa-ir");
94 availableAmberscriptLangs.add("fil-ph");
95 availableAmberscriptLangs.add("fi");
96 availableAmberscriptLangs.add("nl-be");
97 availableAmberscriptLangs.add("fr-ca");
98 availableAmberscriptLangs.add("fr");
99 availableAmberscriptLangs.add("gl-es");
100 availableAmberscriptLangs.add("ka-ge");
101 availableAmberscriptLangs.add("de-at");
102 availableAmberscriptLangs.add("de-ch");
103 availableAmberscriptLangs.add("de");
104 availableAmberscriptLangs.add("el");
105 availableAmberscriptLangs.add("gu-in");
106 availableAmberscriptLangs.add("iw-il");
107 availableAmberscriptLangs.add("hi");
108 availableAmberscriptLangs.add("hu");
109 availableAmberscriptLangs.add("is-is");
110 availableAmberscriptLangs.add("it");
111 availableAmberscriptLangs.add("ja");
112 availableAmberscriptLangs.add("jv-id");
113 availableAmberscriptLangs.add("kn-in");
114 availableAmberscriptLangs.add("km-kh");
115 availableAmberscriptLangs.add("ko");
116 availableAmberscriptLangs.add("lo-la");
117 availableAmberscriptLangs.add("lv");
118 availableAmberscriptLangs.add("lt");
119 availableAmberscriptLangs.add("mk-mk");
120 availableAmberscriptLangs.add("ms");
121 availableAmberscriptLangs.add("ml-in");
122 availableAmberscriptLangs.add("mr-in");
123 availableAmberscriptLangs.add("mn-mn");
124 availableAmberscriptLangs.add("ne-np");
125 availableAmberscriptLangs.add("no");
126 availableAmberscriptLangs.add("pl");
127 availableAmberscriptLangs.add("pt-br");
128 availableAmberscriptLangs.add("pt");
129 availableAmberscriptLangs.add("pa-guru-in");
130 availableAmberscriptLangs.add("ro");
131 availableAmberscriptLangs.add("ru");
132 availableAmberscriptLangs.add("sr-rs");
133 availableAmberscriptLangs.add("si-lk");
134 availableAmberscriptLangs.add("sk");
135 availableAmberscriptLangs.add("sl");
136 availableAmberscriptLangs.add("es");
137 availableAmberscriptLangs.add("su-id");
138 availableAmberscriptLangs.add("sw-ke");
139 availableAmberscriptLangs.add("sw-tz");
140 availableAmberscriptLangs.add("sv");
141 availableAmberscriptLangs.add("ta-in");
142 availableAmberscriptLangs.add("ta-my");
143 availableAmberscriptLangs.add("ta-sg");
144 availableAmberscriptLangs.add("ta-lk");
145 availableAmberscriptLangs.add("te-in");
146 availableAmberscriptLangs.add("th-th");
147 availableAmberscriptLangs.add("tr");
148 availableAmberscriptLangs.add("uk-ua");
149 availableAmberscriptLangs.add("ur-in");
150 availableAmberscriptLangs.add("ur-pk");
151 availableAmberscriptLangs.add("uz-uz");
152 availableAmberscriptLangs.add("vi-vn");
153 availableAmberscriptLangs.add("zu-za");
154
155
156
157 for (String amberLang : availableAmberscriptLangs) {
158 if (amberLang.contains("-")) {
159 addAmberLangToMap(amberLang);
160 }
161 }
162 for (String amberLang : availableAmberscriptLangs) {
163 if (!amberLang.contains("-")) {
164 addAmberLangToMap(amberLang);
165 }
166 }
167 }
168
169
170
171
172
173
174 private void addAmberLangToMap(String amberLang) {
175 Locale locale;
176 if (amberLang.contains("-")) {
177 locale = Locale.forLanguageTag(amberLang);
178 } else {
179 locale = Locale.forLanguageTag(amberLang + "-" + amberLang);
180 }
181 if (locale.getDisplayCountry().equals("")) {
182 logger.warn("Locale not found for code '{}'", amberLang);
183 return;
184 }
185 langMap.put(amberLang, amberLang);
186 langMap.put(locale.toString().toLowerCase(), amberLang);
187 langMap.put(locale.getDisplayLanguage().toLowerCase(), amberLang);
188 langMap.put(locale.getDisplayName().toLowerCase(), amberLang);
189 langMap.put(locale.getLanguage().toLowerCase(), amberLang);
190 langMap.put(locale.getISO3Language().toLowerCase(), amberLang);
191 }
192
193
194
195
196
197
198 public String getLanguageCodeOrNull(String languageWithRandomFormat) {
199 return langMap.get(languageWithRandomFormat.toLowerCase());
200 }
201
202
203
204
205
206
207 public void addCustomMapping(String customKey, String amberscriptLangCode) {
208 langMap.put(customKey, amberscriptLangCode);
209 }
210 }