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