diff options
author | metamuffin <metamuffin@disroot.org> | 2025-04-20 16:51:44 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-04-20 16:51:44 +0200 |
commit | 646b7663a98a64556fd179137c4e8f55f037b0ca (patch) | |
tree | b53ea3a312f677b57096d8cda0c94e6ad8ad47fe /base/src/locale.rs | |
parent | 08f067aa1d0c1c1cec072dc73d4b4c04ce135b01 (diff) | |
download | jellything-646b7663a98a64556fd179137c4e8f55f037b0ca.tar jellything-646b7663a98a64556fd179137c4e8f55f037b0ca.tar.bz2 jellything-646b7663a98a64556fd179137c4e8f55f037b0ca.tar.zst |
more translation
Diffstat (limited to 'base/src/locale.rs')
-rw-r--r-- | base/src/locale.rs | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/base/src/locale.rs b/base/src/locale.rs index a1c5ef2..188ab63 100644 --- a/base/src/locale.rs +++ b/base/src/locale.rs @@ -1,26 +1,44 @@ -use std::{borrow::Cow, collections::HashMap}; +use std::{borrow::Cow, collections::HashMap, sync::LazyLock}; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum Language { English, German, } -pub fn tr<'a>(lang: Language, key: &str, args: &[(&str, &str)]) -> Cow<'a, str> { - let source_str = match lang { - Language::English => include_str!("../../locale/en.ini"), - Language::German => include_str!("../../locale/de.ini"), - }; - let tr_map = source_str - .lines() - .filter_map(|line| { - let (key, value) = line.split_once("=")?; - Some((key.trim(), value.trim())) - }) - .collect::<HashMap<&'static str, &'static str>>(); +static LANG_TABLES: LazyLock<HashMap<Language, HashMap<&'static str, &'static str>>> = + 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::<HashMap<&'static str, &'static str>>(); + k.insert(lang, tr_map); + } + k + }); +pub fn tr(lang: Language, key: &str, args: &[(&str, &str)]) -> Cow<'static, str> { + let tr_map = LANG_TABLES.get(&lang).unwrap(); match tr_map.get(key) { - Some(value) => Cow::Borrowed(value), + Some(value) => { + if args.is_empty() { + Cow::Borrowed(value) + } else { + let mut s = value.to_string(); + for (k, v) in args { + s = s.replace(&format!("{{{k}}}"), v) + } + Cow::Owned(s) + } + } None => Cow::Owned(format!("TR[{key}]")), } } |