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 */ }
});