MediaWiki:Gadget-redirectByLanguage.js

From BhagavataWiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
console.log("🧩 redirectByLanguage gadget loaded");

mw.loader.using(['mediawiki.util', 'mediawiki.language']).then(function () {
    var userLang = mw.config.get('wgUserLanguage');
    var contentLang = mw.config.get('wgContentLanguage');
    var pageName = mw.config.get('wgPageName');

    console.log("🌐 Language Debug Log:");
    console.log("→ User language:", userLang);
    console.log("→ Content language:", contentLang);
    console.log("→ Page name:", pageName);

    // Match subpage format, e.g., Page/de
    var subpageMatch = pageName.match(/^(.*)\/([a-z\-]+)$/);
    var isSubpage = !!subpageMatch;
    var basePage = isSubpage ? subpageMatch[1] : pageName;
    var currentLang = isSubpage ? subpageMatch[2] : contentLang;

    // 🧠 Only redirect if userLang ≠ current page language
    if (userLang === currentLang) {
        console.log("✔️ Already on correct language version. No redirection.");
        return;
    }

    // Compute the correct target page
    var targetPage = (userLang === contentLang)
        ? basePage  // back to default
        : basePage + '/' + userLang;

    console.log("🔄 Attempting redirect to:", targetPage);

    // Check if the target page exists before redirecting
    $.get(mw.util.wikiScript('api'), {
        action: 'query',
        titles: targetPage,
        format: 'json'
    }).done(function (data) {
        var pages = data.query.pages;
        var pageId = Object.keys(pages)[0];
        if (pageId !== "-1") {
            console.log("✅ Redirecting to:", targetPage);
            // Use replace() to avoid infinite reload history
            window.location.replace(mw.util.getUrl(targetPage));
        } else {
            console.log("❌ Target page does not exist:", targetPage);
        }
    });
});