Skip to main content

context_bar_core/
i18n.rs

1//! Bilingual (EN/TR) text selection, shared by every Rust surface.
2//!
3//! Every user-facing string in the engine and CLI goes through
4//! [`Language::text`] so we never ship a one-language string (project rule).
5//! Detection honors an explicit `CONTEXTBAR_LANG=en|tr` override first, then
6//! the standard locale env vars.
7
8#[derive(Clone, Copy, PartialEq, Eq, Debug)]
9pub enum Language {
10    En,
11    Tr,
12}
13
14impl Language {
15    /// Resolve the UI language: `CONTEXTBAR_LANG` override, else locale env.
16    pub fn detect() -> Self {
17        if let Ok(forced) = std::env::var("CONTEXTBAR_LANG") {
18            let f = forced.trim().to_ascii_lowercase();
19            if f.starts_with("tr") {
20                return Self::Tr;
21            }
22            if f.starts_with("en") {
23                return Self::En;
24            }
25        }
26        for key in ["LC_ALL", "LC_MESSAGES", "LANG"] {
27            if let Ok(value) = std::env::var(key) {
28                if value.to_ascii_lowercase().starts_with("tr") {
29                    return Self::Tr;
30                }
31                if !value.is_empty() {
32                    return Self::En;
33                }
34            }
35        }
36        Self::En
37    }
38
39    /// Pick the English or Turkish variant.
40    pub fn text(self, en: &'static str, tr: &'static str) -> &'static str {
41        match self {
42            Self::En => en,
43            Self::Tr => tr,
44        }
45    }
46}