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}