diff --git a/languages/ru.json b/languages/ru.json
new file mode 100644
index 0000000..4c63ff6
--- /dev/null
+++ b/languages/ru.json
@@ -0,0 +1,328 @@
+{
+ "language": {
+ "display_name": "Русский (Russian)",
+ "select_language": "Выберите язык:",
+ "current_language": "Текущий язык: {language}",
+ "restart_required": "Изменения языка вступят в силу после перезапуска приложения.",
+ "english": "Английский",
+ "spanish": "Испанский",
+ "portuguese": "Португальский",
+ "russian": "Русский",
+ "help_text": "Выберите предпочитаемый язык для интерфейса.",
+ "restart_notice": "Изменение языка вступит в силу после перезапуска приложения."
+ },
+ "app": {
+ "title": "YTSage",
+ "version": "v{version}",
+ "ready": "Готово"
+ },
+ "formats": {
+ "show_formats": "Показать форматы:",
+ "video_format": "Видео формат:",
+ "audio_format": "Аудио формат:",
+ "no_formats": "Форматы недоступны",
+ "loading": "Загрузка форматов...",
+ "select": "Выбрать",
+ "quality": "Качество",
+ "extension": "Расширение",
+ "resolution": "Разрешение",
+ "file_size": "Размер файла",
+ "codec": "Кодек",
+ "audio": "Аудио",
+ "notes": "Заметки",
+ "will_merge_audio": "Объединит аудио",
+ "has_audio": "✓ Есть аудио",
+ "audio_only": "Только аудио",
+ "large_size": "Большой размер",
+ "medium_size": "Средний размер",
+ "standard_size": "Стандартный размер",
+ "compatible": "Совместимый",
+ "efficient": "Эффективный",
+ "high_quality": "Высокое качество",
+ "best_4k": "Лучшее (4K)",
+ "best_2k": "Лучшее (2K)",
+ "high_1080p": "Высокое (1080p)",
+ "high_720p": "Высокое (720p)",
+ "medium_480p": "Среднее (480p)",
+ "low_quality": "Низкое качество",
+ "best_audio": "Лучшее аудио",
+ "high_audio": "Высокое аудио",
+ "medium_audio": "Среднее аудио",
+ "low_audio": "Низкое аудио",
+ "audio_only_resolution": "Только аудио"
+ },
+ "buttons": {
+ "download": "Скачать",
+ "pause": "Пауза",
+ "resume": "Продолжить",
+ "cancel": "Отмена",
+ "browse": "Обзор",
+ "clear": "Очистить",
+ "ok": "OK",
+ "apply": "Применить",
+ "close": "Закрыть",
+ "run_command": "Выполнить команду",
+ "custom_command_help": "Помощь",
+ "about": "О программе",
+ "analyze": "Анализировать",
+ "paste_url": "Вставить URL",
+ "select_videos": "Выбрать видео...",
+ "video": "Видео",
+ "audio_only": "Только аудио",
+ "custom_options": "Пользовательские опции",
+ "trim_video": "Обрезать видео",
+ "download_settings": "Настройки загрузки",
+ "update": "Обновить yt-dlp",
+ "select_defaults": "Выбрать по умолчанию",
+ "select_all": "Выбрать всё",
+ "deselect_all": "Снять выделение"
+ },
+ "dialogs": {
+ "custom_options": "Пользовательские опции",
+ "settings": "Настройки",
+ "select_folder": "Выбрать папку загрузки",
+ "sponsorblock_categories": "Категории SponsorBlock",
+ "sponsorblock_description": "Выберите типы сегментов видео, которые будут автоматически удалены во время загрузки.\nSponsorBlock использует данные, отправленные сообществом, для идентификации этих сегментов.",
+ "select_subtitles": "Выбрать субтитры",
+ "filter_languages_placeholder": "Фильтр языков (например, en, ru)...",
+ "no_subtitles_available": "Субтитры недоступны",
+ "matching": "соответствующие"
+ },
+ "tabs": {
+ "cookies": "Войти через Cookie",
+ "custom_command": "Пользовательская команда",
+ "proxy": "Прокси",
+ "language": "Язык"
+ },
+ "cookies": {
+ "help_text": "Выберите способ предоставления cookie для входа в систему.\nЭто позволяет загружать приватные видео и аудио премиум качества.",
+ "cookie_source": "Источник Cookie",
+ "use_cookie_file": "Использовать файл cookie",
+ "extract_from_browser": "Извлечь из браузера",
+ "cookie_file": "Файл Cookie",
+ "cookie_file_placeholder": "Путь к файлу cookies.txt...",
+ "browser_selection": "Выбор браузера",
+ "browser_help": "Выберите браузер для извлечения cookie:",
+ "browser_label": "Браузер:",
+ "profile_label": "Профиль:",
+ "profile_placeholder": "по умолчанию",
+ "browser_extract_message": "Cookie браузера будут извлечены при применении",
+ "file_selected_message": "Файл cookie выбран - Нажмите OK для применения",
+ "select_file_title": "Выбрать файл Cookie",
+ "file_filter": "Файлы cookie (*.txt *.lwp)"
+ },
+ "custom_command": {
+ "help_text": "Введите пользовательскую команду yt-dlp ниже. Текущий URL будет добавлен автоматически.
Для полного списка опций и примеров использования, нажмите здесь для просмотра официальной документации yt-dlp.
Примечание: Путь загрузки и шаблон имени файла будут обработаны автоматически.",
+ "input_label": "Аргументы yt-dlp:",
+ "input_placeholder": "Введите аргументы yt-dlp здесь...\n\nнапример: --extract-audio --audio-format mp3",
+ "output_label": "Вывод команды:",
+ "output_placeholder": "Вывод команды появится здесь...",
+ "command_placeholder": "Введите пользовательскую команду yt-dlp...",
+ "command_help": "Доступные заполнители:\n{url} - URL видео\n{output} - Выходной каталог\n\nПример: --write-info-json --write-thumbnail",
+ "full_command": "🔧 Полная команда: {command}",
+ "command_success": "✅ Пользовательская команда выполнена успешно!",
+ "command_failed": "❌ Команда завершилась с кодом ошибки {code}",
+ "command_error": "❌ Ошибка выполнения пользовательской команды: {error}"
+ },
+ "proxy": {
+ "help_text": "Настройте параметры прокси для загрузки. Оставьте пустым для прямого подключения.",
+ "main_proxy": "Основной прокси",
+ "main_proxy_help": "Основной прокси-сервер для всех загрузок. Поддерживает протоколы HTTP/HTTPS и SOCKS5.",
+ "proxy_url_label": "URL прокси:",
+ "proxy_url_placeholder": "http://proxy:port или socks5://proxy:port",
+ "proxy_examples": "Примеры:\n• HTTP: http://proxy.example.com:8080\n• SOCKS5: socks5://proxy.example.com:1080",
+ "geo_proxy": "Прокси для обхода географических ограничений",
+ "geo_proxy_help": "Вторичный прокси специально для обхода географических ограничений.",
+ "geo_proxy_url_label": "URL прокси для обхода гео-ограничений:",
+ "geo_proxy_url_placeholder": "http://geo-proxy:port",
+ "clear_main_proxy": "Очистить основной прокси",
+ "clear_geo_proxy": "Очистить гео-прокси",
+ "proxy_url": "URL прокси",
+ "proxy_placeholder": "http://proxy:port или socks5://proxy:port",
+ "geo_bypass": "Прокси для обхода гео-ограничений",
+ "geo_bypass_placeholder": "http://proxy:port для обхода гео-блокировок",
+ "invalid_main_url": "Неверный формат URL основного прокси",
+ "invalid_geo_url": "Неверный формат URL гео-прокси",
+ "main_configured": "Основной прокси настроен",
+ "geo_configured": "Гео-прокси настроен"
+ },
+ "download": {
+ "preparing": "Подготовка загрузки...",
+ "please_enter_url": "Пожалуйста, введите URL сначала.",
+ "please_set_path": "Пожалуйста, установите путь загрузки сначала.",
+ "please_enter_url_and_path": "Пожалуйста, введите URL и установите путь загрузки.",
+ "please_select_format": "Пожалуйста, выберите формат сначала."
+ },
+ "update": {
+ "title": "Обновить yt-dlp",
+ "checking": "Проверка обновлений...",
+ "update_available": "Доступно обновление!\nТекущая версия: {current}\nПоследняя версия: {latest}",
+ "up_to_date": "yt-dlp актуален (версия {version})",
+ "could_not_determine": "Не удалось определить версии.",
+ "error_comparing": "Ошибка сравнения версий: {error}",
+ "update_available_failed": "Доступно обновление! (Сравнение не удалось)\nТекущая: {current}\nПоследняя: {latest}",
+ "updating": "Обновление...",
+ "initializing": "🚀 Инициализация процесса обновления...",
+ "checking_current": "🔍 Проверка текущей установки...",
+ "found_at": "📍 yt-dlp найден в: {path}",
+ "error_getting_path": "❌ Ошибка получения пути yt-dlp: {error}",
+ "updating_binary": "📦 Обновление бинарного файла yt-dlp, управляемого приложением...",
+ "updating_pip": "🐍 Обновление системного yt-dlp через pip...",
+ "update_failed": "❌ Не удалось обновить yt-dlp. Попробуйте еще раз или проверьте подключение к интернету.",
+ "binary_updated": "✅ Бинарный файл успешно обновлен!",
+ "update_failed_stderr": "❌ Обновление yt-dlp не удалось: {error}",
+ "update_timeout": "❌ Время ожидания обновления yt-dlp истекло.",
+ "unexpected_error": "❌ Неожиданная ошибка во время обновления: {error}",
+ "checking_pip": "🔍 Проверка текущей установки pip...",
+ "current_version": "📋 Текущая версия: {version}",
+ "not_found_pip": "⚠️ yt-dlp не найден через pip, попытка установки...",
+ "checking_latest": "🌐 Проверка последней версии...",
+ "failed_check_updates": "❌ Не удалось проверить обновления",
+ "latest_version": "🆕 Последняя версия: {version}",
+ "updating_from_to": "⬆️ Обновление с {current} до {latest}...",
+ "running_pip_install": "📦 Выполнение pip install --upgrade...",
+ "pip_completed": "✅ Обновление pip завершено успешно!",
+ "pip_failed": "❌ Обновление pip не удалось: {error}"
+ },
+ "about": {
+ "title": "О YTSage",
+ "version": "Версия {version}",
+ "description": "Современный загрузчик YouTube с чистым интерфейсом PySide6.",
+ "author": "Автор: {author}",
+ "github": "GitHub: {repo}",
+ "system_info": "Системная информация",
+ "loading": "🔄 Загрузка системной информации...",
+ "refresh": "🔄",
+ "refreshing": "🔄 Обновление...",
+ "refresh_failed": "Обновление не удалось",
+ "refresh_failed_message": "Не удалось обновить информацию о версии.",
+ "detected": "✓ Обнаружено",
+ "missing": "✗ Отсутствует",
+ "not_available": "Недоступно"
+ },
+ "time_range": {
+ "title": "Обрезать видео",
+ "time_range_group": "Временной диапазон",
+ "start_time": "Время начала (HH:MM:SS)",
+ "end_time": "Время окончания (HH:MM:SS)",
+ "start_placeholder": "00:00:00",
+ "end_placeholder": "00:00:00",
+ "start_time_placeholder": "Время начала (HH:MM:SS)",
+ "end_time_placeholder": "Время окончания (HH:MM:SS)",
+ "force_keyframes": "Принудительные ключевые кадры в точках обрезки",
+ "help_text": "Установите время начала и окончания для обрезки видео.\nОставьте пустым для загрузки полного видео.",
+ "invalid_format": "Неверный формат времени. Используйте формат HH:MM:SS.",
+ "start_after_end": "Время начала не может быть после времени окончания."
+ },
+ "settings": {
+ "title": "Настройки загрузки",
+ "download_path": "Путь загрузки",
+ "browse": "Обзор...",
+ "speed_limit": "Ограничение скорости",
+ "speed_limit_placeholder": "Нет",
+ "auto_update_ytdlp": "Автообновление yt-dlp",
+ "enable_auto_updates": "Включить автоматические обновления yt-dlp",
+ "update_frequency": "Частота обновления:",
+ "check_startup": "Проверять при каждом запуске (минимум 1 час между проверками)",
+ "check_daily": "Проверять ежедневно",
+ "check_weekly": "Проверять еженедельно",
+ "check_updates_now": "Проверить обновления сейчас",
+ "update_check_title": "Проверка обновлений",
+ "could_not_determine_version": "Не удалось определить текущую версию yt-dlp.",
+ "update_available_dialog": "Доступно обновление!\n\nТекущая: {current}\nПоследняя: {latest}\n\nИспользуйте кнопку 'Обновить yt-dlp' в главном окне для обновления.",
+ "up_to_date_dialog": "yt-dlp актуален!\n\nТекущая версия: {version}",
+ "error_checking_updates": "Ошибка проверки обновлений: {error}",
+ "settings_saved_title": "Настройки сохранены",
+ "settings_saved_message": "Настройки автообновления успешно сохранены!",
+ "error_title": "Ошибка",
+ "failed_save_settings": "Не удалось сохранить настройки автообновления.",
+ "error_saving_settings": "Ошибка сохранения настроек автообновления: {error}",
+ "auto_update_title": "Настройки автообновления",
+ "auto_update_header": "🔄 Настройки автообновления",
+ "auto_update_description": "Настройте автоматические обновления для yt-dlp, чтобы всегда иметь последние функции и исправления ошибок.",
+ "current_status": "Текущий статус",
+ "current_version_label": "Текущая версия yt-dlp: Проверка...",
+ "last_check_label": "Последняя проверка обновлений: Никогда",
+ "next_check_label": "Следующая проверка: Основана на настройках",
+ "manual_check_button": "🔍 Проверить обновления сейчас",
+ "update_frequency_group": "Частота обновления",
+ "save_settings": "Сохранить настройки",
+ "settings_saved_successfully": "✅ Настройки успешно сохранены!",
+ "error_saving": "❌ Ошибка сохранения настроек: {error}"
+ },
+ "main_ui": {
+ "url_placeholder": "Введите URL видео или плейлиста YouTube",
+ "merge_subtitles": "Объединить субтитры",
+ "save_thumbnail": "Сохранить миниатюру",
+ "save_description": "Сохранить описание",
+ "embed_chapters": "Встроить главы",
+ "subtitles_selected": "выбрано: {count}",
+ "all_selected": "Все выбраны",
+ "select_videos_all": "Выбрать видео... (Все выбраны)",
+ "please_enter_url": "Пожалуйста, введите URL сначала",
+ "cookie_file_selected_title": "Файл Cookie выбран",
+ "cookie_file_selected_message": "Файл cookie выбран: {path}",
+ "browser_cookies_selected_title": "Cookie браузера выбраны",
+ "browser_cookies_selected_message": "Cookie браузера будут извлечены из: {browser}",
+ "error_no_format_info": "Ошибка: Информация о формате недоступна.",
+ "error_extract_info": "Ошибка: Не удалось извлечь базовую информацию о видео. Проверьте вашу ссылку.",
+ "analyzing_preparing": "Анализ (0%)... Подготовка запроса",
+ "analyzing_extracting_basic": "Анализ (15%)... Извлечение базовой информации",
+ "analyzing_extracting_detailed": "Анализ (30%)... Извлечение подробной информации",
+ "analyzing_processing_video": "Анализ (45%)... Обработка данных видео",
+ "analyzing_processing_formats": "Анализ (60%)... Обработка форматов",
+ "analyzing_loading_thumbnail": "Анализ (75%)... Загрузка миниатюры",
+ "analyzing_processing_subtitles": "Анализ (85%)... Обработка субтитров",
+ "analyzing_updating_table": "Анализ (95%)... Обновление таблицы форматов",
+ "analysis_complete": "Анализ завершен!",
+ "analyzing_extracting_ytdlp": "Анализ (30%)... Извлечение информации с исполняемым файлом yt-dlp",
+ "analyzing_processing_data": "Анализ (60%)... Обработка данных",
+ "analyzing_processing_formats_ytdlp": "Анализ (75%)... Обработка форматов",
+ "analyzing_loading_thumbnail_ytdlp": "Анализ (85%)... Загрузка миниатюры",
+ "analyzing_processing_subtitles_ytdlp": "Анализ (90%)... Обработка субтитров",
+ "select_subtitles": "Выбрать субтитры...",
+ "sponsorblock_categories": "Категории SponsorBlock..."
+ },
+ "sponsorblock": {
+ "sponsor": "Спонсор",
+ "sponsor_desc": "Платная реклама, платные рефералы и прямая реклама",
+ "selfpromo": "Неоплачиваемая/Собственная реклама",
+ "selfpromo_desc": "Неоплачиваемая реклама собственного контента создателей",
+ "interaction": "Напоминание о взаимодействии",
+ "interaction_desc": "Просьба к зрителям поставить лайк, подписаться или подписаться в социальных сетях",
+ "intro": "Вступление",
+ "intro_desc": "Вступление к видео, которое можно пропустить",
+ "outro": "Концовка/Финальные карточки",
+ "outro_desc": "Титры или когда видео заканчивается",
+ "preview": "Предварительный просмотр/Краткое изложение",
+ "preview_desc": "Краткое изложение предыдущих видео или предварительный просмотр предстоящего",
+ "music_offtopic": "Немузыкальная секция",
+ "music_offtopic_desc": "Только для музыкальных видео. Отмечает немузыкальные секции",
+ "filler": "Отступление-заполнитель",
+ "filler_desc": "Касательные сцены, добавленные только для заполнения или юмора"
+ },
+ "video_info": {
+ "channel": "Канал",
+ "views": "Просмотры",
+ "likes": "Лайки",
+ "upload_date": "Дата загрузки",
+ "duration": "Продолжительность",
+ "unknown_channel": "Неизвестный канал",
+ "unknown_date": "Неизвестная дата",
+ "unknown_title": "Неизвестный заголовок"
+ },
+ "command": {
+ "running": "Выполняется...",
+ "run_command": "Выполнить команду"
+ },
+ "selection": {
+ "none_selected": "0 выбрано",
+ "one_selected": "1 категория выбрана",
+ "count_selected": "выбрано: {count}"
+ },
+ "status": {
+ "ready": "Готово",
+ "file_exists": "⚠️ Файл уже существует",
+ "cancelling": "Отмена загрузки..."
+ }
+}
\ No newline at end of file