User:Mike Dillon/Scripts/i18n.js

From Wiktionary, the free dictionary
Jump to navigation Jump to search

Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.

  • Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
  • Konqueror and Chrome: click Reload or press F5;
  • Opera: clear the cache in Tools → Preferences;
  • Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.

var wgMessageCache = {};

var wgFallbackLanguage;

function wfAddMsg(lang, key, value) {
    if (!wgMessageCache[lang]) {
        wgMessageCache[lang] = {};
    }
    wgMessageCache[lang][key.toLowerCase()] = value;
}

function wfMsgReal(key, forContent, args) {
    function wfMsgGet(lang, key) {
        if (!wgMessageCache[lang]) return null;
        return wgMessageCache[lang][key.toLowerCase()];
    }

    // Bail out of the key is null
    if (key == null) return null;

    var msg = null;

    // Look for message in user language
    if (!forContent) {
        msg = wfMsgGet(wgUserLanguage, key);
    }

    // Else, use content language
    if (msg == null) {
        msg = wfMsgGet(wgContentLanguage, key);
    }

    // Else, use fallback language
    if (msg == null && wgFallbackLanguage) {
        msg = wfMsgGet(wgFallbackLanguage, key);
    }

    // Else, use fallback text
    if (msg == null) {
        msg = "<" + key.toLowerCase() + ">";
    }

    // Replace positional placeholders (e.g. $1 or ${1})
    if (args.length > 1) {
        var re = /\$(?:([1-9]\d*)|\{([1-9]\d*)\})/g;

        var m;
        var toReplace = [];
        while (m = re.exec(msg)) {
            toReplace.push({
                'pos': re.lastIndex - m[0].length,
                'len': m[0].length,
                'arg': m[1] || m[2]
            });
        }

        var adjust = 0;
        for (var n in toReplace) {
            var replacement = args[toReplace[n].arg];
            if (replacement == null) continue;
            replacement = replacement.toString();

            toReplace[n].pos += adjust;

            msg = msg.substring(0, toReplace[n].pos)
                + replacement
                + msg.substring(toReplace[n].pos + toReplace[n].len);

            adjust += replacement.length - toReplace[n].len;
        }
    }

    return msg;
}

function wfMsg(key) {
    return wfMsgReal(key, false, arguments);
}

function wfMsgForContent(key) {
    return wfMsgReal(key, true, arguments);
}