thisweek_core/
language.rs1use serde::Serialize;
2
3#[derive(Serialize, Clone, Debug, Default, PartialEq)]
6pub enum Language {
7 #[default]
8 English = 1,
9 Farsi = 2,
10 Chinese = 3,
11 Arabic = 4,
12}
13
14impl Language {
15 pub fn change_numbers_language(&self, s: &str) -> String {
16 let nums_en = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
17 let nums_fa = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"];
18 let nums_ar = ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"];
19 let mut s: String = String::from(s);
20 if *self == Language::Farsi {
21 for i in 0..10 {
22 s = s.replace(nums_en[i], nums_fa[i]);
23 }
24 } else if *self == Language::Arabic {
25 for i in 0..10 {
26 s = s.replace(nums_en[i], nums_ar[i]);
27 }
28 } else {
29 }
33 s
34 }
35
36 pub fn default_direction(&self) -> String {
37 match self {
38 Language::English => "ltr".into(),
39 Language::Farsi => "rtl".into(),
40 Language::Chinese => "ltr".into(),
41 Language::Arabic => "rtl".into(),
42 }
43 }
44}
45
46impl From<i32> for Language {
47 fn from(val: i32) -> Self {
48 match val {
49 1 => Language::English,
50 2 => Language::Farsi,
51 3 => Language::Chinese,
52 4 => Language::Arabic,
53 _ => Language::English,
54 }
55 }
56}
57
58impl From<String> for Language {
59 fn from(val: String) -> Self {
60 match val.as_str() {
61 "en" => Language::English,
62 "fa" => Language::Farsi,
63 "zh" => Language::Chinese,
64 "ar" => Language::Arabic,
65 &_ => Language::English, }
67 }
68}
69
70impl From<Language> for String {
71 fn from(val: Language) -> Self {
72 match val {
73 Language::English => "en".to_string(),
74 Language::Farsi => "fa".to_string(),
75 Language::Chinese => "zh".to_string(),
76 Language::Arabic => "ar".to_string(),
77 }
78 }
79}
80
81pub fn str_to_vec(arr: &[&str]) -> Vec<String> {
83 arr.iter().copied().map(String::from).collect()
85}