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: ULS-Cookie setzen + persistente Sprache für Gäste + Diskussionsseiten-Redirect */
mw.loader.using(['mediawiki.util', 'mediawiki.api', 'ext.uls.init', 'jquery.cookie'], function () {

  var LANGS = [
    { code: 'de', label: 'Deutsch' },
    { code: 'en', label: 'English' },
    { code: 'fr', label: 'Français' }
  ];
  var FALLBACK_LANG = 'en';
  var ALLOWED_LANGS = ['de', 'en', 'fr'];

  var pageName = mw.config.get('wgPageName');
  var baseTitle = pageName.replace(/\/[a-z]{2}(?:-[a-z]{2})?$/i, '');

  function normalizeLang(code) {
    if (!code) return FALLBACK_LANG;
    code = code.toLowerCase().split('-')[0];
    return ALLOWED_LANGS.includes(code) ? code : FALLBACK_LANG;
  }

  function buildLangUrl(langCode) {
    var targetUrl = mw.util.getUrl(baseTitle + '/' + langCode);
    var sep = targetUrl.indexOf('?') > -1 ? '&' : '?';
    return targetUrl + sep + 'uselang=' + langCode;
  }

  // Sprachleiste erstellen
  if (!document.getElementById('custom-langbar')) {
    var bar = document.createElement('div');
    bar.id = 'custom-langbar';
    var currentLang = normalizeLang(mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage') || FALLBACK_LANG);

    LANGS.forEach(function (lang) {
      var a = document.createElement('a');
      a.href = '#';
      a.textContent = lang.label;
      a.dataset.code = lang.code;
      if (currentLang === lang.code) a.className = 'active-lang';
      a.addEventListener('click', function (e) {
        e.preventDefault();
        switchLanguageAndGo(lang.code);
      });
      bar.appendChild(a);
    });

    var header = document.querySelector('.minerva-header') || document.body;
    header.parentNode.insertBefore(bar, header.nextSibling);
  }

  function switchLanguageAndGo(code) {
    code = normalizeLang(code);

    // Für Gäste: ULS-Cookie setzen (wie das originale UI)
    try {
      $.cookie('uls-previous-language', code, { path: '/', expires: 30 });
    } catch (e) {}

    if (mw.uls && typeof mw.uls.setLanguage === 'function') {
      mw.uls.setLanguage(code);
    }

    if (mw.config.get('wgUserName')) {
      // Eingeloggte User: Sprache in Optionen speichern
      new mw.Api().postWithToken('csrf', {
        action: 'options',
        change: 'language=' + code
      }).always(function () {
        location.href = buildLangUrl(code);
      });
    } else {
      // Gäste: direkt umleiten
      location.href = buildLangUrl(code);
    }
  }

  // Anonyme markieren
  if (!mw.config.get('wgUserName')) {
    document.documentElement.classList.add('bv-anon');
  }

  // Gäste nicht auf Diskussionsseiten lassen
  if (!mw.config.get('wgUserName')) {
    var ns = mw.config.get('wgNamespaceNumber');
    if (ns % 2 === 1) {
      var subjectUrl = mw.util.getUrl(mw.config.get('wgPageName').replace(/^Talk:/, ''));
      window.location.href = subjectUrl;
    }
  }

});