From e2d301d28d58db7499d6c623c3e7c6d6948d6e7b Mon Sep 17 00:00:00 2001 From: user Date: Mon, 27 Apr 2026 20:33:41 +0900 Subject: [PATCH] ui: auto-detect browser language, re-render dynamic content on lang switch --- internal/webapp/static/app.js | 37 ++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/internal/webapp/static/app.js b/internal/webapp/static/app.js index 839506c..a5bba2c 100644 --- a/internal/webapp/static/app.js +++ b/internal/webapp/static/app.js @@ -435,6 +435,27 @@ function renderAuth() { } } +function setLanguage(lang) { + localStorage.setItem("tutor_lang", lang); + document.documentElement.lang = lang; + updateStaticText(); + document.querySelectorAll(".lang-btn").forEach((btn) => { + btn.classList.toggle("is-active", btn.dataset.lang === lang); + }); + if (state.session) renderSession(); + renderFeedback(); + renderProgress(); + renderOntology(); + renderAssetPrompt(); + const user = JSON.parse(localStorage.getItem("tutor_user") || "null"); + const token = localStorage.getItem("tutor_token"); + if (user && token) { + setStatus(t("signedInAs", user.email || user.name)); + } else { + setStatus(t("ready")); + } +} + els.logoutButton.addEventListener("click", () => { localStorage.removeItem("tutor_token"); localStorage.removeItem("tutor_user"); @@ -485,16 +506,18 @@ function escapeHTML(value) { document.querySelectorAll(".lang-switch").forEach((group) => { group.addEventListener("click", (e) => { if (!e.target.dataset.lang) return; - const lang = e.target.dataset.lang; - localStorage.setItem("tutor_lang", lang); - document.documentElement.lang = lang; - updateStaticText(); - document.querySelectorAll(".lang-btn").forEach((btn) => { - btn.classList.toggle("is-active", btn.dataset.lang === lang); - }); + setLanguage(e.target.dataset.lang); }); }); +if (!localStorage.getItem("tutor_lang")) { + const browserLang = navigator.language || navigator.userLanguage || ""; + const lang = browserLang.toLowerCase().startsWith("ko") ? "ko" : "en"; + localStorage.setItem("tutor_lang", lang); + document.documentElement.lang = lang; +} + updateStaticText(); window.renderAuth = renderAuth; +window.setLanguage = setLanguage; renderAuth();