Cyrillic to Latin Transliterator

Transliterates Cyrillic characters to Latin characters on any webpage.

目前為 2023-05-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Cyrillic to Latin Transliterator
// @description  Transliterates Cyrillic characters to Latin characters on any webpage.
// @author       udontkn0wme
// @version      1.4
// @match        *://*/*
// @grant        none
// @icon         https://opu.peklo.biz/p/23/05/13/1684010167-8264b.jpg
// @namespace https://greasyfork.org/users/905173
// ==/UserScript==

(function() {
    var map = {
    'А': 'A',
    'а': 'a',
    'Б': 'B',
    'б': 'b',
    'В': 'V',
    'в': 'v',
    'Г': 'G',
    'г': 'g',
    'Ґ': 'G̀',
    'ґ': 'g̀',
    'Д': 'D',
    'д': 'd',
    'Ѓ': 'Ǵ',
    'ѓ': 'ǵ',
    'Ђ': 'Đ',
    'ђ': 'đ',
    'Е': 'E',
    'е': 'e',
    'Ё': 'Ë',
    'ё': 'ë',
    'Є': 'Ê',
    'є': 'ê',
    'Ж': 'Ž',
    'ж': 'ž',
    'З': 'Z',
    'з': 'z',
    'Ѕ': 'Ẑ',
    'ѕ': 'ẑ',
    'И': 'I',
};

    function replaceText(node) {
        var value = node.nodeValue;
        var newValue = '';
        for (var i = 0; i < value.length; i++) {
            var char = value.charAt(i);
            newValue += char in map ? map[char] : char;
        }
        node.nodeValue = newValue;
    }

    function replaceCyrillic() {
        var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
        var node;
        while (node = walker.nextNode()) {
            replaceText(node);
        }
    }

    function createToggleButton() {
        var button = document.createElement('button');
        button.innerHTML = 'Transliterate Cyrillic (ISO 9)';
        button.style.position = 'fixed';
        button.style.bottom = '20px';
        button.style.right = '20px';
        button.onclick = toggleTransliteration;
        document.body.appendChild(button);
    }

    function toggleTransliteration() {
        isTransliterationEnabled = !isTransliterationEnabled;
        if (isTransliterationEnabled) {
            replaceCyrillic();
        } else {
            location.reload();
        }
    }

    var isTransliterationEnabled = false;
    var cyrillicRegex = /[\u0400-\u04FF]/;

    if (cyrillicRegex.test(document.body.innerHTML)) {
        createToggleButton();
    }
})();