use std::sync::Mutex;
#[doc(hidden)]
pub use dynfmt::{Format, SimpleCurlyFormat};
#[doc(hidden)]
pub use once_cell::sync::Lazy;
#[doc(hidden)]
pub use oxilangtag::{LanguageTag, LanguageTagParseError};
#[doc(hidden)]
pub use phf;
pub use r18_proc_macros::init;
#[doc(hidden)]
pub use sys_locale::get_locale;
mod_use::mod_use!(macros);
#[doc(hidden)]
pub struct Locale {
pub name: &'static str,
pub translate: phf::Map<&'static str, &'static str>,
}
#[doc(hidden)]
pub static CURRENT_LOCALE: Lazy<Mutex<Option<&'static Locale>>> = Lazy::new(|| Mutex::new(None));
pub fn translate(prefix: impl AsRef<str>, content: &str) -> &str {
let locale = CURRENT_LOCALE.lock().unwrap();
let locale = match *locale {
Some(l) => l,
None => return content,
};
match locale
.translate
.get(format!("{} {}", prefix.as_ref(), content).as_str())
{
Some(tr) => tr,
None => content,
}
}