Vai al contenuto

MediaWiki:Common.js

Da Wiki Progetto di Ricerca Metodo Paret.
Versione del 26 mag 2026 alle 00:20 di Admin (discussione | contributi) (Auto-language switcher per pagine /ru /en /fr /es /pt)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5.
/* ============================================================
 * Auto-language selection for translated pages
 * ============================================================
 * Quando l'utente atterra su una pagina con suffisso linguistico
 * (es. /ru, /en, /fr, /es, /pt), forza l'UI in quella lingua
 * UNA SOLA VOLTA, salvando un cookie. L'utente può comunque
 * cambiare lingua manualmente con l'icona globo (ULS), che ha
 * priorità più alta.
 * ============================================================ */
( function ( mw ) {
    'use strict';

    var SUPPORTED_SUFFIXES = [ 'ru', 'en', 'fr', 'es', 'pt' ];
    var COOKIE_NAME = 'autolang_set';

    // Legge cookie semplice
    function getCookie( name ) {
        var match = document.cookie.match( new RegExp( '(?:^|;\\s*)' + name + '=([^;]*)' ) );
        return match ? decodeURIComponent( match[ 1 ] ) : null;
    }

    function setCookie( name, value, days ) {
        var d = new Date();
        d.setTime( d.getTime() + ( days * 24 * 60 * 60 * 1000 ) );
        document.cookie = name + '=' + encodeURIComponent( value ) +
            '; expires=' + d.toUTCString() + '; path=/; SameSite=Lax';
    }

    function getPageLangFromTitle() {
        // Usa il titolo MediaWiki ufficiale (no URL encoding)
        var title = mw.config.get( 'wgPageName' ) || '';
        // Cerca suffisso /XX in fondo al titolo
        var m = title.match( /\/([a-z]{2})$/ );
        if ( m && SUPPORTED_SUFFIXES.indexOf( m[ 1 ] ) !== -1 ) {
            return m[ 1 ];
        }
        return null;
    }

    function userHasExplicitChoice() {
        // L'utente ha scelto manualmente una lingua se:
        // 1. ULS ha salvato preferenza (cookie 'uls-preferences' o simili)
        // 2. Abbiamo già forzato la lingua una volta in questa sessione
        if ( getCookie( COOKIE_NAME ) ) {
            return true;
        }
        // Per utenti loggati: mw.user.options ha 'language' impostato
        var userLang = mw.user.options.get( 'language' );
        if ( userLang && userLang !== mw.config.get( 'wgContentLanguage' ) ) {
            return true;
        }
        return false;
    }

    function init() {
        var targetLang = getPageLangFromTitle();
        if ( !targetLang ) {
            return; // pagina non multilingue
        }

        // Se l'URL ha già ?uselang=, l'utente sta già usando una lingua scelta
        var url = new URL( window.location.href );
        if ( url.searchParams.get( 'uselang' ) ) {
            // Salva il cookie per ricordare la scelta
            setCookie( COOKIE_NAME, url.searchParams.get( 'uselang' ), 365 );
            return;
        }

        // Se l'utente ha già fatto una scelta esplicita, non interferire
        if ( userHasExplicitChoice() ) {
            return;
        }

        // Aggiungi uselang=XX all'URL e ricarica (UNA volta)
        setCookie( COOKIE_NAME, targetLang, 365 );
        url.searchParams.set( 'uselang', targetLang );
        window.location.replace( url.toString() );
    }

    // Esegui non appena mw è pronto
    if ( typeof mw !== 'undefined' && mw.config ) {
        mw.loader.using( [ 'mediawiki.util', 'user.options' ] ).then( init );
    }

}( window.mediaWiki || window.mw ) );

/* ============================================================
 * Fine auto-language
 * ============================================================ */