use crate::{EN, Language, Translations, ZH};
use dioxus::prelude::*;
#[derive(Clone, Copy)]
pub struct I18nContext {
lang: Signal<Language>,
}
impl I18nContext {
pub fn new(lang: Language) -> Self {
Self {
lang: Signal::new(lang),
}
}
pub fn lang(&self) -> Language {
(self.lang)()
}
pub fn t(&self) -> &'static Translations {
match self.lang() {
Language::En => &EN,
Language::Zh => &ZH,
}
}
pub fn set_lang(&mut self, lang: Language) {
self.lang.set(lang);
#[cfg(target_arch = "wasm32")]
{
if let Some(window) = web_sys::window() {
if let Ok(Some(storage)) = window.local_storage() {
if let Err(e) = storage.set_item("webshelf_lang_v1", lang.as_str()) {
let msg = "webshelf i18n: localStorage write failed:".into();
web_sys::console::warn_2(&msg, &e);
}
}
}
}
}
}