ui: auto-detect browser language, re-render dynamic content on lang switch

This commit is contained in:
user
2026-04-27 20:33:41 +09:00
parent 8dfe3b384e
commit e2d301d28d

View File

@@ -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", () => { els.logoutButton.addEventListener("click", () => {
localStorage.removeItem("tutor_token"); localStorage.removeItem("tutor_token");
localStorage.removeItem("tutor_user"); localStorage.removeItem("tutor_user");
@@ -485,16 +506,18 @@ function escapeHTML(value) {
document.querySelectorAll(".lang-switch").forEach((group) => { document.querySelectorAll(".lang-switch").forEach((group) => {
group.addEventListener("click", (e) => { group.addEventListener("click", (e) => {
if (!e.target.dataset.lang) return; if (!e.target.dataset.lang) return;
const lang = e.target.dataset.lang; setLanguage(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);
});
}); });
}); });
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(); updateStaticText();
window.renderAuth = renderAuth; window.renderAuth = renderAuth;
window.setLanguage = setLanguage;
renderAuth(); renderAuth();