1use std::fmt;
2use std::fmt::{Display, Formatter};
3
4#[derive(Debug, Clone, Default, PartialEq, Eq)]
9pub enum Language {
10 AfZa,
11 AmEt,
12 ArAe,
13 ArBh,
14 ArDz,
15 ArEg,
16 ArIq,
17 ArJo,
18 ArKw,
19 ArLy,
20 ArMa,
21 ArQa,
22 ArSa,
23 ArSy,
24 ArTn,
25 ArYe,
26 BgBg,
27 BnBd,
28 BnIn,
29 CaEs,
30 CsCz,
31 CyGb,
32 DaDk,
33 DeAt,
34 DeCh,
35 DeDe,
36 ElGr,
37 EnAu,
38 EnCa,
39 #[default]
40 EnGb,
41 EnHk,
42 EnIe,
43 EnIn,
44 EnKe,
45 EnNg,
46 EnNz,
47 EnPh,
48 EnSg,
49 EnTz,
50 EnUs,
51 EnZa,
52 EsAr,
53 EsBo,
54 EsCl,
55 EsCo,
56 EsCr,
57 EsCu,
58 EsDo,
59 EsEc,
60 EsEs,
61 EsGq,
62 EsGt,
63 EsHn,
64 EsMx,
65 EsNi,
66 EsPa,
67 EsPe,
68 EsPr,
69 EsPy,
70 EsSv,
71 EsUs,
72 EsUy,
73 EsVe,
74 EtEe,
75 FaIr,
76 FiFi,
77 FilPh,
78 FrBe,
79 FrCa,
80 FrCh,
81 FrFr,
82 GaIe,
83 GlEs,
84 GuIn,
85 HeIl,
86 HiIn,
87 HrHr,
88 HuHu,
89 IdId,
90 IsIs,
91 ItIt,
92 JaJp,
93 JvId,
94 KkKz,
95 KmKh,
96 KnIn,
97 KoKr,
98 LoLa,
99 LtLt,
100 LvLv,
101 MkMk,
102 MlIn,
103 MrIn,
104 MsMy,
105 MtMt,
106 MyMm,
107 NbNo,
108 NlBe,
109 NlNl,
110 PlPl,
111 PsAf,
112 PtBr,
113 PtPt,
114 RoRo,
115 RuRu,
116 SiLk,
117 SkSk,
118 SlSi,
119 SoSo,
120 SrRs,
121 SuId,
122 SvSe,
123 SwKe,
124 SwTz,
125 TaIn,
126 TaLk,
127 TaSg,
128 TeIn,
129 ThTh,
130 TrTr,
131 UkUa,
132 UrIn,
133 UrPk,
134 UzUz,
135 ViVn,
136 ZhCn,
137 ZhHk,
138 ZhTw,
139 ZuZa,
140 Custom(String),
141}
142
143impl Display for Language {
144 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
145 let value = match self {
146 Language::Custom(s) => s.as_str(),
147 Language::AfZa => "af-ZA",
148 Language::AmEt => "am-ET",
149 Language::ArAe => "ar-AE",
150 Language::ArBh => "ar-BH",
151 Language::ArDz => "ar-DZ",
152 Language::ArEg => "ar-EG",
153 Language::ArIq => "ar-IQ",
154 Language::ArJo => "ar-JO",
155 Language::ArKw => "ar-KW",
156 Language::ArLy => "ar-LY",
157 Language::ArMa => "ar-MA",
158 Language::ArQa => "ar-QA",
159 Language::ArSa => "ar-SA",
160 Language::ArSy => "ar-SY",
161 Language::ArTn => "ar-TN",
162 Language::ArYe => "ar-YE",
163 Language::BgBg => "bg-BG",
164 Language::BnBd => "bn-BD",
165 Language::BnIn => "bn-IN",
166 Language::CaEs => "ca-ES",
167 Language::CsCz => "cs-CZ",
168 Language::CyGb => "cy-GB",
169 Language::DaDk => "da-DK",
170 Language::DeAt => "de-AT",
171 Language::DeCh => "de-CH",
172 Language::DeDe => "de-DE",
173 Language::ElGr => "el-GR",
174 Language::EnAu => "en-AU",
175 Language::EnCa => "en-CA",
176 Language::EnGb => "en-GB",
177 Language::EnHk => "en-HK",
178 Language::EnIe => "en-IE",
179 Language::EnIn => "en-IN",
180 Language::EnKe => "en-KE",
181 Language::EnNg => "en-NG",
182 Language::EnNz => "en-NZ",
183 Language::EnPh => "en-PH",
184 Language::EnSg => "en-SG",
185 Language::EnTz => "en-TZ",
186 Language::EnUs => "en-US",
187 Language::EnZa => "en-ZA",
188 Language::EsAr => "es-AR",
189 Language::EsBo => "es-BO",
190 Language::EsCl => "es-CL",
191 Language::EsCo => "es-CO",
192 Language::EsCr => "es-CR",
193 Language::EsCu => "es-CU",
194 Language::EsDo => "es-DO",
195 Language::EsEc => "es-EC",
196 Language::EsEs => "es-ES",
197 Language::EsGq => "es-GQ",
198 Language::EsGt => "es-GT",
199 Language::EsHn => "es-HN",
200 Language::EsMx => "es-MX",
201 Language::EsNi => "es-NI",
202 Language::EsPa => "es-PA",
203 Language::EsPe => "es-PE",
204 Language::EsPr => "es-PR",
205 Language::EsPy => "es-PY",
206 Language::EsSv => "es-SV",
207 Language::EsUs => "es-US",
208 Language::EsUy => "es-UY",
209 Language::EsVe => "es-VE",
210 Language::EtEe => "et-EE",
211 Language::FaIr => "fa-IR",
212 Language::FiFi => "fi-FI",
213 Language::FilPh => "fil-PH",
214 Language::FrBe => "fr-BE",
215 Language::FrCa => "fr-CA",
216 Language::FrCh => "fr-CH",
217 Language::FrFr => "fr-FR",
218 Language::GaIe => "ga-IE",
219 Language::GlEs => "gl-ES",
220 Language::GuIn => "gu-IN",
221 Language::HeIl => "he-IL",
222 Language::HiIn => "hi-IN",
223 Language::HrHr => "hr-HR",
224 Language::HuHu => "hu-HU",
225 Language::IdId => "id-ID",
226 Language::IsIs => "is-IS",
227 Language::ItIt => "it-IT",
228 Language::JaJp => "ja-JP",
229 Language::JvId => "jv-ID",
230 Language::KkKz => "kk-KZ",
231 Language::KmKh => "km-KH",
232 Language::KnIn => "kn-IN",
233 Language::KoKr => "ko-KR",
234 Language::LoLa => "lo-LA",
235 Language::LtLt => "lt-LT",
236 Language::LvLv => "lv-LV",
237 Language::MkMk => "mk-MK",
238 Language::MlIn => "ml-IN",
239 Language::MrIn => "mr-IN",
240 Language::MsMy => "ms-MY",
241 Language::MtMt => "mt-MT",
242 Language::MyMm => "my-MM",
243 Language::NbNo => "nb-NO",
244 Language::NlBe => "nl-BE",
245 Language::NlNl => "nl-NL",
246 Language::PlPl => "pl-PL",
247 Language::PsAf => "ps-AF",
248 Language::PtBr => "pt-BR",
249 Language::PtPt => "pt-PT",
250 Language::RoRo => "ro-RO",
251 Language::RuRu => "ru-RU",
252 Language::SiLk => "si-LK",
253 Language::SkSk => "sk-SK",
254 Language::SlSi => "sl-SI",
255 Language::SoSo => "so-SO",
256 Language::SrRs => "sr-RS",
257 Language::SuId => "su-ID",
258 Language::SvSe => "sv-SE",
259 Language::SwKe => "sw-KE",
260 Language::SwTz => "sw-TZ",
261 Language::TaIn => "ta-IN",
262 Language::TaLk => "ta-LK",
263 Language::TaSg => "ta-SG",
264 Language::TeIn => "te-IN",
265 Language::ThTh => "th-TH",
266 Language::TrTr => "tr-TR",
267 Language::UkUa => "uk-UA",
268 Language::UrIn => "ur-IN",
269 Language::UrPk => "ur-PK",
270 Language::UzUz => "uz-UZ",
271 Language::ViVn => "vi-VN",
272 Language::ZhCn => "zh-CN",
273 Language::ZhHk => "zh-HK",
274 Language::ZhTw => "zh-TW",
275 Language::ZuZa => "zu-ZA",
276 };
277
278 write!(f, "{}", value)
279 }
280}
281
282impl From<&str> for Language {
283 fn from(value: &str) -> Self {
284 value.to_string().into()
285 }
286}
287
288impl From<String> for Language {
289 fn from(value: String) -> Self {
290 match value.as_str() {
291 "af-ZA" => Language::AfZa,
292 "am-ET" => Language::AmEt,
293 "ar-AE" => Language::ArAe,
294 "ar-BH" => Language::ArBh,
295 "ar-DZ" => Language::ArDz,
296 "ar-EG" => Language::ArEg,
297 "ar-IQ" => Language::ArIq,
298 "ar-JO" => Language::ArJo,
299 "ar-KW" => Language::ArKw,
300 "ar-LY" => Language::ArLy,
301 "ar-MA" => Language::ArMa,
302 "ar-QA" => Language::ArQa,
303 "ar-SA" => Language::ArSa,
304 "ar-SY" => Language::ArSy,
305 "ar-TN" => Language::ArTn,
306 "ar-YE" => Language::ArYe,
307 "bg-BG" => Language::BgBg,
308 "bn-BD" => Language::BnBd,
309 "bn-IN" => Language::BnIn,
310 "ca-ES" => Language::CaEs,
311 "cs-CZ" => Language::CsCz,
312 "cy-GB" => Language::CyGb,
313 "da-DK" => Language::DaDk,
314 "de-AT" => Language::DeAt,
315 "de-CH" => Language::DeCh,
316 "de-DE" => Language::DeDe,
317 "el-GR" => Language::ElGr,
318 "en-AU" => Language::EnAu,
319 "en-CA" => Language::EnCa,
320 "en-GB" => Language::EnGb,
321 "en-HK" => Language::EnHk,
322 "en-IE" => Language::EnIe,
323 "en-IN" => Language::EnIn,
324 "en-KE" => Language::EnKe,
325 "en-NG" => Language::EnNg,
326 "en-NZ" => Language::EnNz,
327 "en-PH" => Language::EnPh,
328 "en-SG" => Language::EnSg,
329 "en-TZ" => Language::EnTz,
330 "en-US" => Language::EnUs,
331 "en-ZA" => Language::EnZa,
332 "es-AR" => Language::EsAr,
333 "es-BO" => Language::EsBo,
334 "es-CL" => Language::EsCl,
335 "es-CO" => Language::EsCo,
336 "es-CR" => Language::EsCr,
337 "es-CU" => Language::EsCu,
338 "es-DO" => Language::EsDo,
339 "es-EC" => Language::EsEc,
340 "es-ES" => Language::EsEs,
341 "es-GQ" => Language::EsGq,
342 "es-GT" => Language::EsGt,
343 "es-HN" => Language::EsHn,
344 "es-MX" => Language::EsMx,
345 "es-NI" => Language::EsNi,
346 "es-PA" => Language::EsPa,
347 "es-PE" => Language::EsPe,
348 "es-PR" => Language::EsPr,
349 "es-PY" => Language::EsPy,
350 "es-SV" => Language::EsSv,
351 "es-US" => Language::EsUs,
352 "es-UY" => Language::EsUy,
353 "es-VE" => Language::EsVe,
354 "et-EE" => Language::EtEe,
355 "fa-IR" => Language::FaIr,
356 "fi-FI" => Language::FiFi,
357 "fil-PH" => Language::FilPh,
358 "fr-BE" => Language::FrBe,
359 "fr-CA" => Language::FrCa,
360 "fr-CH" => Language::FrCh,
361 "fr-FR" => Language::FrFr,
362 "ga-IE" => Language::GaIe,
363 "gl-ES" => Language::GlEs,
364 "gu-IN" => Language::GuIn,
365 "he-IL" => Language::HeIl,
366 "hi-IN" => Language::HiIn,
367 "hr-HR" => Language::HrHr,
368 "hu-HU" => Language::HuHu,
369 "id-ID" => Language::IdId,
370 "is-IS" => Language::IsIs,
371 "it-IT" => Language::ItIt,
372 "ja-JP" => Language::JaJp,
373 "jv-ID" => Language::JvId,
374 "kk-KZ" => Language::KkKz,
375 "km-KH" => Language::KmKh,
376 "kn-IN" => Language::KnIn,
377 "ko-KR" => Language::KoKr,
378 "lo-LA" => Language::LoLa,
379 "lt-LT" => Language::LtLt,
380 "lv-LV" => Language::LvLv,
381 "mk-MK" => Language::MkMk,
382 "ml-IN" => Language::MlIn,
383 "mr-IN" => Language::MrIn,
384 "ms-MY" => Language::MsMy,
385 "mt-MT" => Language::MtMt,
386 "my-MM" => Language::MyMm,
387 "nb-NO" => Language::NbNo,
388 "nl-BE" => Language::NlBe,
389 "nl-NL" => Language::NlNl,
390 "pl-PL" => Language::PlPl,
391 "ps-AF" => Language::PsAf,
392 "pt-BR" => Language::PtBr,
393 "pt-PT" => Language::PtPt,
394 "ro-RO" => Language::RoRo,
395 "ru-RU" => Language::RuRu,
396 "si-LK" => Language::SiLk,
397 "sk-SK" => Language::SkSk,
398 "sl-SI" => Language::SlSi,
399 "so-SO" => Language::SoSo,
400 "sr-RS" => Language::SrRs,
401 "su-ID" => Language::SuId,
402 "sv-SE" => Language::SvSe,
403 "sw-KE" => Language::SwKe,
404 "sw-TZ" => Language::SwTz,
405 "ta-IN" => Language::TaIn,
406 "ta-LK" => Language::TaLk,
407 "ta-SG" => Language::TaSg,
408 "te-IN" => Language::TeIn,
409 "th-TH" => Language::ThTh,
410 "tr-TR" => Language::TrTr,
411 "uk-UA" => Language::UkUa,
412 "ur-IN" => Language::UrIn,
413 "ur-PK" => Language::UrPk,
414 "uz-UZ" => Language::UzUz,
415 "vi-VN" => Language::ViVn,
416 "zh-CN" => Language::ZhCn,
417 "zh-HK" => Language::ZhHk,
418 "zh-TW" => Language::ZhTw,
419 "zu-ZA" => Language::ZuZa,
420 _ => Language::Custom(value),
421 }
422 }
423}