docs: add mdbook language switcher script

This commit is contained in:
Christian Visintin
2026-06-08 08:44:29 +02:00
parent eefa1b3db0
commit ded71dce48

View File

@@ -0,0 +1,47 @@
// Injects a language toggle (EN / 中文) into the mdBook menu bar.
// Swaps the leading /en-US/ <-> /zh-CN/ path segment, preserving the
// rest of the path; falls back to the language root on 404 navigation.
(function () {
const LANGS = [
{ code: "en-US", label: "EN" },
{ code: "zh-CN", label: "中文" },
];
function currentLang() {
const m = window.location.pathname.match(/\/(en-US|zh-CN)\//);
return m ? m[1] : "en-US";
}
function swapTo(code) {
const path = window.location.pathname;
const cur = currentLang();
if (path.includes(`/${cur}/`)) {
return path.replace(`/${cur}/`, `/${code}/`);
}
return `/${code}/`;
}
function build() {
const right = document.querySelector(".right-buttons");
if (!right) return;
const cur = currentLang();
const wrap = document.createElement("div");
wrap.className = "lang-switcher";
wrap.style.display = "inline-flex";
wrap.style.gap = "0.5rem";
wrap.style.marginInlineStart = "0.5rem";
LANGS.forEach((l) => {
const a = document.createElement("a");
a.textContent = l.label;
a.href = swapTo(l.code);
a.title = l.code;
a.setAttribute("aria-current", l.code === cur ? "true" : "false");
if (l.code === cur) a.style.fontWeight = "bold";
wrap.appendChild(a);
});
right.appendChild(wrap);
}
if (document.readyState !== "loading") build();
else document.addEventListener("DOMContentLoaded", build);
})();