本文介绍一种不依赖后端或框架的纯前端方案,通过 localstorage 持久化用户语言偏好,并在页面加载时自动恢复选中状态与文本翻译,确保多页间语言设置无缝延续。
本文介绍一种不依赖后端或框架的纯前端方案,通过 localstorage 持久化用户语言偏好,并在页面加载时自动恢复选中状态与文本翻译,确保多页间语言设置无缝延续。
要在多页静态 HTML 网站中实现真正可用的多语言支持,关键在于语言状态的跨页面持久化与初始化还原。你当前的代码已正确使用 localStorage 保存语言标识(如 "en" 或 "tr"),但缺失了页面首次加载时的“状态回填”逻辑——即:用户跳转到新页面后,脚本需主动读取 localStorage 中的语言值,自动激活对应语言链接,并执行一次 changeLang() 渲染。
你需要将语言设置拆分为两个阶段:
以下是优化后的完整 script.js 结构(含注释):
document.addEventListener('DOMContentLoaded', function() { const langwrap = document.querySelector(".langwrap"); if (!langwrap) return; const links = langwrap.querySelectorAll("a"); const elements = { /* 如: 'header-title': document.getElementById('title'), ... */ }; const translations = { "en": { "header-title": "Welcome", "btn-submit": "Submit", /* ... */ }, "tr": { "header-title": "Hoş Geldiniz", "btn-submit": "Gönder", /* ... */ } }; // ? 第一步:从 localStorage 获取语言(默认 fallback) let lang = localStorage.getItem("lang") || "tr"; // 注意:key 名建议统一为 "lang" 而非 "langwrap" // ? 第二步:初始化 UI 状态 + 翻译内容 function initLanguage() { // 移除所有 .activated,再激活对应链接 langwrap.querySelectorAll(".activated").forEach(el => el.classList.remove("activated")); const targetLink = Array.from(links).find(el => el.dataset.lang === lang); if (targetLink) { targetLink.classList.add("activated"); } // 执行首次翻译 changeLang(lang, elements, translations); } // ? 第三步:定义切换函数(复用) function changeLang(lang, elements, data) { document.documentElement.lang = lang; // 同时设置 <html lang="...">,利于 SEO 和屏幕阅读器 for (const key in elements) { if (elements.hasOwnProperty(key) && elements[key] && data[lang] && data[lang][key]) { elements[key].textContent = data[lang][key]; } } } // ? 第四步:绑定点击事件(仅处理切换,不重复初始化) links.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); const newLang = this.dataset.lang; if (!newLang || newLang === lang) return; // 更新状态 lang = newLang; localStorage.setItem("lang", lang); // 同步 UI 和 DOM langwrap.querySelectorAll(".activated").forEach(el => el.classList.remove("activated")); this.classList.add("activated"); changeLang(lang, elements, translations); }); }); // ✅ 最关键:页面加载后立即初始化! initLanguage();});
通过以上结构,无论用户从首页跳转至关于页、联系页还是任意子页面,语言偏好均能自动继承并正确渲染——真正实现轻量、可靠、零后端依赖的多页多语言体验。
立即学习“前端免费学习笔记(深入)”;