1#[allow(non_camel_case_types)]
12#[derive(Debug, Clone)]
13pub enum Locale {
14
15 af_ZA,
17
18 am_ET,
20
21 ar_AE,
23
24 ar_BH,
26
27 ar_DZ,
29
30 ar_EG,
32
33 ar_IQ,
35
36 ar_JO,
38
39 ar_KW,
41
42 ar_LB,
44
45 ar_LY,
47
48 ar_MA,
50
51 ar_OM,
53
54 ar_QA,
56
57 ar_SA,
59
60 ar_SY,
62
63 ar_TN,
65
66 ar_YE,
68
69 az_AZ,
71
72 bg_BG,
74
75 bn_BD,
77
78 bn_IN,
80
81 bs_BA,
83
84 ca_ES,
86
87 cs_CZ,
89
90 cy_GB,
92
93 da_DK,
95
96 de_AT,
98
99 de_CH,
101
102 de_DE,
104
105 el_GR,
107
108 en_AU,
110
111 en_CA,
113
114 en_GB,
116
117 en_HK,
119
120 en_IE,
122
123 en_IN,
125
126 en_KE,
128
129 en_NG,
131
132 en_NZ,
134
135 en_PH,
137
138 en_SG,
140
141 en_TZ,
143
144 en_US,
146
147 en_ZA,
149
150 es_AR,
152
153 es_BO,
155
156 es_CL,
158
159 es_CO,
161
162 es_CR,
164
165 es_CU,
167
168 es_DO,
170
171 es_EC,
173
174 es_ES,
176
177 es_GQ,
179
180 es_GT,
182
183 es_HN,
185
186 es_MX,
188
189 es_NI,
191
192 es_PA,
194
195 es_PE,
197
198 es_PR,
200
201 es_PY,
203
204 es_SV,
206
207 es_US,
209
210 es_UY,
212
213 es_VE,
215
216 et_EE,
218
219 eu_ES,
221
222 fa_IR,
224
225 fi_FI,
227
228 fil_PH,
230
231 fr_BE,
233
234 fr_CA,
236
237 fr_CH,
239
240 fr_FR,
242
243 ga_IE,
245
246 gl_ES,
248
249 gu_IN,
251
252 he_IL,
254
255 hi_IN,
257
258 hr_HR,
260
261 hu_HU,
263
264 hy_AM,
266
267 id_ID,
269
270 is_IS,
272
273 it_IT,
275
276 ja_JP,
278
279 jv_ID,
281
282 ka_GE,
284
285 kk_KZ,
287
288 km_KH,
290
291 kn_IN,
293
294 ko_KR,
296
297 lo_LA,
299
300 lt_LT,
302
303 lv_LV,
305
306 mk_MK,
308
309 ml_IN,
311
312 mn_MN,
314
315 mr_IN,
317
318 ms_MY,
320
321 mt_MT,
323
324 my_MM,
326
327 nb_NO,
329
330 ne_NP,
332
333 nl_BE,
335
336 nl_NL,
338
339 pl_PL,
341
342 ps_AF,
344
345 pt_BR,
347
348 pt_PT,
350
351 ro_RO,
353
354 ru_RU,
356
357 si_LK,
359
360 sk_SK,
362
363 sl_SI,
365
366 so_SO,
368
369 sq_AL,
371
372 sr_RS,
374
375 su_ID,
377
378 sv_SE,
380
381 sw_KE,
383
384 sw_TZ,
386
387 ta_IN,
389
390 ta_LK,
392
393 ta_MY,
395
396 ta_SG,
398
399 te_IN,
401
402 th_TH,
404
405 tr_TR,
407
408 uk_UA,
410
411 ur_IN,
413
414 ur_PK,
416
417 uz_UZ,
419
420 vi_VN,
422
423 wuu_CN,
425
426 yue_CN,
428
429 zh_CN,
431
432 zh_HK,
434
435 zh_TW,
437
438 zu_ZA,
440}
441
442impl Into<String> for Locale {
443 fn into(self) -> String {
444 (match self {
445 Self::af_ZA => "af-ZA",
446 Self::am_ET => "am-ET",
447 Self::ar_AE => "ar-AE",
448 Self::ar_BH => "ar-BH",
449 Self::ar_DZ => "ar-DZ",
450 Self::ar_EG => "ar-EG",
451 Self::ar_IQ => "ar-IQ",
452 Self::ar_JO => "ar-JO",
453 Self::ar_KW => "ar-KW",
454 Self::ar_LB => "ar-LB",
455 Self::ar_LY => "ar-LY",
456 Self::ar_MA => "ar-MA",
457 Self::ar_OM => "ar-OM",
458 Self::ar_QA => "ar-QA",
459 Self::ar_SA => "ar-SA",
460 Self::ar_SY => "ar-SY",
461 Self::ar_TN => "ar-TN",
462 Self::ar_YE => "ar-YE",
463 Self::az_AZ => "az-AZ",
464 Self::bg_BG => "bg-BG",
465 Self::bn_BD => "bn-BD",
466 Self::bn_IN => "bn-IN",
467 Self::bs_BA => "bs-BA",
468 Self::ca_ES => "ca-ES",
469 Self::cs_CZ => "cs-CZ",
470 Self::cy_GB => "cy-GB",
471 Self::da_DK => "da-DK",
472 Self::de_AT => "de-AT",
473 Self::de_CH => "de-CH",
474 Self::de_DE => "de-DE",
475 Self::el_GR => "el-GR",
476 Self::en_AU => "en-AU",
477 Self::en_CA => "en-CA",
478 Self::en_GB => "en-GB",
479 Self::en_HK => "en-HK",
480 Self::en_IE => "en-IE",
481 Self::en_IN => "en-IN",
482 Self::en_KE => "en-KE",
483 Self::en_NG => "en-NG",
484 Self::en_NZ => "en-NZ",
485 Self::en_PH => "en-PH",
486 Self::en_SG => "en-SG",
487 Self::en_TZ => "en-TZ",
488 Self::en_US => "en-US",
489 Self::en_ZA => "en-ZA",
490 Self::es_AR => "es-AR",
491 Self::es_BO => "es-BO",
492 Self::es_CL => "es-CL",
493 Self::es_CO => "es-CO",
494 Self::es_CR => "es-CR",
495 Self::es_CU => "es-CU",
496 Self::es_DO => "es-DO",
497 Self::es_EC => "es-EC",
498 Self::es_ES => "es-ES",
499 Self::es_GQ => "es-GQ",
500 Self::es_GT => "es-GT",
501 Self::es_HN => "es-HN",
502 Self::es_MX => "es-MX",
503 Self::es_NI => "es-NI",
504 Self::es_PA => "es-PA",
505 Self::es_PE => "es-PE",
506 Self::es_PR => "es-PR",
507 Self::es_PY => "es-PY",
508 Self::es_SV => "es-SV",
509 Self::es_US => "es-US",
510 Self::es_UY => "es-UY",
511 Self::es_VE => "es-VE",
512 Self::et_EE => "et-EE",
513 Self::eu_ES => "eu-ES",
514 Self::fa_IR => "fa-IR",
515 Self::fi_FI => "fi-FI",
516 Self::fil_PH => "fil-PH",
517 Self::fr_BE => "fr-BE",
518 Self::fr_CA => "fr-CA",
519 Self::fr_CH => "fr-CH",
520 Self::fr_FR => "fr-FR",
521 Self::ga_IE => "ga-IE",
522 Self::gl_ES => "gl-ES",
523 Self::gu_IN => "gu-IN",
524 Self::he_IL => "he-IL",
525 Self::hi_IN => "hi-IN",
526 Self::hr_HR => "hr-HR",
527 Self::hu_HU => "hu-HU",
528 Self::hy_AM => "hy-AM",
529 Self::id_ID => "id-ID",
530 Self::is_IS => "is-IS",
531 Self::it_IT => "it-IT",
532 Self::ja_JP => "ja-JP",
533 Self::jv_ID => "jv-ID",
534 Self::ka_GE => "ka-GE",
535 Self::kk_KZ => "kk-KZ",
536 Self::km_KH => "km-KH",
537 Self::kn_IN => "kn-IN",
538 Self::ko_KR => "ko-KR",
539 Self::lo_LA => "lo-LA",
540 Self::lt_LT => "lt-LT",
541 Self::lv_LV => "lv-LV",
542 Self::mk_MK => "mk-MK",
543 Self::ml_IN => "ml-IN",
544 Self::mn_MN => "mn-MN",
545 Self::mr_IN => "mr-IN",
546 Self::ms_MY => "ms-MY",
547 Self::mt_MT => "mt-MT",
548 Self::my_MM => "my-MM",
549 Self::nb_NO => "nb-NO",
550 Self::ne_NP => "ne-NP",
551 Self::nl_BE => "nl-BE",
552 Self::nl_NL => "nl-NL",
553 Self::pl_PL => "pl-PL",
554 Self::ps_AF => "ps-AF",
555 Self::pt_BR => "pt-BR",
556 Self::pt_PT => "pt-PT",
557 Self::ro_RO => "ro-RO",
558 Self::ru_RU => "ru-RU",
559 Self::si_LK => "si-LK",
560 Self::sk_SK => "sk-SK",
561 Self::sl_SI => "sl-SI",
562 Self::so_SO => "so-SO",
563 Self::sq_AL => "sq-AL",
564 Self::sr_RS => "sr-RS",
565 Self::su_ID => "su-ID",
566 Self::sv_SE => "sv-SE",
567 Self::sw_KE => "sw-KE",
568 Self::sw_TZ => "sw-TZ",
569 Self::ta_IN => "ta-IN",
570 Self::ta_LK => "ta-LK",
571 Self::ta_MY => "ta-MY",
572 Self::ta_SG => "ta-SG",
573 Self::te_IN => "te-IN",
574 Self::th_TH => "th-TH",
575 Self::tr_TR => "tr-TR",
576 Self::uk_UA => "uk-UA",
577 Self::ur_IN => "ur-IN",
578 Self::ur_PK => "ur-PK",
579 Self::uz_UZ => "uz-UZ",
580 Self::vi_VN => "vi-VN",
581 Self::wuu_CN => "wuu-CN",
582 Self::yue_CN => "yue-CN",
583 Self::zh_CN => "zh-CN",
584 Self::zh_HK => "zh-HK",
585 Self::zh_TW => "zh-TW",
586 Self::zu_ZA => "zu-ZA",
587 })
588 .into()
589 }
590}
591
592
593impl From<&str> for Locale {
594 fn from(value: &str) -> Self {
595 match value {
596 "af-ZA" => Self::af_ZA,
597 "am-ET" => Self::am_ET,
598 "ar-AE" => Self::ar_AE,
599 "ar-BH" => Self::ar_BH,
600 "ar-DZ" => Self::ar_DZ,
601 "ar-EG" => Self::ar_EG,
602 "ar-IQ" => Self::ar_IQ,
603 "ar-JO" => Self::ar_JO,
604 "ar-KW" => Self::ar_KW,
605 "ar-LB" => Self::ar_LB,
606 "ar-LY" => Self::ar_LY,
607 "ar-MA" => Self::ar_MA,
608 "ar-OM" => Self::ar_OM,
609 "ar-QA" => Self::ar_QA,
610 "ar-SA" => Self::ar_SA,
611 "ar-SY" => Self::ar_SY,
612 "ar-TN" => Self::ar_TN,
613 "ar-YE" => Self::ar_YE,
614 "az-AZ" => Self::az_AZ,
615 "bg-BG" => Self::bg_BG,
616 "bn-BD" => Self::bn_BD,
617 "bn-IN" => Self::bn_IN,
618 "bs-BA" => Self::bs_BA,
619 "ca-ES" => Self::ca_ES,
620 "cs-CZ" => Self::cs_CZ,
621 "cy-GB" => Self::cy_GB,
622 "da-DK" => Self::da_DK,
623 "de-AT" => Self::de_AT,
624 "de-CH" => Self::de_CH,
625 "de-DE" => Self::de_DE,
626 "el-GR" => Self::el_GR,
627 "en-AU" => Self::en_AU,
628 "en-CA" => Self::en_CA,
629 "en-GB" => Self::en_GB,
630 "en-HK" => Self::en_HK,
631 "en-IE" => Self::en_IE,
632 "en-IN" => Self::en_IN,
633 "en-KE" => Self::en_KE,
634 "en-NG" => Self::en_NG,
635 "en-NZ" => Self::en_NZ,
636 "en-PH" => Self::en_PH,
637 "en-SG" => Self::en_SG,
638 "en-TZ" => Self::en_TZ,
639 "en-US" => Self::en_US,
640 "en-ZA" => Self::en_ZA,
641 "es-AR" => Self::es_AR,
642 "es-BO" => Self::es_BO,
643 "es-CL" => Self::es_CL,
644 "es-CO" => Self::es_CO,
645 "es-CR" => Self::es_CR,
646 "es-CU" => Self::es_CU,
647 "es-DO" => Self::es_DO,
648 "es-EC" => Self::es_EC,
649 "es-ES" => Self::es_ES,
650 "es-GQ" => Self::es_GQ,
651 "es-GT" => Self::es_GT,
652 "es-HN" => Self::es_HN,
653 "es-MX" => Self::es_MX,
654 "es-NI" => Self::es_NI,
655 "es-PA" => Self::es_PA,
656 "es-PE" => Self::es_PE,
657 "es-PR" => Self::es_PR,
658 "es-PY" => Self::es_PY,
659 "es-SV" => Self::es_SV,
660 "es-US" => Self::es_US,
661 "es-UY" => Self::es_UY,
662 "es-VE" => Self::es_VE,
663 "et-EE" => Self::et_EE,
664 "eu-ES" => Self::eu_ES,
665 "fa-IR" => Self::fa_IR,
666 "fi-FI" => Self::fi_FI,
667 "fil-PH" => Self::fil_PH,
668 "fr-BE" => Self::fr_BE,
669 "fr-CA" => Self::fr_CA,
670 "fr-CH" => Self::fr_CH,
671 "fr-FR" => Self::fr_FR,
672 "ga-IE" => Self::ga_IE,
673 "gl-ES" => Self::gl_ES,
674 "gu-IN" => Self::gu_IN,
675 "he-IL" => Self::he_IL,
676 "hi-IN" => Self::hi_IN,
677 "hr-HR" => Self::hr_HR,
678 "hu-HU" => Self::hu_HU,
679 "hy-AM" => Self::hy_AM,
680 "id-ID" => Self::id_ID,
681 "is-IS" => Self::is_IS,
682 "it-IT" => Self::it_IT,
683 "ja-JP" => Self::ja_JP,
684 "jv-ID" => Self::jv_ID,
685 "ka-GE" => Self::ka_GE,
686 "kk-KZ" => Self::kk_KZ,
687 "km-KH" => Self::km_KH,
688 "kn-IN" => Self::kn_IN,
689 "ko-KR" => Self::ko_KR,
690 "lo-LA" => Self::lo_LA,
691 "lt-LT" => Self::lt_LT,
692 "lv-LV" => Self::lv_LV,
693 "mk-MK" => Self::mk_MK,
694 "ml-IN" => Self::ml_IN,
695 "mn-MN" => Self::mn_MN,
696 "mr-IN" => Self::mr_IN,
697 "ms-MY" => Self::ms_MY,
698 "mt-MT" => Self::mt_MT,
699 "my-MM" => Self::my_MM,
700 "nb-NO" => Self::nb_NO,
701 "ne-NP" => Self::ne_NP,
702 "nl-BE" => Self::nl_BE,
703 "nl-NL" => Self::nl_NL,
704 "pl-PL" => Self::pl_PL,
705 "ps-AF" => Self::ps_AF,
706 "pt-BR" => Self::pt_BR,
707 "pt-PT" => Self::pt_PT,
708 "ro-RO" => Self::ro_RO,
709 "ru-RU" => Self::ru_RU,
710 "si-LK" => Self::si_LK,
711 "sk-SK" => Self::sk_SK,
712 "sl-SI" => Self::sl_SI,
713 "so-SO" => Self::so_SO,
714 "sq-AL" => Self::sq_AL,
715 "sr-RS" => Self::sr_RS,
716 "su-ID" => Self::su_ID,
717 "sv-SE" => Self::sv_SE,
718 "sw-KE" => Self::sw_KE,
719 "sw-TZ" => Self::sw_TZ,
720 "ta-IN" => Self::ta_IN,
721 "ta-LK" => Self::ta_LK,
722 "ta-MY" => Self::ta_MY,
723 "ta-SG" => Self::ta_SG,
724 "te-IN" => Self::te_IN,
725 "th-TH" => Self::th_TH,
726 "tr-TR" => Self::tr_TR,
727 "uk-UA" => Self::uk_UA,
728 "ur-IN" => Self::ur_IN,
729 "ur-PK" => Self::ur_PK,
730 "uz-UZ" => Self::uz_UZ,
731 "vi-VN" => Self::vi_VN,
732 "wuu-CN" => Self::wuu_CN,
733 "yue-CN" => Self::yue_CN,
734 "zh-CN" => Self::zh_CN,
735 "zh-HK" => Self::zh_HK,
736 "zh-TW" => Self::zh_TW,
737 "zu-ZA" => Self::zu_ZA,
738 _ => {
739 log::warn!( target: "rust-ai", "Unrecognized locale `{}`", value);
740 todo!("The local file should be updated and regenerated")
741 }
742 }
743 }
744}
745
746impl serde::Serialize for Locale {
747 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
748 where
749 S: serde::Serializer,
750 {
751 let content = Into::<String>::into(self.clone());
752 serializer.serialize_str(&content)
753 }
754}
755struct LocaleVisitor;
756
757impl<'de> serde::de::Visitor<'de> for LocaleVisitor {
758 type Value = Locale;
759 fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
760 where
761 E: serde::de::Error,
762 {
763 Ok(Into::<Self::Value>::into(v.as_str()))
764 }
765
766 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
767 where
768 E: serde::de::Error,
769 {
770 Ok(Into::<Self::Value>::into(v))
771 }
772
773 fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
774 formatter.write_str("Unrecognizable locale string.")
775 }
776}
777
778impl<'de> serde::Deserialize<'de> for Locale {
779 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
780 where
781 D: serde::Deserializer<'de>,
782 {
783 deserializer.deserialize_string(LocaleVisitor)
784 }
785}