codex_helper_tui/tui/
i18n.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum Language {
3 Zh,
4 En,
5}
6
7pub fn parse_language(s: &str) -> Option<Language> {
8 let s = s.trim().to_ascii_lowercase();
9 if s.is_empty() {
10 return None;
11 }
12 match s.as_str() {
13 "zh" | "zh-cn" | "zh_cn" | "zh-hans" | "zh_hans" | "cn" | "chinese" | "中文" => {
14 Some(Language::Zh)
15 }
16 "en" | "en-us" | "en_us" | "english" => Some(Language::En),
17 _ => None,
18 }
19}
20
21pub fn detect_system_language() -> Language {
22 for key in ["LC_ALL", "LC_MESSAGES", "LANGUAGE", "LANG"] {
28 if let Ok(v) = std::env::var(key) {
29 let v = v.trim().to_ascii_lowercase();
30 if v.starts_with("zh") || v.contains("zh_cn") || v.contains("zh-cn") {
31 return Language::Zh;
32 }
33 if v.starts_with("en") {
34 return Language::En;
35 }
36 }
37 }
38 Language::En
39}
40
41pub(crate) fn pick<'a>(lang: Language, zh: &'a str, en: &'a str) -> &'a str {
42 match lang {
43 Language::Zh => zh,
44 Language::En => en,
45 }
46}