跳转到内容

MediaWiki:Gadget-LangSwitch.js

来自槌基百科

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-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 );
    } );
}() );