1use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Default, Clone, Eq, Hash, PartialEq, Deserialize, Serialize)]
42#[serde(rename_all(deserialize = "PascalCase"))]
43pub enum Language {
44 #[default]
46 Japanese,
47 English,
49 Korean,
51 Italian,
53 Spanish,
55 Portuguese,
57 French,
59 German,
61 Hebrew,
63 Hungarian,
65 Chinese,
67 Arabic,
69 Filipino,
71 Catalan,
73 Finnish,
75 Turkish,
77 Dutch,
79 Swedish,
81 Thai,
83 Tagalog,
85 Malaysian,
87 Indonesian,
89 Vietnamese,
91 Nepali,
93 Hindi,
95 Urdu,
97}
98
99impl Language {
100 pub fn code(&self) -> &str {
102 match self {
103 Language::Japanese => "ja",
104 Language::English => "en",
105 Language::Korean => "ko",
106 Language::Italian => "it",
107 Language::Spanish => "es",
108 Language::Portuguese => "pt",
109 Language::French => "fr",
110 Language::German => "de",
111 Language::Hebrew => "he",
112 Language::Hungarian => "hu",
113 Language::Chinese => "zh",
114 Language::Arabic => "ar",
115 Language::Filipino => "fil",
116 Language::Catalan => "ca",
117 Language::Finnish => "fi",
118 Language::Turkish => "tr",
119 Language::Dutch => "nl",
120 Language::Swedish => "sv",
121 Language::Thai => "th",
122 Language::Tagalog => "tl",
123 Language::Malaysian => "ms",
124 Language::Indonesian => "id",
125 Language::Vietnamese => "vi",
126 Language::Nepali => "ne",
127 Language::Hindi => "hi",
128 Language::Urdu => "ur",
129 }
130 }
131
132 pub fn iso(&self) -> &str {
136 self.code()
137 }
138
139 pub fn native(&self) -> &str {
141 match self {
142 Language::Japanese => "日本語",
143 Language::English => "English",
144 Language::Korean => "한국어",
145 Language::Italian => "Italiano",
146 Language::Spanish => "Español",
147 Language::Portuguese => "Português",
148 Language::French => "Français",
149 Language::German => "Deutsch",
150 Language::Hebrew => "עברית",
151 Language::Hungarian => "Magyar",
152 Language::Chinese => "中文",
153 Language::Arabic => "العربية",
154 Language::Filipino => "Filipino",
155 Language::Catalan => "Català",
156 Language::Finnish => "Suomi",
157 Language::Turkish => "Türkçe",
158 Language::Dutch => "Nederlands",
159 Language::Swedish => "Svenska",
160 Language::Thai => "ไทย",
161 Language::Tagalog => "Tagalog",
162 Language::Malaysian => "Bahasa Melayu",
163 Language::Indonesian => "Bahasa Indonesia",
164 Language::Vietnamese => "Tiếng Việt",
165 Language::Nepali => "नेपाली",
166 Language::Hindi => "हिंदी",
167 Language::Urdu => "اردو",
168 }
169 }
170}
171
172impl From<&str> for Language {
173 fn from(value: &str) -> Self {
174 match value.trim().to_uppercase().as_str() {
175 "JA" | "JP" | "JAPANESE" => Language::Japanese,
176 "EN" | "UK" | "ENGLISH" => Language::English,
177 "KO" | "KOREAN" => Language::Korean,
178 "IT" | "ITALIAN" => Language::Italian,
179 "ES" | "SPANISH" => Language::Spanish,
180 "PT" | "PORTUGUESE" => Language::Portuguese,
181 "FR" | "FRENCH" => Language::French,
182 "DE" | "GERMAN" => Language::German,
183 "HE" | "HEBREW" => Language::Hebrew,
184 "HU" | "HUNGARIAN" => Language::Hungarian,
185 "ZH" | "CHINESE" => Language::Chinese,
186 "AR" | "ARABIC" => Language::Arabic,
187 "FIL" | "PHILIPPINE" => Language::Filipino,
188 "CA" | "CATALAN" => Language::Catalan,
189 "FI" | "FINNISH" => Language::Finnish,
190 "TR" | "TURKISH" => Language::Turkish,
191 "NL" | "DUTCH" => Language::Dutch,
192 "SV" | "SWEDISH" => Language::Swedish,
193 "TH" | "THAI" => Language::Thai,
194 "TL" | "TAGALOG" => Language::Tagalog,
195 "MS" | "MALAYSIAN" => Language::Malaysian,
196 "ID" | "INDONESIAN" => Language::Indonesian,
197 "VI" | "VIETNAMESE" => Language::Vietnamese,
198 "NE" | "NEPALI" => Language::Nepali,
199 "HI" | "HINDI" => Language::Hindi,
200 "UR" | "URDU" => Language::Urdu,
201 _ => Language::default(),
202 }
203 }
204}
205
206impl From<String> for Language {
207 fn from(value: String) -> Self {
208 Language::from(value.as_str())
209 }
210}
211
212impl std::fmt::Display for Language {
213 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
214 match self {
215 Language::Japanese => write!(f, "Japanese"),
216 Language::English => write!(f, "English"),
217 Language::Korean => write!(f, "Korean"),
218 Language::Italian => write!(f, "Italian"),
219 Language::Spanish => write!(f, "Spanish"),
220 Language::Portuguese => write!(f, "Portuguese"),
221 Language::French => write!(f, "French"),
222 Language::German => write!(f, "German"),
223 Language::Hebrew => write!(f, "Hebrew"),
224 Language::Hungarian => write!(f, "Hungarian"),
225 Language::Chinese => write!(f, "Chinese"),
226 Language::Arabic => write!(f, "Arabic"),
227 Language::Filipino => write!(f, "Filipino"),
228 Language::Catalan => write!(f, "Catalan"),
229 Language::Finnish => write!(f, "Finnish"),
230 Language::Turkish => write!(f, "Turkish"),
231 Language::Dutch => write!(f, "Dutch"),
232 Language::Swedish => write!(f, "Swedish"),
233 Language::Thai => write!(f, "Thai"),
234 Language::Tagalog => write!(f, "Tagalog"),
235 Language::Malaysian => write!(f, "Malaysian"),
236 Language::Indonesian => write!(f, "Indonesian"),
237 Language::Vietnamese => write!(f, "Vietnamese"),
238 Language::Nepali => write!(f, "Nepali"),
239 Language::Hindi => write!(f, "Hindi"),
240 Language::Urdu => write!(f, "Urdu"),
241 }
242 }
243}
244
245#[cfg(test)]
246mod tests {
247 use super::*;
248
249 #[test]
250 fn test_code() {
251 assert_eq!(Language::Japanese.code(), "ja");
252 assert_eq!(Language::English.code(), "en");
253 assert_eq!(Language::Korean.code(), "ko");
254 assert_eq!(Language::Italian.code(), "it");
255 assert_eq!(Language::Spanish.code(), "es");
256 assert_eq!(Language::Portuguese.code(), "pt");
257 assert_eq!(Language::French.code(), "fr");
258 assert_eq!(Language::German.code(), "de");
259 assert_eq!(Language::Hebrew.code(), "he");
260 assert_eq!(Language::Hungarian.code(), "hu");
261 assert_eq!(Language::Chinese.code(), "zh");
262 assert_eq!(Language::Arabic.code(), "ar");
263 assert_eq!(Language::Filipino.code(), "fil");
264 assert_eq!(Language::Catalan.code(), "ca");
265 assert_eq!(Language::Finnish.code(), "fi");
266 assert_eq!(Language::Turkish.code(), "tr");
267 assert_eq!(Language::Dutch.code(), "nl");
268 assert_eq!(Language::Swedish.code(), "sv");
269 assert_eq!(Language::Thai.code(), "th");
270 assert_eq!(Language::Tagalog.code(), "tl");
271 assert_eq!(Language::Malaysian.code(), "ms");
272 assert_eq!(Language::Indonesian.code(), "id");
273 assert_eq!(Language::Vietnamese.code(), "vi");
274 assert_eq!(Language::Nepali.code(), "ne");
275 assert_eq!(Language::Hindi.code(), "hi");
276 assert_eq!(Language::Urdu.code(), "ur");
277 }
278
279 #[test]
280 fn test_iso() {
281 assert_eq!(Language::Japanese.iso(), "ja");
282 assert_eq!(Language::English.iso(), "en");
283 assert_eq!(Language::Korean.iso(), "ko");
284 assert_eq!(Language::Italian.iso(), "it");
285 assert_eq!(Language::Spanish.iso(), "es");
286 assert_eq!(Language::Portuguese.iso(), "pt");
287 assert_eq!(Language::French.iso(), "fr");
288 assert_eq!(Language::German.iso(), "de");
289 assert_eq!(Language::Hebrew.iso(), "he");
290 assert_eq!(Language::Hungarian.iso(), "hu");
291 assert_eq!(Language::Chinese.iso(), "zh");
292 assert_eq!(Language::Arabic.iso(), "ar");
293 assert_eq!(Language::Filipino.iso(), "fil");
294 assert_eq!(Language::Catalan.iso(), "ca");
295 assert_eq!(Language::Finnish.iso(), "fi");
296 assert_eq!(Language::Turkish.iso(), "tr");
297 assert_eq!(Language::Dutch.iso(), "nl");
298 assert_eq!(Language::Swedish.iso(), "sv");
299 assert_eq!(Language::Thai.iso(), "th");
300 assert_eq!(Language::Tagalog.iso(), "tl");
301 assert_eq!(Language::Malaysian.iso(), "ms");
302 assert_eq!(Language::Indonesian.iso(), "id");
303 assert_eq!(Language::Vietnamese.iso(), "vi");
304 assert_eq!(Language::Nepali.iso(), "ne");
305 assert_eq!(Language::Hindi.iso(), "hi");
306 assert_eq!(Language::Urdu.iso(), "ur");
307 }
308
309 #[test]
310 fn test_native() {
311 assert_eq!(Language::Japanese.native(), "日本語");
312 assert_eq!(Language::English.native(), "English");
313 assert_eq!(Language::Korean.native(), "한국어");
314 assert_eq!(Language::Italian.native(), "Italiano");
315 assert_eq!(Language::Spanish.native(), "Español");
316 assert_eq!(Language::Portuguese.native(), "Português");
317 assert_eq!(Language::French.native(), "Français");
318 assert_eq!(Language::German.native(), "Deutsch");
319 assert_eq!(Language::Hebrew.native(), "עברית");
320 assert_eq!(Language::Hungarian.native(), "Magyar");
321 assert_eq!(Language::Chinese.native(), "中文");
322 assert_eq!(Language::Arabic.native(), "العربية");
323 assert_eq!(Language::Filipino.native(), "Filipino");
324 assert_eq!(Language::Catalan.native(), "Català");
325 assert_eq!(Language::Finnish.native(), "Suomi");
326 assert_eq!(Language::Turkish.native(), "Türkçe");
327 assert_eq!(Language::Dutch.native(), "Nederlands");
328 assert_eq!(Language::Swedish.native(), "Svenska");
329 assert_eq!(Language::Thai.native(), "ไทย");
330 assert_eq!(Language::Tagalog.native(), "Tagalog");
331 assert_eq!(Language::Malaysian.native(), "Bahasa Melayu");
332 assert_eq!(Language::Indonesian.native(), "Bahasa Indonesia");
333 assert_eq!(Language::Vietnamese.native(), "Tiếng Việt");
334 assert_eq!(Language::Nepali.native(), "नेपाली");
335 assert_eq!(Language::Hindi.native(), "हिंदी");
336 assert_eq!(Language::Urdu.native(), "اردو");
337 }
338
339 #[test]
340 fn test_from_str() {
341 assert_eq!(Language::from("ja"), Language::Japanese);
342 assert_eq!(Language::from("EN"), Language::English);
343 assert_eq!(Language::from("ko"), Language::Korean);
344 assert_eq!(Language::from("it"), Language::Italian);
345 assert_eq!(Language::from("es"), Language::Spanish);
346 assert_eq!(Language::from("pt"), Language::Portuguese);
347 assert_eq!(Language::from("fr"), Language::French);
348 assert_eq!(Language::from("de"), Language::German);
349 assert_eq!(Language::from("he"), Language::Hebrew);
350 assert_eq!(Language::from("hu"), Language::Hungarian);
351 assert_eq!(Language::from("zh"), Language::Chinese);
352 assert_eq!(Language::from("ar"), Language::Arabic);
353 assert_eq!(Language::from("fil"), Language::Filipino);
354 assert_eq!(Language::from("ca"), Language::Catalan);
355 assert_eq!(Language::from("fi"), Language::Finnish);
356 assert_eq!(Language::from("tr"), Language::Turkish);
357 assert_eq!(Language::from("nl"), Language::Dutch);
358 assert_eq!(Language::from("sv"), Language::Swedish);
359 assert_eq!(Language::from("th"), Language::Thai);
360 assert_eq!(Language::from("tl"), Language::Tagalog);
361 assert_eq!(Language::from("ms"), Language::Malaysian);
362 assert_eq!(Language::from("id"), Language::Indonesian);
363 assert_eq!(Language::from("vi"), Language::Vietnamese);
364 assert_eq!(Language::from("ne"), Language::Nepali);
365 assert_eq!(Language::from("hi"), Language::Hindi);
366 assert_eq!(Language::from("ur"), Language::Urdu);
367 assert_eq!(Language::from("unknown"), Language::Japanese); }
369
370 #[test]
371 fn test_from_string() {
372 assert_eq!(Language::from("ja".to_string()), Language::Japanese);
373 assert_eq!(Language::from("EN".to_string()), Language::English);
374 assert_eq!(Language::from("ko".to_string()), Language::Korean);
375 assert_eq!(Language::from("it".to_string()), Language::Italian);
376 assert_eq!(Language::from("es".to_string()), Language::Spanish);
377 assert_eq!(Language::from("pt".to_string()), Language::Portuguese);
378 assert_eq!(Language::from("fr".to_string()), Language::French);
379 assert_eq!(Language::from("de".to_string()), Language::German);
380 assert_eq!(Language::from("he".to_string()), Language::Hebrew);
381 assert_eq!(Language::from("hu".to_string()), Language::Hungarian);
382 assert_eq!(Language::from("zh".to_string()), Language::Chinese);
383 assert_eq!(Language::from("ar".to_string()), Language::Arabic);
384 assert_eq!(Language::from("fil".to_string()), Language::Filipino);
385 assert_eq!(Language::from("ca".to_string()), Language::Catalan);
386 assert_eq!(Language::from("fi".to_string()), Language::Finnish);
387 assert_eq!(Language::from("tr".to_string()), Language::Turkish);
388 assert_eq!(Language::from("nl".to_string()), Language::Dutch);
389 assert_eq!(Language::from("sv".to_string()), Language::Swedish);
390 assert_eq!(Language::from("th".to_string()), Language::Thai);
391 assert_eq!(Language::from("tl".to_string()), Language::Tagalog);
392 assert_eq!(Language::from("ms".to_string()), Language::Malaysian);
393 assert_eq!(Language::from("id".to_string()), Language::Indonesian);
394 assert_eq!(Language::from("vi".to_string()), Language::Vietnamese);
395 assert_eq!(Language::from("ne".to_string()), Language::Nepali);
396 assert_eq!(Language::from("hi".to_string()), Language::Hindi);
397 assert_eq!(Language::from("ur".to_string()), Language::Urdu);
398 assert_eq!(Language::from("unknown".to_string()), Language::Japanese); }
400}