use std::{borrow::Cow, collections::HashMap, sync::LazyLock}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum Language { English, German, } static LANG_TABLES: LazyLock>> = LazyLock::new(|| { let mut k = HashMap::new(); for (lang, source) in [ (Language::English, include_str!("../../locale/en.ini")), (Language::German, include_str!("../../locale/de.ini")), ] { let tr_map = source .lines() .filter_map(|line| { let (key, value) = line.split_once("=")?; Some((key.trim(), value.trim())) }) .collect::>(); k.insert(lang, tr_map); } k }); pub fn tr(lang: Language, key: &str) -> Cow<'static, str> { let tr_map = LANG_TABLES.get(&lang).unwrap(); match tr_map.get(key) { Some(value) => Cow::Borrowed(value), None => Cow::Owned(format!("TR[{key}]")), } }