1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
use serde::{Deserialize, Serialize};
use strum::EnumString;

#[derive(EnumString, Serialize, Deserialize, Debug, Clone, Copy, PartialEq)]
pub enum Lang {
    #[strum(serialize = "auto")]
    #[serde(rename = "auto")]
    Auto, // auto detect

    DE,
    EN,
    ES,
    FR,
    IT,
    JA,
    NL,
    PL,
    PT,
    RU,
    ZH,
    BG,
    CS,
    DA,
    EL,
    ET,
    FI,
    HU,
    LT,
    LV,
    RO,
    SK,
    SL,
    SV,
}

impl Default for Lang {
    fn default() -> Self {
        Lang::Auto
    }
}

impl Lang {
    pub fn description(&self) -> &'static str {
        let lang = *self;
        match lang {
            Lang::Auto => "自动检测",
            Lang::DE => "德语",
            Lang::EN => "英语",
            Lang::ES => "西班牙语",
            Lang::FR => "法语",
            Lang::IT => "意大利语",
            Lang::JA => "日语",
            Lang::NL => "荷兰语",
            Lang::PL => "波兰语",
            Lang::PT => "葡萄牙语",
            Lang::RU => "俄语",
            Lang::ZH => "中文",
            Lang::BG => "保加利亚语",
            Lang::CS => "捷克语",
            Lang::DA => "丹麦语",
            Lang::EL => "希腊语",
            Lang::ET => "爱沙尼亚语",
            Lang::FI => "芬兰语",
            Lang::HU => "匈牙利语",
            Lang::LT => "立陶宛语",
            Lang::LV => "拉脱维亚语",
            Lang::RO => "罗马尼亚语",
            Lang::SK => "斯洛伐克语",
            Lang::SL => "斯洛文尼亚语",
            Lang::SV => "瑞典语",
        }
    }

    pub fn lang_list_with_auto() -> Vec<Lang> {
        vec![
            Lang::Auto,
            Lang::EN,
            Lang::ZH,
            Lang::ES,
            Lang::FR,
            Lang::IT,
            Lang::JA,
            Lang::NL,
            Lang::PL,
            Lang::PT,
            Lang::RU,
            Lang::ZH,
            Lang::BG,
            Lang::CS,
            Lang::DA,
            Lang::EL,
            Lang::ET,
            Lang::FI,
            Lang::HU,
            Lang::LT,
            Lang::LV,
            Lang::RO,
            Lang::SK,
            Lang::SL,
            Lang::SV,
        ]
    }

    pub fn lang_list() -> Vec<Lang> {
        vec![
            Lang::ZH,
            Lang::EN,
            Lang::ES,
            Lang::FR,
            Lang::IT,
            Lang::JA,
            Lang::NL,
            Lang::PL,
            Lang::PT,
            Lang::RU,
            Lang::ZH,
            Lang::BG,
            Lang::CS,
            Lang::DA,
            Lang::EL,
            Lang::ET,
            Lang::FI,
            Lang::HU,
            Lang::LT,
            Lang::LV,
            Lang::RO,
            Lang::SK,
            Lang::SL,
            Lang::SV,
        ]
    }
}