From 20e682243d66f92515fe3e88a84285512c44956e Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Tue, 19 Nov 2024 23:14:04 +0100 Subject: [PATCH] feat(egui,wasm): set `lang` attribute to current language --- src/bin/topola-egui/app.rs | 21 +++++++++++++++++++++ src/bin/topola-egui/translator.rs | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/bin/topola-egui/app.rs b/src/bin/topola-egui/app.rs index f7bccea..640b3c5 100644 --- a/src/bin/topola-egui/app.rs +++ b/src/bin/topola-egui/app.rs @@ -125,6 +125,25 @@ impl App { ControlFlow::Break(()) } + + #[cfg(not(target_arch = "wasm32"))] + fn update_locale(&mut self) { + // I don't know any equivalent of changing the lang property in desktop. + } + + #[cfg(target_arch = "wasm32")] + fn update_locale(&mut self) { + use eframe::wasm_bindgen::JsCast; + + let document_element = eframe::web_sys::window() + .expect("No window") + .document() + .expect("No document") + .document_element() + .expect("No document element"); + + document_element.set_attribute("lang", &self.translator.langid().to_string()); + } } impl eframe::App for App { @@ -172,6 +191,8 @@ impl eframe::App for App { self.viewport .update(ctx, &self.menu_bar, self.maybe_workspace.as_mut()); + self.update_locale(); + if ctx.input(|i| i.key_pressed(egui::Key::Escape)) { ctx.send_viewport_cmd(egui::ViewportCommand::Close); } diff --git a/src/bin/topola-egui/translator.rs b/src/bin/topola-egui/translator.rs index 1bca0af..de0c345 100644 --- a/src/bin/topola-egui/translator.rs +++ b/src/bin/topola-egui/translator.rs @@ -1,3 +1,4 @@ +use derive_getters::Getters; use fluent_templates::{static_loader, Loader}; use serde::{Deserialize, Serialize}; use unic_langid::LanguageIdentifier; @@ -9,7 +10,7 @@ static_loader! { }; } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Getters)] pub struct Translator { langid: LanguageIdentifier, }