|
|
| Zeile 1: |
Zeile 1: |
| /* Eigene Sprachleiste: UI-Sprache + PageTranslation-Ziel umschalten (immer Content-Sprache nutzen) */
| |
| mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
| |
|
| |
|
| // ---- deine Sprachen ----
| |
| var LANGS = [
| |
| { code: 'de', label: 'Deutsch' },
| |
| { code: 'en', label: 'English' },
| |
| { code: 'fr', label: 'Français' }
| |
| ];
| |
|
| |
| var userLang = (mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage') || 'de').toLowerCase();
| |
| var pageName = mw.config.get('wgPageName');
| |
| var baseTitle = pageName.replace(/\/[a-z]{2}(?:-[a-z]{2})?$/i, '');
| |
|
| |
| // === Automatische Weiterleitung auf Content-Sprache (ULS) ===
| |
| if (mw.config.get('wgAction') === 'view') {
| |
| var currentSuffix = (pageName.match(/\/([a-z]{2}(?:-[a-z]{2})?)$/i) || [])[1];
| |
| if (currentSuffix !== userLang) {
| |
| location.replace(mw.util.getUrl(baseTitle + '/' + userLang));
| |
| return; // Rest erst nach Redirect
| |
| }
| |
| }
| |
| // ============================================================
| |
|
| |
| // Wenn bereits eine Leiste existiert, nichts tun
| |
| if (document.getElementById('custom-langbar')) return;
| |
|
| |
| // 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;
| |
| if (userLang === lang.code.toLowerCase()) a.className = 'active-lang';
| |
| a.addEventListener('click', function (e) {
| |
| e.preventDefault();
| |
| switchLanguageAndGo(lang.code);
| |
| });
| |
| bar.appendChild(a);
| |
| });
| |
|
| |
| // Unter die Minerva-Header-Bar hängen
| |
| var header = document.querySelector('.minerva-header') || document.body;
| |
| header.parentNode.insertBefore(bar, header.nextSibling);
| |
|
| |
| // ---- Logik: Sprache setzen + auf Übersetzungsunterseite springen ----
| |
| function switchLanguageAndGo(code) {
| |
| code = code.toLowerCase();
| |
| var target = baseTitle + '/' + code;
| |
|
| |
| if (mw.config.get('wgUserName')) {
| |
| new mw.Api().postWithToken('csrf', {
| |
| action: 'options',
| |
| change: 'language=' + code
| |
| }).always(function () {
| |
| location.href = mw.util.getUrl(target);
| |
| });
| |
| return;
| |
| }
| |
|
| |
| try { localStorage.setItem('preferredLang', code); } catch (e) {}
| |
| location.href = mw.util.getUrl(target);
| |
| }
| |
|
| |
| // Anonyme erkennen und Flag auf <html> setzen
| |
| if (!mw.config.get('wgUserName')) {
| |
| document.documentElement.classList.add('bv-anon');
| |
| }
| |
|
| |
| // Gäste nicht auf Diskussionsseiten lassen → auf Inhaltsseite umleiten
| |
| 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;
| |
| }
| |
| }
| |
|
| |
| });
| |