Автозамена английских имён на русские на «Чесскоме»
Я освещаю шахматные турниры для русскоязычной аудитории. Даже с русским интерфейсом имена всё равно отображаются на английском, что мешает их правильно прочитать или произнести во время эфиров. Я написал скрипт, который решает эту проблему.
Что делать
- Установить расширение Tampermonkey.
- Зайти на сайт chess.com.
- В правом верхнем углу браузера нажать на значок Tampermonkey.
- Нажать Create a new script или «Создать новый скрипт».
- Откроется новое окно. Всё удалить.
- Вставить скрипт:
// ==UserScript==
// @name Chess.com Имена на Русском Языке
// @namespace http://tampermonkey.net/
// @version 1.5
// @description Автозамена английских имён на русские на chess.com с постоянным отслеживанием изменений интерфейса
// @author Anton Kim
// @match https://www.chess.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Массив для замены текстов
const replacements = {
"Magnus Carlsen": "Магнус Карлсен",
"Alireza Firouzja": "Алиреза Фирузджа",
"Maxime Vachier-Lagrave": "Максим Вашье-Лаграв",
"": "",
"": "",
"": "",
// Добавьте другие имена здесь
};
// Кэширование обработанных узлов для предотвращения повторной обработки
const processedNodes = new WeakSet();
// Функция для замены текста на странице
function replaceText(node) {
if (node.nodeType === 3 && !processedNodes.has(node)) { // Проверяем, текст ли это и был ли он уже обработан
let originalText = node.textContent;
let newText = originalText;
for (let [enName, ruName] of Object.entries(replacements)) {
if (originalText.includes(enName)) { // Оптимизация: выполняем замену только если строка содержит имя
newText = newText.replace(new RegExp(enName, 'g'), ruName);
}
}
// Заменяем текст только если были изменения
if (newText !== originalText) {
node.textContent = newText;
processedNodes.add(node); // Кэшируем этот узел
}
}
}
// Функция для обхода всех узлов страницы
function walk(node) {
let child, next;
switch (node.nodeType) {
case 1: // Элемент
case 9: // Документ
case 11: // Фрагмент
child = node.firstChild;
while (child) {
next = child.nextSibling;
walk(child);
child = next;
}
break;
case 3: // Текстовый узел
replaceText(node);
break;
}
}
// Постоянный MutationObserver для слежения за изменениями интерфейса
function observeMutations() {
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
mutation.addedNodes.forEach(node => {
if (node.nodeType === 1) { // Только элементы
walk(node); // Проверяем новые узлы
}
});
// Также проверяем изменения текста в существующих узлах
mutation.target.childNodes.forEach(node => {
if (node.nodeType === 3) { // Текстовые узлы
replaceText(node); // Обновляем текст при его изменении
}
});
});
});
// Наблюдаем за изменениями в body и всём поддереве
observer.observe(document.body, { childList: true, subtree: true, characterData: true });
}
// Запуск функции сразу на загрузке страницы и отслеживание изменений
walk(document.body);
observeMutations();
})();
- Чтобы добавить новое имя, впишите его в «Массив для замены текстов».
- Нажать Ctrl + S, чтобы сохранить скрипт. Или в меню File — Save.
- Зайти на любой турнир в chess.com и проверить изменения.
- Готово.


Результат до и после
Заключение
Этот скрипт прекрасен тем, что работает в любой части сайта. Это значит, что имена, которые вы прописали, будут меняться везде, где встретится совпадение.
P.S. Можно добавить хоть свой ник, и заменить его на своё имя. Будете играть под своим именем. Мелочь, а приятно :—)
Когда будут готовы новые скрипты?