Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/* Eigene Sprachleiste: komplette UI-Sprache umschalten (Minerva, global) */
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
// ---- Konfiguration: deine Sprachen (Label + Code) ----
var LANGS = [
{ code: 'de', label: 'Deutsch' },
{ code: 'en', label: 'English' },
{ code: 'fr', label: 'Français' }
];
// Nur einmal einfügen
if (document.getElementById('custom-langbar')) return;
var userLang = mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage');
var page = mw.config.get('wgPageName');
// Leiste bauen
var bar = document.createElement('div');
bar.id = 'custom-langbar';
LANGS.forEach(function (lang) {
var a = document.createElement('a');
a.href = '#';
a.textContent = lang.label;
a.dataset.code = lang.code;
// Aktive Sprache markieren (UI-Sprache!)
if (userLang === lang.code) a.className = 'active-lang';
a.addEventListener('click', function (e) {
e.preventDefault();
switchLanguage(lang.code);
});
bar.appendChild(a);
});
// Direkt unter die Minerva-Header-Bar hängen
var header = document.querySelector('.minerva-header') || document.body;
header.parentNode.insertBefore(bar, header.nextSibling);
// --- Sprachwechsel: eingeloggt => Preference setzen, Gast => setlang/uselang ---
function switchLanguage(code) {
var cur = mw.config.get('wgUserLanguage');
if (cur === code) return;
var urlBase = mw.util.getUrl(page);
// Eingeloggt: Preference setzen (persistiert)
if (mw.config.get('wgUserName')) {
var api = new mw.Api();
api.postWithToken('csrf', {
action: 'options',
change: 'language=' + code
}).then(function () {
location.reload();
}).catch(function () {
// Fallback, falls API fehlschlägt
location.href = urlBase + (urlBase.indexOf('?') > -1 ? '&' : '?') + 'setlang=' + code;
});
return;
}
// Gäste: erst versuchen, setlang (persistenter Cookie, falls verfügbar)
var sep = urlBase.indexOf('?') > -1 ? '&' : '?';
var setlangUrl = urlBase + sep + 'setlang=' + code;
// Manche MW-Versionen haben setlang nicht; als Fallback uselang + localStorage
try {
// Merken, damit wir bei Folgeaufrufen automatisch anfügen können
localStorage.setItem('preferredLang', code);
} catch (e) { /* ignore */ }
location.href = setlangUrl;
}
// Bonus: Falls der Gast schon mal gewählt hat und wir auf einer „nackten“ URL sind,
// hänge automatisch ?uselang=… an (nur wenn keine lang-Parameter da sind)
try {
var pref = localStorage.getItem('preferredLang');
if (!mw.config.get('wgUserName') && pref && !/[?&](?:use|set)lang=/.test(location.search)) {
// Nur eine „stille“ Ergänzung – kein Endlosschleifen-Risiko
var u = new URL(location.href);
u.searchParams.set('uselang', pref);
// Nur anwenden, wenn es nicht schon die aktuelle UI-Sprache ist
if ((mw.config.get('wgUserLanguage') || '').toLowerCase() !== pref.toLowerCase()) {
location.replace(u.toString());
}
}
} catch (e) { /* ignore */ }
});