MediaWiki:Gadget-LangSwitch.js
外观
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/**
* LangSwitch gadget — footer language switcher between 中文 and English.
* For logged-in users: saves language preference permanently via API.
* For guests: applies uselang= to the current URL for this page.
*/
( function () {
'use strict';
var currentLang = mw.config.get( 'wgUserLanguage' ) || 'en';
var isZh = currentLang.indexOf( 'zh' ) === 0;
var LANGS = [
{ code: 'zh-hans', label: '中文' },
{ code: 'en', label: 'English' }
];
function switchLang( code ) {
if ( mw.user.isAnon() ) {
// Guest: add uselang to URL
var url = new URL( window.location.href );
url.searchParams.set( 'uselang', code );
window.location.href = url.toString();
} else {
// Logged-in: save preference via API then reload
var api = new mw.Api();
api.saveOption( 'language', code ).done( function () {
window.location.reload();
} );
}
}
$( function () {
var footer = document.getElementById( 'footer' ) ||
document.querySelector( '.mw-footer' );
if ( !footer ) { return; }
var wrapper = document.createElement( 'div' );
wrapper.id = 'lang-switcher';
var label = document.createElement( 'span' );
label.className = 'lang-switcher-label';
label.textContent = '🌐 ';
wrapper.appendChild( label );
LANGS.forEach( function ( lang, i ) {
if ( i > 0 ) {
var sep = document.createElement( 'span' );
sep.className = 'lang-switcher-sep';
sep.textContent = ' | ';
wrapper.appendChild( sep );
}
var btn = document.createElement( 'a' );
btn.href = '#';
btn.textContent = lang.label;
btn.className = 'lang-switcher-btn';
var isActive = currentLang === lang.code ||
( lang.code === 'zh-hans' && isZh );
if ( isActive ) {
btn.className += ' lang-switcher-active';
} else {
btn.addEventListener( 'click', function ( e ) {
e.preventDefault();
switchLang( lang.code );
} );
}
wrapper.appendChild( btn );
} );
footer.appendChild( wrapper );
} );
}() );