MediaWiki:Common.js
Aspetto
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
* ============================================================ */