更新公告和新闻样式
This commit is contained in:
+51
-18
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user