93 lines
2.6 KiB
JavaScript
93 lines
2.6 KiB
JavaScript
|
|
(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
|
||
|
|
};
|
||
|
|
})();
|