feat: finish bilingual session auth learning lab
This commit is contained in:
92
web/assets/struts-lab.js
Normal file
92
web/assets/struts-lab.js
Normal file
@@ -0,0 +1,92 @@
|
||||
(function () {
|
||||
const LANGUAGE_KEY = "struts_lab_language";
|
||||
|
||||
function getLanguage() {
|
||||
return localStorage.getItem(LANGUAGE_KEY) === "en" ? "en" : "zh";
|
||||
}
|
||||
|
||||
function setLanguage(language) {
|
||||
const resolved = language === "en" ? "en" : "zh";
|
||||
localStorage.setItem(LANGUAGE_KEY, resolved);
|
||||
document.documentElement.lang = resolved === "zh" ? "zh-CN" : "en";
|
||||
return resolved;
|
||||
}
|
||||
|
||||
function applyText(values) {
|
||||
Object.entries(values || {}).forEach(([id, value]) => {
|
||||
const node = document.getElementById(id);
|
||||
if (node) {
|
||||
node.textContent = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function applyHtml(values) {
|
||||
Object.entries(values || {}).forEach(([id, value]) => {
|
||||
const node = document.getElementById(id);
|
||||
if (node) {
|
||||
node.innerHTML = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function applyPlaceholders(values) {
|
||||
Object.entries(values || {}).forEach(([id, value]) => {
|
||||
const node = document.getElementById(id);
|
||||
if (node) {
|
||||
node.setAttribute("placeholder", value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function mount(config) {
|
||||
const state = {
|
||||
language: setLanguage(getLanguage())
|
||||
};
|
||||
const button = document.getElementById(config.buttonId || "languageBtn");
|
||||
|
||||
function messages() {
|
||||
return config.messages[state.language] || config.messages.zh || {};
|
||||
}
|
||||
|
||||
function render() {
|
||||
const current = messages();
|
||||
if (current.pageTitle) {
|
||||
document.title = current.pageTitle;
|
||||
}
|
||||
applyText(current.text);
|
||||
applyHtml(current.html);
|
||||
applyPlaceholders(current.placeholders);
|
||||
if (button) {
|
||||
button.textContent = state.language === "zh" ? "EN" : "中文";
|
||||
}
|
||||
if (typeof config.render === "function") {
|
||||
config.render({
|
||||
language: state.language,
|
||||
messages: current,
|
||||
setLanguage
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (button) {
|
||||
button.addEventListener("click", function () {
|
||||
state.language = setLanguage(state.language === "zh" ? "en" : "zh");
|
||||
render();
|
||||
});
|
||||
}
|
||||
|
||||
render();
|
||||
return {
|
||||
getLanguage: function () {
|
||||
return state.language;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
window.strutsLab = {
|
||||
mount: mount,
|
||||
getLanguage: getLanguage,
|
||||
setLanguage: setLanguage
|
||||
};
|
||||
})();
|
||||
Reference in New Issue
Block a user