use crate::{assets::OnceCell, debug, map_loader::Map, LangID, MapLoader};
use std::hash::BuildHasher;
impl<S: BuildHasher> MapLoader<S> {
pub fn new(map: Map<S>) -> Self {
let mut cur = lang_id::sys_lang::current();
debug!("Current lang id: {}", cur);
let id = match &map {
m if m.contains_key(&cur) => cur,
m => {
cur.maximize();
match m.contains_key(&cur) {
true => cur,
_ => {
let max = cur.to_owned();
cur.minimize();
match m.contains_key(&cur) {
true => cur,
_ => max,
}
}
}
}
};
debug!("lang id: {}", id);
Self {
id,
map,
chain: OnceCell::new(),
}
}
pub fn with_language_id(id: LangID, map: Map<S>) -> Self {
Self {
id,
map,
chain: OnceCell::new(),
}
}
}
#[cfg(test)]
mod tests {
use crate::{fallback::FallbackChain, GetText};
#[test]
fn new_map_loader() {
use crate::{
assets::localisation::locale_hashmap, fallback::FallbackChain,
map_loader::MapLoader,
};
let loader = MapLoader::new(locale_hashmap());
let _err_msg = loader.get("error", "text-not-found");
loader.show_chain();
let zh = unsafe { lang_id::consts::get_zh() };
let map = &loader.get_map().get(&zh);
map.map(|s| println!("{s:?}"));
}
#[test]
fn from_lang_id_and_map() {
use crate::{
assets::{lang_id_consts, localisation::locale_hashmap},
MapLoader,
};
let id = unsafe { lang_id_consts::get_el() };
let loader = MapLoader::with_language_id(id, locale_hashmap());
loader.show_chain();
let msg = loader.get_or_default("test", "not-found");
println!("{msg}");
}
#[test]
fn new_loader() {
use crate::assets::localisation::locale_hashmap;
let loader = crate::MapLoader::new(locale_hashmap());
loader.show_chain();
let msg = loader.get_or_default("test", "hello");
println!("{msg}");
}
}