Greasy Fork

Greasy Fork is available in English.

Русификатор интерфейса DeepSeek

Переводит на русский интерфейс сайта DeepSeek.

// ==UserScript==
// @name         Русификатор интерфейса DeepSeek
// @namespace    http://tampermonkey.net/
// @version      2.8
// @license      MIT
// @description  Переводит на русский интерфейс сайта DeepSeek.
// @author       MrVovchick
// @match        https://chat.deepseek.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Словарь переводов (заполните его своими переводами)
    const translations = {
        'How can I help you today?': 'Чем я могу вам помочь?',
        'New chat': 'Новый чат',
        'Search': 'Поиск',
        'Text extraction only.': 'Только извлечение текста',
        'Upload docs or images (Max 50, 100MB each)': 'Загрузите документы или изображения (Максимум 50, 100 МБ каждое)',
        'Day': 'День',
        'Days': 'Дней',
        'My Profile': 'Мой профиль',
        'Get App': 'Скачайте приложение',
        'New': 'Новое',
        'Log out': 'Выйти',
        'Contact us': 'Связаться с нами',
        'Language': 'Язык',
        'Theme': 'Тема',
        'System': 'Системный',
        'Profile': 'Профиль',
        'Name': 'Имя',
        'Email address': 'Адрес электронной почты',
        'Phone number': 'Номер телефона',
        'Settings': 'Настройки',
        'General': 'Общие',
        'Improve the model for everyone': 'Улучшить модель для всех',
        'Allow your content to be used to train our models and improve our services. We secure your data privacy.': 'Разрешите использовать ваш контент для обучения наших моделей и улучшения наших услуг. Мы обеспечиваем конфиденциальность ваших данных.',
        'Log out of all devices': 'Выйти из всех устройств',
        'Delete all chats': 'Удалить все чаты',
        'Delete all': 'Удалить все',
        'Delete account': 'Удалить аккаунт',
        'Delete': 'Удалить',
        'About': 'О сайте',
        'Terms of Use': 'Условия использования',
        'Privacy Policy': 'Политика конфиденциальности',
        'View': 'Обзор',
        'Light': 'Светлая',
        'Dark': 'Тёмная',
        'Close sidebar': 'Закрыть боковую панель',
        'Rename': 'Переименовать',
        'Message is empty': 'Сообщение пустое',
        'Open sidebar': 'Открыть боковую панель',
        'Scan to get DeepSeek App': 'Отсканируйте код',
        'NEW': 'НОВОЕ',
        'Think before responding to solve reasoning problems': 'Думает, прежде чем ответить, чтобы решить проблемы с рассуждениями',
        'Search the web when necessary': 'Поиск в интернете при необходимости',
        'AI-generated, for reference only': 'Создано ИИ, только для справки',
        'Hi, I\'m DeepSeek.': 'Привет, я DeepSeek.',
        'Today': 'Сегодня',
        'Monday': 'Понедельник',
        'Tuesday': 'Вторник',
        'Wednesday': 'Среда',
        'Thursday': 'Четверг',
        'Friday': 'Пятница',
        'Saturday': 'Суббота',
        'Sunday': 'Воскресенье',
        'Yesterday': 'Вчера',
        'Like': 'Лайк',
        'Dislike': 'Дизлайк',
        'Copy': 'Копировать',
        'Regenerate': 'Перегенерировать',
        '2 Days': '2 дня',
        '3 Days': '3 дня',
        '4 Days': '4 дня',
        '5 Days': '5 дней',
        '6 Days': '6 дней',
        '7 Days': '7 дней',
        '8 Days': '8 дней',
        '9 Days': '9 дней',
        '10 Days': '10 дней',
        'You have signed out of your account, please log in again.': 'Вы вышли из своей учетной записи, пожалуйста, войдите снова.',
        'Only login via email, Google, or +86 phone number login is supported in your region.': 'В вашем регионе поддерживается только вход по электронной почте, через Google или по номеру телефона +86.',
        'Only login via email, Google, or +7 phone number login is supported in your region.': 'В вашем регионе поддерживается только вход через электронную почту, Google или номер телефона +7.',
        'Phone number / email adress': 'Номер телефона / адрес электронной почты',
        'Passworld': 'Пароль',
        'passworld': 'Пароль',
        'By signing up or logging in, you consent to DeepSeek\'s': 'Зарегистрировавшись или войдя в систему, вы соглашаетесь с тем, что DeepSeek ',
        'and': ' и ',
        'Log in': 'Войти',
        'Forgot password?': 'Забыли пароль?',
        'Sign up': 'Зарегистрироваться',
        'OR': 'Или',
        'Log in with Google': 'Войти с аккаунтом Google',
        'Extract only text from images and files.': 'Извлечение только текста из изображений и файлов',
        'Message DeepSeek': 'Сообщение DeepSeek',
        'Pending...': 'Ожидается',
        'Parsing...': 'Анализ',
        'Delete chat?': 'Удалить чат?',
        'Are you sure you want to delete this chat?': 'Вы точно хотите удалить этот чат?',
        'Системный': 'Русский',
        'Cancel': 'Отменить',
        'If you confirm deletion, all chat history for this account will be permanently erased and cannot be recovered.': 'Если вы подтвердите удаление, вся история чата для этой учетной записи будет навсегда удалена и не сможет быть восстановлена.',
        'Are you sure you want to delete all chat history?': 'Вы уверены, что хотите удалить всю историю чатов?',
        'Confirm deletion': 'Подтвердить удаление',
        'Deletion will prevent you from accessing DeepSeek services, including DeepSeek Chat and Platform.': 'Удаление лишит вас доступа к сервисам DeepSeek, включая чат DeepSeek и платформу.',
        'If there is any unused balance in your account, deletion will be considered as forfeiting the balance. Frequent account deletions may be flagged as suspicious activity, resulting in restrictions or bans.': 'Если на вашем аккаунте есть неиспользованный баланс, удаление будет расцениваться как лишение баланса. Частое удаление аккаунта может быть отмечено как подозрительная активность, что приведет к ограничениям или запретам.',
        'If you have any questions, please contact us by email at [email protected].': 'Если у вас возникли вопросы, пожалуйста, свяжитесь с нами по электронной почте по адресу [email protected].',
        'Are you sure you want to delete your account?': 'Вы уверены, что хотите удалить аккаунт?',
        'To verify, please type DELETE MY ACCOUNT below:': 'Чтобы проверить, пожалуйста, введите DELETE MY ACCOUNT ниже:',
        'If you have any questions, please contact us by email at': 'Если у вас возникли вопросы, пожалуйста, свяжитесь с нами по электронной почте по адресу',
        'To verify, please type': 'Чтобы проверить, пожалуйста, введите ',
        'below:': ' ниже:',
        'RPD rate limit reached': 'Достигнут лимит скорости RPD',
        'Confirm delete my account': 'Подтвердите удаление',
        'Clicking "Confirm Logout" will sign you out of all devices and browsers, including this device. Confirm logout?': 'Нажав кнопку «Подтвердить выход», вы выйдете из всех устройств и браузеров, включая это устройство. Подтвердить выход?',
        'Confirm Logout': 'Подтвердить выход',
        'Edit message': 'Изменить сообщение',
        'Send': 'Отправить',
        'One more step before you proceed...': 'Еще один шаг, прежде чем продолжить...',
        'DeepSeek - Into the Unknown': 'DeepSeek',
        'Drop files here to add to chat (Text extraction only)': 'Бросайте файлы сюда, чтобы добавить их в чат (только извлечение текста)',
        'Max 50 files per chat at 100MB each. Text extraction only.': 'Не более 50 файлов в чате по 100 МБ каждый. Только извлечение текста.',
        'Please enter the phone number / email address.': 'Пожалуйста, введите номер телефона / адрес электронной почты.',
        'Please enter your password.': 'Пожалуйста, введите пароль.',
        'Stop': 'Стоп',
        'Continue': 'Продолжить',
        'No chat history': 'Нет истории чата',
        'Uploading files is unavailable for searching': 'Загрузка файлов недоступна для поиска',
        'Edit': 'Редактировать',
        // Добавьте сюда все тексты с сайта и их переводы
    };

    // Функция для перевода текста в узле
    function translateText(node) {
        // Если узел — текстовый
        if (node.nodeType === Node.TEXT_NODE) {
            const text = node.textContent.trim();
            if (translations[text]) {
                node.textContent = translations[text];
            }
        }
        // Если узел — элемент
        else if (node.nodeType === Node.ELEMENT_NODE) {
            // Перевод атрибута title
            if (node.hasAttribute('title')) {
                const title = node.getAttribute('title');
                if (translations[title]) {
                    node.setAttribute('title', translations[title]);
                }
            }
            // Перевод плейсхолдеров в input и textarea
            if (node.tagName === 'INPUT' || node.tagName === 'TEXTAREA') {
                if (node.hasAttribute('placeholder')) {
                    const placeholder = node.getAttribute('placeholder');
                    if (translations[placeholder]) {
                        node.setAttribute('placeholder', translations[placeholder]);
                    }
                }
            }
            // Рекурсивно переводим дочерние элементы
            node.childNodes.forEach(translateText);
        }
    }

    // Функция для перевода всего документа
    function translateDocument() {
        translateText(document.body);
    }

    // Наблюдатель за изменениями в DOM
    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            mutation.addedNodes.forEach(function(node) {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    translateText(node);
                }
            });
        });
    });

    // Настройка наблюдателя
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // Первоначальный перевод страницы
    translateDocument();
})();