Files
struts2-demo/web/assets/struts-lab.js

93 lines
2.6 KiB
JavaScript
Raw Normal View History

(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
};
})();