更新公告和新闻样式

This commit is contained in:
2026-03-03 01:30:05 +08:00
parent 8bdd92e83f
commit 9b49da6637
8 changed files with 1034 additions and 70 deletions
+51 -18
View File
@@ -3,30 +3,63 @@ const body = document.body;
function getPreferredLang() {
const savedLang = localStorage.getItem('language');
if (savedLang) {
if (savedLang === 'zh' || savedLang === 'en') {
return savedLang;
}
return 'zh';
}
function setLang(lang) {
if (lang === 'en') {
body.setAttribute('lang', 'en');
if (langToggle) {
langToggle.querySelector('.lang-text').textContent = '中';
}
} else {
body.setAttribute('lang', 'zh');
if (langToggle) {
langToggle.querySelector('.lang-text').textContent = 'EN';
function setElementTextByLang(element, lang) {
const nextText = lang === 'en' ? element.getAttribute('data-en') : element.getAttribute('data-cn');
if (!nextText) {
return;
}
if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {
const inputType = (element.getAttribute('type') || '').toLowerCase();
if (inputType === 'submit' || inputType === 'button' || inputType === 'reset') {
element.value = nextText;
return;
}
}
// 处理 Input 元素的值切换 (input[type=submit] cannot use CSS content replacement)
const inputs = document.querySelectorAll('input[type="submit"][data-cn][data-en]');
inputs.forEach(input => {
input.value = lang === 'en' ? input.getAttribute('data-en') : input.getAttribute('data-cn');
});
element.textContent = nextText;
}
function setElementPlaceholderByLang(element, lang) {
const key = lang === 'en' ? 'data-en-placeholder' : 'data-cn-placeholder';
const value = element.getAttribute(key);
if (value) {
element.setAttribute('placeholder', value);
}
}
function setElementAriaLabelByLang(element, lang) {
const key = lang === 'en' ? 'data-en-aria-label' : 'data-cn-aria-label';
const value = element.getAttribute(key);
if (value) {
element.setAttribute('aria-label', value);
}
}
function setLang(lang) {
body.setAttribute('lang', lang);
if (langToggle) {
const langText = langToggle.querySelector('.lang-text');
if (langText) {
langText.textContent = lang === 'en' ? '\u4e2d' : 'EN';
}
}
const textNodes = document.querySelectorAll('[data-cn][data-en]');
textNodes.forEach((element) => setElementTextByLang(element, lang));
const placeholderNodes = document.querySelectorAll('[data-cn-placeholder][data-en-placeholder]');
placeholderNodes.forEach((element) => setElementPlaceholderByLang(element, lang));
const ariaNodes = document.querySelectorAll('[data-cn-aria-label][data-en-aria-label]');
ariaNodes.forEach((element) => setElementAriaLabelByLang(element, lang));
localStorage.setItem('language', lang);
}
@@ -37,7 +70,7 @@ setLang(initialLang);
if (langToggle) {
langToggle.addEventListener('click', () => {
const currentLang = body.getAttribute('lang');
const newLang = currentLang === 'en' ? 'zh' : 'en';
setLang(newLang);
const nextLang = currentLang === 'en' ? 'zh' : 'en';
setLang(nextLang);
});
}