diff --git a/languages/wp-queue-ru_RU.l10n.php b/languages/wp-queue-ru_RU.l10n.php index 3e656be..b8e0123 100644 --- a/languages/wp-queue-ru_RU.l10n.php +++ b/languages/wp-queue-ru_RU.l10n.php @@ -2,4 +2,4 @@ declare(strict_types=1); -return ['project-id-version' => 'WP Queue 1.0.0', 'report-msgid-bugs-to' => 'https://github.com/rwsite/wp-queue/issues', 'pot-creation-date' => '2025-12-06 01:35+0000', 'po-revision-date' => '2025-12-06 00:11+0000', 'last-translator' => '', 'language-team' => 'Русский', 'language' => 'ru_RU', 'mime-version' => '1.0', 'content-type' => 'text/plain; charset=UTF-8', 'content-transfer-encoding' => '8bit', 'plural-forms' => 'nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);', 'x-generator' => 'Loco https://localise.biz/', 'x-loco-version' => '2.8.0; wp-6.9; php-8.3.28', 'messages' => ['%d entries' => '%d записей', '%d tasks' => '%d задач', '(configured)' => '(настроено)', 'A background process (Worker) constantly checks the queue for new jobs.' => 'Фоновый процесс (Worker) постоянно проверяет очередь на наличие новых задач.', 'A list of all active queues with their size, status (idle/pending/running/paused), and control buttons (pause/resume, clear all tasks).' => 'Список всех активных очередей с их размером, статусом (бездействие/ожидание/выполнение/пауза) и кнопками управления (пауза/возобновление, очистить все задачи).', 'A plugin creates a "Job" (a task) and pushes it to the queue.' => 'Плагин создает "Задачу" (Job) и помещает ее в очередь.', 'A real cron job configured on your server (Linux) that calls WordPress every minute. This is reliable and precise. Ideally, you should disable default WP-Cron and use System Cron.' => 'Настоящая задача cron, настроенная на вашем сервере (Linux), которая вызывает WordPress каждую минуту. Это надежно и точно. В идеале, вы должны отключить стандартный WP-Cron и использовать системный Cron.', 'A separate table for events that are temporarily disabled.' => 'Отдельная таблица для временно отключенных событий.', 'A table of all available intervals (hourly, daily, etc.) with their duration.' => 'Таблица всех доступных интервалов (ежечасно, ежедневно и т.д.) с их продолжительностью.', 'About WP Queue' => 'О WP Queue', 'Action completed successfully' => 'Действие выполнено успешно', 'Action Scheduler' => 'Планировщик действий', 'Actions' => 'Действия', 'Active' => 'Активный', 'Add to wp-config.php:' => 'Добавить в wp-config.php:', 'ago (overdue)' => 'назад (просрочено)', 'Aleksei Tikhomirov' => 'Алексей Тихомиров', 'All' => 'Все', 'All queues' => 'Все очереди', 'All systems are healthy.' => 'Все системы работают исправно.', 'Alternate Cron' => 'Альтернативный Cron', 'An error occurred' => 'Произошла ошибка', 'Are you sure you want to clear this queue?' => 'Вы уверены, что хотите очистить эту очередь?', 'Attempts' => 'Попытки', 'Author Website' => 'Сайт автора', 'Available From' => 'Доступно с', 'Background job processing and WP-Cron management for WordPress. Schedule tasks, manage queues, and monitor cron events.' => 'Обработка фоновых задач и управление WP-Cron для WordPress. Планируйте задачи, управляйте очередями и отслеживайте cron-события.', 'Basic Usage' => 'Базовое использование', 'Button to delete old log entries to avoid cluttering the database.' => 'Кнопка для удаления старых записей журнала, чтобы избежать загромождения базы данных.', 'Buttons to show all entries, only completed, or only failed jobs.' => 'Кнопки для показа всех записей, только завершенных или только неудачных задач.', 'By default, WordPress executes all actions during the page load request. If a plugin needs to send 100 emails or sync 500 products with an external API, the user has to wait until it finishes. This leads to slow page loads or timeouts.' => 'По умолчанию WordPress выполняет все действия во время загрузки страницы. Если плагину нужно отправить 100 писем или синхронизировать 500 товаров с внешним API, пользователь должен дождаться завершения. Это приводит к медленной загрузке страниц или тайм-аутам.', 'By default, WP Queue stores jobs in the WordPress database (wp_options or custom tables). For high-performance sites, you can use Redis. Redis is an in-memory data store that is much faster than a SQL database for queue operations. It reduces load on your database and speeds up job processing.' => 'По умолчанию WP Queue хранит задачи в базе данных WordPress (wp_options или пользовательские таблицы). Для сайтов с высокой производительностью вы можете использовать Redis. Redis - это хранилище данных в памяти, которое намного быстрее, чем база данных SQL для операций с очередью. Это снижает нагрузку на вашу базу данных и ускоряет обработку задач.', 'Cancel' => 'Отмена', 'Cannot connect to Memcached at %s:%d - %s' => 'Не удалось подключиться к Memcached на %s:%d - %s', 'Cannot connect to Redis at %s:%d - %s' => 'Не удалось подключиться к Redis на %s:%d - %s', 'Check basic system requirements that affect queue stability.' => 'Проверьте базовые системные требования, влияющие на стабильность очереди.', 'Check driver settings.' => 'Проверьте настройки драйвера.', 'Check logs when encountering errors in background processes.' => 'Проверьте журналы при возникновении ошибок в фоновых процессах.', 'Check this tab when setting up your server or debugging queue issues.' => 'Проверьте эту вкладку при настройке сервера или отладке проблем с очередью.', 'Checking for disablement (DISABLE_WP_CRON), alternative cron, loopback requests.' => 'Проверка отключения (DISABLE_WP_CRON), альтернативного cron, обратных запросов.', 'Checking system requirements and environment for stable queue operation.' => 'Проверка системных требований и окружения для стабильной работы очереди.', 'Clear' => 'Очистить', 'Clear All' => 'Очистить все', 'Clear All Logs' => 'Очистить все журналы', 'Clear All Queues' => 'Очистить все очереди', 'Clear Logs' => 'Очистить журналы', 'Clear logs' => 'Очистить журналы', 'Clear old' => 'Очистить старые', 'Close' => 'Закрыть', 'Comparison of server time, WordPress, and GMT offset for diagnosing scheduling issues.' => 'Сравнение серверного времени, WordPress и смещения GMT для диагностики проблем с планированием.', 'Completed' => 'Завершено', 'Component Status' => 'Статус компонента', 'Configure' => 'Настроить', 'Configure automatic retries on errors:' => 'Настроить автоматические повторные попытки при ошибках:', 'Configure Memcached' => 'Настроить Memcached', 'Configure Redis' => 'Настроить Redis', 'Configure system cron' => 'Настроить системный cron', 'Connected to Memcached at %s:%d' => 'Подключено к Memcached на %s:%d', 'Connected to Redis at %s:%d' => 'Подключено к Redis на %s:%d', 'Create a job class and dispatch it to the queue:' => 'Создайте класс задачи и отправьте его в очередь:', 'Critical for understanding why tasks are not running on time.' => 'Критически важно для понимания причин, по которым задачи не выполняются вовремя.', 'Cron event paused' => 'Cron-событие приостановлено', 'Cron event resumed' => 'Cron-событие возобновлено', 'Cron event updated' => 'Cron-событие обновлено', 'Cron Events' => 'Cron-события', 'Current driver:' => 'Текущий драйвер:', 'Current Memory Usage' => 'Текущее использование памяти', 'Custom driver' => 'Пользовательский драйвер', 'Dashboard' => 'Панель управления', 'Dashboard – quick overview of queues, number of jobs and recent activity.' => 'Панель управления – быстрый обзор очередей, количества задач и недавней активности.', 'Delayed Jobs' => 'Отложенные задачи', 'Delete' => 'Удалить', 'Delete all' => 'Удалить все', 'Deletes all job execution logs' => 'Удаляет все журналы выполнения задач', 'Deletes all jobs from all queues' => 'Удаляет все задачи из всех очередей', 'Deletes logs older than 7 days' => 'Удаляет журналы старше 7 дней', 'Description' => 'Описание', 'Detailed description of the panel tabs' => 'Подробное описание вкладок панели', 'Details' => 'Детали', 'Developers can dispatch their own jobs to the queue, choose drivers (Database, Sync, Redis), configure retries and schedules. See the documentation and examples on GitHub for integration details.' => 'Разработчики могут отправлять свои задачи в очередь, выбирать драйверы (Database, Sync, Redis), настраивать повторные попытки и расписания. См. документацию и примеры на GitHub для деталей интеграции.', 'DISABLE_WP_CRON is set to true. Background tasks will not run automatically.' => 'DISABLE_WP_CRON установлен в true. Фоновые задачи не будут выполняться автоматически.', 'Disabled' => 'Отключено', 'Dispatch' => 'Отправить', 'Display' => 'Отобразить', 'Displays a table of scheduled recurring tasks (PHP classes) registered in WP Queue: job class, execution interval, queue assignment, and next run time. Allows you to run any task manually.' => 'Отображает таблицу запланированных повторяющихся задач (классы PHP), зарегистрированных в WP Queue: класс задачи, интервал выполнения, назначение очереди и время следующего запуска. Позволяет запустить любую задачу вручную.', 'Displays all registered PHP job classes with their configuration.' => 'Отображает все зарегистрированные классы задач PHP с их конфигурацией.', 'Displays environment information (PHP and WordPress versions, memory limits, execution time, timezone), WP-Cron status (disabled, alternative cron, loopback checks). If Action Scheduler is installed - its statistics. Server and WordPress time.' => 'Отображает информацию об окружении (версии PHP и WordPress, лимиты памяти, время выполнения, часовой пояс), статус WP-Cron (отключен, альтернативный cron, проверки обратной связи). Если установлен Action Scheduler - его статистика. Серверное и время WordPress.', 'Displays the last 200 entries by default or all completed/failed.' => 'Отображает последние 200 записей по умолчанию или все завершенные/неудачные.', 'Displays the total number of tasks in different statuses (pending, running, completed, failed).' => 'Отображает общее количество задач в разных статусах (ожидание, выполнение, завершено, неудача).', 'Displays when the job should run next or marks overdue jobs.' => 'Отображает, когда задача должна выполняться следующей, или отмечает просроченные задачи.', 'Distribute jobs across different queues:' => 'Распределите задачи по разным очередям:', 'Documentation on GitHub' => 'Документация на GitHub', 'Driver' => 'Драйвер', 'Driver "%s" is configured in wp-config.php, but not available. Falling back to "%s".' => 'Драйвер "%s" настроен в wp-config.php, но недоступен. Переход на "%s".', 'Driver:' => 'Драйвер:', 'Drivers' => 'Драйверы', 'Edit' => 'Редактировать', 'Edit Cron Event' => 'Редактировать Cron-событие', 'Edit Schedule' => 'Редактировать расписание', 'Enabled' => 'Включено', 'Environment' => 'Окружение', 'Error' => 'Ошибка', 'Error message' => 'Сообщение об ошибке', 'Errors' => 'Ошибки', 'Event actions' => 'Действия событий', 'Event hook, next run time, schedule (single/hourly/daily), source, arguments.' => 'Хук события, время следующего запуска, расписание (однократно/ежечасно/ежедневно), источник, аргументы.', 'Event statistics' => 'Статистика событий', 'Event table' => 'Таблица событий', 'events' => 'события', 'Events by Source' => 'События по источникам', 'Every %d Minutes' => 'Каждые %d минут', 'Execution time, status (completed/failed/retrying), job class, queue, error message.' => 'Время выполнения, статус (завершено/неудача/повторная попытка), класс задачи, очередь, сообщение об ошибке.', 'Failed' => 'Сбои и неудачи', 'Failed Actions' => 'Неудачные действия', 'Failed to pause event' => 'Не удалось приостановить событие', 'Failed to resume event' => 'Не удалось возобновить событие', 'Failed to update event' => 'Не удалось обновить событие', 'For developers' => 'Для разработчиков', 'For more information:' => 'Для получения дополнительной информации:', 'For Redis/Memcached to work, you need the PHP extension installed and a server available. If not, the system will automatically use the "database" driver.' => 'Для работы Redis/Memcached необходимо установить PHP-расширение и иметь доступный сервер. В противном случае система автоматически использует драйвер "база данных".', 'For site administrators' => 'Для администраторов сайтов', 'Forces processing of all queues' => 'Принудительно обрабатывает все очереди', 'from now' => 'сейчас', 'Full documentation and code examples are available on GitHub: %s.' => 'Полная документация и примеры кода доступны на GitHub: %s.', 'GitHub Repository' => 'Репозиторий GitHub', 'GMT Offset' => 'Смещение GMT', 'Help' => 'Помощь', 'History' => 'История', 'History of all job executions for diagnostics and debugging.' => 'История всех выполнений задач для диагностики и отладки.', 'Hook' => 'Хук', 'How Queues Work' => 'Как работают очереди', 'How to change the driver?' => 'Как изменить драйвер?', 'https://github.com/rwsite/wp-queue' => 'https://github.com/rwsite/wp-queue', 'https://rwsite.ru' => 'https://rwsite.ru', 'ID' => 'ID', 'Idle' => 'Бездействие', 'If installed, displays version and statistics (pending/running/failed actions).' => 'Если установлен, отображает версию и статистику (ожидание/выполнение/неудачные действия).', 'If you installed WP Queue because another plugin requires it, you usually do not need to configure anything here. Use these tabs mainly for monitoring and troubleshooting.' => 'Если вы установили WP Queue, потому что другой плагин требует его, обычно вам не нужно ничего настраивать здесь. Используйте эти вкладки в основном для мониторинга и устранения неполадок.', 'Important:' => 'Важно:', 'In Queue' => 'В очереди', 'Inspect and manage WP-Cron events for WP Queue and other plugins.' => 'Проверяйте и управляйте WP-Cron событиями для WP Queue и других плагинов.', 'Install: pecl install memcached' => 'Установка: pecl install memcached', 'Install: pecl install redis' => 'Установка: pecl install redis', 'Interval' => 'Интервал', 'Job' => 'Задача', 'Job Class' => 'Класс задачи', 'Job class, execution interval (e.g., "hourly", "daily"), queue assignment, next run time.' => 'Класс задачи, интервал выполнения (например, "ежечасно", "ежедневно"), назначение очереди, время следующего запуска.', 'Job Details' => 'Детали задачи', 'Job information' => 'Информация о задаче', 'Job list' => 'Список задач', 'jobs' => 'задачи', 'Jobs in Queue' => 'Задачи в очереди', 'Log table' => 'Таблица журнала', 'Logs' => 'Журналы', 'Logs – history of completed and failed jobs that helps to diagnose problems.' => 'Журналы – история завершенных и неудачных задач, которые помогают диагностировать проблемы.', 'Loopback' => 'Обратная связь', 'Loopback issue: %s' => 'Проблема обратной связи: %s', 'Loopback Request' => 'Запрос обратной связи', 'Loopback request successful' => 'Запрос обратной связи выполнен успешно', 'Manage queues from command line:' => 'Управление очередями из командной строки:', 'Management of scheduled recurring tasks.' => 'Управление запланированными повторяющимися задачами.', 'Management of WordPress system timers that trigger background processes.' => 'Управление системными таймерами WordPress, которые запускают фоновые процессы.', 'Manual run' => 'Ручной запуск', 'Max Execution Time' => 'Максимальное время выполнения', 'Memory Limit' => 'Лимит памяти', 'Memory usage is above 80%.' => 'Использование памяти выше 80%.', 'Message' => 'Сообщение', 'Monitor which background jobs are queued and running right now.' => 'Отслеживайте, какие фоновые задачи находятся в очереди и выполняются прямо сейчас.', 'More documentation' => 'Дополнительная документация', 'Name' => 'Имя', 'Named Queues' => 'Именованные очереди', 'Next Run' => 'Следующий запуск', 'Next run status' => 'Статус следующего запуска', 'No activity' => 'Нет активности', 'No cron events found.' => 'Cron-события не найдены.', 'No errors' => 'Нет ошибок', 'No extension' => 'Нет расширения', 'No logs found' => 'Журналы не найдены', 'No paused events' => 'Нет приостановленных событий', 'No scheduled events' => 'Нет запланированных событий', 'No scheduled jobs found.' => 'Запланированные задачи не найдены.', 'No server' => 'Нет сервера', 'Notifications of critical issues (low memory, disabled WP-Cron).' => 'Уведомления о критических проблемах (низкая память, отключенный WP-Cron).', 'Now' => 'Сейчас', 'Number of entries' => 'Количество записей', 'OK' => 'ОК', 'One-time' => 'Однократно', 'Overdue' => 'Просрочено', 'Overview' => 'Обзор', 'Pause' => 'Приостановить', 'Pause this queue?' => 'Приостановить эту очередь?', 'Paused' => 'Приостановлено', 'Paused At' => 'Приостановлено в', 'Paused Events' => 'Приостановленные события', 'Paused events' => 'Приостановленные события', 'Paused Since' => 'Приостановлено с', 'Pending' => 'Ожидание', 'Pending Actions' => 'Ожидающие действия', 'PHP' => 'PHP', 'PHP and WordPress versions, memory limits (current usage), maximum execution time, timezone.' => 'Версии PHP и WordPress, лимиты памяти (текущее использование), максимальное время выполнения, часовой пояс.', 'PHP extension "memcached" is not installed' => 'PHP-расширение "memcached" не установлено', 'PHP extension "redis" (phpredis) is not installed' => 'PHP-расширение "redis" (phpredis) не установлено', 'PHP max_execution_time is less than 30 seconds.' => 'PHP max_execution_time меньше 30 секунд.', 'PHP Version' => 'Версия PHP', 'Plugins' => 'Плагины', 'Process' => 'Обработать', 'Process Now' => 'Обработать сейчас', 'Process Queues' => 'Обработать очереди', 'Processing' => 'Обработка', 'Queue' => 'Очередь', 'Queue Driver' => 'Драйвер очереди', 'Queue is empty' => 'Очередь пуста', 'Queue statistics' => 'Статистика очереди', 'Queue table' => 'Таблица очереди', 'Queue: %s' => 'Очередь: %s', 'Queues' => 'Очереди', 'Quick Start' => 'Быстрый старт', 'Quickly see if any jobs are failing and view recent log entries.' => 'Быстро проверьте, не завершаются ли задачи неудачей, и просмотрите недавние записи журнала.', 'Ready' => 'Готово', 'Recent Activity' => 'Недавняя активность', 'Recent activity' => 'Недавняя активность', 'Redis Support' => 'Поддержка Redis', 'Registered Schedules' => 'Зарегистрированные расписания', 'Registered schedules' => 'Зарегистрированные расписания', 'Report an Issue' => 'Сообщить о проблеме', 'Report Issues' => 'Сообщить о проблемах', 'Resume' => 'Возобновить', 'Retry Attempts' => 'Попытки повтора', 'Run' => 'Запустить', 'Run Now' => 'Запустить сейчас', 'Run now, edit schedule, pause, delete. Modal window for changing interval.' => 'Запустить сейчас, редактировать расписание, приостановить, удалить. Модальное окно для изменения интервала.', 'Run tasks on schedule:' => 'Выполнять задачи по расписанию:', 'Running' => 'Выполняется', 'Running Actions' => 'Выполняющиеся действия', 'Save Changes' => 'Сохранить изменения', 'Schedule' => 'Расписание', 'Schedule a job to run after a specific time:' => 'Запланировать выполнение задачи после определенного времени:', 'Scheduled' => 'Запланировано', 'Scheduled Jobs' => 'Запланированные задачи', 'Scheduled Jobs – list of recurring background jobs added by your theme or plugins.' => 'Запланированные задачи – список повторяющихся фоновых задач, добавленных вашей темой или плагинами.', 'Scheduler' => 'Планировщик', 'Server Time' => 'Серверное время', 'Server time' => 'Серверное время', 'Single' => 'Одиночный', 'Single (run once)' => 'Одиночный (выполнить один раз)', 'Source' => 'Источник', 'Status' => 'Статус', 'Status filters' => 'Фильтры статуса', 'Storage' => 'Хранилище', 'Synchronous execution (no queue)' => 'Синхронное выполнение (без очереди)', 'System' => 'Система', 'System Cron (Recommended)' => 'Системный Cron (Рекомендуется)', 'System health' => 'Системное здоровье', 'System Issues Detected:' => 'Обнаружены системные проблемы:', 'System Status' => 'Системный статус', 'System – checks PHP version, WP-Cron status and other important settings.' => 'Система – проверяет версию PHP, статус WP-Cron и другие важные настройки.', 'The "Run Now" button allows you to run any job immediately, without waiting for the schedule.' => 'Кнопка "Запустить сейчас" позволяет запустить любую задачу немедленно, без ожидания расписания.', 'The job is saved in the database (or Redis) waiting to be picked up.' => 'Задача сохраняется в базе данных (или Redis) в ожидании обработки.', 'The last 10 log entries for quick tracking of queue activity.' => 'Последние 10 записей журнала для быстрого отслеживания активности очереди.', 'The main tab for monitoring queue status in real-time.' => 'Основная вкладка для мониторинга статуса очереди в реальном времени.', 'The plugin itself does not add new features to the frontend. It provides a reliable queue that other plugins or your custom code can use for background work.' => 'Сам плагин не добавляет новые функции на фронтенд. Он предоставляет надежную очередь, которую другие плагины или ваш кастомный код могут использовать для фоновой работы.', 'The worker picks up the job and executes it. If it succeeds, it is marked as "Completed". If it fails, it can be retried.' => 'Рабочий процесс забирает задачу и выполняет ее. В случае успеха она отмечается как "Завершено". В случае неудачи ее можно повторить.', 'This section is under development.' => 'Этот раздел находится в разработке.', 'Time' => 'Время', 'Timeout' => 'Тайм-аут', 'Timezone' => 'Часовой пояс', 'To add your own background jobs, use the WP Queue PHP API from your plugin or theme. You can dispatch jobs to different queues, set delays and retries. Full code examples are available in the README on GitHub.' => 'Чтобы добавить свои фоновые задачи, используйте PHP API WP Queue из вашего плагина или темы. Вы можете отправлять задачи в разные очереди, устанавливать задержки и повторные попытки. Полные примеры кода доступны в README на GitHub.', 'to get a list of available commands.' => 'чтобы получить список доступных команд.', 'To process the queue, WordPress needs a trigger. There are two ways to do this:' => 'Для обработки очереди WordPress нужен триггер. Есть два способа это сделать:', 'Tools' => 'Инструменты', 'Total' => 'Всего', 'Total errors' => 'Всего ошибок', 'Total Events' => 'Всего событий', 'Total Jobs' => 'Всего задач', 'Total number of events, overdue, grouped by source (WordPress, WooCommerce, WP Queue, plugins).' => 'Общее количество событий, просроченных, сгруппированных по источнику (WordPress, WooCommerce, WP Queue, плагины).', 'Unavailable' => 'Недоступно', 'Unexpected response code: %d' => 'Неожиданный код ответа: %d', 'Unknown' => 'Неизвестно', 'Unknown driver' => 'Неизвестный драйвер', 'Upcoming Events' => 'Предстоящие события', 'Usage' => 'Использование', 'Use system cron' => 'Использовать системный cron', 'Use this tab for quick checks of queue performance and identifying stuck processes.' => 'Используйте эту вкладку для быстрой проверки производительности очереди и выявления зависших процессов.', 'Used' => 'Использовано', 'Useful for testing jobs and forcing synchronizations.' => 'Полезно для тестирования задач и принудительных синхронизаций.', 'Useful Links' => 'Полезные ссылки', 'Uses wp_options table' => 'Использует таблицу wp_options', 'Version' => 'Версия', 'Versions' => 'Версии', 'Warning' => 'Предупреждение', 'What you can use it for' => 'Для чего это можно использовать', 'Why is it needed?' => 'Зачем это нужно?', 'WooCommerce' => 'WooCommerce', 'WordPress' => 'WordPress', 'WordPress checks for scheduled tasks on every page load. This works out of the box but has downsides: on low-traffic sites, tasks might not run on time; on high-traffic sites, it can cause performance issues. It is "fake" cron.' => 'WordPress проверяет запланированные задачи при каждой загрузке страницы. Это работает из коробки, но имеет недостатки: на сайтах с низким трафиком задачи могут не выполняться вовремя; на сайтах с высоким трафиком это может вызывать проблемы с производительностью. Это "поддельный" cron.', 'WordPress Time' => 'Время WordPress', 'WordPress Version' => 'Версия WordPress', 'Worker' => 'Рабочий процесс', 'WP Queue' => 'WP Queue', 'WP Queue allows executing tasks asynchronously in the background without blocking the main WordPress execution flow.' => 'WP Queue позволяет выполнять задачи асинхронно в фоне без блокировки основного потока выполнения WordPress.', 'WP Queue helps your site run heavy or regular tasks in the background (emails, synchronizations, cleanups) so that pages load faster for visitors.' => 'WP Queue помогает вашему сайту выполнять тяжелые или регулярные задачи в фоновом режиме (отправка писем, синхронизации, очистка), чтобы страницы загружались быстрее для посетителей.', 'WP Queue is a robust background processing library for WordPress. It allows you to offload time-consuming tasks (like sending emails, syncing data, or generating reports) to be processed asynchronously, ensuring your site remains fast and responsive for visitors.' => 'WP Queue - это надежная библиотека фоновой обработки для WordPress. Она позволяет вам выгружать трудоемкие задачи (например, отправку писем, синхронизацию данных или генерацию отчетов) для асинхронной обработки, обеспечивая быструю и отзывчивую работу сайта для посетителей.', 'WP Queue solves this by pushing these tasks to a "Queue" and processing them later in the background. The user gets an instant response, and the heavy work happens behind the scenes.' => 'WP Queue решает эту проблему, помещая эти задачи в "Очередь" и обрабатывая их позже в фоновом режиме. Пользователь получает мгновенный ответ, а тяжелая работа происходит за кулисами.', 'WP Queue — Queue System for WordPress' => 'WP Queue — Система очередей для WordPress', 'WP-CLI' => 'WP-CLI', 'WP-CLI Commands' => 'Команды WP-CLI', 'WP-CLI команды' => 'Команды WP-CLI', 'WP-Cron' => 'WP-Cron', 'WP-Cron (Default)' => 'WP-Cron (По умолчанию)', 'WP-Cron Disabled' => 'WP-Cron отключен', 'WP-Cron is disabled. Background tasks may not run automatically.' => 'WP-Cron отключен. Фоновые задачи могут не выполняться автоматически.', 'WP-Cron Status' => 'Статус WP-Cron', 'WP-Cron status' => 'Статус WP-Cron', 'WP-Cron vs System Cron' => 'WP-Cron против системного Cron', 'WP-Cron – list of cron events with the ability to run, pause or delete them.' => 'WP-Cron – список cron-событий с возможностью запуска, приостановки или удаления.', 'WP-Cron:' => 'WP-Cron:', '⚠️ Warning:' => '⚠️ Предупреждение:']]; +return ['project-id-version' => 'WP Queue 1.0.0', 'report-msgid-bugs-to' => 'https://github.com/rwsite/wp-queue/issues', 'pot-creation-date' => '2025-12-06 01:35+0000', 'po-revision-date' => '2026-07-25 21:14+0000', 'last-translator' => '', 'language-team' => 'Русский', 'language' => 'ru_RU', 'mime-version' => '1.0', 'content-type' => 'text/plain; charset=UTF-8', 'content-transfer-encoding' => '8bit', 'plural-forms' => 'nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);', 'x-generator' => 'Loco https://localise.biz/', 'x-loco-version' => '2.8.0; wp-6.9; php-8.3.28', 'messages' => ['%d entries' => '%d записей', '%d tasks' => '%d задач', '(configured)' => '(настроено)', '--memory limits the PHP memory for the worker process. Adjust the value to your needs.' => '--memory ограничивает память PHP для процесса воркера. Подберите значение под свои задачи.', '1. Enable daemon runtime mode' => '1. Включите режим демона', '2. Run the worker' => '2. Запустите воркер', '3. Keep it running' => '3. Держите процесс запущенным', '4. Check status' => '4. Проверьте статус', 'A background process (Worker) constantly checks the queue for new jobs.' => 'Фоновый процесс (Worker) постоянно проверяет очередь на наличие новых заданий.', 'A daemon worker is expected to process queues. WP-Cron and loopback are disabled.' => 'Для обработки очередей ожидается демон-воркер. WP-Cron и loopback отключены.', 'A list of all active queues with their size, status (idle/pending/running/paused), and control buttons (pause/resume, clear all tasks).' => 'Список всех активных очередей с указанием их размера, статуса (простой/ожидание/выполнение/приостановка) и кнопок управления (пауза/возобновление, очистить все задачи).', 'A plugin creates a "Job" (a task) and pushes it to the queue.' => 'Плагин создает «Задание» (задачу) и помещает его в очередь.', 'A real cron job configured on your server (Linux) that calls WordPress every minute. This is reliable and precise. Ideally, you should disable default WP-Cron and use System Cron.' => 'На вашем сервере (Linux) должна быть настроена настоящая задача cron, которая будет запускать WordPress каждую минуту. Это надежно и точно. В идеале следует отключить стандартный WP-Cron и использовать системный Cron.', 'A separate table for events that are temporarily disabled.' => 'Отдельная таблица для событий, которые временно отключены.', 'A table of all available intervals (hourly, daily, etc.) with their duration.' => 'Таблица со всеми доступными интервалами (почасовыми, суточным и т. д.) и их продолжительностью.', 'About WP Queue' => 'О WP Queue', 'Action completed successfully' => 'Действие успешно завершено.', 'Action Scheduler' => 'Планировщик действий', 'Actions' => 'Действия', 'Active' => 'Активный', 'Add this to wp-config.php:' => 'Добавьте в wp-config.php:', 'Add to wp-config.php:' => 'Добавьте в файл wp-config.php:', 'ago (overdue)' => 'давно (просрочено)', 'Aleksei Tikhomirov' => 'Алексей Тихомиров', 'All' => 'Все', 'All queues' => 'Все очереди', 'All systems are healthy.' => 'Все системы работают исправно.', 'Alternate Cron' => 'Альтернативный Cron', 'An error occurred' => 'Произошла ошибка.', 'Are you sure you want to clear this queue?' => 'Вы уверены, что хотите очистить эту очередь?', 'Attempts' => 'Попытки', 'Author Website' => 'Веб-сайт автора', 'Available From' => 'Доступно с', 'Background job processing and WP-Cron management for WordPress. Schedule tasks, manage queues, and monitor cron events.' => 'Обработка фоновых задач и управление WP-Cron для WordPress. Планируйте задачи, управляйте очередями и отслеживайте cron-события.', 'Basic Usage' => 'Основные правила использования', 'Button to delete old log entries to avoid cluttering the database.' => 'Кнопка для удаления старых записей журнала во избежание засорения базы данных.', 'Buttons to show all entries, only completed, or only failed jobs.' => 'Кнопки для отображения всех записей, только завершенных или только неудачно завершенных заданий.', 'By default, WordPress executes all actions during the page load request. If a plugin needs to send 100 emails or sync 500 products with an external API, the user has to wait until it finishes. This leads to slow page loads or timeouts.' => 'По умолчанию WordPress выполняет все действия во время запроса на загрузку страницы. Если плагину необходимо отправить 100 электронных писем или синхронизировать 500 товаров с внешним API, пользователю приходится ждать завершения процесса. Это приводит к медленной загрузке страниц или таймаутам.', 'By default, WP Queue stores jobs in the WordPress database (wp_options or custom tables). For high-performance sites, you can use Redis. Redis is an in-memory data store that is much faster than a SQL database for queue operations. It reduces load on your database and speeds up job processing.' => 'По умолчанию WP Queue хранит задания в базе данных WordPress (в папке wp_options или в пользовательских таблицах). Для высокопроизводительных сайтов можно использовать Redis. Redis — это хранилище данных в оперативной памяти, которое намного быстрее, чем база данных SQL, при работе с очередями. Оно снижает нагрузку на базу данных и ускоряет обработку заданий.', 'Cancel' => 'Отмена', 'Cannot connect to Memcached at %s:%d - %s' => 'Не удалось подключиться к Memcached на %s:%d - %s', 'Cannot connect to Redis at %s:%d - %s' => 'Не удалось подключиться к Redis на %s:%d - %s', 'Check basic system requirements that affect queue stability.' => 'Проверьте основные системные требования, влияющие на стабильность очереди.', 'Check driver settings.' => 'Проверьте настройки драйвера.', 'Check logs when encountering errors in background processes.' => 'При обнаружении ошибок в фоновых процессах проверяйте журналы.', 'Check this tab when setting up your server or debugging queue issues.' => 'Проверьте эту вкладку при настройке сервера или отладке проблем с очередями.', 'Checking for disablement (DISABLE_WP_CRON), alternative cron, loopback requests.' => 'Проверка на отключение (DISABLE_WP_CRON), альтернативный cron, запросы обратной связи.', 'Checking system requirements and environment for stable queue operation.' => 'Проверка системных требований и среды для обеспечения стабильной работы очереди.', 'Clear' => 'Очистить', 'Clear All' => 'Очистить все', 'Clear All Logs' => 'Очистить все журналы', 'Clear All Queues' => 'Очистить все очереди', 'Clear Logs' => 'Очистить журналы', 'Clear logs' => 'Очистить журналы', 'Clear old' => 'Удалить старые', 'Close' => 'Закрыть', 'Comparison of server time, WordPress, and GMT offset for diagnosing scheduling issues.' => 'Сравнение серверного времени, времени WordPress и смещения GMT для диагностики проблем с планированием.', 'Completed' => 'Завершенные', 'Component Status' => 'Состояние компонента', 'Configure' => 'Настройка', 'Configure automatic retries on errors:' => 'Настройте автоматическое повторение попыток при возникновении ошибок:', 'Configure Memcached' => 'Настройка Memcached', 'Configure Redis' => 'Настройка Redis', 'Configure system cron' => 'Настройте системный cron.', 'Connected to Memcached at %s:%d' => 'Подключено к Memcached на %s:%d', 'Connected to Redis at %s:%d (phpredis)' => 'Подключено к Redis по адресу %s:%d (phpredis)', 'Connected to Redis at %s:%d (Predis)' => 'Подключено к Redis по адресу %s:%d (Predis)', 'Connected to Redis at %s:%d (via redis-cache plugin)' => 'Подключено к Redis по адресу %s:%d (через плагин redis-cache)', 'Create a job class and dispatch it to the queue:' => 'Создайте класс задания и отправьте его в очередь:', 'Critical for understanding why tasks are not running on time.' => 'Это крайне важно для понимания причин, по которым задачи не выполняются в срок.', 'Cron event paused' => 'Cron-событие приостановлено', 'Cron event resumed' => 'Cron-событие возобновлено', 'Cron event updated' => 'Cron-событие обновлено', 'Cron Events' => 'События Cron', 'Current Memory Usage' => 'Текущее использование памяти', 'Current storage backend:' => 'Текущая система хранения данных:', 'Custom driver' => 'Пользовательский драйвер', 'Daemon process' => 'Демон-процесс', 'Daemon worker' => 'Демон-воркер', 'Dashboard' => 'Панель управления', 'Dashboard – quick overview of queues, number of jobs and recent activity.' => 'Панель управления – краткий обзор очередей, количества заданий и недавней активности.', 'Delayed Jobs' => 'Задержка с выполнением заданий', 'Delete' => 'Удалить', 'Delete all' => 'Удалить все', 'Deletes all job execution logs' => 'Удаляет все журналы выполнения заданий.', 'Deletes all jobs from all queues' => 'Удаляет все задания из всех очередей.', 'Deletes logs older than 7 days' => 'Удаляет журналы старше 7 дней.', 'Description' => 'Описание', 'Detailed description of the panel tabs' => 'Подробное описание вкладок панели', 'Details' => 'Подробности', 'Developers can dispatch their own jobs to the queue, choose drivers (Database, Sync, Redis), configure retries and schedules. See the documentation and examples on GitHub for integration details.' => 'Разработчики могут отправлять свои собственные задания в очередь, выбирать драйверы (база данных, синхронизация, Redis), настраивать повторные попытки и расписание. Подробную информацию об интеграции см. в документации и примерах на GitHub.', 'DISABLE_WP_CRON is set to true. Background tasks will not run automatically.' => 'Параметр DISABLE_WP_CRON установлен в значение true. Фоновые задачи не будут выполняться автоматически.', 'Disabled' => 'Отключен', 'Dispatch' => 'Отправлять', 'Display' => 'Показ', 'Displays a table of scheduled recurring tasks (PHP classes) registered in WP Queue: job class, execution interval, queue assignment, and next run time. Allows you to run any task manually.' => 'Отображает таблицу запланированных повторяющихся задач (PHP-классов), зарегистрированных в WP Queue: класс задачи, интервал выполнения, назначение в очередь и время следующего запуска. Позволяет запускать любую задачу вручную.', 'Displays all registered PHP job classes with their configuration.' => 'Отображает все зарегистрированные классы заданий PHP с их конфигурацией.', 'Displays environment information (PHP and WordPress versions, memory limits, execution time, timezone), WP-Cron status (disabled, alternative cron, loopback checks). If Action Scheduler is installed - its statistics. Server and WordPress time.' => 'Отображает информацию об окружении (версии PHP и WordPress, ограничения памяти, время выполнения, часовой пояс), статус WP-Cron (отключен, альтернативный cron, проверки обратной связи). Если установлен Action Scheduler — его статистика. Время сервера и WordPress.', 'Displays the last 200 entries by default or all completed/failed.' => 'По умолчанию отображаются последние 200 записей или все завершенные/незавершенные.', 'Displays the total number of tasks in different statuses (pending, running, completed, failed).' => 'Отображает общее количество задач в различных статусах (ожидание, выполнение, завершено, сбой).', 'Displays when the job should run next or marks overdue jobs.' => 'Отображает время следующего запуска задания или помечает просроченные задания.', 'Distribute jobs across different queues:' => 'Распределите задания по разным очередям:', 'Documentation on GitHub' => 'Документация на GitHub', 'Driver:' => 'Драйвер:', 'Drivers' => 'Драйверы', 'Edit' => 'Редактировать', 'Edit Cron Event' => 'Редактировать событие Cron', 'Edit Schedule' => 'Редактировать расписание', 'Enabled' => 'Включено', 'Environment' => 'Environment', 'Error' => 'Ошибка', 'Error message' => 'Сообщение об ошибке', 'Errors' => 'Ошибки', 'Event actions' => 'Действия события', 'Event hook, next run time, schedule (single/hourly/daily), source, arguments.' => 'Перехватчик событий, время следующего запуска, расписание (однократное/ежечасное/ежедневное), источник, аргументы.', 'Event statistics' => 'Статистика событий', 'Event table' => 'Таблица событий', 'events' => 'события', 'Events by Source' => 'События по источникам', 'Every %d Minutes' => 'Каждые %d минут', 'Example Plugin on GitHub' => 'Пример плагина на GitHub', 'Execution time, status (completed/failed/retrying), job class, queue, error message.' => 'Время выполнения, статус (завершено/сбой/повторная попытка), класс задания, очередь, сообщение об ошибке.', 'Failed' => 'Ошибки', 'Failed Actions' => 'Неудачные действия', 'Failed to pause event' => 'Не удалось приостановить событие', 'Failed to resume event' => 'Не удалось возобновить событие', 'Failed to update event' => 'Не удалось обновить событие', 'For developers' => 'Для разработчиков', 'For more information:' => 'Для получения дополнительной информации:', 'For Redis/Memcached to work, you need the PHP extension installed and a server available. If not, the system will automatically use the "database" driver.' => 'Для работы Redis/Memcached необходимо установить расширение PHP и иметь доступный сервер. В противном случае система автоматически будет использовать драйвер "database".', 'For site administrators' => 'Для администраторов сайта', 'Forces processing of all queues' => 'Принудительная обработка всех очередей', 'from now' => 'с настоящего момента', 'Full documentation and code examples are available on GitHub: %s.' => 'Полная документация и примеры кода доступны на GitHub: %s.', 'GitHub Repository' => 'Репозиторий GitHub', 'GMT Offset' => 'GMT Offset', 'Help' => 'Помощь', 'History' => 'История', 'History of all job executions for diagnostics and debugging.' => 'История всех выполненных заданий для диагностики и отладки.', 'Hook' => 'Хук', 'How Queues Work' => 'Как работают очереди', 'How to change the storage backend?' => 'Как изменить хранилище для данных?', 'How to run WP Queue as a long-running background process.' => 'Как запустить WP Queue в виде долгоживущего фонового процесса.', 'https://github.com/rwsite/wp-queue' => 'https://github.com/rwsite/wp-queue', 'https://rwsite.ru' => 'https://rwsite.ru', 'ID' => 'ID', 'Idle' => 'Idle', 'If installed, displays version and statistics (pending/running/failed actions).' => 'Если установлено, отображает версию и статистику (ожидающие/выполняемые/неудачные действия).', 'If the worker is not running, queues will not be processed in daemon mode. Make sure the process is started and monitored.' => 'Если воркер не запущен, очереди в режиме демона обрабатываться не будут. Убедитесь, что процесс запущен и мониторится.', 'If WP-CLI is not available, create a PHP script that boots WordPress and runs the worker loop:' => 'Если WP-CLI недоступен, создайте PHP-скрипт, который загружает WordPress и запускает цикл воркера:', 'If you installed WP Queue because another plugin requires it, you usually do not need to configure anything here. Use these tabs mainly for monitoring and troubleshooting.' => 'Если вы установили WP Queue, потому что он требуется другому плагину, обычно здесь ничего настраивать не нужно. Используйте эти вкладки в основном для мониторинга и устранения неполадок.', 'Important:' => 'Важно:', 'In Queue' => 'В очереди', 'In this mode WP-Cron scheduling and loopback requests are disabled automatically.' => 'В этом режиме планирование WP-Cron и loopback-запросы отключаются автоматически.', 'Inspect and manage WP-Cron events for WP Queue and other plugins.' => 'Проверяйте и управляйте событиями WP-Cron для WP Queue и других плагинов.', 'Install: pecl install memcached' => 'Установите: pecl install memcached', 'Install: pecl install redis' => 'Установите: pecl install redis', 'Interval' => 'Интервал', 'Job' => 'Задача', 'Job Class' => 'Job Class', 'Job class, execution interval (e.g., "hourly", "daily"), queue assignment, next run time.' => 'Класс Job, интервал выполнения (например, "ежечасно", "ежедневно"), назначение в очередь, время следующего запуска.', 'Job Details' => 'Job Details', 'Job information' => 'Job information', 'Job list' => 'Список Job', 'jobs' => 'задачи', 'Jobs in Queue' => 'Задачи в очереди', 'Log table' => 'Таблица логов', 'Logs' => 'Логи', 'Logs – history of completed and failed jobs that helps to diagnose problems.' => 'Логи — история выполненных и неудачных заданий, которая помогает диагностировать проблемы.', 'Loopback' => 'Обратная связь', 'Loopback is disabled. Jobs will be processed only by WP-Cron, which can delay execution by up to one minute. Run a daemon worker for instant processing.' => 'Loopback отключен. Задачи будут обрабатываться только WP-Cron с задержкой до минуты. Запустите демон-воркер для мгновенной обработки.', 'Loopback is enabled and working. Jobs start immediately after dispatch.' => 'Loopback включен и работает. Задачи запускаются сразу после отправки.', 'Loopback is inactive. Jobs will be processed only by WP-Cron, which can delay execution by up to one minute. Enable loopback or run a daemon worker for instant processing.' => 'Loopback неактивен. Задачи будут обрабатываться только WP-Cron с задержкой до минуты. Включите loopback или запустите демон-воркер для мгновенной обработки.', 'Loopback issue: %s' => 'Проблема обратной связи: %s', 'Loopback Request' => 'Запрос обратной связи', 'Loopback request successful' => 'Запрос обратной связи выполнен успешно', 'Manage queues from command line:' => 'Управление очередями из командной строки:', 'Management of scheduled recurring tasks.' => 'Управление запланированными повторяющимися задачами.', 'Management of WordPress system timers that trigger background processes.' => 'Управление системными таймерами WordPress, запускающими фоновые процессы.', 'Manual run' => 'Ручной запуск', 'Max Execution Time' => 'Максимальное время выполнения', 'Memory Limit' => 'Ограничение памяти', 'Memory usage is above 80%.' => 'Использование памяти выше 80%.', 'Message' => 'Сообщение', 'Monitor which background jobs are queued and running right now.' => 'Отслеживайте, какие фоновые задачи находятся в очереди и выполняются в данный момент.', 'More documentation' => 'Дополнительная документация', 'Name' => 'Имя', 'Named Queues' => 'Именованные очереди', 'Next Run' => 'Следующий запуск', 'Next run status' => 'Статус следующего запуска', 'No activity' => 'Нет активности', 'No cron events found.' => 'Событий cron не обнаружено.', 'No errors' => 'Ошибок нет.', 'No extension' => 'Нет расширения', 'No logs found' => 'Журналы не найдены', 'No paused events' => 'Нет приостановленных событий', 'No scheduled events' => 'Мероприятия не запланированы.', 'No scheduled jobs found.' => 'Запланированных заданий не найдено.', 'No server' => 'Нет сервера', 'Notifications of critical issues (low memory, disabled WP-Cron).' => 'Уведомления о критических проблемах (недостаток памяти, отключение WP-Cron).', 'Now' => 'Сейчас', 'Number of entries' => 'Количество записей', 'OK' => 'OK', 'One-time' => 'Один раз', 'Option A: systemd service' => 'Вариант A: сервис systemd', 'Option B: Supervisor' => 'Вариант B: Supervisor', 'Option C: Docker Compose' => 'Вариант C: Docker Compose', 'Option D: plain PHP script' => 'Вариант D: простой PHP-скрипт', 'Overdue' => 'Просрочено', 'Overview' => 'Обзор', 'Pause' => 'Пауза', 'Pause this queue?' => 'Приостановить выполнение этой очереди?', 'Paused' => 'Приостановлено', 'Paused At' => 'Приостановлено на', 'Paused Events' => 'Приостановленные события', 'Paused events' => 'Приостановленные события', 'Paused Since' => 'Приостановлено с', 'Pending' => 'В ожидании', 'Pending Actions' => 'Ожидающие действия', 'PHP' => 'PHP', 'PHP and WordPress versions, memory limits (current usage), maximum execution time, timezone.' => 'Версии PHP и WordPress, ограничения памяти (текущее использование), максимальное время выполнения, часовой пояс.', 'PHP extension "memcached" is not installed' => 'PHP-расширение "memcached" не установлено', 'PHP extension "redis" (phpredis) is not installed' => 'PHP-расширение "redis" (phpredis) не установлено', 'PHP max_execution_time is less than 30 seconds.' => 'PHP max_execution_time меньше 30 секунд.', 'PHP Version' => 'Версия PHP', 'Plugins' => 'Плагины', 'Predis library is not available' => 'Библиотека Predis недоступна', 'Process' => 'Процесс', 'Process Now' => 'Обработать сейчас', 'Process Queues' => 'Обработочные очереди', 'Processing' => 'Обработка', 'Queue' => 'Очередь', 'Queue handler' => 'Обработчик очереди', 'Queue is empty' => 'Очередь пуста', 'Queue statistics' => 'Статистика очереди', 'Queue Storage backend' => 'бэкэнд хранилища очередей', 'Queue table' => 'Таблица очереди', 'Queue: %s' => 'Очередь: %s', 'Queues' => 'Очереди', 'Quick Start' => 'Быстрый старт', 'Quickly see if any jobs are failing and view recent log entries.' => 'Быстро проверьте, не завершаются ли какие-либо задания с ошибкой, и просмотрите последние записи в журнале.', 'Ready' => 'Готово', 'Recent Activity' => 'Последние события', 'Recent activity' => 'Последние события', 'Redis connection failed' => 'Подключение к Redis не удалось.', 'Redis is disabled via WP_REDIS_DISABLED' => 'Redis отключен с помощью WP_REDIS_DISABLED', 'Redis Support' => 'Поддержка Redis', 'Registered Schedules' => 'Зарегистрированные расписания', 'Registered schedules' => 'Зарегистрированные расписания', 'Report an Issue' => 'Сообщить о проблеме', 'Report Issues' => 'Сообщить о проблемах', 'Resume' => 'Резюме', 'Retry Attempts' => 'Повторные попытки', 'Run' => 'Запуск', 'Run Now' => 'Запустите сейчас', 'Run now, edit schedule, pause, delete. Modal window for changing interval.' => 'Запустить сейчас, отредактировать расписание, приостановить, удалить. Модальное окно для изменения интервала.', 'Run tasks on schedule:' => 'Выполнить задачи по расписанию:', 'Running' => 'Запущено', 'Running Actions' => 'Выполнение действий', 'Save as /etc/systemd/system/wp-queue-worker.service, then run systemctl enable --now wp-queue-worker.' => 'Сохраните как /etc/systemd/system/wp-queue-worker.service, затем выполните systemctl enable --now wp-queue-worker.', 'Save Changes' => 'Сохранить изменения', 'Save the script, make it executable and run it in the background:' => 'Сохраните скрипт, сделайте его исполняемым и запустите в фоне:', 'Schedule' => 'Расписание', 'Schedule a job to run after a specific time:' => 'Настройте выполнение задания по истечении определенного времени:', 'Scheduled' => 'Запланировано', 'Scheduled Jobs' => 'Запланированные задания', 'Scheduled Jobs – list of recurring background jobs added by your theme or plugins.' => 'Запланированные задания — список повторяющихся фоновых заданий, добавленных вашей темой или плагинами.', 'Scheduler' => 'Планировщик', 'Server Time' => 'Время сервера', 'Server time' => 'Время сервера', 'Single' => 'Один', 'Single (run once)' => 'Один (запуск один раз)', 'Source' => 'Источник', 'Start the worker from the WordPress root:' => 'Запустите воркер из корня WordPress:', 'Status' => 'Статус', 'Status filters' => 'Фильтры состояния', 'Storage' => 'Хранилище', 'Storage backend' => 'бэкэнд хранилища', 'Storage backend "%s" is configured in wp-config.php, but not available. Falling back to "%s".' => 'В файле wp-config.php настроен бэкэнд хранилища "%s", но он недоступен. Используется резервный вариант "%s".', 'Synchronous execution (no queue)' => 'Синхронное выполнение (без очереди)', 'System' => 'Система', 'System Cron (Recommended)' => 'Системный планировщик задач (рекомендуется)', 'System health' => 'Здоровье системы', 'System Issues Detected:' => 'Обнаружены системные неполадки:', 'System Status' => 'Состояние системы', 'System – checks PHP version, WP-Cron status and other important settings.' => 'Система проверяет версию PHP, статус WP-Cron и другие важные настройки.', 'The "Run Now" button allows you to run any job immediately, without waiting for the schedule.' => 'Кнопка «Запустить сейчас» позволяет немедленно запустить любое задание, не дожидаясь расписания.', 'The command above must stay alive. In production use one of the options below.' => 'Команда выше должна оставаться запущенной. В продакшене используйте один из вариантов ниже.', 'The job is saved in the database (or Redis) waiting to be picked up.' => 'Задание сохраняется в базе данных (или Redis) в ожидании обработки.', 'The last 10 log entries for quick tracking of queue activity.' => 'Последние 10 записей в журнале для быстрого отслеживания активности в очереди.', 'The main tab for monitoring queue status in real-time.' => 'Главная вкладка для мониторинга состояния очереди в режиме реального времени.', 'The plugin itself does not add new features to the frontend. It provides a reliable queue that other plugins or your custom code can use for background work.' => 'Сам плагин не добавляет новых функций на фронтенд. Он предоставляет надежную очередь, которую другие плагины или ваш пользовательский код могут использовать для фоновой работы.', 'The worker picks up the job and executes it. If it succeeds, it is marked as "Completed". If it fails, it can be retried.' => 'Работник берет задание и выполняет его. Если оно выполняется успешно, оно помечается как «Завершено». Если оно не выполняется, его можно повторить.', 'This section is under development.' => 'Этот раздел находится в разработке.', 'Time' => 'Время', 'Timeout' => 'Тайм-аут', 'Timezone' => 'Часовой пояс', 'To add your own background jobs, use the WP Queue PHP API from your plugin or theme. You can dispatch jobs to different queues, set delays and retries. Full code examples are available in the README on GitHub.' => 'Чтобы добавить собственные фоновые задачи, используйте PHP API WP Queue из вашего плагина или темы. Вы можете отправлять задачи в разные очереди, устанавливать задержки и повторные попытки. Полные примеры кода доступны в файле README на GitHub .', 'to get a list of available commands.' => 'чтобы получить список доступных команд.', 'To process the queue, WordPress needs a trigger. There are two ways to do this:' => 'Для обработки очереди WordPress необходим триггер. Это можно сделать двумя способами:', 'Tools' => 'Инструменты', 'Total' => 'Всего', 'Total errors' => 'Общее количество ошибок', 'Total Events' => 'Всего событий', 'Total Jobs' => 'Общее количество рабочих мест', 'Total number of events, overdue, grouped by source (WordPress, WooCommerce, WP Queue, plugins).' => 'Общее количество просроченных событий, сгруппированных по источнику (WordPress, WooCommerce, WP Queue, плагины).', 'Unavailable' => 'Недоступно', 'Unexpected response code: %d' => 'Неожиданный код ответа: %d', 'Unknown' => 'Неизвестно', 'Unknown driver' => 'Неизвестный драйвер', 'Upcoming Events' => 'Предстоящие события', 'Usage' => 'Использование', 'Use a daemon worker on VPS, Docker or dedicated servers where you can keep a process running. It polls the queue continuously and starts jobs immediately. Without a daemon, WP Queue relies on WP-Cron and/or loopback, which can delay jobs by up to a minute.' => 'Запускайте демон-воркер на VPS, Docker или выделенном сервере, где можно держать процесс запущенным. Он постоянно опрашивает очередь и сразу запускает задания. Без демона WP Queue полагается на WP-Cron и/или loopback, что может задерживать задания до минуты.', 'Use system cron' => 'Используйте системный cron', 'Use the script from step 2 (Without WP-CLI) inside screen, tmux or a simple cron-based restart loop. Remember that the script must stay alive to act as a daemon.' => 'Используйте скрипт из шага 2 (Без WP-CLI) внутри screen, tmux или простого цикла перезапуска через cron. Помните, что скрипт должен оставаться запущенным, чтобы работать как демон.', 'Use this tab for quick checks of queue performance and identifying stuck processes.' => 'Используйте эту вкладку для быстрой проверки производительности очереди и выявления зависших процессов.', 'Used' => 'Использовал', 'Useful for testing jobs and forcing synchronizations.' => 'Полезно для тестирования заданий и принудительной синхронизации.', 'Useful Links' => 'Полезные ссылки', 'Uses wp_options table' => 'Использует таблицу wp_options', 'Version' => 'Версия', 'Versions' => 'Версии', 'Warning' => 'Предупреждение', 'What you can use it for' => 'Для чего его можно использовать', 'When to use a daemon' => 'Когда использовать демон', 'Why is it needed?' => 'Зачем это нужно?', 'With WP-CLI' => 'С WP-CLI', 'Without WP-CLI' => 'Без WP-CLI', 'WooCommerce' => 'WooCommerce', 'WordPress' => 'WordPress', 'WordPress checks for scheduled tasks on every page load. This works out of the box but has downsides: on low-traffic sites, tasks might not run on time; on high-traffic sites, it can cause performance issues. It is "fake" cron.' => 'WordPress проверяет наличие запланированных задач при каждой загрузке страницы. Это работает «из коробки», но имеет свои недостатки: на сайтах с низкой посещаемостью задачи могут не выполняться вовремя; на сайтах с высокой посещаемостью это может вызывать проблемы с производительностью. Это «поддельный» cron.', 'WordPress Time' => 'Время WordPress', 'WordPress Version' => 'Версия WordPress', 'Worker' => 'Воркер', 'WP Queue' => 'WP Queue', 'WP Queue allows executing tasks asynchronously in the background without blocking the main WordPress execution flow.' => 'WP Queue позволяет выполнять задачи асинхронно в фоновом режиме, не блокируя основной поток выполнения WordPress.', 'WP Queue helps your site run heavy or regular tasks in the background (emails, synchronizations, cleanups) so that pages load faster for visitors.' => 'WP Queue помогает вашему сайту выполнять ресурсоемкие или регулярно выполняемые задачи в фоновом режиме (отправка электронной почты, синхронизация, очистка), благодаря чему страницы загружаются быстрее для посетителей.', 'WP Queue is a robust background processing library for WordPress. It allows you to offload time-consuming tasks (like sending emails, syncing data, or generating reports) to be processed asynchronously, ensuring your site remains fast and responsive for visitors.' => 'WP Queue — это мощная библиотека для фоновой обработки данных в WordPress. Она позволяет переносить трудоемкие задачи (например, отправку электронных писем, синхронизацию данных или создание отчетов) на асинхронную обработку, обеспечивая быструю и отзывчивую работу вашего сайта для посетителей.', 'WP Queue solves this by pushing these tasks to a "Queue" and processing them later in the background. The user gets an instant response, and the heavy work happens behind the scenes.' => 'WP Queue решает эту проблему, отправляя эти задачи в "очередь" и обрабатывая их позже в фоновом режиме. Пользователь получает мгновенный ответ, а основная работа происходит за кулисами.', 'WP Queue — Queue System for WordPress' => 'WP Queue — система очередей для WordPress', 'WP-CLI' => 'WP-CLI', 'WP-CLI Commands' => 'Команды WP-CLI', 'WP-CLI команды' => 'Команда WP-CLI', 'WP-Cron' => 'WP-Cron', 'WP-Cron (Default)' => 'WP-Cron (по умолчанию)', 'WP-Cron + Loopback' => 'WP-Cron + Loopback', 'WP-Cron checks the queue every minute as a fallback.' => 'WP-Cron раз в минуту проверяет очередь как подстраховку.', 'WP-Cron Disabled' => 'WP-Cron отключен', 'WP-Cron is disabled. Background tasks may not run automatically.' => 'WP-Cron отключен. Фоновые задачи могут не выполняться автоматически.', 'WP-Cron only' => 'Только WP-Cron', 'WP-Cron Status' => 'Статус WP-Cron', 'WP-Cron status' => 'статус WP-Cron', 'WP-Cron vs System Cron' => 'WP-Cron против System Cron', 'WP-Cron – list of cron events with the ability to run, pause or delete them.' => 'WP-Cron – список событий cron с возможностью их запуска, приостановки или удаления.', 'WP-Cron:' => 'WP-Cron:', '⚠️ Warning:' => '⚠️ Предупреждение:']]; diff --git a/languages/wp-queue-ru_RU.mo b/languages/wp-queue-ru_RU.mo index 4c48f1c..f40724a 100644 Binary files a/languages/wp-queue-ru_RU.mo and b/languages/wp-queue-ru_RU.mo differ diff --git a/languages/wp-queue-ru_RU.po b/languages/wp-queue-ru_RU.po index f6e5393..1f920d1 100644 --- a/languages/wp-queue-ru_RU.po +++ b/languages/wp-queue-ru_RU.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: WP Queue 1.0.0\n" "Report-Msgid-Bugs-To: https://github.com/rwsite/wp-queue/issues\n" "POT-Creation-Date: 2025-12-06 01:35+0000\n" -"PO-Revision-Date: 2025-12-06 00:11+0000\n" +"PO-Revision-Date: 2026-07-25 21:14+0000\n" "Last-Translator: \n" "Language-Team: Русский\n" "Language: ru_RU\n" @@ -18,128 +18,164 @@ msgstr "" "X-Generator: Loco https://localise.biz/\n" "X-Loco-Version: 2.8.0; wp-6.9; php-8.3.28" -#: src/Admin/AdminPage.php:910 +#: src/Admin/AdminPage.php:913 msgid "%d entries" msgstr "%d записей" -#: src/Admin/AdminPage.php:542 +#: src/Admin/AdminPage.php:545 msgid "%d tasks" msgstr "%d задач" -#: src/Admin/AdminPage.php:1068 +#: src/Admin/AdminPage.php:1071 msgid "(configured)" msgstr "(настроено)" -#: src/Admin/AdminPage.php:666 +#: src/Admin/AdminPage.php:2306 +msgid "" +"--memory limits the PHP memory for the worker process. Adjust the value to " +"your needs." +msgstr "" +"--memory ограничивает память PHP для процесса воркера. Подберите значение " +"под свои задачи." + +#: src/Admin/AdminPage.php:2296 +msgid "1. Enable daemon runtime mode" +msgstr "1. Включите режим демона" + +#: src/Admin/AdminPage.php:2301 +msgid "2. Run the worker" +msgstr "2. Запустите воркер" + +#: src/Admin/AdminPage.php:2328 +msgid "3. Keep it running" +msgstr "3. Держите процесс запущенным" + +#: src/Admin/AdminPage.php:2367 +msgid "4. Check status" +msgstr "4. Проверьте статус" + +#: src/Admin/AdminPage.php:669 msgid "A background process (Worker) constantly checks the queue for new jobs." msgstr "" -"Фоновый процесс (Worker) постоянно проверяет очередь на наличие новых задач." +"Фоновый процесс (Worker) постоянно проверяет очередь на наличие новых " +"заданий." -#: src/Admin/AdminPage.php:716 +#: src/Admin/AdminPage.php:1867 +msgid "" +"A daemon worker is expected to process queues. WP-Cron and loopback are " +"disabled." +msgstr "" +"Для обработки очередей ожидается демон-воркер. WP-Cron и loopback отключены." + +#: src/Admin/AdminPage.php:719 msgid "" "A list of all active queues with their size, status " "(idle/pending/running/paused), and control buttons (pause/resume, clear all " "tasks)." msgstr "" -"Список всех активных очередей с их размером, статусом " -"(бездействие/ожидание/выполнение/пауза) и кнопками управления " +"Список всех активных очередей с указанием их размера, статуса " +"(простой/ожидание/выполнение/приостановка) и кнопок управления " "(пауза/возобновление, очистить все задачи)." -#: src/Admin/AdminPage.php:664 +#: src/Admin/AdminPage.php:667 msgid "A plugin creates a \"Job\" (a task) and pushes it to the queue." -msgstr "Плагин создает \"Задачу\" (Job) и помещает ее в очередь." +msgstr "Плагин создает «Задание» (задачу) и помещает его в очередь." -#: src/Admin/AdminPage.php:688 +#: src/Admin/AdminPage.php:691 msgid "" "A real cron job configured on your server (Linux) that calls WordPress every " "minute. This is reliable and precise. Ideally, you should disable default WP-" "Cron and use System Cron." msgstr "" -"Настоящая задача cron, настроенная на вашем сервере (Linux), которая " -"вызывает WordPress каждую минуту. Это надежно и точно. В идеале, вы должны " -"отключить стандартный WP-Cron и использовать системный Cron." +"На вашем сервере (Linux) должна быть настроена настоящая задача cron, " +"которая будет запускать WordPress каждую минуту. Это надежно и точно. В " +"идеале следует отключить стандартный WP-Cron и использовать системный Cron." -#: src/Admin/AdminPage.php:765 +#: src/Admin/AdminPage.php:768 msgid "A separate table for events that are temporarily disabled." -msgstr "Отдельная таблица для временно отключенных событий." +msgstr "Отдельная таблица для событий, которые временно отключены." -#: src/Admin/AdminPage.php:766 +#: src/Admin/AdminPage.php:769 msgid "" "A table of all available intervals (hourly, daily, etc.) with their duration." msgstr "" -"Таблица всех доступных интервалов (ежечасно, ежедневно и т.д.) с их " +"Таблица со всеми доступными интервалами (почасовыми, суточным и т. д.) и их " "продолжительностью." -#: src/Admin/AdminPage.php:85 src/Admin/AdminPage.php:106 -#: src/Admin/AdminPage.php:638 +#: src/Admin/AdminPage.php:88 src/Admin/AdminPage.php:109 +#: src/Admin/AdminPage.php:641 msgid "About WP Queue" msgstr "О WP Queue" -#: src/Admin/AdminPage.php:198 +#: src/Admin/AdminPage.php:201 msgid "Action completed successfully" -msgstr "Действие выполнено успешно" +msgstr "Действие успешно завершено." -#: src/Admin/AdminPage.php:782 src/Admin/AdminPage.php:1743 -#: src/Admin/AdminPage.php:1942 +#: src/Admin/AdminPage.php:785 src/Admin/AdminPage.php:1746 +#: src/Admin/AdminPage.php:1984 msgid "Action Scheduler" msgstr "Планировщик действий" -#: src/Admin/AdminPage.php:481 src/Admin/AdminPage.php:594 -#: src/Admin/AdminPage.php:1483 src/Admin/AdminPage.php:1558 -#: src/Admin/AdminPage.php:2207 +#: src/Admin/AdminPage.php:484 src/Admin/AdminPage.php:597 +#: src/Admin/AdminPage.php:1486 src/Admin/AdminPage.php:1561 +#: src/Admin/AdminPage.php:2255 msgid "Actions" msgstr "Действия" -#: src/Admin/AdminPage.php:428 src/Admin/AdminPage.php:1055 -#: src/Admin/AdminPage.php:1367 src/Admin/AdminPage.php:1872 +#: src/Admin/AdminPage.php:431 src/Admin/AdminPage.php:1058 +#: src/Admin/AdminPage.php:1370 src/Admin/AdminPage.php:1911 msgid "Active" msgstr "Активный" -#: src/Admin/AdminPage.php:1100 +#: src/Admin/AdminPage.php:2297 +msgid "Add this to wp-config.php:" +msgstr "Добавьте в wp-config.php:" + +#: src/Admin/AdminPage.php:1103 msgid "Add to wp-config.php:" -msgstr "Добавить в wp-config.php:" +msgstr "Добавьте в файл wp-config.php:" -#: src/Admin/AdminPage.php:615 +#: src/Admin/AdminPage.php:618 msgid "ago (overdue)" -msgstr "назад (просрочено)" +msgstr "давно (просрочено)" #. Author of the plugin msgid "Aleksei Tikhomirov" msgstr "Алексей Тихомиров" -#: src/Admin/AdminPage.php:837 src/Admin/AdminPage.php:1459 +#: src/Admin/AdminPage.php:840 src/Admin/AdminPage.php:1462 msgid "All" msgstr "Все" -#: src/Admin/AdminPage.php:848 +#: src/Admin/AdminPage.php:851 msgid "All queues" msgstr "Все очереди" -#: src/Admin/AdminPage.php:1657 +#: src/Admin/AdminPage.php:1660 msgid "All systems are healthy." msgstr "Все системы работают исправно." -#: src/Admin/AdminPage.php:1709 +#: src/Admin/AdminPage.php:1712 msgid "Alternate Cron" msgstr "Альтернативный Cron" -#: src/Admin/AdminPage.php:199 +#: src/Admin/AdminPage.php:202 msgid "An error occurred" -msgstr "Произошла ошибка" +msgstr "Произошла ошибка." -#: src/Admin/AdminPage.php:196 +#: src/Admin/AdminPage.php:199 msgid "Are you sure you want to clear this queue?" msgstr "Вы уверены, что хотите очистить эту очередь?" -#: src/Admin/AdminPage.php:478 src/Admin/AdminPage.php:960 +#: src/Admin/AdminPage.php:481 src/Admin/AdminPage.php:963 msgid "Attempts" msgstr "Попытки" -#: src/Admin/AdminPage.php:167 +#: src/Admin/AdminPage.php:170 msgid "Author Website" -msgstr "Сайт автора" +msgstr "Веб-сайт автора" -#: src/Admin/AdminPage.php:479 +#: src/Admin/AdminPage.php:482 msgid "Available From" msgstr "Доступно с" @@ -151,181 +187,192 @@ msgstr "" "Обработка фоновых задач и управление WP-Cron для WordPress. Планируйте " "задачи, управляйте очередями и отслеживайте cron-события." -#: src/Admin/AdminPage.php:122 +#: src/Admin/AdminPage.php:125 msgid "Basic Usage" -msgstr "Базовое использование" +msgstr "Основные правила использования" -#: src/Admin/AdminPage.php:748 +#: src/Admin/AdminPage.php:751 msgid "Button to delete old log entries to avoid cluttering the database." msgstr "" -"Кнопка для удаления старых записей журнала, чтобы избежать загромождения " -"базы данных." +"Кнопка для удаления старых записей журнала во избежание засорения базы " +"данных." -#: src/Admin/AdminPage.php:746 +#: src/Admin/AdminPage.php:749 msgid "Buttons to show all entries, only completed, or only failed jobs." msgstr "" -"Кнопки для показа всех записей, только завершенных или только неудачных " -"задач." +"Кнопки для отображения всех записей, только завершенных или только неудачно " +"завершенных заданий." -#: src/Admin/AdminPage.php:650 +#: src/Admin/AdminPage.php:653 msgid "" "By default, WordPress executes all actions during the page load request. If " "a plugin needs to send 100 emails or sync 500 products with an external API, " "the user has to wait until it finishes. This leads to slow page loads or " "timeouts." msgstr "" -"По умолчанию WordPress выполняет все действия во время загрузки страницы. " -"Если плагину нужно отправить 100 писем или синхронизировать 500 товаров с " -"внешним API, пользователь должен дождаться завершения. Это приводит к " -"медленной загрузке страниц или тайм-аутам." +"По умолчанию WordPress выполняет все действия во время запроса на загрузку " +"страницы. Если плагину необходимо отправить 100 электронных писем или " +"синхронизировать 500 товаров с внешним API, пользователю приходится ждать " +"завершения процесса. Это приводит к медленной загрузке страниц или таймаутам." -#: src/Admin/AdminPage.php:698 +#: src/Admin/AdminPage.php:701 msgid "" "By default, WP Queue stores jobs in the WordPress database (wp_options or " "custom tables). For high-performance sites, you can use Redis. Redis is an " "in-memory data store that is much faster than a SQL database for queue " "operations. It reduces load on your database and speeds up job processing." msgstr "" -"По умолчанию WP Queue хранит задачи в базе данных WordPress (wp_options или " -"пользовательские таблицы). Для сайтов с высокой производительностью вы " -"можете использовать Redis. Redis - это хранилище данных в памяти, которое " -"намного быстрее, чем база данных SQL для операций с очередью. Это снижает " -"нагрузку на вашу базу данных и ускоряет обработку задач." +"По умолчанию WP Queue хранит задания в базе данных WordPress (в папке " +"wp_options или в пользовательских таблицах). Для высокопроизводительных " +"сайтов можно использовать Redis. Redis — это хранилище данных в оперативной " +"памяти, которое намного быстрее, чем база данных SQL, при работе с очередями." +" Оно снижает нагрузку на базу данных и ускоряет обработку заданий." -#: src/Admin/AdminPage.php:1623 +#: src/Admin/AdminPage.php:1626 msgid "Cancel" msgstr "Отмена" -#: src/QueueManager.php:318 +#: src/QueueManager.php:500 #, php-format msgid "Cannot connect to Memcached at %s:%d - %s" msgstr "Не удалось подключиться к Memcached на %s:%d - %s" -#: src/QueueManager.php:266 +#: src/QueueManager.php:297 src/QueueManager.php:375 src/QueueManager.php:448 #, php-format msgid "Cannot connect to Redis at %s:%d - %s" msgstr "Не удалось подключиться к Redis на %s:%d - %s" -#: src/Admin/AdminPage.php:114 +#: src/Admin/AdminPage.php:117 msgid "Check basic system requirements that affect queue stability." msgstr "" -"Проверьте базовые системные требования, влияющие на стабильность очереди." +"Проверьте основные системные требования, влияющие на стабильность очереди." -#: src/Admin/AdminPage.php:1037 +#: src/Admin/AdminPage.php:1040 msgid "Check driver settings." msgstr "Проверьте настройки драйвера." -#: src/Admin/AdminPage.php:751 +#: src/Admin/AdminPage.php:754 msgid "Check logs when encountering errors in background processes." -msgstr "Проверьте журналы при возникновении ошибок в фоновых процессах." +msgstr "При обнаружении ошибок в фоновых процессах проверяйте журналы." -#: src/Admin/AdminPage.php:785 +#: src/Admin/AdminPage.php:788 msgid "Check this tab when setting up your server or debugging queue issues." msgstr "" -"Проверьте эту вкладку при настройке сервера или отладке проблем с очередью." +"Проверьте эту вкладку при настройке сервера или отладке проблем с очередями." -#: src/Admin/AdminPage.php:781 +#: src/Admin/AdminPage.php:784 msgid "" "Checking for disablement (DISABLE_WP_CRON), alternative cron, loopback " "requests." msgstr "" -"Проверка отключения (DISABLE_WP_CRON), альтернативного cron, обратных " -"запросов." +"Проверка на отключение (DISABLE_WP_CRON), альтернативный cron, запросы " +"обратной связи." -#: src/Admin/AdminPage.php:777 +#: src/Admin/AdminPage.php:780 msgid "" "Checking system requirements and environment for stable queue operation." msgstr "" -"Проверка системных требований и окружения для стабильной работы очереди." +"Проверка системных требований и среды для обеспечения стабильной работы " +"очереди." -#: src/Admin/AdminPage.php:451 +#: src/Admin/AdminPage.php:454 msgid "Clear" msgstr "Очистить" -#: src/Admin/AdminPage.php:1995 +#: src/Admin/AdminPage.php:2037 msgid "Clear All" msgstr "Очистить все" -#: src/Admin/AdminPage.php:1983 +#: src/Admin/AdminPage.php:2025 msgid "Clear All Logs" msgstr "Очистить все журналы" -#: src/Admin/AdminPage.php:1993 +#: src/Admin/AdminPage.php:2035 msgid "Clear All Queues" msgstr "Очистить все очереди" -#: src/Admin/AdminPage.php:1981 +#: src/Admin/AdminPage.php:2023 msgid "Clear Logs" msgstr "Очистить журналы" -#: src/Admin/AdminPage.php:748 +#: src/Admin/AdminPage.php:751 msgid "Clear logs" msgstr "Очистить журналы" -#: src/Admin/AdminPage.php:860 +#: src/Admin/AdminPage.php:863 msgid "Clear old" -msgstr "Очистить старые" +msgstr "Удалить старые" -#: src/Admin/AdminPage.php:567 +#: src/Admin/AdminPage.php:570 msgid "Close" msgstr "Закрыть" -#: src/Admin/AdminPage.php:783 +#: src/Admin/AdminPage.php:786 msgid "" "Comparison of server time, WordPress, and GMT offset for diagnosing " "scheduling issues." msgstr "" -"Сравнение серверного времени, WordPress и смещения GMT для диагностики " -"проблем с планированием." +"Сравнение серверного времени, времени WordPress и смещения GMT для " +"диагностики проблем с планированием." -#: src/Admin/AdminPage.php:326 src/Admin/AdminPage.php:352 -#: src/Admin/AdminPage.php:840 src/Admin/AdminPage.php:1820 +#: src/Admin/AdminPage.php:329 src/Admin/AdminPage.php:355 +#: src/Admin/AdminPage.php:843 src/Admin/AdminPage.php:1823 msgid "Completed" -msgstr "Завершено" +msgstr "Завершенные" -#: src/Admin/AdminPage.php:1856 +#: src/Admin/AdminPage.php:1885 msgid "Component Status" -msgstr "Статус компонента" +msgstr "Состояние компонента" -#: src/Admin/AdminPage.php:366 +#: src/Admin/AdminPage.php:369 msgid "Configure" -msgstr "Настроить" +msgstr "Настройка" -#: src/Admin/AdminPage.php:2095 +#: src/Admin/AdminPage.php:2137 msgid "Configure automatic retries on errors:" -msgstr "Настроить автоматические повторные попытки при ошибках:" +msgstr "Настройте автоматическое повторение попыток при возникновении ошибок:" -#: src/Admin/AdminPage.php:1109 +#: src/Admin/AdminPage.php:1112 msgid "Configure Memcached" -msgstr "Настроить Memcached" +msgstr "Настройка Memcached" -#: src/Admin/AdminPage.php:1103 +#: src/Admin/AdminPage.php:1106 msgid "Configure Redis" -msgstr "Настроить Redis" +msgstr "Настройка Redis" -#: src/Admin/AdminPage.php:1870 +#: src/Admin/AdminPage.php:1909 msgid "Configure system cron" -msgstr "Настроить системный cron" +msgstr "Настройте системный cron." -#: src/QueueManager.php:307 +#: src/QueueManager.php:489 #, php-format msgid "Connected to Memcached at %s:%d" msgstr "Подключено к Memcached на %s:%d" -#: src/QueueManager.php:255 +#: src/QueueManager.php:289 +#, php-format +msgid "Connected to Redis at %s:%d (phpredis)" +msgstr "Подключено к Redis по адресу %s:%d (phpredis)" + +#: src/QueueManager.php:440 #, php-format -msgid "Connected to Redis at %s:%d" -msgstr "Подключено к Redis на %s:%d" +msgid "Connected to Redis at %s:%d (Predis)" +msgstr "Подключено к Redis по адресу %s:%d (Predis)" -#: src/Admin/AdminPage.php:2038 +#: src/QueueManager.php:349 src/QueueManager.php:367 +#, php-format +msgid "Connected to Redis at %s:%d (via redis-cache plugin)" +msgstr "Подключено к Redis по адресу %s:%d (через плагин redis-cache)" + +#: src/Admin/AdminPage.php:2080 msgid "Create a job class and dispatch it to the queue:" -msgstr "Создайте класс задачи и отправьте его в очередь:" +msgstr "Создайте класс задания и отправьте его в очередь:" -#: src/Admin/AdminPage.php:768 +#: src/Admin/AdminPage.php:771 msgid "Critical for understanding why tasks are not running on time." msgstr "" -"Критически важно для понимания причин, по которым задачи не выполняются " -"вовремя." +"Это крайне важно для понимания причин, по которым задачи не выполняются в " +"срок." #: src/Admin/RestApi.php:523 msgid "Cron event paused" @@ -339,229 +386,229 @@ msgstr "Cron-событие возобновлено" msgid "Cron event updated" msgstr "Cron-событие обновлено" -#: src/Admin/AdminPage.php:50 +#: src/Admin/AdminPage.php:52 msgid "Cron Events" -msgstr "Cron-события" +msgstr "События Cron" -#: src/Admin/AdminPage.php:1043 -msgid "Current driver:" -msgstr "Текущий драйвер:" - -#: src/Admin/AdminPage.php:1677 +#: src/Admin/AdminPage.php:1680 msgid "Current Memory Usage" msgstr "Текущее использование памяти" -#: src/QueueManager.php:207 src/QueueManager.php:351 src/QueueManager.php:353 +#: src/Admin/AdminPage.php:1046 +msgid "Current storage backend:" +msgstr "Текущая система хранения данных:" + +#: src/QueueManager.php:207 src/QueueManager.php:533 src/QueueManager.php:535 msgid "Custom driver" msgstr "Пользовательский драйвер" -#: src/Admin/AdminPage.php:710 +#: src/Admin/AdminPage.php:1865 +msgid "Daemon process" +msgstr "Демон-процесс" + +#: src/Admin/AdminPage.php:58 src/Admin/AdminPage.php:2288 +msgid "Daemon worker" +msgstr "Демон-воркер" + +#: src/Admin/AdminPage.php:713 msgid "Dashboard" msgstr "Панель управления" -#: src/Admin/AdminPage.php:125 +#: src/Admin/AdminPage.php:128 msgid "" "Dashboard – quick overview of queues, number of jobs and recent activity." msgstr "" -"Панель управления – быстрый обзор очередей, количества задач и недавней " +"Панель управления – краткий обзор очередей, количества заданий и недавней " "активности." -#: src/Admin/AdminPage.php:2056 +#: src/Admin/AdminPage.php:2098 msgid "Delayed Jobs" -msgstr "Отложенные задачи" +msgstr "Задержка с выполнением заданий" -#: src/Admin/AdminPage.php:527 src/Admin/AdminPage.php:1539 -#: src/Admin/AdminPage.php:1540 +#: src/Admin/AdminPage.php:530 src/Admin/AdminPage.php:1542 +#: src/Admin/AdminPage.php:1543 msgid "Delete" msgstr "Удалить" -#: src/Admin/AdminPage.php:864 +#: src/Admin/AdminPage.php:867 msgid "Delete all" msgstr "Удалить все" -#: src/Admin/AdminPage.php:1982 +#: src/Admin/AdminPage.php:2024 msgid "Deletes all job execution logs" -msgstr "Удаляет все журналы выполнения задач" +msgstr "Удаляет все журналы выполнения заданий." -#: src/Admin/AdminPage.php:1994 +#: src/Admin/AdminPage.php:2036 msgid "Deletes all jobs from all queues" -msgstr "Удаляет все задачи из всех очередей" +msgstr "Удаляет все задания из всех очередей." -#: src/Admin/AdminPage.php:858 +#: src/Admin/AdminPage.php:861 msgid "Deletes logs older than 7 days" -msgstr "Удаляет журналы старше 7 дней" +msgstr "Удаляет журналы старше 7 дней." -#: src/Admin/AdminPage.php:1054 +#: src/Admin/AdminPage.php:1057 msgid "Description" msgstr "Описание" -#: src/Admin/AdminPage.php:706 +#: src/Admin/AdminPage.php:709 msgid "Detailed description of the panel tabs" msgstr "Подробное описание вкладок панели" -#: src/Admin/AdminPage.php:524 +#: src/Admin/AdminPage.php:527 msgid "Details" -msgstr "Детали" +msgstr "Подробности" -#: src/Admin/AdminPage.php:117 +#: src/Admin/AdminPage.php:120 msgid "" "Developers can dispatch their own jobs to the queue, choose drivers " "(Database, Sync, Redis), configure retries and schedules. See the " "documentation and examples on GitHub for integration details." msgstr "" -"Разработчики могут отправлять свои задачи в очередь, выбирать драйверы " -"(Database, Sync, Redis), настраивать повторные попытки и расписания. См. " -"документацию и примеры на GitHub для деталей интеграции." +"Разработчики могут отправлять свои собственные задания в очередь, выбирать " +"драйверы (база данных, синхронизация, Redis), настраивать повторные попытки " +"и расписание. Подробную информацию об интеграции см. в документации и " +"примерах на GitHub." -#: src/Admin/AdminPage.php:1702 +#: src/Admin/AdminPage.php:1705 msgid "" "DISABLE_WP_CRON is set to true. Background tasks will not run automatically." msgstr "" -"DISABLE_WP_CRON установлен в true. Фоновые задачи не будут выполняться " -"автоматически." +"Параметр DISABLE_WP_CRON установлен в значение true. Фоновые задачи не будут " +"выполняться автоматически." -#: src/Admin/AdminPage.php:1364 src/Admin/AdminPage.php:1701 -#: src/Admin/AdminPage.php:1714 src/Admin/AdminPage.php:1869 +#: src/Admin/AdminPage.php:1367 src/Admin/AdminPage.php:1704 +#: src/Admin/AdminPage.php:1717 src/Admin/AdminPage.php:1908 msgid "Disabled" -msgstr "Отключено" +msgstr "Отключен" -#: src/Admin/AdminPage.php:664 +#: src/Admin/AdminPage.php:667 msgid "Dispatch" -msgstr "Отправить" +msgstr "Отправлять" -#: src/Admin/AdminPage.php:1586 +#: src/Admin/AdminPage.php:1589 msgid "Display" -msgstr "Отобразить" +msgstr "Показ" -#: src/Admin/AdminPage.php:582 +#: src/Admin/AdminPage.php:585 msgid "" "Displays a table of scheduled recurring tasks (PHP classes) registered in WP " "Queue: job class, execution interval, queue assignment, and next run time. " "Allows you to run any task manually." msgstr "" -"Отображает таблицу запланированных повторяющихся задач (классы PHP), " +"Отображает таблицу запланированных повторяющихся задач (PHP-классов), " "зарегистрированных в WP Queue: класс задачи, интервал выполнения, назначение " -"очереди и время следующего запуска. Позволяет запустить любую задачу вручную." +"в очередь и время следующего запуска. Позволяет запускать любую задачу " +"вручную." -#: src/Admin/AdminPage.php:730 +#: src/Admin/AdminPage.php:733 msgid "Displays all registered PHP job classes with their configuration." -msgstr "Отображает все зарегистрированные классы задач PHP с их конфигурацией." +msgstr "" +"Отображает все зарегистрированные классы заданий PHP с их конфигурацией." -#: src/Admin/AdminPage.php:1641 +#: src/Admin/AdminPage.php:1644 msgid "" "Displays environment information (PHP and WordPress versions, memory limits, " "execution time, timezone), WP-Cron status (disabled, alternative cron, " "loopback checks). If Action Scheduler is installed - its statistics. Server " "and WordPress time." msgstr "" -"Отображает информацию об окружении (версии PHP и WordPress, лимиты памяти, " -"время выполнения, часовой пояс), статус WP-Cron (отключен, альтернативный " -"cron, проверки обратной связи). Если установлен Action Scheduler - его " -"статистика. Серверное и время WordPress." +"Отображает информацию об окружении (версии PHP и WordPress, ограничения " +"памяти, время выполнения, часовой пояс), статус WP-Cron (отключен, " +"альтернативный cron, проверки обратной связи). Если установлен Action " +"Scheduler — его статистика. Время сервера и WordPress." -#: src/Admin/AdminPage.php:749 +#: src/Admin/AdminPage.php:752 msgid "Displays the last 200 entries by default or all completed/failed." msgstr "" -"Отображает последние 200 записей по умолчанию или все завершенные/неудачные." +"По умолчанию отображаются последние 200 записей или все " +"завершенные/незавершенные." -#: src/Admin/AdminPage.php:715 +#: src/Admin/AdminPage.php:718 msgid "" "Displays the total number of tasks in different statuses (pending, running, " "completed, failed)." msgstr "" -"Отображает общее количество задач в разных статусах (ожидание, выполнение, " -"завершено, неудача)." +"Отображает общее количество задач в различных статусах (ожидание, выполнение," +" завершено, сбой)." -#: src/Admin/AdminPage.php:733 +#: src/Admin/AdminPage.php:736 msgid "Displays when the job should run next or marks overdue jobs." msgstr "" -"Отображает, когда задача должна выполняться следующей, или отмечает " -"просроченные задачи." +"Отображает время следующего запуска задания или помечает просроченные " +"задания." -#: src/Admin/AdminPage.php:2077 +#: src/Admin/AdminPage.php:2119 msgid "Distribute jobs across different queues:" -msgstr "Распределите задачи по разным очередям:" +msgstr "Распределите задания по разным очередям:" -#: src/Admin/AdminPage.php:2164 +#: src/Admin/AdminPage.php:2206 msgid "Documentation on GitHub" msgstr "Документация на GitHub" -#: src/Admin/AdminPage.php:1052 -msgid "Driver" -msgstr "Драйвер" - -#: src/Admin/AdminPage.php:1031 -#, php-format -msgid "" -"Driver \"%s\" is configured in wp-config.php, but not available. Falling " -"back to \"%s\"." -msgstr "" -"Драйвер \"%s\" настроен в wp-config.php, но недоступен. Переход на \"%s\"." - -#: src/Admin/AdminPage.php:363 +#: src/Admin/AdminPage.php:366 msgid "Driver:" msgstr "Драйвер:" -#: src/Admin/AdminPage.php:46 +#: src/Admin/AdminPage.php:48 msgid "Drivers" msgstr "Драйверы" -#: src/Admin/AdminPage.php:1526 +#: src/Admin/AdminPage.php:1529 msgid "Edit" msgstr "Редактировать" -#: src/Admin/AdminPage.php:1603 +#: src/Admin/AdminPage.php:1606 msgid "Edit Cron Event" -msgstr "Редактировать Cron-событие" +msgstr "Редактировать событие Cron" -#: src/Admin/AdminPage.php:1525 +#: src/Admin/AdminPage.php:1528 msgid "Edit Schedule" msgstr "Редактировать расписание" -#: src/Admin/AdminPage.php:1704 src/Admin/AdminPage.php:1712 +#: src/Admin/AdminPage.php:1707 src/Admin/AdminPage.php:1715 msgid "Enabled" msgstr "Включено" -#: src/Admin/AdminPage.php:780 src/Admin/AdminPage.php:1661 +#: src/Admin/AdminPage.php:783 src/Admin/AdminPage.php:1664 msgid "Environment" -msgstr "Окружение" +msgstr "Environment" -#: src/Admin/AdminPage.php:1729 +#: src/Admin/AdminPage.php:1732 src/Admin/AdminPage.php:1927 msgid "Error" msgstr "Ошибка" -#: src/Admin/AdminPage.php:961 +#: src/Admin/AdminPage.php:964 msgid "Error message" msgstr "Сообщение об ошибке" -#: src/Admin/AdminPage.php:1824 +#: src/Admin/AdminPage.php:1827 msgid "Errors" msgstr "Ошибки" -#: src/Admin/AdminPage.php:764 +#: src/Admin/AdminPage.php:767 msgid "Event actions" -msgstr "Действия событий" +msgstr "Действия события" -#: src/Admin/AdminPage.php:763 +#: src/Admin/AdminPage.php:766 msgid "" "Event hook, next run time, schedule (single/hourly/daily), source, arguments." msgstr "" -"Хук события, время следующего запуска, расписание " -"(однократно/ежечасно/ежедневно), источник, аргументы." +"Перехватчик событий, время следующего запуска, расписание " +"(однократное/ежечасное/ежедневное), источник, аргументы." -#: src/Admin/AdminPage.php:762 +#: src/Admin/AdminPage.php:765 msgid "Event statistics" msgstr "Статистика событий" -#: src/Admin/AdminPage.php:763 +#: src/Admin/AdminPage.php:766 msgid "Event table" msgstr "Таблица событий" -#: src/Admin/AdminPage.php:1382 +#: src/Admin/AdminPage.php:1385 msgid "events" msgstr "события" -#: src/Admin/AdminPage.php:1372 +#: src/Admin/AdminPage.php:1375 msgid "Events by Source" msgstr "События по источникам" @@ -570,21 +617,24 @@ msgstr "События по источникам" msgid "Every %d Minutes" msgstr "Каждые %d минут" -#: src/Admin/AdminPage.php:747 +#: src/Admin/AdminPage.php:2218 +msgid "Example Plugin on GitHub" +msgstr "Пример плагина на GitHub" + +#: src/Admin/AdminPage.php:750 msgid "" "Execution time, status (completed/failed/retrying), job class, queue, error " "message." msgstr "" -"Время выполнения, статус (завершено/неудача/повторная попытка), класс задачи," -" очередь, сообщение об ошибке." +"Время выполнения, статус (завершено/сбой/повторная попытка), класс задания, " +"очередь, сообщение об ошибке." -#: src/Admin/AdminPage.php:45 src/Admin/AdminPage.php:327 -#: src/Admin/AdminPage.php:356 src/Admin/AdminPage.php:843 -#| msgid "File" +#: src/Admin/AdminPage.php:47 src/Admin/AdminPage.php:330 +#: src/Admin/AdminPage.php:359 src/Admin/AdminPage.php:846 msgid "Failed" -msgstr "Сбои и неудачи" +msgstr "Ошибки" -#: src/Admin/AdminPage.php:1760 +#: src/Admin/AdminPage.php:1763 msgid "Failed Actions" msgstr "Неудачные действия" @@ -600,74 +650,78 @@ msgstr "Не удалось возобновить событие" msgid "Failed to update event" msgstr "Не удалось обновить событие" -#: src/Admin/AdminPage.php:116 src/Admin/AdminPage.php:132 +#: src/Admin/AdminPage.php:119 src/Admin/AdminPage.php:135 msgid "For developers" msgstr "Для разработчиков" -#: src/Admin/AdminPage.php:164 +#: src/Admin/AdminPage.php:167 msgid "For more information:" msgstr "Для получения дополнительной информации:" -#: src/Admin/AdminPage.php:1117 +#: src/Admin/AdminPage.php:1120 msgid "" "For Redis/Memcached to work, you need the PHP extension installed and a " "server available. If not, the system will automatically use the \"database\" " "driver." msgstr "" -"Для работы Redis/Memcached необходимо установить PHP-расширение и иметь " -"доступный сервер. В противном случае система автоматически использует " -"драйвер \"база данных\"." +"Для работы Redis/Memcached необходимо установить расширение PHP и иметь " +"доступный сервер. В противном случае система автоматически будет " +"использовать драйвер \"database\"." -#: src/Admin/AdminPage.php:123 +#: src/Admin/AdminPage.php:126 msgid "For site administrators" -msgstr "Для администраторов сайтов" +msgstr "Для администраторов сайта" -#: src/Admin/AdminPage.php:1988 +#: src/Admin/AdminPage.php:2030 msgid "Forces processing of all queues" -msgstr "Принудительно обрабатывает все очереди" +msgstr "Принудительная обработка всех очередей" -#: src/Admin/AdminPage.php:504 src/Admin/AdminPage.php:615 +#: src/Admin/AdminPage.php:507 src/Admin/AdminPage.php:618 msgid "from now" -msgstr "сейчас" +msgstr "с настоящего момента" #. %s: URL to GitHub repository -#: src/Admin/AdminPage.php:795 +#: src/Admin/AdminPage.php:798 #, php-format msgid "Full documentation and code examples are available on GitHub: %s." msgstr "Полная документация и примеры кода доступны на GitHub: %s." -#: src/Admin/AdminPage.php:165 +#: src/Admin/AdminPage.php:168 msgid "GitHub Repository" msgstr "Репозиторий GitHub" -#: src/Admin/AdminPage.php:1788 +#: src/Admin/AdminPage.php:1791 msgid "GMT Offset" -msgstr "Смещение GMT" +msgstr "GMT Offset" -#: src/Admin/AdminPage.php:57 +#: src/Admin/AdminPage.php:60 msgid "Help" msgstr "Помощь" -#: src/Admin/AdminPage.php:44 +#: src/Admin/AdminPage.php:46 msgid "History" msgstr "История" -#: src/Admin/AdminPage.php:744 +#: src/Admin/AdminPage.php:747 msgid "History of all job executions for diagnostics and debugging." -msgstr "История всех выполнений задач для диагностики и отладки." +msgstr "История всех выполненных заданий для диагностики и отладки." -#: src/Admin/AdminPage.php:1402 src/Admin/AdminPage.php:1479 -#: src/Admin/AdminPage.php:1555 src/Admin/AdminPage.php:2204 +#: src/Admin/AdminPage.php:1405 src/Admin/AdminPage.php:1482 +#: src/Admin/AdminPage.php:1558 src/Admin/AdminPage.php:2252 msgid "Hook" msgstr "Хук" -#: src/Admin/AdminPage.php:662 +#: src/Admin/AdminPage.php:665 msgid "How Queues Work" msgstr "Как работают очереди" -#: src/Admin/AdminPage.php:1099 -msgid "How to change the driver?" -msgstr "Как изменить драйвер?" +#: src/Admin/AdminPage.php:1102 +msgid "How to change the storage backend?" +msgstr "Как изменить хранилище для данных?" + +#: src/Admin/AdminPage.php:2289 +msgid "How to run WP Queue as a long-running background process." +msgstr "Как запустить WP Queue в виде долгоживущего фонового процесса." #. URI of the plugin msgid "https://github.com/rwsite/wp-queue" @@ -677,120 +731,167 @@ msgstr "https://github.com/rwsite/wp-queue" msgid "https://rwsite.ru" msgstr "https://rwsite.ru" -#: src/Admin/AdminPage.php:476 +#: src/Admin/AdminPage.php:479 msgid "ID" msgstr "ID" -#: src/Admin/AdminPage.php:322 +#: src/Admin/AdminPage.php:325 msgid "Idle" -msgstr "Бездействие" +msgstr "Idle" -#: src/Admin/AdminPage.php:782 +#: src/Admin/AdminPage.php:785 msgid "" "If installed, displays version and statistics (pending/running/failed " "actions)." msgstr "" -"Если установлен, отображает версию и статистику " -"(ожидание/выполнение/неудачные действия)." +"Если установлено, отображает версию и статистику " +"(ожидающие/выполняемые/неудачные действия)." -#: src/Admin/AdminPage.php:131 +#: src/Admin/AdminPage.php:2369 +msgid "" +"If the worker is not running, queues will not be processed in daemon mode. " +"Make sure the process is started and monitored." +msgstr "" +"Если воркер не запущен, очереди в режиме демона обрабатываться не будут. " +"Убедитесь, что процесс запущен и мониторится." + +#: src/Admin/AdminPage.php:2309 +msgid "" +"If WP-CLI is not available, create a PHP script that boots WordPress and " +"runs the worker loop:" +msgstr "" +"Если WP-CLI недоступен, создайте PHP-скрипт, который загружает WordPress и " +"запускает цикл воркера:" + +#: src/Admin/AdminPage.php:134 msgid "" "If you installed WP Queue because another plugin requires it, you usually do " "not need to configure anything here. Use these tabs mainly for monitoring " "and troubleshooting." msgstr "" -"Если вы установили WP Queue, потому что другой плагин требует его, обычно " -"вам не нужно ничего настраивать здесь. Используйте эти вкладки в основном " -"для мониторинга и устранения неполадок." +"Если вы установили WP Queue, потому что он требуется другому плагину, обычно " +"здесь ничего настраивать не нужно. Используйте эти вкладки в основном для " +"мониторинга и устранения неполадок." -#: src/Admin/AdminPage.php:1116 +#: src/Admin/AdminPage.php:1119 msgid "Important:" msgstr "Важно:" -#: src/Admin/AdminPage.php:344 +#: src/Admin/AdminPage.php:347 msgid "In Queue" msgstr "В очереди" -#: src/Admin/AdminPage.php:113 +#: src/Admin/AdminPage.php:2299 +msgid "" +"In this mode WP-Cron scheduling and loopback requests are disabled " +"automatically." +msgstr "" +"В этом режиме планирование WP-Cron и loopback-запросы отключаются " +"автоматически." + +#: src/Admin/AdminPage.php:116 msgid "Inspect and manage WP-Cron events for WP Queue and other plugins." msgstr "" -"Проверяйте и управляйте WP-Cron событиями для WP Queue и других плагинов." +"Проверяйте и управляйте событиями WP-Cron для WP Queue и других плагинов." -#: src/Admin/AdminPage.php:1081 +#: src/Admin/AdminPage.php:1084 msgid "Install: pecl install memcached" -msgstr "Установка: pecl install memcached" +msgstr "Установите: pecl install memcached" -#: src/Admin/AdminPage.php:1079 +#: src/Admin/AdminPage.php:1082 msgid "Install: pecl install redis" -msgstr "Установка: pecl install redis" +msgstr "Установите: pecl install redis" -#: src/Admin/AdminPage.php:1585 +#: src/Admin/AdminPage.php:1588 msgid "Interval" msgstr "Интервал" -#: src/Admin/AdminPage.php:590 src/Admin/AdminPage.php:874 -#: src/Admin/AdminPage.php:958 src/Admin/AdminPage.php:1162 +#: src/Admin/AdminPage.php:593 src/Admin/AdminPage.php:877 +#: src/Admin/AdminPage.php:961 src/Admin/AdminPage.php:1165 msgid "Job" msgstr "Задача" -#: src/Admin/AdminPage.php:477 +#: src/Admin/AdminPage.php:480 msgid "Job Class" -msgstr "Класс задачи" +msgstr "Job Class" -#: src/Admin/AdminPage.php:731 +#: src/Admin/AdminPage.php:734 msgid "" "Job class, execution interval (e.g., \"hourly\", \"daily\"), queue " "assignment, next run time." msgstr "" -"Класс задачи, интервал выполнения (например, \"ежечасно\", \"ежедневно\"), " -"назначение очереди, время следующего запуска." +"Класс Job, интервал выполнения (например, \"ежечасно\", \"ежедневно\"), " +"назначение в очередь, время следующего запуска." -#: src/Admin/AdminPage.php:564 +#: src/Admin/AdminPage.php:567 msgid "Job Details" -msgstr "Детали задачи" +msgstr "Job Details" -#: src/Admin/AdminPage.php:731 +#: src/Admin/AdminPage.php:734 msgid "Job information" -msgstr "Информация о задаче" +msgstr "Job information" -#: src/Admin/AdminPage.php:730 +#: src/Admin/AdminPage.php:733 msgid "Job list" -msgstr "Список задач" +msgstr "Список Job" -#: src/Admin/AdminPage.php:384 +#: src/Admin/AdminPage.php:387 msgid "jobs" msgstr "задачи" -#: src/Admin/AdminPage.php:43 +#: src/Admin/AdminPage.php:45 msgid "Jobs in Queue" msgstr "Задачи в очереди" -#: src/Admin/AdminPage.php:747 +#: src/Admin/AdminPage.php:750 msgid "Log table" -msgstr "Таблица журнала" +msgstr "Таблица логов" -#: src/Admin/AdminPage.php:741 +#: src/Admin/AdminPage.php:744 msgid "Logs" -msgstr "Журналы" +msgstr "Логи" -#: src/Admin/AdminPage.php:127 +#: src/Admin/AdminPage.php:130 msgid "" "Logs – history of completed and failed jobs that helps to diagnose problems." msgstr "" -"Журналы – история завершенных и неудачных задач, которые помогают " +"Логи — история выполненных и неудачных заданий, которая помогает " "диагностировать проблемы." -#: src/Admin/AdminPage.php:1877 +#: src/Admin/AdminPage.php:1916 msgid "Loopback" msgstr "Обратная связь" +#: src/Admin/AdminPage.php:1879 +msgid "" +"Loopback is disabled. Jobs will be processed only by WP-Cron, which can " +"delay execution by up to one minute. Run a daemon worker for instant " +"processing." +msgstr "" +"Loopback отключен. Задачи будут обрабатываться только WP-Cron с задержкой до " +"минуты. Запустите демон-воркер для мгновенной обработки." + +#: src/Admin/AdminPage.php:1871 +msgid "Loopback is enabled and working. Jobs start immediately after dispatch." +msgstr "Loopback включен и работает. Задачи запускаются сразу после отправки." + +#: src/Admin/AdminPage.php:1875 +msgid "" +"Loopback is inactive. Jobs will be processed only by WP-Cron, which can " +"delay execution by up to one minute. Enable loopback or run a daemon worker " +"for instant processing." +msgstr "" +"Loopback неактивен. Задачи будут обрабатываться только WP-Cron с задержкой " +"до минуты. Включите loopback или запустите демон-воркер для мгновенной " +"обработки." + #. %s: loopback error message #: src/Admin/SystemStatus.php:271 #, php-format msgid "Loopback issue: %s" msgstr "Проблема обратной связи: %s" -#: src/Admin/AdminPage.php:1719 +#: src/Admin/AdminPage.php:1722 msgid "Loopback Request" msgstr "Запрос обратной связи" @@ -798,192 +899,207 @@ msgstr "Запрос обратной связи" msgid "Loopback request successful" msgstr "Запрос обратной связи выполнен успешно" -#: src/Admin/AdminPage.php:2139 +#: src/Admin/AdminPage.php:2181 msgid "Manage queues from command line:" msgstr "Управление очередями из командной строки:" -#: src/Admin/AdminPage.php:728 +#: src/Admin/AdminPage.php:731 msgid "Management of scheduled recurring tasks." msgstr "Управление запланированными повторяющимися задачами." -#: src/Admin/AdminPage.php:760 +#: src/Admin/AdminPage.php:763 msgid "" "Management of WordPress system timers that trigger background processes." msgstr "" -"Управление системными таймерами WordPress, которые запускают фоновые " -"процессы." +"Управление системными таймерами WordPress, запускающими фоновые процессы." -#: src/Admin/AdminPage.php:732 +#: src/Admin/AdminPage.php:735 msgid "Manual run" msgstr "Ручной запуск" -#: src/Admin/AdminPage.php:1684 src/Admin/AdminPage.php:1911 +#: src/Admin/AdminPage.php:1687 src/Admin/AdminPage.php:1953 msgid "Max Execution Time" msgstr "Максимальное время выполнения" -#: src/Admin/AdminPage.php:1673 src/Admin/AdminPage.php:1828 -#: src/Admin/AdminPage.php:1903 +#: src/Admin/AdminPage.php:1676 src/Admin/AdminPage.php:1831 +#: src/Admin/AdminPage.php:1945 msgid "Memory Limit" -msgstr "Лимит памяти" +msgstr "Ограничение памяти" #: src/Admin/SystemStatus.php:275 msgid "Memory usage is above 80%." msgstr "Использование памяти выше 80%." -#: src/Admin/AdminPage.php:876 +#: src/Admin/AdminPage.php:879 msgid "Message" msgstr "Сообщение" -#: src/Admin/AdminPage.php:111 +#: src/Admin/AdminPage.php:114 msgid "Monitor which background jobs are queued and running right now." msgstr "" -"Отслеживайте, какие фоновые задачи находятся в очереди и выполняются прямо " -"сейчас." +"Отслеживайте, какие фоновые задачи находятся в очереди и выполняются в " +"данный момент." -#: src/Admin/AdminPage.php:790 +#: src/Admin/AdminPage.php:793 msgid "More documentation" msgstr "Дополнительная документация" -#: src/Admin/AdminPage.php:1584 +#: src/Admin/AdminPage.php:1587 msgid "Name" msgstr "Имя" -#: src/Admin/AdminPage.php:2076 +#: src/Admin/AdminPage.php:2118 msgid "Named Queues" msgstr "Именованные очереди" -#: src/Admin/AdminPage.php:593 src/Admin/AdminPage.php:1403 -#: src/Admin/AdminPage.php:1480 +#: src/Admin/AdminPage.php:596 src/Admin/AdminPage.php:1406 +#: src/Admin/AdminPage.php:1483 msgid "Next Run" msgstr "Следующий запуск" -#: src/Admin/AdminPage.php:733 +#: src/Admin/AdminPage.php:736 msgid "Next run status" msgstr "Статус следующего запуска" -#: src/Admin/AdminPage.php:1168 +#: src/Admin/AdminPage.php:1171 msgid "No activity" msgstr "Нет активности" -#: src/Admin/AdminPage.php:1489 +#: src/Admin/AdminPage.php:1492 msgid "No cron events found." -msgstr "Cron-события не найдены." +msgstr "Событий cron не обнаружено." -#: src/Admin/AdminPage.php:967 +#: src/Admin/AdminPage.php:970 msgid "No errors" -msgstr "Нет ошибок" +msgstr "Ошибок нет." -#: src/Admin/AdminPage.php:1140 +#: src/Admin/AdminPage.php:1143 msgid "No extension" msgstr "Нет расширения" -#: src/Admin/AdminPage.php:882 +#: src/Admin/AdminPage.php:885 msgid "No logs found" msgstr "Журналы не найдены" -#: src/Admin/AdminPage.php:2198 +#: src/Admin/AdminPage.php:2246 msgid "No paused events" msgstr "Нет приостановленных событий" -#: src/Admin/AdminPage.php:1397 +#: src/Admin/AdminPage.php:1400 msgid "No scheduled events" -msgstr "Нет запланированных событий" +msgstr "Мероприятия не запланированы." -#: src/Admin/AdminPage.php:600 +#: src/Admin/AdminPage.php:603 msgid "No scheduled jobs found." -msgstr "Запланированные задачи не найдены." +msgstr "Запланированных заданий не найдено." -#: src/Admin/AdminPage.php:1144 +#: src/Admin/AdminPage.php:1147 msgid "No server" msgstr "Нет сервера" -#: src/Admin/AdminPage.php:779 +#: src/Admin/AdminPage.php:782 msgid "Notifications of critical issues (low memory, disabled WP-Cron)." msgstr "" -"Уведомления о критических проблемах (низкая память, отключенный WP-Cron)." +"Уведомления о критических проблемах (недостаток памяти, отключение WP-Cron)." -#: src/Admin/AdminPage.php:506 +#: src/Admin/AdminPage.php:509 msgid "Now" msgstr "Сейчас" -#: src/Admin/AdminPage.php:749 +#: src/Admin/AdminPage.php:752 msgid "Number of entries" msgstr "Количество записей" -#: src/Admin/AdminPage.php:1725 +#: src/Admin/AdminPage.php:1728 src/Admin/AdminPage.php:1925 msgid "OK" -msgstr "ОК" +msgstr "OK" -#: src/Admin/AdminPage.php:2214 +#: src/Admin/AdminPage.php:2262 msgid "One-time" -msgstr "Однократно" +msgstr "Один раз" + +#: src/Admin/AdminPage.php:2331 +msgid "Option A: systemd service" +msgstr "Вариант A: сервис systemd" + +#: src/Admin/AdminPage.php:2348 +msgid "Option B: Supervisor" +msgstr "Вариант B: Supervisor" + +#: src/Admin/AdminPage.php:2358 +msgid "Option C: Docker Compose" +msgstr "Вариант C: Docker Compose" + +#: src/Admin/AdminPage.php:2364 +msgid "Option D: plain PHP script" +msgstr "Вариант D: простой PHP-скрипт" -#: src/Admin/AdminPage.php:1351 src/Admin/AdminPage.php:1446 -#: src/Admin/AdminPage.php:1502 src/Admin/CronMonitor.php:220 +#: src/Admin/AdminPage.php:1354 src/Admin/AdminPage.php:1449 +#: src/Admin/AdminPage.php:1505 src/Admin/CronMonitor.php:220 msgid "Overdue" msgstr "Просрочено" -#: src/Admin/AdminPage.php:42 src/Admin/AdminPage.php:49 -#: src/Admin/AdminPage.php:250 +#: src/Admin/AdminPage.php:44 src/Admin/AdminPage.php:51 +#: src/Admin/AdminPage.php:253 msgid "Overview" msgstr "Обзор" -#: src/Admin/AdminPage.php:442 src/Admin/AdminPage.php:1532 -#: src/Admin/AdminPage.php:1533 +#: src/Admin/AdminPage.php:445 src/Admin/AdminPage.php:1535 +#: src/Admin/AdminPage.php:1536 msgid "Pause" -msgstr "Приостановить" +msgstr "Пауза" -#: src/Admin/AdminPage.php:197 +#: src/Admin/AdminPage.php:200 msgid "Pause this queue?" -msgstr "Приостановить эту очередь?" +msgstr "Приостановить выполнение этой очереди?" -#: src/Admin/AdminPage.php:52 src/Admin/AdminPage.php:325 -#: src/Admin/AdminPage.php:424 src/Admin/AdminPage.php:1355 +#: src/Admin/AdminPage.php:54 src/Admin/AdminPage.php:328 +#: src/Admin/AdminPage.php:427 src/Admin/AdminPage.php:1358 msgid "Paused" msgstr "Приостановлено" -#: src/Admin/AdminPage.php:1557 +#: src/Admin/AdminPage.php:1560 msgid "Paused At" -msgstr "Приостановлено в" +msgstr "Приостановлено на" -#: src/Admin/AdminPage.php:1551 +#: src/Admin/AdminPage.php:1554 msgid "Paused Events" msgstr "Приостановленные события" -#: src/Admin/AdminPage.php:765 +#: src/Admin/AdminPage.php:768 msgid "Paused events" msgstr "Приостановленные события" -#: src/Admin/AdminPage.php:2206 +#: src/Admin/AdminPage.php:2254 msgid "Paused Since" msgstr "Приостановлено с" -#: src/Admin/AdminPage.php:323 src/Admin/AdminPage.php:464 -#: src/Admin/AdminPage.php:1951 +#: src/Admin/AdminPage.php:326 src/Admin/AdminPage.php:467 +#: src/Admin/AdminPage.php:1993 msgid "Pending" -msgstr "Ожидание" +msgstr "В ожидании" -#: src/Admin/AdminPage.php:1752 +#: src/Admin/AdminPage.php:1755 msgid "Pending Actions" msgstr "Ожидающие действия" -#: src/Admin/AdminPage.php:1849 src/Admin/AdminPage.php:1899 +#: src/Admin/AdminPage.php:1852 src/Admin/AdminPage.php:1941 msgid "PHP" msgstr "PHP" -#: src/Admin/AdminPage.php:780 +#: src/Admin/AdminPage.php:783 msgid "" "PHP and WordPress versions, memory limits (current usage), maximum execution " "time, timezone." msgstr "" -"Версии PHP и WordPress, лимиты памяти (текущее использование), максимальное " -"время выполнения, часовой пояс." +"Версии PHP и WordPress, ограничения памяти (текущее использование), " +"максимальное время выполнения, часовой пояс." -#: src/QueueManager.php:288 +#: src/QueueManager.php:470 msgid "PHP extension \"memcached\" is not installed" msgstr "PHP-расширение \"memcached\" не установлено" -#: src/QueueManager.php:235 +#: src/QueueManager.php:267 msgid "PHP extension \"redis\" (phpredis) is not installed" msgstr "PHP-расширение \"redis\" (phpredis) не установлено" @@ -991,294 +1107,349 @@ msgstr "PHP-расширение \"redis\" (phpredis) не установлен msgid "PHP max_execution_time is less than 30 seconds." msgstr "PHP max_execution_time меньше 30 секунд." -#: src/Admin/AdminPage.php:1665 +#: src/Admin/AdminPage.php:1668 msgid "PHP Version" msgstr "Версия PHP" -#: src/Admin/AdminPage.php:1471 +#: src/Admin/AdminPage.php:1474 msgid "Plugins" msgstr "Плагины" -#: src/Admin/AdminPage.php:667 +#: src/QueueManager.php:416 +msgid "Predis library is not available" +msgstr "Библиотека Predis недоступна" + +#: src/Admin/AdminPage.php:670 msgid "Process" -msgstr "Обработать" +msgstr "Процесс" -#: src/Admin/AdminPage.php:447 src/Admin/AdminPage.php:1989 +#: src/Admin/AdminPage.php:450 src/Admin/AdminPage.php:2031 msgid "Process Now" msgstr "Обработать сейчас" -#: src/Admin/AdminPage.php:1987 +#: src/Admin/AdminPage.php:2029 msgid "Process Queues" -msgstr "Обработать очереди" +msgstr "Обработочные очереди" -#: src/Admin/AdminPage.php:426 src/Admin/AdminPage.php:468 +#: src/Admin/AdminPage.php:429 src/Admin/AdminPage.php:471 msgid "Processing" msgstr "Обработка" -#: src/Admin/AdminPage.php:592 src/Admin/AdminPage.php:875 -#: src/Admin/AdminPage.php:959 +#: src/Admin/AdminPage.php:595 src/Admin/AdminPage.php:878 +#: src/Admin/AdminPage.php:962 msgid "Queue" msgstr "Очередь" -#: src/Admin/AdminPage.php:1860 -msgid "Queue Driver" -msgstr "Драйвер очереди" +#: src/Admin/AdminPage.php:1895 +msgid "Queue handler" +msgstr "Обработчик очереди" -#: src/Admin/AdminPage.php:487 +#: src/Admin/AdminPage.php:490 msgid "Queue is empty" msgstr "Очередь пуста" -#: src/Admin/AdminPage.php:715 +#: src/Admin/AdminPage.php:718 msgid "Queue statistics" msgstr "Статистика очереди" -#: src/Admin/AdminPage.php:716 +#: src/Admin/AdminPage.php:1889 +msgid "Queue Storage backend" +msgstr "бэкэнд хранилища очередей" + +#: src/Admin/AdminPage.php:719 msgid "Queue table" msgstr "Таблица очереди" -#: src/Admin/AdminPage.php:420 +#: src/Admin/AdminPage.php:423 #, php-format msgid "Queue: %s" msgstr "Очередь: %s" -#: src/Admin/AdminPage.php:35 src/Admin/AdminPage.php:371 +#: src/Admin/AdminPage.php:37 src/Admin/AdminPage.php:374 msgid "Queues" msgstr "Очереди" -#: src/Admin/AdminPage.php:2037 +#: src/Admin/AdminPage.php:2079 msgid "Quick Start" msgstr "Быстрый старт" -#: src/Admin/AdminPage.php:112 +#: src/Admin/AdminPage.php:115 msgid "Quickly see if any jobs are failing and view recent log entries." msgstr "" -"Быстро проверьте, не завершаются ли задачи неудачей, и просмотрите недавние " -"записи журнала." +"Быстро проверьте, не завершаются ли какие-либо задания с ошибкой, и " +"просмотрите последние записи в журнале." -#: src/Admin/AdminPage.php:1136 +#: src/Admin/AdminPage.php:1139 msgid "Ready" msgstr "Готово" -#: src/Admin/AdminPage.php:395 +#: src/Admin/AdminPage.php:398 msgid "Recent Activity" -msgstr "Недавняя активность" +msgstr "Последние события" -#: src/Admin/AdminPage.php:717 +#: src/Admin/AdminPage.php:720 msgid "Recent activity" -msgstr "Недавняя активность" +msgstr "Последние события" + +#: src/QueueManager.php:358 +msgid "Redis connection failed" +msgstr "Подключение к Redis не удалось." -#: src/Admin/AdminPage.php:696 +#: src/QueueManager.php:243 +msgid "Redis is disabled via WP_REDIS_DISABLED" +msgstr "Redis отключен с помощью WP_REDIS_DISABLED" + +#: src/Admin/AdminPage.php:699 msgid "Redis Support" msgstr "Поддержка Redis" -#: src/Admin/AdminPage.php:1580 +#: src/Admin/AdminPage.php:1583 msgid "Registered Schedules" msgstr "Зарегистрированные расписания" -#: src/Admin/AdminPage.php:766 +#: src/Admin/AdminPage.php:769 msgid "Registered schedules" msgstr "Зарегистрированные расписания" -#: src/Admin/AdminPage.php:2170 +#: src/Admin/AdminPage.php:2212 msgid "Report an Issue" msgstr "Сообщить о проблеме" -#: src/Admin/AdminPage.php:166 +#: src/Admin/AdminPage.php:169 msgid "Report Issues" msgstr "Сообщить о проблемах" -#: src/Admin/AdminPage.php:437 src/Admin/AdminPage.php:1571 -#: src/Admin/AdminPage.php:2220 +#: src/Admin/AdminPage.php:440 src/Admin/AdminPage.php:1574 +#: src/Admin/AdminPage.php:2268 msgid "Resume" -msgstr "Возобновить" +msgstr "Резюме" -#: src/Admin/AdminPage.php:2094 +#: src/Admin/AdminPage.php:2136 msgid "Retry Attempts" -msgstr "Попытки повтора" +msgstr "Повторные попытки" -#: src/Admin/AdminPage.php:143 src/Admin/AdminPage.php:1518 +#: src/Admin/AdminPage.php:146 src/Admin/AdminPage.php:1521 msgid "Run" -msgstr "Запустить" +msgstr "Запуск" -#: src/Admin/AdminPage.php:622 src/Admin/AdminPage.php:1517 +#: src/Admin/AdminPage.php:625 src/Admin/AdminPage.php:1520 msgid "Run Now" -msgstr "Запустить сейчас" +msgstr "Запустите сейчас" -#: src/Admin/AdminPage.php:764 +#: src/Admin/AdminPage.php:767 msgid "" "Run now, edit schedule, pause, delete. Modal window for changing interval." msgstr "" -"Запустить сейчас, редактировать расписание, приостановить, удалить. " +"Запустить сейчас, отредактировать расписание, приостановить, удалить. " "Модальное окно для изменения интервала." -#: src/Admin/AdminPage.php:2116 +#: src/Admin/AdminPage.php:2158 msgid "Run tasks on schedule:" -msgstr "Выполнять задачи по расписанию:" +msgstr "Выполнить задачи по расписанию:" -#: src/Admin/AdminPage.php:324 src/Admin/AdminPage.php:348 +#: src/Admin/AdminPage.php:327 src/Admin/AdminPage.php:351 msgid "Running" -msgstr "Выполняется" +msgstr "Запущено" -#: src/Admin/AdminPage.php:1756 +#: src/Admin/AdminPage.php:1759 msgid "Running Actions" -msgstr "Выполняющиеся действия" +msgstr "Выполнение действий" + +#: src/Admin/AdminPage.php:2346 +msgid "" +"Save as /etc/systemd/system/wp-queue-worker.service, then run systemctl " +"enable --now wp-queue-worker." +msgstr "" +"Сохраните как /etc/systemd/system/wp-queue-worker.service, затем выполните " +"systemctl enable --now wp-queue-worker." -#: src/Admin/AdminPage.php:1622 +#: src/Admin/AdminPage.php:1625 msgid "Save Changes" msgstr "Сохранить изменения" -#: src/Admin/AdminPage.php:591 src/Admin/AdminPage.php:1481 -#: src/Admin/AdminPage.php:1556 src/Admin/AdminPage.php:1610 -#: src/Admin/AdminPage.php:2205 +#: src/Admin/AdminPage.php:2324 +msgid "Save the script, make it executable and run it in the background:" +msgstr "Сохраните скрипт, сделайте его исполняемым и запустите в фоне:" + +#: src/Admin/AdminPage.php:594 src/Admin/AdminPage.php:1484 +#: src/Admin/AdminPage.php:1559 src/Admin/AdminPage.php:1613 +#: src/Admin/AdminPage.php:2253 msgid "Schedule" msgstr "Расписание" -#: src/Admin/AdminPage.php:2057 +#: src/Admin/AdminPage.php:2099 msgid "Schedule a job to run after a specific time:" -msgstr "Запланировать выполнение задачи после определенного времени:" +msgstr "Настройте выполнение задания по истечении определенного времени:" -#: src/Admin/AdminPage.php:51 src/Admin/AdminPage.php:1347 +#: src/Admin/AdminPage.php:53 src/Admin/AdminPage.php:1350 msgid "Scheduled" msgstr "Запланировано" -#: src/Admin/AdminPage.php:725 +#: src/Admin/AdminPage.php:728 msgid "Scheduled Jobs" -msgstr "Запланированные задачи" +msgstr "Запланированные задания" -#: src/Admin/AdminPage.php:126 +#: src/Admin/AdminPage.php:129 msgid "" "Scheduled Jobs – list of recurring background jobs added by your theme or " "plugins." msgstr "" -"Запланированные задачи – список повторяющихся фоновых задач, добавленных " +"Запланированные задания — список повторяющихся фоновых заданий, добавленных " "вашей темой или плагинами." -#: src/Admin/AdminPage.php:36 src/Admin/AdminPage.php:2115 +#: src/Admin/AdminPage.php:38 src/Admin/AdminPage.php:2157 msgid "Scheduler" msgstr "Планировщик" -#: src/Admin/AdminPage.php:1776 src/Admin/AdminPage.php:1780 -#: src/Admin/AdminPage.php:1922 +#: src/Admin/AdminPage.php:1779 src/Admin/AdminPage.php:1783 +#: src/Admin/AdminPage.php:1964 msgid "Server Time" -msgstr "Серверное время" +msgstr "Время сервера" -#: src/Admin/AdminPage.php:783 +#: src/Admin/AdminPage.php:786 msgid "Server time" -msgstr "Серверное время" +msgstr "Время сервера" -#: src/Admin/AdminPage.php:1507 src/Admin/AdminPage.php:1565 +#: src/Admin/AdminPage.php:1510 src/Admin/AdminPage.php:1568 msgid "Single" -msgstr "Одиночный" +msgstr "Один" -#: src/Admin/AdminPage.php:1612 +#: src/Admin/AdminPage.php:1615 msgid "Single (run once)" -msgstr "Одиночный (выполнить один раз)" +msgstr "Один (запуск один раз)" -#: src/Admin/AdminPage.php:1404 src/Admin/AdminPage.php:1482 +#: src/Admin/AdminPage.php:1407 src/Admin/AdminPage.php:1485 msgid "Source" msgstr "Источник" -#: src/Admin/AdminPage.php:480 src/Admin/AdminPage.php:873 -#: src/Admin/AdminPage.php:1053 src/Admin/AdminPage.php:1161 +#: src/Admin/AdminPage.php:2304 +msgid "Start the worker from the WordPress root:" +msgstr "Запустите воркер из корня WordPress:" + +#: src/Admin/AdminPage.php:483 src/Admin/AdminPage.php:876 +#: src/Admin/AdminPage.php:1056 src/Admin/AdminPage.php:1164 msgid "Status" msgstr "Статус" -#: src/Admin/AdminPage.php:746 +#: src/Admin/AdminPage.php:749 msgid "Status filters" -msgstr "Фильтры статуса" +msgstr "Фильтры состояния" -#: src/Admin/AdminPage.php:665 +#: src/Admin/AdminPage.php:668 msgid "Storage" msgstr "Хранилище" +#: src/Admin/AdminPage.php:1055 +msgid "Storage backend" +msgstr "бэкэнд хранилища" + +#: src/Admin/AdminPage.php:1034 +#, php-format +msgid "" +"Storage backend \"%s\" is configured in wp-config.php, but not available. " +"Falling back to \"%s\"." +msgstr "" +"В файле wp-config.php настроен бэкэнд хранилища \"%s\", но он недоступен. " +"Используется резервный вариант \"%s\"." + #: src/QueueManager.php:198 msgid "Synchronous execution (no queue)" msgstr "Синхронное выполнение (без очереди)" -#: src/Admin/AdminPage.php:37 src/Admin/AdminPage.php:774 +#: src/Admin/AdminPage.php:39 src/Admin/AdminPage.php:777 msgid "System" msgstr "Система" -#: src/Admin/AdminPage.php:686 +#: src/Admin/AdminPage.php:689 msgid "System Cron (Recommended)" -msgstr "Системный Cron (Рекомендуется)" +msgstr "Системный планировщик задач (рекомендуется)" -#: src/Admin/AdminPage.php:779 +#: src/Admin/AdminPage.php:782 msgid "System health" -msgstr "Системное здоровье" +msgstr "Здоровье системы" -#: src/Admin/AdminPage.php:1648 +#: src/Admin/AdminPage.php:1651 msgid "System Issues Detected:" -msgstr "Обнаружены системные проблемы:" +msgstr "Обнаружены системные неполадки:" -#: src/Admin/AdminPage.php:55 +#: src/Admin/AdminPage.php:57 msgid "System Status" -msgstr "Системный статус" +msgstr "Состояние системы" -#: src/Admin/AdminPage.php:129 +#: src/Admin/AdminPage.php:132 msgid "" "System – checks PHP version, WP-Cron status and other important settings." msgstr "" -"Система – проверяет версию PHP, статус WP-Cron и другие важные настройки." +"Система проверяет версию PHP, статус WP-Cron и другие важные настройки." -#: src/Admin/AdminPage.php:732 +#: src/Admin/AdminPage.php:735 msgid "" "The \"Run Now\" button allows you to run any job immediately, without " "waiting for the schedule." msgstr "" -"Кнопка \"Запустить сейчас\" позволяет запустить любую задачу немедленно, без " -"ожидания расписания." +"Кнопка «Запустить сейчас» позволяет немедленно запустить любое задание, не " +"дожидаясь расписания." -#: src/Admin/AdminPage.php:665 +#: src/Admin/AdminPage.php:2329 +msgid "" +"The command above must stay alive. In production use one of the options " +"below." +msgstr "" +"Команда выше должна оставаться запущенной. В продакшене используйте один из " +"вариантов ниже." + +#: src/Admin/AdminPage.php:668 msgid "The job is saved in the database (or Redis) waiting to be picked up." -msgstr "Задача сохраняется в базе данных (или Redis) в ожидании обработки." +msgstr "Задание сохраняется в базе данных (или Redis) в ожидании обработки." -#: src/Admin/AdminPage.php:717 +#: src/Admin/AdminPage.php:720 msgid "The last 10 log entries for quick tracking of queue activity." msgstr "" -"Последние 10 записей журнала для быстрого отслеживания активности очереди." +"Последние 10 записей в журнале для быстрого отслеживания активности в " +"очереди." -#: src/Admin/AdminPage.php:713 +#: src/Admin/AdminPage.php:716 msgid "The main tab for monitoring queue status in real-time." -msgstr "Основная вкладка для мониторинга статуса очереди в реальном времени." +msgstr "" +"Главная вкладка для мониторинга состояния очереди в режиме реального времени." -#: src/Admin/AdminPage.php:108 +#: src/Admin/AdminPage.php:111 msgid "" "The plugin itself does not add new features to the frontend. It provides a " "reliable queue that other plugins or your custom code can use for background " "work." msgstr "" -"Сам плагин не добавляет новые функции на фронтенд. Он предоставляет надежную " -"очередь, которую другие плагины или ваш кастомный код могут использовать для " -"фоновой работы." +"Сам плагин не добавляет новых функций на фронтенд. Он предоставляет надежную " +"очередь, которую другие плагины или ваш пользовательский код могут " +"использовать для фоновой работы." -#: src/Admin/AdminPage.php:667 +#: src/Admin/AdminPage.php:670 msgid "" "The worker picks up the job and executes it. If it succeeds, it is marked as " "\"Completed\". If it fails, it can be retried." msgstr "" -"Рабочий процесс забирает задачу и выполняет ее. В случае успеха она " -"отмечается как \"Завершено\". В случае неудачи ее можно повторить." +"Работник берет задание и выполняет его. Если оно выполняется успешно, оно " +"помечается как «Завершено». Если оно не выполняется, его можно повторить." -#: src/Admin/AdminPage.php:314 +#: src/Admin/AdminPage.php:317 msgid "This section is under development." msgstr "Этот раздел находится в разработке." -#: src/Admin/AdminPage.php:872 src/Admin/AdminPage.php:957 -#: src/Admin/AdminPage.php:1160 src/Admin/AdminPage.php:1918 +#: src/Admin/AdminPage.php:875 src/Admin/AdminPage.php:960 +#: src/Admin/AdminPage.php:1163 src/Admin/AdminPage.php:1960 msgid "Time" msgstr "Время" -#: src/Admin/AdminPage.php:1832 +#: src/Admin/AdminPage.php:1835 msgid "Timeout" msgstr "Тайм-аут" -#: src/Admin/AdminPage.php:1688 src/Admin/AdminPage.php:1930 +#: src/Admin/AdminPage.php:1691 src/Admin/AdminPage.php:1972 msgid "Timezone" msgstr "Часовой пояс" #. %s: URL to GitHub repository -#: src/Admin/AdminPage.php:135 +#: src/Admin/AdminPage.php:138 #, php-format msgid "" "To add your own background jobs, use the WP Queue PHP API from your plugin " @@ -1286,51 +1457,52 @@ msgid "" "Full code examples are available in the " "README on GitHub." msgstr "" -"Чтобы добавить свои фоновые задачи, используйте PHP API WP Queue из вашего " -"плагина или темы. Вы можете отправлять задачи в разные очереди, " +"Чтобы добавить собственные фоновые задачи, используйте PHP API WP Queue из " +"вашего плагина или темы. Вы можете отправлять задачи в разные очереди, " "устанавливать задержки и повторные попытки. Полные примеры кода доступны в " -"README на GitHub." +"файле README на GitHub ." -#: src/Admin/AdminPage.php:143 +#: src/Admin/AdminPage.php:146 msgid "to get a list of available commands." msgstr "чтобы получить список доступных команд." -#: src/Admin/AdminPage.php:672 +#: src/Admin/AdminPage.php:675 msgid "" "To process the queue, WordPress needs a trigger. There are two ways to do " "this:" msgstr "" -"Для обработки очереди WordPress нужен триггер. Есть два способа это сделать:" +"Для обработки очереди WordPress необходим триггер. Это можно сделать двумя " +"способами:" -#: src/Admin/AdminPage.php:56 src/Admin/AdminPage.php:1977 +#: src/Admin/AdminPage.php:59 src/Admin/AdminPage.php:2019 msgid "Tools" msgstr "Инструменты" -#: src/Admin/AdminPage.php:1442 +#: src/Admin/AdminPage.php:1445 msgid "Total" msgstr "Всего" -#: src/Admin/AdminPage.php:950 +#: src/Admin/AdminPage.php:953 msgid "Total errors" -msgstr "Всего ошибок" +msgstr "Общее количество ошибок" -#: src/Admin/AdminPage.php:1343 +#: src/Admin/AdminPage.php:1346 msgid "Total Events" msgstr "Всего событий" -#: src/Admin/AdminPage.php:460 +#: src/Admin/AdminPage.php:463 msgid "Total Jobs" -msgstr "Всего задач" +msgstr "Общее количество рабочих мест" -#: src/Admin/AdminPage.php:762 +#: src/Admin/AdminPage.php:765 msgid "" "Total number of events, overdue, grouped by source (WordPress, WooCommerce, " "WP Queue, plugins)." msgstr "" -"Общее количество событий, просроченных, сгруппированных по источнику " +"Общее количество просроченных событий, сгруппированных по источнику " "(WordPress, WooCommerce, WP Queue, плагины)." -#: src/Admin/AdminPage.php:1148 +#: src/Admin/AdminPage.php:1151 msgid "Unavailable" msgstr "Недоступно" @@ -1339,7 +1511,8 @@ msgstr "Недоступно" msgid "Unexpected response code: %d" msgstr "Неожиданный код ответа: %d" -#: src/Admin/AdminPage.php:494 src/Admin/AdminPage.php:1264 +#: src/Admin/AdminPage.php:497 src/Admin/AdminPage.php:1267 +#: src/Admin/AdminPage.php:1928 msgid "Unknown" msgstr "Неизвестно" @@ -1347,19 +1520,41 @@ msgstr "Неизвестно" msgid "Unknown driver" msgstr "Неизвестный драйвер" -#: src/Admin/AdminPage.php:1393 +#: src/Admin/AdminPage.php:1396 msgid "Upcoming Events" msgstr "Предстоящие события" -#: src/Admin/AdminPage.php:91 +#: src/Admin/AdminPage.php:94 msgid "Usage" msgstr "Использование" -#: src/Admin/AdminPage.php:1365 +#: src/Admin/AdminPage.php:2294 +msgid "" +"Use a daemon worker on VPS, Docker or dedicated servers where you can keep a " +"process running. It polls the queue continuously and starts jobs immediately." +" Without a daemon, WP Queue relies on WP-Cron and/or loopback, which can " +"delay jobs by up to a minute." +msgstr "" +"Запускайте демон-воркер на VPS, Docker или выделенном сервере, где можно " +"держать процесс запущенным. Он постоянно опрашивает очередь и сразу " +"запускает задания. Без демона WP Queue полагается на WP-Cron и/или loopback, " +"что может задерживать задания до минуты." + +#: src/Admin/AdminPage.php:1368 msgid "Use system cron" -msgstr "Использовать системный cron" +msgstr "Используйте системный cron" -#: src/Admin/AdminPage.php:719 +#: src/Admin/AdminPage.php:2365 +msgid "" +"Use the script from step 2 (Without WP-CLI) inside screen, tmux or a simple " +"cron-based restart loop. Remember that the script must stay alive to act as " +"a daemon." +msgstr "" +"Используйте скрипт из шага 2 (Без WP-CLI) внутри screen, tmux или простого " +"цикла перезапуска через cron. Помните, что скрипт должен оставаться " +"запущенным, чтобы работать как демон." + +#: src/Admin/AdminPage.php:722 msgid "" "Use this tab for quick checks of queue performance and identifying stuck " "processes." @@ -1367,15 +1562,15 @@ msgstr "" "Используйте эту вкладку для быстрой проверки производительности очереди и " "выявления зависших процессов." -#: src/Admin/AdminPage.php:1907 +#: src/Admin/AdminPage.php:1949 msgid "Used" -msgstr "Использовано" +msgstr "Использовал" -#: src/Admin/AdminPage.php:735 +#: src/Admin/AdminPage.php:738 msgid "Useful for testing jobs and forcing synchronizations." -msgstr "Полезно для тестирования задач и принудительных синхронизаций." +msgstr "Полезно для тестирования заданий и принудительной синхронизации." -#: src/Admin/AdminPage.php:2159 +#: src/Admin/AdminPage.php:2201 msgid "Useful Links" msgstr "Полезные ссылки" @@ -1383,127 +1578,149 @@ msgstr "Полезные ссылки" msgid "Uses wp_options table" msgstr "Использует таблицу wp_options" -#: src/Admin/AdminPage.php:1747 src/Admin/AdminPage.php:1946 +#: src/Admin/AdminPage.php:1750 src/Admin/AdminPage.php:1988 msgid "Version" msgstr "Версия" -#: src/Admin/AdminPage.php:1837 +#: src/Admin/AdminPage.php:1840 msgid "Versions" msgstr "Версии" -#: src/Admin/AdminPage.php:1727 +#: src/Admin/AdminPage.php:1730 src/Admin/AdminPage.php:1926 msgid "Warning" msgstr "Предупреждение" -#: src/Admin/AdminPage.php:109 +#: src/Admin/AdminPage.php:112 msgid "What you can use it for" -msgstr "Для чего это можно использовать" +msgstr "Для чего его можно использовать" + +#: src/Admin/AdminPage.php:2293 +msgid "When to use a daemon" +msgstr "Когда использовать демон" -#: src/Admin/AdminPage.php:648 +#: src/Admin/AdminPage.php:651 msgid "Why is it needed?" msgstr "Зачем это нужно?" -#: src/Admin/AdminPage.php:1465 +#: src/Admin/AdminPage.php:2303 +msgid "With WP-CLI" +msgstr "С WP-CLI" + +#: src/Admin/AdminPage.php:2308 +msgid "Without WP-CLI" +msgstr "Без WP-CLI" + +#: src/Admin/AdminPage.php:1468 msgid "WooCommerce" msgstr "WooCommerce" -#: src/Admin/AdminPage.php:1462 src/Admin/AdminPage.php:1845 +#: src/Admin/AdminPage.php:1465 src/Admin/AdminPage.php:1848 msgid "WordPress" msgstr "WordPress" -#: src/Admin/AdminPage.php:680 +#: src/Admin/AdminPage.php:683 msgid "" "WordPress checks for scheduled tasks on every page load. This works out of " "the box but has downsides: on low-traffic sites, tasks might not run on time;" " on high-traffic sites, it can cause performance issues. It is \"fake\" cron." msgstr "" -"WordPress проверяет запланированные задачи при каждой загрузке страницы. Это " -"работает из коробки, но имеет недостатки: на сайтах с низким трафиком задачи " -"могут не выполняться вовремя; на сайтах с высоким трафиком это может " -"вызывать проблемы с производительностью. Это \"поддельный\" cron." +"WordPress проверяет наличие запланированных задач при каждой загрузке " +"страницы. Это работает «из коробки», но имеет свои недостатки: на сайтах с " +"низкой посещаемостью задачи могут не выполняться вовремя; на сайтах с " +"высокой посещаемостью это может вызывать проблемы с производительностью. Это " +"«поддельный» cron." -#: src/Admin/AdminPage.php:1784 src/Admin/AdminPage.php:1926 +#: src/Admin/AdminPage.php:1787 src/Admin/AdminPage.php:1968 msgid "WordPress Time" msgstr "Время WordPress" -#: src/Admin/AdminPage.php:1669 +#: src/Admin/AdminPage.php:1672 msgid "WordPress Version" msgstr "Версия WordPress" -#: src/Admin/AdminPage.php:666 +#: src/Admin/AdminPage.php:669 msgid "Worker" -msgstr "Рабочий процесс" +msgstr "Воркер" #. Name of the plugin -#: src/Admin/AdminPage.php:65 src/Admin/AdminPage.php:66 -#: src/Admin/AdminPage.php:1468 src/Admin/AdminPage.php:1841 +#: src/Admin/AdminPage.php:68 src/Admin/AdminPage.php:69 +#: src/Admin/AdminPage.php:1471 src/Admin/AdminPage.php:1844 msgid "WP Queue" msgstr "WP Queue" -#: src/Admin/AdminPage.php:2027 +#: src/Admin/AdminPage.php:2069 msgid "" "WP Queue allows executing tasks asynchronously in the background without " "blocking the main WordPress execution flow." msgstr "" -"WP Queue позволяет выполнять задачи асинхронно в фоне без блокировки " -"основного потока выполнения WordPress." +"WP Queue позволяет выполнять задачи асинхронно в фоновом режиме, не блокируя " +"основной поток выполнения WordPress." -#: src/Admin/AdminPage.php:107 +#: src/Admin/AdminPage.php:110 msgid "" "WP Queue helps your site run heavy or regular tasks in the background " "(emails, synchronizations, cleanups) so that pages load faster for visitors." msgstr "" -"WP Queue помогает вашему сайту выполнять тяжелые или регулярные задачи в " -"фоновом режиме (отправка писем, синхронизации, очистка), чтобы страницы " -"загружались быстрее для посетителей." +"WP Queue помогает вашему сайту выполнять ресурсоемкие или регулярно " +"выполняемые задачи в фоновом режиме (отправка электронной почты, " +"синхронизация, очистка), благодаря чему страницы загружаются быстрее для " +"посетителей." -#: src/Admin/AdminPage.php:640 +#: src/Admin/AdminPage.php:643 msgid "" "WP Queue is a robust background processing library for WordPress. It allows " "you to offload time-consuming tasks (like sending emails, syncing data, or " "generating reports) to be processed asynchronously, ensuring your site " "remains fast and responsive for visitors." msgstr "" -"WP Queue - это надежная библиотека фоновой обработки для WordPress. Она " -"позволяет вам выгружать трудоемкие задачи (например, отправку писем, " -"синхронизацию данных или генерацию отчетов) для асинхронной обработки, " -"обеспечивая быструю и отзывчивую работу сайта для посетителей." +"WP Queue — это мощная библиотека для фоновой обработки данных в WordPress. " +"Она позволяет переносить трудоемкие задачи (например, отправку электронных " +"писем, синхронизацию данных или создание отчетов) на асинхронную обработку, " +"обеспечивая быструю и отзывчивую работу вашего сайта для посетителей." -#: src/Admin/AdminPage.php:656 +#: src/Admin/AdminPage.php:659 msgid "" "WP Queue solves this by pushing these tasks to a \"Queue\" and processing " "them later in the background. The user gets an instant response, and the " "heavy work happens behind the scenes." msgstr "" -"WP Queue решает эту проблему, помещая эти задачи в \"Очередь\" и обрабатывая " -"их позже в фоновом режиме. Пользователь получает мгновенный ответ, а тяжелая " -"работа происходит за кулисами." +"WP Queue решает эту проблему, отправляя эти задачи в \"очередь\" и " +"обрабатывая их позже в фоновом режиме. Пользователь получает мгновенный " +"ответ, а основная работа происходит за кулисами." -#: src/Admin/AdminPage.php:2025 +#: src/Admin/AdminPage.php:2067 msgid "WP Queue — Queue System for WordPress" -msgstr "WP Queue — Система очередей для WordPress" +msgstr "WP Queue — система очередей для WordPress" -#: src/Admin/AdminPage.php:97 +#: src/Admin/AdminPage.php:100 msgid "WP-CLI" msgstr "WP-CLI" -#: src/Admin/AdminPage.php:142 src/Admin/AdminPage.php:1999 +#: src/Admin/AdminPage.php:145 src/Admin/AdminPage.php:2041 msgid "WP-CLI Commands" msgstr "Команды WP-CLI" -#: src/Admin/AdminPage.php:2138 +#: src/Admin/AdminPage.php:2180 msgid "WP-CLI команды" -msgstr "Команды WP-CLI" +msgstr "Команда WP-CLI" -#: src/Admin/AdminPage.php:757 src/Admin/AdminPage.php:1866 +#: src/Admin/AdminPage.php:760 src/Admin/AdminPage.php:1905 msgid "WP-Cron" msgstr "WP-Cron" -#: src/Admin/AdminPage.php:678 +#: src/Admin/AdminPage.php:681 msgid "WP-Cron (Default)" -msgstr "WP-Cron (По умолчанию)" +msgstr "WP-Cron (по умолчанию)" -#: src/Admin/AdminPage.php:1698 +#: src/Admin/AdminPage.php:1869 src/Admin/AdminPage.php:1873 +msgid "WP-Cron + Loopback" +msgstr "WP-Cron + Loopback" + +#: src/Admin/AdminPage.php:1900 +msgid "WP-Cron checks the queue every minute as a fallback." +msgstr "WP-Cron раз в минуту проверяет очередь как подстраховку." + +#: src/Admin/AdminPage.php:1701 msgid "WP-Cron Disabled" msgstr "WP-Cron отключен" @@ -1511,29 +1728,33 @@ msgstr "WP-Cron отключен" msgid "WP-Cron is disabled. Background tasks may not run automatically." msgstr "WP-Cron отключен. Фоновые задачи могут не выполняться автоматически." -#: src/Admin/AdminPage.php:1694 +#: src/Admin/AdminPage.php:1877 +msgid "WP-Cron only" +msgstr "Только WP-Cron" + +#: src/Admin/AdminPage.php:1697 msgid "WP-Cron Status" msgstr "Статус WP-Cron" -#: src/Admin/AdminPage.php:781 +#: src/Admin/AdminPage.php:784 msgid "WP-Cron status" -msgstr "Статус WP-Cron" +msgstr "статус WP-Cron" -#: src/Admin/AdminPage.php:670 +#: src/Admin/AdminPage.php:673 msgid "WP-Cron vs System Cron" -msgstr "WP-Cron против системного Cron" +msgstr "WP-Cron против System Cron" -#: src/Admin/AdminPage.php:128 +#: src/Admin/AdminPage.php:131 msgid "" "WP-Cron – list of cron events with the ability to run, pause or delete them." msgstr "" -"WP-Cron – список cron-событий с возможностью запуска, приостановки или " +"WP-Cron – список событий cron с возможностью их запуска, приостановки или " "удаления." -#: src/Admin/AdminPage.php:1362 +#: src/Admin/AdminPage.php:1365 msgid "WP-Cron:" msgstr "WP-Cron:" -#: src/Admin/AdminPage.php:1029 +#: src/Admin/AdminPage.php:1032 msgid "⚠️ Warning:" msgstr "⚠️ Предупреждение:" diff --git a/languages/wp-queue.pot b/languages/wp-queue.pot index 20f6317..3f559d0 100644 --- a/languages/wp-queue.pot +++ b/languages/wp-queue.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: WP Queue 1.0.0\n" "Report-Msgid-Bugs-To: https://github.com/rwsite/wp-queue/issues\n" -"POT-Creation-Date: 2025-12-05 23:27+0000\n" +"POT-Creation-Date: 2026-07-25 21:09+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -16,79 +16,111 @@ msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "X-Generator: Loco https://localise.biz/" -#: src/Admin/AdminPage.php:910 +#: src/Admin/AdminPage.php:913 msgid "%d entries" msgstr "" -#: src/Admin/AdminPage.php:542 +#: src/Admin/AdminPage.php:545 msgid "%d tasks" msgstr "" -#: src/Admin/AdminPage.php:1068 +#: src/Admin/AdminPage.php:1071 msgid "(configured)" msgstr "" -#: src/Admin/AdminPage.php:666 +#: src/Admin/AdminPage.php:2306 +msgid "" +"--memory limits the PHP memory for the worker process. Adjust the value to " +"your needs." +msgstr "" + +#: src/Admin/AdminPage.php:2296 +msgid "1. Enable daemon runtime mode" +msgstr "" + +#: src/Admin/AdminPage.php:2301 +msgid "2. Run the worker" +msgstr "" + +#: src/Admin/AdminPage.php:2328 +msgid "3. Keep it running" +msgstr "" + +#: src/Admin/AdminPage.php:2367 +msgid "4. Check status" +msgstr "" + +#: src/Admin/AdminPage.php:669 msgid "A background process (Worker) constantly checks the queue for new jobs." msgstr "" -#: src/Admin/AdminPage.php:716 +#: src/Admin/AdminPage.php:1867 +msgid "" +"A daemon worker is expected to process queues. WP-Cron and loopback are " +"disabled." +msgstr "" + +#: src/Admin/AdminPage.php:719 msgid "" "A list of all active queues with their size, status " "(idle/pending/running/paused), and control buttons (pause/resume, clear all " "tasks)." msgstr "" -#: src/Admin/AdminPage.php:664 +#: src/Admin/AdminPage.php:667 msgid "A plugin creates a \"Job\" (a task) and pushes it to the queue." msgstr "" -#: src/Admin/AdminPage.php:688 +#: src/Admin/AdminPage.php:691 msgid "" "A real cron job configured on your server (Linux) that calls WordPress every " "minute. This is reliable and precise. Ideally, you should disable default WP-" "Cron and use System Cron." msgstr "" -#: src/Admin/AdminPage.php:765 +#: src/Admin/AdminPage.php:768 msgid "A separate table for events that are temporarily disabled." msgstr "" -#: src/Admin/AdminPage.php:766 +#: src/Admin/AdminPage.php:769 msgid "" "A table of all available intervals (hourly, daily, etc.) with their duration." msgstr "" -#: src/Admin/AdminPage.php:85 src/Admin/AdminPage.php:106 -#: src/Admin/AdminPage.php:638 +#: src/Admin/AdminPage.php:88 src/Admin/AdminPage.php:109 +#: src/Admin/AdminPage.php:641 msgid "About WP Queue" msgstr "" -#: src/Admin/AdminPage.php:198 +#: src/Admin/AdminPage.php:201 msgid "Action completed successfully" msgstr "" -#: src/Admin/AdminPage.php:782 src/Admin/AdminPage.php:1743 -#: src/Admin/AdminPage.php:1942 +#: src/Admin/AdminPage.php:785 src/Admin/AdminPage.php:1746 +#: src/Admin/AdminPage.php:1984 msgid "Action Scheduler" msgstr "" -#: src/Admin/AdminPage.php:481 src/Admin/AdminPage.php:594 -#: src/Admin/AdminPage.php:1483 src/Admin/AdminPage.php:1558 -#: src/Admin/AdminPage.php:2207 +#: src/Admin/AdminPage.php:484 src/Admin/AdminPage.php:597 +#: src/Admin/AdminPage.php:1486 src/Admin/AdminPage.php:1561 +#: src/Admin/AdminPage.php:2255 msgid "Actions" msgstr "" -#: src/Admin/AdminPage.php:428 src/Admin/AdminPage.php:1055 -#: src/Admin/AdminPage.php:1367 src/Admin/AdminPage.php:1872 +#: src/Admin/AdminPage.php:431 src/Admin/AdminPage.php:1058 +#: src/Admin/AdminPage.php:1370 src/Admin/AdminPage.php:1911 msgid "Active" msgstr "" -#: src/Admin/AdminPage.php:1100 +#: src/Admin/AdminPage.php:2297 +msgid "Add this to wp-config.php:" +msgstr "" + +#: src/Admin/AdminPage.php:1103 msgid "Add to wp-config.php:" msgstr "" -#: src/Admin/AdminPage.php:615 +#: src/Admin/AdminPage.php:618 msgid "ago (overdue)" msgstr "" @@ -96,39 +128,39 @@ msgstr "" msgid "Aleksei Tikhomirov" msgstr "" -#: src/Admin/AdminPage.php:837 src/Admin/AdminPage.php:1459 +#: src/Admin/AdminPage.php:840 src/Admin/AdminPage.php:1462 msgid "All" msgstr "" -#: src/Admin/AdminPage.php:848 +#: src/Admin/AdminPage.php:851 msgid "All queues" msgstr "" -#: src/Admin/AdminPage.php:1657 +#: src/Admin/AdminPage.php:1660 msgid "All systems are healthy." msgstr "" -#: src/Admin/AdminPage.php:1709 +#: src/Admin/AdminPage.php:1712 msgid "Alternate Cron" msgstr "" -#: src/Admin/AdminPage.php:199 +#: src/Admin/AdminPage.php:202 msgid "An error occurred" msgstr "" -#: src/Admin/AdminPage.php:196 +#: src/Admin/AdminPage.php:199 msgid "Are you sure you want to clear this queue?" msgstr "" -#: src/Admin/AdminPage.php:478 src/Admin/AdminPage.php:960 +#: src/Admin/AdminPage.php:481 src/Admin/AdminPage.php:963 msgid "Attempts" msgstr "" -#: src/Admin/AdminPage.php:167 +#: src/Admin/AdminPage.php:170 msgid "Author Website" msgstr "" -#: src/Admin/AdminPage.php:479 +#: src/Admin/AdminPage.php:482 msgid "Available From" msgstr "" @@ -138,19 +170,19 @@ msgid "" "tasks, manage queues, and monitor cron events." msgstr "" -#: src/Admin/AdminPage.php:122 +#: src/Admin/AdminPage.php:125 msgid "Basic Usage" msgstr "" -#: src/Admin/AdminPage.php:748 +#: src/Admin/AdminPage.php:751 msgid "Button to delete old log entries to avoid cluttering the database." msgstr "" -#: src/Admin/AdminPage.php:746 +#: src/Admin/AdminPage.php:749 msgid "Buttons to show all entries, only completed, or only failed jobs." msgstr "" -#: src/Admin/AdminPage.php:650 +#: src/Admin/AdminPage.php:653 msgid "" "By default, WordPress executes all actions during the page load request. If " "a plugin needs to send 100 emails or sync 500 products with an external API, " @@ -158,7 +190,7 @@ msgid "" "timeouts." msgstr "" -#: src/Admin/AdminPage.php:698 +#: src/Admin/AdminPage.php:701 msgid "" "By default, WP Queue stores jobs in the WordPress database (wp_options or " "custom tables). For high-performance sites, you can use Redis. Redis is an " @@ -166,129 +198,139 @@ msgid "" "operations. It reduces load on your database and speeds up job processing." msgstr "" -#: src/Admin/AdminPage.php:1623 +#: src/Admin/AdminPage.php:1626 msgid "Cancel" msgstr "" -#: src/QueueManager.php:318 +#: src/QueueManager.php:500 #, php-format msgid "Cannot connect to Memcached at %s:%d - %s" msgstr "" -#: src/QueueManager.php:266 +#: src/QueueManager.php:297 src/QueueManager.php:375 src/QueueManager.php:448 #, php-format msgid "Cannot connect to Redis at %s:%d - %s" msgstr "" -#: src/Admin/AdminPage.php:114 +#: src/Admin/AdminPage.php:117 msgid "Check basic system requirements that affect queue stability." msgstr "" -#: src/Admin/AdminPage.php:1037 +#: src/Admin/AdminPage.php:1040 msgid "Check driver settings." msgstr "" -#: src/Admin/AdminPage.php:751 +#: src/Admin/AdminPage.php:754 msgid "Check logs when encountering errors in background processes." msgstr "" -#: src/Admin/AdminPage.php:785 +#: src/Admin/AdminPage.php:788 msgid "Check this tab when setting up your server or debugging queue issues." msgstr "" -#: src/Admin/AdminPage.php:781 +#: src/Admin/AdminPage.php:784 msgid "" "Checking for disablement (DISABLE_WP_CRON), alternative cron, loopback " "requests." msgstr "" -#: src/Admin/AdminPage.php:777 +#: src/Admin/AdminPage.php:780 msgid "" "Checking system requirements and environment for stable queue operation." msgstr "" -#: src/Admin/AdminPage.php:451 +#: src/Admin/AdminPage.php:454 msgid "Clear" msgstr "" -#: src/Admin/AdminPage.php:1995 +#: src/Admin/AdminPage.php:2037 msgid "Clear All" msgstr "" -#: src/Admin/AdminPage.php:1983 +#: src/Admin/AdminPage.php:2025 msgid "Clear All Logs" msgstr "" -#: src/Admin/AdminPage.php:1993 +#: src/Admin/AdminPage.php:2035 msgid "Clear All Queues" msgstr "" -#: src/Admin/AdminPage.php:1981 +#: src/Admin/AdminPage.php:2023 msgid "Clear Logs" msgstr "" -#: src/Admin/AdminPage.php:748 +#: src/Admin/AdminPage.php:751 msgid "Clear logs" msgstr "" -#: src/Admin/AdminPage.php:860 +#: src/Admin/AdminPage.php:863 msgid "Clear old" msgstr "" -#: src/Admin/AdminPage.php:567 +#: src/Admin/AdminPage.php:570 msgid "Close" msgstr "" -#: src/Admin/AdminPage.php:783 +#: src/Admin/AdminPage.php:786 msgid "" "Comparison of server time, WordPress, and GMT offset for diagnosing " "scheduling issues." msgstr "" -#: src/Admin/AdminPage.php:326 src/Admin/AdminPage.php:352 -#: src/Admin/AdminPage.php:840 src/Admin/AdminPage.php:1820 +#: src/Admin/AdminPage.php:329 src/Admin/AdminPage.php:355 +#: src/Admin/AdminPage.php:843 src/Admin/AdminPage.php:1823 msgid "Completed" msgstr "" -#: src/Admin/AdminPage.php:1856 +#: src/Admin/AdminPage.php:1885 msgid "Component Status" msgstr "" -#: src/Admin/AdminPage.php:366 +#: src/Admin/AdminPage.php:369 msgid "Configure" msgstr "" -#: src/Admin/AdminPage.php:2095 +#: src/Admin/AdminPage.php:2137 msgid "Configure automatic retries on errors:" msgstr "" -#: src/Admin/AdminPage.php:1109 +#: src/Admin/AdminPage.php:1112 msgid "Configure Memcached" msgstr "" -#: src/Admin/AdminPage.php:1103 +#: src/Admin/AdminPage.php:1106 msgid "Configure Redis" msgstr "" -#: src/Admin/AdminPage.php:1870 +#: src/Admin/AdminPage.php:1909 msgid "Configure system cron" msgstr "" -#: src/QueueManager.php:307 +#: src/QueueManager.php:489 #, php-format msgid "Connected to Memcached at %s:%d" msgstr "" -#: src/QueueManager.php:255 +#: src/QueueManager.php:289 +#, php-format +msgid "Connected to Redis at %s:%d (phpredis)" +msgstr "" + +#: src/QueueManager.php:440 +#, php-format +msgid "Connected to Redis at %s:%d (Predis)" +msgstr "" + +#: src/QueueManager.php:349 src/QueueManager.php:367 #, php-format -msgid "Connected to Redis at %s:%d" +msgid "Connected to Redis at %s:%d (via redis-cache plugin)" msgstr "" -#: src/Admin/AdminPage.php:2038 +#: src/Admin/AdminPage.php:2080 msgid "Create a job class and dispatch it to the queue:" msgstr "" -#: src/Admin/AdminPage.php:768 +#: src/Admin/AdminPage.php:771 msgid "Critical for understanding why tasks are not running on time." msgstr "" @@ -304,105 +346,113 @@ msgstr "" msgid "Cron event updated" msgstr "" -#: src/Admin/AdminPage.php:50 +#: src/Admin/AdminPage.php:52 msgid "Cron Events" msgstr "" -#: src/Admin/AdminPage.php:1043 -msgid "Current driver:" +#: src/Admin/AdminPage.php:1680 +msgid "Current Memory Usage" msgstr "" -#: src/Admin/AdminPage.php:1677 -msgid "Current Memory Usage" +#: src/Admin/AdminPage.php:1046 +msgid "Current storage backend:" msgstr "" -#: src/QueueManager.php:207 src/QueueManager.php:351 src/QueueManager.php:353 +#: src/QueueManager.php:207 src/QueueManager.php:533 src/QueueManager.php:535 msgid "Custom driver" msgstr "" -#: src/Admin/AdminPage.php:710 +#: src/Admin/AdminPage.php:1865 +msgid "Daemon process" +msgstr "" + +#: src/Admin/AdminPage.php:58 src/Admin/AdminPage.php:2288 +msgid "Daemon worker" +msgstr "" + +#: src/Admin/AdminPage.php:713 msgid "Dashboard" msgstr "" -#: src/Admin/AdminPage.php:125 +#: src/Admin/AdminPage.php:128 msgid "" "Dashboard – quick overview of queues, number of jobs and recent activity." msgstr "" -#: src/Admin/AdminPage.php:2056 +#: src/Admin/AdminPage.php:2098 msgid "Delayed Jobs" msgstr "" -#: src/Admin/AdminPage.php:527 src/Admin/AdminPage.php:1539 -#: src/Admin/AdminPage.php:1540 +#: src/Admin/AdminPage.php:530 src/Admin/AdminPage.php:1542 +#: src/Admin/AdminPage.php:1543 msgid "Delete" msgstr "" -#: src/Admin/AdminPage.php:864 +#: src/Admin/AdminPage.php:867 msgid "Delete all" msgstr "" -#: src/Admin/AdminPage.php:1982 +#: src/Admin/AdminPage.php:2024 msgid "Deletes all job execution logs" msgstr "" -#: src/Admin/AdminPage.php:1994 +#: src/Admin/AdminPage.php:2036 msgid "Deletes all jobs from all queues" msgstr "" -#: src/Admin/AdminPage.php:858 +#: src/Admin/AdminPage.php:861 msgid "Deletes logs older than 7 days" msgstr "" -#: src/Admin/AdminPage.php:1054 +#: src/Admin/AdminPage.php:1057 msgid "Description" msgstr "" -#: src/Admin/AdminPage.php:706 +#: src/Admin/AdminPage.php:709 msgid "Detailed description of the panel tabs" msgstr "" -#: src/Admin/AdminPage.php:524 +#: src/Admin/AdminPage.php:527 msgid "Details" msgstr "" -#: src/Admin/AdminPage.php:117 +#: src/Admin/AdminPage.php:120 msgid "" "Developers can dispatch their own jobs to the queue, choose drivers " "(Database, Sync, Redis), configure retries and schedules. See the " "documentation and examples on GitHub for integration details." msgstr "" -#: src/Admin/AdminPage.php:1702 +#: src/Admin/AdminPage.php:1705 msgid "" "DISABLE_WP_CRON is set to true. Background tasks will not run automatically." msgstr "" -#: src/Admin/AdminPage.php:1364 src/Admin/AdminPage.php:1701 -#: src/Admin/AdminPage.php:1714 src/Admin/AdminPage.php:1869 +#: src/Admin/AdminPage.php:1367 src/Admin/AdminPage.php:1704 +#: src/Admin/AdminPage.php:1717 src/Admin/AdminPage.php:1908 msgid "Disabled" msgstr "" -#: src/Admin/AdminPage.php:664 +#: src/Admin/AdminPage.php:667 msgid "Dispatch" msgstr "" -#: src/Admin/AdminPage.php:1586 +#: src/Admin/AdminPage.php:1589 msgid "Display" msgstr "" -#: src/Admin/AdminPage.php:582 +#: src/Admin/AdminPage.php:585 msgid "" "Displays a table of scheduled recurring tasks (PHP classes) registered in WP " "Queue: job class, execution interval, queue assignment, and next run time. " "Allows you to run any task manually." msgstr "" -#: src/Admin/AdminPage.php:730 +#: src/Admin/AdminPage.php:733 msgid "Displays all registered PHP job classes with their configuration." msgstr "" -#: src/Admin/AdminPage.php:1641 +#: src/Admin/AdminPage.php:1644 msgid "" "Displays environment information (PHP and WordPress versions, memory limits, " "execution time, timezone), WP-Cron status (disabled, alternative cron, " @@ -410,101 +460,90 @@ msgid "" "and WordPress time." msgstr "" -#: src/Admin/AdminPage.php:749 +#: src/Admin/AdminPage.php:752 msgid "Displays the last 200 entries by default or all completed/failed." msgstr "" -#: src/Admin/AdminPage.php:715 +#: src/Admin/AdminPage.php:718 msgid "" "Displays the total number of tasks in different statuses (pending, running, " "completed, failed)." msgstr "" -#: src/Admin/AdminPage.php:733 +#: src/Admin/AdminPage.php:736 msgid "Displays when the job should run next or marks overdue jobs." msgstr "" -#: src/Admin/AdminPage.php:2077 +#: src/Admin/AdminPage.php:2119 msgid "Distribute jobs across different queues:" msgstr "" -#: src/Admin/AdminPage.php:2164 +#: src/Admin/AdminPage.php:2206 msgid "Documentation on GitHub" msgstr "" -#: src/Admin/AdminPage.php:1052 -msgid "Driver" -msgstr "" - -#: src/Admin/AdminPage.php:1031 -#, php-format -msgid "" -"Driver \"%s\" is configured in wp-config.php, but not available. Falling " -"back to \"%s\"." -msgstr "" - -#: src/Admin/AdminPage.php:363 +#: src/Admin/AdminPage.php:366 msgid "Driver:" msgstr "" -#: src/Admin/AdminPage.php:46 +#: src/Admin/AdminPage.php:48 msgid "Drivers" msgstr "" -#: src/Admin/AdminPage.php:1526 +#: src/Admin/AdminPage.php:1529 msgid "Edit" msgstr "" -#: src/Admin/AdminPage.php:1603 +#: src/Admin/AdminPage.php:1606 msgid "Edit Cron Event" msgstr "" -#: src/Admin/AdminPage.php:1525 +#: src/Admin/AdminPage.php:1528 msgid "Edit Schedule" msgstr "" -#: src/Admin/AdminPage.php:1704 src/Admin/AdminPage.php:1712 +#: src/Admin/AdminPage.php:1707 src/Admin/AdminPage.php:1715 msgid "Enabled" msgstr "" -#: src/Admin/AdminPage.php:780 src/Admin/AdminPage.php:1661 +#: src/Admin/AdminPage.php:783 src/Admin/AdminPage.php:1664 msgid "Environment" msgstr "" -#: src/Admin/AdminPage.php:1729 +#: src/Admin/AdminPage.php:1732 src/Admin/AdminPage.php:1927 msgid "Error" msgstr "" -#: src/Admin/AdminPage.php:961 +#: src/Admin/AdminPage.php:964 msgid "Error message" msgstr "" -#: src/Admin/AdminPage.php:1824 +#: src/Admin/AdminPage.php:1827 msgid "Errors" msgstr "" -#: src/Admin/AdminPage.php:764 +#: src/Admin/AdminPage.php:767 msgid "Event actions" msgstr "" -#: src/Admin/AdminPage.php:763 +#: src/Admin/AdminPage.php:766 msgid "" "Event hook, next run time, schedule (single/hourly/daily), source, arguments." msgstr "" -#: src/Admin/AdminPage.php:762 +#: src/Admin/AdminPage.php:765 msgid "Event statistics" msgstr "" -#: src/Admin/AdminPage.php:763 +#: src/Admin/AdminPage.php:766 msgid "Event table" msgstr "" -#: src/Admin/AdminPage.php:1382 +#: src/Admin/AdminPage.php:1385 msgid "events" msgstr "" -#: src/Admin/AdminPage.php:1372 +#: src/Admin/AdminPage.php:1375 msgid "Events by Source" msgstr "" @@ -513,18 +552,22 @@ msgstr "" msgid "Every %d Minutes" msgstr "" -#: src/Admin/AdminPage.php:747 +#: src/Admin/AdminPage.php:2218 +msgid "Example Plugin on GitHub" +msgstr "" + +#: src/Admin/AdminPage.php:750 msgid "" "Execution time, status (completed/failed/retrying), job class, queue, error " "message." msgstr "" -#: src/Admin/AdminPage.php:45 src/Admin/AdminPage.php:327 -#: src/Admin/AdminPage.php:356 src/Admin/AdminPage.php:843 +#: src/Admin/AdminPage.php:47 src/Admin/AdminPage.php:330 +#: src/Admin/AdminPage.php:359 src/Admin/AdminPage.php:846 msgid "Failed" msgstr "" -#: src/Admin/AdminPage.php:1760 +#: src/Admin/AdminPage.php:1763 msgid "Failed Actions" msgstr "" @@ -540,70 +583,74 @@ msgstr "" msgid "Failed to update event" msgstr "" -#: src/Admin/AdminPage.php:116 src/Admin/AdminPage.php:132 +#: src/Admin/AdminPage.php:119 src/Admin/AdminPage.php:135 msgid "For developers" msgstr "" -#: src/Admin/AdminPage.php:164 +#: src/Admin/AdminPage.php:167 msgid "For more information:" msgstr "" -#: src/Admin/AdminPage.php:1117 +#: src/Admin/AdminPage.php:1120 msgid "" "For Redis/Memcached to work, you need the PHP extension installed and a " "server available. If not, the system will automatically use the \"database\" " "driver." msgstr "" -#: src/Admin/AdminPage.php:123 +#: src/Admin/AdminPage.php:126 msgid "For site administrators" msgstr "" -#: src/Admin/AdminPage.php:1988 +#: src/Admin/AdminPage.php:2030 msgid "Forces processing of all queues" msgstr "" -#: src/Admin/AdminPage.php:504 src/Admin/AdminPage.php:615 +#: src/Admin/AdminPage.php:507 src/Admin/AdminPage.php:618 msgid "from now" msgstr "" #. %s: URL to GitHub repository -#: src/Admin/AdminPage.php:795 +#: src/Admin/AdminPage.php:798 #, php-format msgid "Full documentation and code examples are available on GitHub: %s." msgstr "" -#: src/Admin/AdminPage.php:165 +#: src/Admin/AdminPage.php:168 msgid "GitHub Repository" msgstr "" -#: src/Admin/AdminPage.php:1788 +#: src/Admin/AdminPage.php:1791 msgid "GMT Offset" msgstr "" -#: src/Admin/AdminPage.php:57 +#: src/Admin/AdminPage.php:60 msgid "Help" msgstr "" -#: src/Admin/AdminPage.php:44 +#: src/Admin/AdminPage.php:46 msgid "History" msgstr "" -#: src/Admin/AdminPage.php:744 +#: src/Admin/AdminPage.php:747 msgid "History of all job executions for diagnostics and debugging." msgstr "" -#: src/Admin/AdminPage.php:1402 src/Admin/AdminPage.php:1479 -#: src/Admin/AdminPage.php:1555 src/Admin/AdminPage.php:2204 +#: src/Admin/AdminPage.php:1405 src/Admin/AdminPage.php:1482 +#: src/Admin/AdminPage.php:1558 src/Admin/AdminPage.php:2252 msgid "Hook" msgstr "" -#: src/Admin/AdminPage.php:662 +#: src/Admin/AdminPage.php:665 msgid "How Queues Work" msgstr "" -#: src/Admin/AdminPage.php:1099 -msgid "How to change the driver?" +#: src/Admin/AdminPage.php:1102 +msgid "How to change the storage backend?" +msgstr "" + +#: src/Admin/AdminPage.php:2289 +msgid "How to run WP Queue as a long-running background process." msgstr "" #. URI of the plugin @@ -614,110 +661,146 @@ msgstr "" msgid "https://rwsite.ru" msgstr "" -#: src/Admin/AdminPage.php:476 +#: src/Admin/AdminPage.php:479 msgid "ID" msgstr "" -#: src/Admin/AdminPage.php:322 +#: src/Admin/AdminPage.php:325 msgid "Idle" msgstr "" -#: src/Admin/AdminPage.php:782 +#: src/Admin/AdminPage.php:785 msgid "" "If installed, displays version and statistics (pending/running/failed " "actions)." msgstr "" -#: src/Admin/AdminPage.php:131 +#: src/Admin/AdminPage.php:2369 +msgid "" +"If the worker is not running, queues will not be processed in daemon mode. " +"Make sure the process is started and monitored." +msgstr "" + +#: src/Admin/AdminPage.php:2309 +msgid "" +"If WP-CLI is not available, create a PHP script that boots WordPress and " +"runs the worker loop:" +msgstr "" + +#: src/Admin/AdminPage.php:134 msgid "" "If you installed WP Queue because another plugin requires it, you usually do " "not need to configure anything here. Use these tabs mainly for monitoring " "and troubleshooting." msgstr "" -#: src/Admin/AdminPage.php:1116 +#: src/Admin/AdminPage.php:1119 msgid "Important:" msgstr "" -#: src/Admin/AdminPage.php:344 +#: src/Admin/AdminPage.php:347 msgid "In Queue" msgstr "" -#: src/Admin/AdminPage.php:113 +#: src/Admin/AdminPage.php:2299 +msgid "" +"In this mode WP-Cron scheduling and loopback requests are disabled " +"automatically." +msgstr "" + +#: src/Admin/AdminPage.php:116 msgid "Inspect and manage WP-Cron events for WP Queue and other plugins." msgstr "" -#: src/Admin/AdminPage.php:1081 +#: src/Admin/AdminPage.php:1084 msgid "Install: pecl install memcached" msgstr "" -#: src/Admin/AdminPage.php:1079 +#: src/Admin/AdminPage.php:1082 msgid "Install: pecl install redis" msgstr "" -#: src/Admin/AdminPage.php:1585 +#: src/Admin/AdminPage.php:1588 msgid "Interval" msgstr "" -#: src/Admin/AdminPage.php:590 src/Admin/AdminPage.php:874 -#: src/Admin/AdminPage.php:958 src/Admin/AdminPage.php:1162 +#: src/Admin/AdminPage.php:593 src/Admin/AdminPage.php:877 +#: src/Admin/AdminPage.php:961 src/Admin/AdminPage.php:1165 msgid "Job" msgstr "" -#: src/Admin/AdminPage.php:477 +#: src/Admin/AdminPage.php:480 msgid "Job Class" msgstr "" -#: src/Admin/AdminPage.php:731 +#: src/Admin/AdminPage.php:734 msgid "" "Job class, execution interval (e.g., \"hourly\", \"daily\"), queue " "assignment, next run time." msgstr "" -#: src/Admin/AdminPage.php:564 +#: src/Admin/AdminPage.php:567 msgid "Job Details" msgstr "" -#: src/Admin/AdminPage.php:731 +#: src/Admin/AdminPage.php:734 msgid "Job information" msgstr "" -#: src/Admin/AdminPage.php:730 +#: src/Admin/AdminPage.php:733 msgid "Job list" msgstr "" -#: src/Admin/AdminPage.php:384 +#: src/Admin/AdminPage.php:387 msgid "jobs" msgstr "" -#: src/Admin/AdminPage.php:43 +#: src/Admin/AdminPage.php:45 msgid "Jobs in Queue" msgstr "" -#: src/Admin/AdminPage.php:747 +#: src/Admin/AdminPage.php:750 msgid "Log table" msgstr "" -#: src/Admin/AdminPage.php:741 +#: src/Admin/AdminPage.php:744 msgid "Logs" msgstr "" -#: src/Admin/AdminPage.php:127 +#: src/Admin/AdminPage.php:130 msgid "" "Logs – history of completed and failed jobs that helps to diagnose problems." msgstr "" -#: src/Admin/AdminPage.php:1877 +#: src/Admin/AdminPage.php:1916 msgid "Loopback" msgstr "" +#: src/Admin/AdminPage.php:1879 +msgid "" +"Loopback is disabled. Jobs will be processed only by WP-Cron, which can " +"delay execution by up to one minute. Run a daemon worker for instant " +"processing." +msgstr "" + +#: src/Admin/AdminPage.php:1871 +msgid "Loopback is enabled and working. Jobs start immediately after dispatch." +msgstr "" + +#: src/Admin/AdminPage.php:1875 +msgid "" +"Loopback is inactive. Jobs will be processed only by WP-Cron, which can " +"delay execution by up to one minute. Enable loopback or run a daemon worker " +"for instant processing." +msgstr "" + #. %s: loopback error message #: src/Admin/SystemStatus.php:271 #, php-format msgid "Loopback issue: %s" msgstr "" -#: src/Admin/AdminPage.php:1719 +#: src/Admin/AdminPage.php:1722 msgid "Loopback Request" msgstr "" @@ -725,29 +808,29 @@ msgstr "" msgid "Loopback request successful" msgstr "" -#: src/Admin/AdminPage.php:2139 +#: src/Admin/AdminPage.php:2181 msgid "Manage queues from command line:" msgstr "" -#: src/Admin/AdminPage.php:728 +#: src/Admin/AdminPage.php:731 msgid "Management of scheduled recurring tasks." msgstr "" -#: src/Admin/AdminPage.php:760 +#: src/Admin/AdminPage.php:763 msgid "" "Management of WordPress system timers that trigger background processes." msgstr "" -#: src/Admin/AdminPage.php:732 +#: src/Admin/AdminPage.php:735 msgid "Manual run" msgstr "" -#: src/Admin/AdminPage.php:1684 src/Admin/AdminPage.php:1911 +#: src/Admin/AdminPage.php:1687 src/Admin/AdminPage.php:1953 msgid "Max Execution Time" msgstr "" -#: src/Admin/AdminPage.php:1673 src/Admin/AdminPage.php:1828 -#: src/Admin/AdminPage.php:1903 +#: src/Admin/AdminPage.php:1676 src/Admin/AdminPage.php:1831 +#: src/Admin/AdminPage.php:1945 msgid "Memory Limit" msgstr "" @@ -755,155 +838,171 @@ msgstr "" msgid "Memory usage is above 80%." msgstr "" -#: src/Admin/AdminPage.php:876 +#: src/Admin/AdminPage.php:879 msgid "Message" msgstr "" -#: src/Admin/AdminPage.php:111 +#: src/Admin/AdminPage.php:114 msgid "Monitor which background jobs are queued and running right now." msgstr "" -#: src/Admin/AdminPage.php:790 +#: src/Admin/AdminPage.php:793 msgid "More documentation" msgstr "" -#: src/Admin/AdminPage.php:1584 +#: src/Admin/AdminPage.php:1587 msgid "Name" msgstr "" -#: src/Admin/AdminPage.php:2076 +#: src/Admin/AdminPage.php:2118 msgid "Named Queues" msgstr "" -#: src/Admin/AdminPage.php:593 src/Admin/AdminPage.php:1403 -#: src/Admin/AdminPage.php:1480 +#: src/Admin/AdminPage.php:596 src/Admin/AdminPage.php:1406 +#: src/Admin/AdminPage.php:1483 msgid "Next Run" msgstr "" -#: src/Admin/AdminPage.php:733 +#: src/Admin/AdminPage.php:736 msgid "Next run status" msgstr "" -#: src/Admin/AdminPage.php:1168 +#: src/Admin/AdminPage.php:1171 msgid "No activity" msgstr "" -#: src/Admin/AdminPage.php:1489 +#: src/Admin/AdminPage.php:1492 msgid "No cron events found." msgstr "" -#: src/Admin/AdminPage.php:967 +#: src/Admin/AdminPage.php:970 msgid "No errors" msgstr "" -#: src/Admin/AdminPage.php:1140 +#: src/Admin/AdminPage.php:1143 msgid "No extension" msgstr "" -#: src/Admin/AdminPage.php:882 +#: src/Admin/AdminPage.php:885 msgid "No logs found" msgstr "" -#: src/Admin/AdminPage.php:2198 +#: src/Admin/AdminPage.php:2246 msgid "No paused events" msgstr "" -#: src/Admin/AdminPage.php:1397 +#: src/Admin/AdminPage.php:1400 msgid "No scheduled events" msgstr "" -#: src/Admin/AdminPage.php:600 +#: src/Admin/AdminPage.php:603 msgid "No scheduled jobs found." msgstr "" -#: src/Admin/AdminPage.php:1144 +#: src/Admin/AdminPage.php:1147 msgid "No server" msgstr "" -#: src/Admin/AdminPage.php:779 +#: src/Admin/AdminPage.php:782 msgid "Notifications of critical issues (low memory, disabled WP-Cron)." msgstr "" -#: src/Admin/AdminPage.php:506 +#: src/Admin/AdminPage.php:509 msgid "Now" msgstr "" -#: src/Admin/AdminPage.php:749 +#: src/Admin/AdminPage.php:752 msgid "Number of entries" msgstr "" -#: src/Admin/AdminPage.php:1725 +#: src/Admin/AdminPage.php:1728 src/Admin/AdminPage.php:1925 msgid "OK" msgstr "" -#: src/Admin/AdminPage.php:2214 +#: src/Admin/AdminPage.php:2262 msgid "One-time" msgstr "" -#: src/Admin/AdminPage.php:1351 src/Admin/AdminPage.php:1446 -#: src/Admin/AdminPage.php:1502 src/Admin/CronMonitor.php:220 +#: src/Admin/AdminPage.php:2331 +msgid "Option A: systemd service" +msgstr "" + +#: src/Admin/AdminPage.php:2348 +msgid "Option B: Supervisor" +msgstr "" + +#: src/Admin/AdminPage.php:2358 +msgid "Option C: Docker Compose" +msgstr "" + +#: src/Admin/AdminPage.php:2364 +msgid "Option D: plain PHP script" +msgstr "" + +#: src/Admin/AdminPage.php:1354 src/Admin/AdminPage.php:1449 +#: src/Admin/AdminPage.php:1505 src/Admin/CronMonitor.php:220 msgid "Overdue" msgstr "" -#: src/Admin/AdminPage.php:42 src/Admin/AdminPage.php:49 -#: src/Admin/AdminPage.php:250 +#: src/Admin/AdminPage.php:44 src/Admin/AdminPage.php:51 +#: src/Admin/AdminPage.php:253 msgid "Overview" msgstr "" -#: src/Admin/AdminPage.php:442 src/Admin/AdminPage.php:1532 -#: src/Admin/AdminPage.php:1533 +#: src/Admin/AdminPage.php:445 src/Admin/AdminPage.php:1535 +#: src/Admin/AdminPage.php:1536 msgid "Pause" msgstr "" -#: src/Admin/AdminPage.php:197 +#: src/Admin/AdminPage.php:200 msgid "Pause this queue?" msgstr "" -#: src/Admin/AdminPage.php:52 src/Admin/AdminPage.php:325 -#: src/Admin/AdminPage.php:424 src/Admin/AdminPage.php:1355 +#: src/Admin/AdminPage.php:54 src/Admin/AdminPage.php:328 +#: src/Admin/AdminPage.php:427 src/Admin/AdminPage.php:1358 msgid "Paused" msgstr "" -#: src/Admin/AdminPage.php:1557 +#: src/Admin/AdminPage.php:1560 msgid "Paused At" msgstr "" -#: src/Admin/AdminPage.php:1551 +#: src/Admin/AdminPage.php:1554 msgid "Paused Events" msgstr "" -#: src/Admin/AdminPage.php:765 +#: src/Admin/AdminPage.php:768 msgid "Paused events" msgstr "" -#: src/Admin/AdminPage.php:2206 +#: src/Admin/AdminPage.php:2254 msgid "Paused Since" msgstr "" -#: src/Admin/AdminPage.php:323 src/Admin/AdminPage.php:464 -#: src/Admin/AdminPage.php:1951 +#: src/Admin/AdminPage.php:326 src/Admin/AdminPage.php:467 +#: src/Admin/AdminPage.php:1993 msgid "Pending" msgstr "" -#: src/Admin/AdminPage.php:1752 +#: src/Admin/AdminPage.php:1755 msgid "Pending Actions" msgstr "" -#: src/Admin/AdminPage.php:1849 src/Admin/AdminPage.php:1899 +#: src/Admin/AdminPage.php:1852 src/Admin/AdminPage.php:1941 msgid "PHP" msgstr "" -#: src/Admin/AdminPage.php:780 +#: src/Admin/AdminPage.php:783 msgid "" "PHP and WordPress versions, memory limits (current usage), maximum execution " "time, timezone." msgstr "" -#: src/QueueManager.php:288 +#: src/QueueManager.php:470 msgid "PHP extension \"memcached\" is not installed" msgstr "" -#: src/QueueManager.php:235 +#: src/QueueManager.php:267 msgid "PHP extension \"redis\" (phpredis) is not installed" msgstr "" @@ -911,279 +1010,326 @@ msgstr "" msgid "PHP max_execution_time is less than 30 seconds." msgstr "" -#: src/Admin/AdminPage.php:1665 +#: src/Admin/AdminPage.php:1668 msgid "PHP Version" msgstr "" -#: src/Admin/AdminPage.php:1471 +#: src/Admin/AdminPage.php:1474 msgid "Plugins" msgstr "" -#: src/Admin/AdminPage.php:667 +#: src/QueueManager.php:416 +msgid "Predis library is not available" +msgstr "" + +#: src/Admin/AdminPage.php:670 msgid "Process" msgstr "" -#: src/Admin/AdminPage.php:447 src/Admin/AdminPage.php:1989 +#: src/Admin/AdminPage.php:450 src/Admin/AdminPage.php:2031 msgid "Process Now" msgstr "" -#: src/Admin/AdminPage.php:1987 +#: src/Admin/AdminPage.php:2029 msgid "Process Queues" msgstr "" -#: src/Admin/AdminPage.php:426 src/Admin/AdminPage.php:468 +#: src/Admin/AdminPage.php:429 src/Admin/AdminPage.php:471 msgid "Processing" msgstr "" -#: src/Admin/AdminPage.php:592 src/Admin/AdminPage.php:875 -#: src/Admin/AdminPage.php:959 +#: src/Admin/AdminPage.php:595 src/Admin/AdminPage.php:878 +#: src/Admin/AdminPage.php:962 msgid "Queue" msgstr "" -#: src/Admin/AdminPage.php:1860 -msgid "Queue Driver" +#: src/Admin/AdminPage.php:1895 +msgid "Queue handler" msgstr "" -#: src/Admin/AdminPage.php:487 +#: src/Admin/AdminPage.php:490 msgid "Queue is empty" msgstr "" -#: src/Admin/AdminPage.php:715 +#: src/Admin/AdminPage.php:718 msgid "Queue statistics" msgstr "" -#: src/Admin/AdminPage.php:716 +#: src/Admin/AdminPage.php:1889 +msgid "Queue Storage backend" +msgstr "" + +#: src/Admin/AdminPage.php:719 msgid "Queue table" msgstr "" -#: src/Admin/AdminPage.php:420 +#: src/Admin/AdminPage.php:423 #, php-format msgid "Queue: %s" msgstr "" -#: src/Admin/AdminPage.php:35 src/Admin/AdminPage.php:371 +#: src/Admin/AdminPage.php:37 src/Admin/AdminPage.php:374 msgid "Queues" msgstr "" -#: src/Admin/AdminPage.php:2037 +#: src/Admin/AdminPage.php:2079 msgid "Quick Start" msgstr "" -#: src/Admin/AdminPage.php:112 +#: src/Admin/AdminPage.php:115 msgid "Quickly see if any jobs are failing and view recent log entries." msgstr "" -#: src/Admin/AdminPage.php:1136 +#: src/Admin/AdminPage.php:1139 msgid "Ready" msgstr "" -#: src/Admin/AdminPage.php:395 +#: src/Admin/AdminPage.php:398 msgid "Recent Activity" msgstr "" -#: src/Admin/AdminPage.php:717 +#: src/Admin/AdminPage.php:720 msgid "Recent activity" msgstr "" -#: src/Admin/AdminPage.php:696 +#: src/QueueManager.php:358 +msgid "Redis connection failed" +msgstr "" + +#: src/QueueManager.php:243 +msgid "Redis is disabled via WP_REDIS_DISABLED" +msgstr "" + +#: src/Admin/AdminPage.php:699 msgid "Redis Support" msgstr "" -#: src/Admin/AdminPage.php:1580 +#: src/Admin/AdminPage.php:1583 msgid "Registered Schedules" msgstr "" -#: src/Admin/AdminPage.php:766 +#: src/Admin/AdminPage.php:769 msgid "Registered schedules" msgstr "" -#: src/Admin/AdminPage.php:2170 +#: src/Admin/AdminPage.php:2212 msgid "Report an Issue" msgstr "" -#: src/Admin/AdminPage.php:166 +#: src/Admin/AdminPage.php:169 msgid "Report Issues" msgstr "" -#: src/Admin/AdminPage.php:437 src/Admin/AdminPage.php:1571 -#: src/Admin/AdminPage.php:2220 +#: src/Admin/AdminPage.php:440 src/Admin/AdminPage.php:1574 +#: src/Admin/AdminPage.php:2268 msgid "Resume" msgstr "" -#: src/Admin/AdminPage.php:2094 +#: src/Admin/AdminPage.php:2136 msgid "Retry Attempts" msgstr "" -#: src/Admin/AdminPage.php:143 src/Admin/AdminPage.php:1518 +#: src/Admin/AdminPage.php:146 src/Admin/AdminPage.php:1521 msgid "Run" msgstr "" -#: src/Admin/AdminPage.php:622 src/Admin/AdminPage.php:1517 +#: src/Admin/AdminPage.php:625 src/Admin/AdminPage.php:1520 msgid "Run Now" msgstr "" -#: src/Admin/AdminPage.php:764 +#: src/Admin/AdminPage.php:767 msgid "" "Run now, edit schedule, pause, delete. Modal window for changing interval." msgstr "" -#: src/Admin/AdminPage.php:2116 +#: src/Admin/AdminPage.php:2158 msgid "Run tasks on schedule:" msgstr "" -#: src/Admin/AdminPage.php:324 src/Admin/AdminPage.php:348 +#: src/Admin/AdminPage.php:327 src/Admin/AdminPage.php:351 msgid "Running" msgstr "" -#: src/Admin/AdminPage.php:1756 +#: src/Admin/AdminPage.php:1759 msgid "Running Actions" msgstr "" -#: src/Admin/AdminPage.php:1622 +#: src/Admin/AdminPage.php:2346 +msgid "" +"Save as /etc/systemd/system/wp-queue-worker.service, then run systemctl " +"enable --now wp-queue-worker." +msgstr "" + +#: src/Admin/AdminPage.php:1625 msgid "Save Changes" msgstr "" -#: src/Admin/AdminPage.php:591 src/Admin/AdminPage.php:1481 -#: src/Admin/AdminPage.php:1556 src/Admin/AdminPage.php:1610 -#: src/Admin/AdminPage.php:2205 +#: src/Admin/AdminPage.php:2324 +msgid "Save the script, make it executable and run it in the background:" +msgstr "" + +#: src/Admin/AdminPage.php:594 src/Admin/AdminPage.php:1484 +#: src/Admin/AdminPage.php:1559 src/Admin/AdminPage.php:1613 +#: src/Admin/AdminPage.php:2253 msgid "Schedule" msgstr "" -#: src/Admin/AdminPage.php:2057 +#: src/Admin/AdminPage.php:2099 msgid "Schedule a job to run after a specific time:" msgstr "" -#: src/Admin/AdminPage.php:51 src/Admin/AdminPage.php:1347 +#: src/Admin/AdminPage.php:53 src/Admin/AdminPage.php:1350 msgid "Scheduled" msgstr "" -#: src/Admin/AdminPage.php:725 +#: src/Admin/AdminPage.php:728 msgid "Scheduled Jobs" msgstr "" -#: src/Admin/AdminPage.php:126 +#: src/Admin/AdminPage.php:129 msgid "" "Scheduled Jobs – list of recurring background jobs added by your theme or " "plugins." msgstr "" -#: src/Admin/AdminPage.php:36 src/Admin/AdminPage.php:2115 +#: src/Admin/AdminPage.php:38 src/Admin/AdminPage.php:2157 msgid "Scheduler" msgstr "" -#: src/Admin/AdminPage.php:1776 src/Admin/AdminPage.php:1780 -#: src/Admin/AdminPage.php:1922 +#: src/Admin/AdminPage.php:1779 src/Admin/AdminPage.php:1783 +#: src/Admin/AdminPage.php:1964 msgid "Server Time" msgstr "" -#: src/Admin/AdminPage.php:783 +#: src/Admin/AdminPage.php:786 msgid "Server time" msgstr "" -#: src/Admin/AdminPage.php:1507 src/Admin/AdminPage.php:1565 +#: src/Admin/AdminPage.php:1510 src/Admin/AdminPage.php:1568 msgid "Single" msgstr "" -#: src/Admin/AdminPage.php:1612 +#: src/Admin/AdminPage.php:1615 msgid "Single (run once)" msgstr "" -#: src/Admin/AdminPage.php:1404 src/Admin/AdminPage.php:1482 +#: src/Admin/AdminPage.php:1407 src/Admin/AdminPage.php:1485 msgid "Source" msgstr "" -#: src/Admin/AdminPage.php:480 src/Admin/AdminPage.php:873 -#: src/Admin/AdminPage.php:1053 src/Admin/AdminPage.php:1161 +#: src/Admin/AdminPage.php:2304 +msgid "Start the worker from the WordPress root:" +msgstr "" + +#: src/Admin/AdminPage.php:483 src/Admin/AdminPage.php:876 +#: src/Admin/AdminPage.php:1056 src/Admin/AdminPage.php:1164 msgid "Status" msgstr "" -#: src/Admin/AdminPage.php:746 +#: src/Admin/AdminPage.php:749 msgid "Status filters" msgstr "" -#: src/Admin/AdminPage.php:665 +#: src/Admin/AdminPage.php:668 msgid "Storage" msgstr "" +#: src/Admin/AdminPage.php:1055 +msgid "Storage backend" +msgstr "" + +#: src/Admin/AdminPage.php:1034 +#, php-format +msgid "" +"Storage backend \"%s\" is configured in wp-config.php, but not available. " +"Falling back to \"%s\"." +msgstr "" + #: src/QueueManager.php:198 msgid "Synchronous execution (no queue)" msgstr "" -#: src/Admin/AdminPage.php:37 src/Admin/AdminPage.php:774 +#: src/Admin/AdminPage.php:39 src/Admin/AdminPage.php:777 msgid "System" msgstr "" -#: src/Admin/AdminPage.php:686 +#: src/Admin/AdminPage.php:689 msgid "System Cron (Recommended)" msgstr "" -#: src/Admin/AdminPage.php:779 +#: src/Admin/AdminPage.php:782 msgid "System health" msgstr "" -#: src/Admin/AdminPage.php:1648 +#: src/Admin/AdminPage.php:1651 msgid "System Issues Detected:" msgstr "" -#: src/Admin/AdminPage.php:55 +#: src/Admin/AdminPage.php:57 msgid "System Status" msgstr "" -#: src/Admin/AdminPage.php:129 +#: src/Admin/AdminPage.php:132 msgid "" "System – checks PHP version, WP-Cron status and other important settings." msgstr "" -#: src/Admin/AdminPage.php:732 +#: src/Admin/AdminPage.php:735 msgid "" "The \"Run Now\" button allows you to run any job immediately, without " "waiting for the schedule." msgstr "" -#: src/Admin/AdminPage.php:665 +#: src/Admin/AdminPage.php:2329 +msgid "" +"The command above must stay alive. In production use one of the options " +"below." +msgstr "" + +#: src/Admin/AdminPage.php:668 msgid "The job is saved in the database (or Redis) waiting to be picked up." msgstr "" -#: src/Admin/AdminPage.php:717 +#: src/Admin/AdminPage.php:720 msgid "The last 10 log entries for quick tracking of queue activity." msgstr "" -#: src/Admin/AdminPage.php:713 +#: src/Admin/AdminPage.php:716 msgid "The main tab for monitoring queue status in real-time." msgstr "" -#: src/Admin/AdminPage.php:108 +#: src/Admin/AdminPage.php:111 msgid "" "The plugin itself does not add new features to the frontend. It provides a " "reliable queue that other plugins or your custom code can use for background " "work." msgstr "" -#: src/Admin/AdminPage.php:667 +#: src/Admin/AdminPage.php:670 msgid "" "The worker picks up the job and executes it. If it succeeds, it is marked as " "\"Completed\". If it fails, it can be retried." msgstr "" -#: src/Admin/AdminPage.php:314 +#: src/Admin/AdminPage.php:317 msgid "This section is under development." msgstr "" -#: src/Admin/AdminPage.php:872 src/Admin/AdminPage.php:957 -#: src/Admin/AdminPage.php:1160 src/Admin/AdminPage.php:1918 +#: src/Admin/AdminPage.php:875 src/Admin/AdminPage.php:960 +#: src/Admin/AdminPage.php:1163 src/Admin/AdminPage.php:1960 msgid "Time" msgstr "" -#: src/Admin/AdminPage.php:1832 +#: src/Admin/AdminPage.php:1835 msgid "Timeout" msgstr "" -#: src/Admin/AdminPage.php:1688 src/Admin/AdminPage.php:1930 +#: src/Admin/AdminPage.php:1691 src/Admin/AdminPage.php:1972 msgid "Timezone" msgstr "" #. %s: URL to GitHub repository -#: src/Admin/AdminPage.php:135 +#: src/Admin/AdminPage.php:138 #, php-format msgid "" "To add your own background jobs, use the WP Queue PHP API from your plugin " @@ -1192,43 +1338,43 @@ msgid "" "README on GitHub." msgstr "" -#: src/Admin/AdminPage.php:143 +#: src/Admin/AdminPage.php:146 msgid "to get a list of available commands." msgstr "" -#: src/Admin/AdminPage.php:672 +#: src/Admin/AdminPage.php:675 msgid "" "To process the queue, WordPress needs a trigger. There are two ways to do " "this:" msgstr "" -#: src/Admin/AdminPage.php:56 src/Admin/AdminPage.php:1977 +#: src/Admin/AdminPage.php:59 src/Admin/AdminPage.php:2019 msgid "Tools" msgstr "" -#: src/Admin/AdminPage.php:1442 +#: src/Admin/AdminPage.php:1445 msgid "Total" msgstr "" -#: src/Admin/AdminPage.php:950 +#: src/Admin/AdminPage.php:953 msgid "Total errors" msgstr "" -#: src/Admin/AdminPage.php:1343 +#: src/Admin/AdminPage.php:1346 msgid "Total Events" msgstr "" -#: src/Admin/AdminPage.php:460 +#: src/Admin/AdminPage.php:463 msgid "Total Jobs" msgstr "" -#: src/Admin/AdminPage.php:762 +#: src/Admin/AdminPage.php:765 msgid "" "Total number of events, overdue, grouped by source (WordPress, WooCommerce, " "WP Queue, plugins)." msgstr "" -#: src/Admin/AdminPage.php:1148 +#: src/Admin/AdminPage.php:1151 msgid "Unavailable" msgstr "" @@ -1237,7 +1383,8 @@ msgstr "" msgid "Unexpected response code: %d" msgstr "" -#: src/Admin/AdminPage.php:494 src/Admin/AdminPage.php:1264 +#: src/Admin/AdminPage.php:497 src/Admin/AdminPage.php:1267 +#: src/Admin/AdminPage.php:1928 msgid "Unknown" msgstr "" @@ -1245,33 +1392,48 @@ msgstr "" msgid "Unknown driver" msgstr "" -#: src/Admin/AdminPage.php:1393 +#: src/Admin/AdminPage.php:1396 msgid "Upcoming Events" msgstr "" -#: src/Admin/AdminPage.php:91 +#: src/Admin/AdminPage.php:94 msgid "Usage" msgstr "" -#: src/Admin/AdminPage.php:1365 +#: src/Admin/AdminPage.php:2294 +msgid "" +"Use a daemon worker on VPS, Docker or dedicated servers where you can keep a " +"process running. It polls the queue continuously and starts jobs immediately." +" Without a daemon, WP Queue relies on WP-Cron and/or loopback, which can " +"delay jobs by up to a minute." +msgstr "" + +#: src/Admin/AdminPage.php:1368 msgid "Use system cron" msgstr "" -#: src/Admin/AdminPage.php:719 +#: src/Admin/AdminPage.php:2365 +msgid "" +"Use the script from step 2 (Without WP-CLI) inside screen, tmux or a simple " +"cron-based restart loop. Remember that the script must stay alive to act as " +"a daemon." +msgstr "" + +#: src/Admin/AdminPage.php:722 msgid "" "Use this tab for quick checks of queue performance and identifying stuck " "processes." msgstr "" -#: src/Admin/AdminPage.php:1907 +#: src/Admin/AdminPage.php:1949 msgid "Used" msgstr "" -#: src/Admin/AdminPage.php:735 +#: src/Admin/AdminPage.php:738 msgid "Useful for testing jobs and forcing synchronizations." msgstr "" -#: src/Admin/AdminPage.php:2159 +#: src/Admin/AdminPage.php:2201 msgid "Useful Links" msgstr "" @@ -1279,72 +1441,84 @@ msgstr "" msgid "Uses wp_options table" msgstr "" -#: src/Admin/AdminPage.php:1747 src/Admin/AdminPage.php:1946 +#: src/Admin/AdminPage.php:1750 src/Admin/AdminPage.php:1988 msgid "Version" msgstr "" -#: src/Admin/AdminPage.php:1837 +#: src/Admin/AdminPage.php:1840 msgid "Versions" msgstr "" -#: src/Admin/AdminPage.php:1727 +#: src/Admin/AdminPage.php:1730 src/Admin/AdminPage.php:1926 msgid "Warning" msgstr "" -#: src/Admin/AdminPage.php:109 +#: src/Admin/AdminPage.php:112 msgid "What you can use it for" msgstr "" -#: src/Admin/AdminPage.php:648 +#: src/Admin/AdminPage.php:2293 +msgid "When to use a daemon" +msgstr "" + +#: src/Admin/AdminPage.php:651 msgid "Why is it needed?" msgstr "" -#: src/Admin/AdminPage.php:1465 +#: src/Admin/AdminPage.php:2303 +msgid "With WP-CLI" +msgstr "" + +#: src/Admin/AdminPage.php:2308 +msgid "Without WP-CLI" +msgstr "" + +#: src/Admin/AdminPage.php:1468 msgid "WooCommerce" msgstr "" -#: src/Admin/AdminPage.php:1462 src/Admin/AdminPage.php:1845 +#: src/Admin/AdminPage.php:1465 src/Admin/AdminPage.php:1848 msgid "WordPress" msgstr "" -#: src/Admin/AdminPage.php:680 +#: src/Admin/AdminPage.php:683 msgid "" "WordPress checks for scheduled tasks on every page load. This works out of " "the box but has downsides: on low-traffic sites, tasks might not run on time;" " on high-traffic sites, it can cause performance issues. It is \"fake\" cron." msgstr "" -#: src/Admin/AdminPage.php:1784 src/Admin/AdminPage.php:1926 +#: src/Admin/AdminPage.php:1787 src/Admin/AdminPage.php:1968 msgid "WordPress Time" msgstr "" -#: src/Admin/AdminPage.php:1669 +#: src/Admin/AdminPage.php:1672 msgid "WordPress Version" msgstr "" -#: src/Admin/AdminPage.php:666 +#: src/Admin/AdminPage.php:669 msgid "Worker" msgstr "" #. Name of the plugin -#: src/Admin/AdminPage.php:65 src/Admin/AdminPage.php:66 -#: src/Admin/AdminPage.php:1468 src/Admin/AdminPage.php:1841 +#: src/Admin/AdminPage.php:68 src/Admin/AdminPage.php:69 +#: src/Admin/AdminPage.php:1471 src/Admin/AdminPage.php:1844 msgid "WP Queue" msgstr "" -#: src/Admin/AdminPage.php:2027 +#: src/Admin/AdminPage.php:2069 msgid "" "WP Queue allows executing tasks asynchronously in the background without " "blocking the main WordPress execution flow." msgstr "" -#: src/Admin/AdminPage.php:107 +#: src/Admin/AdminPage.php:110 msgid "" "WP Queue helps your site run heavy or regular tasks in the background " "(emails, synchronizations, cleanups) so that pages load faster for visitors." msgstr "" -#: src/Admin/AdminPage.php:640 +#: src/Admin/AdminPage.php:643 msgid "" "WP Queue is a robust background processing library for WordPress. It allows " "you to offload time-consuming tasks (like sending emails, syncing data, or " @@ -1352,38 +1526,46 @@ msgid "" "remains fast and responsive for visitors." msgstr "" -#: src/Admin/AdminPage.php:656 +#: src/Admin/AdminPage.php:659 msgid "" "WP Queue solves this by pushing these tasks to a \"Queue\" and processing " "them later in the background. The user gets an instant response, and the " "heavy work happens behind the scenes." msgstr "" -#: src/Admin/AdminPage.php:2025 +#: src/Admin/AdminPage.php:2067 msgid "WP Queue — Queue System for WordPress" msgstr "" -#: src/Admin/AdminPage.php:97 +#: src/Admin/AdminPage.php:100 msgid "WP-CLI" msgstr "" -#: src/Admin/AdminPage.php:142 src/Admin/AdminPage.php:1999 +#: src/Admin/AdminPage.php:145 src/Admin/AdminPage.php:2041 msgid "WP-CLI Commands" msgstr "" -#: src/Admin/AdminPage.php:2138 +#: src/Admin/AdminPage.php:2180 msgid "WP-CLI команды" msgstr "" -#: src/Admin/AdminPage.php:757 src/Admin/AdminPage.php:1866 +#: src/Admin/AdminPage.php:760 src/Admin/AdminPage.php:1905 msgid "WP-Cron" msgstr "" -#: src/Admin/AdminPage.php:678 +#: src/Admin/AdminPage.php:681 msgid "WP-Cron (Default)" msgstr "" -#: src/Admin/AdminPage.php:1698 +#: src/Admin/AdminPage.php:1869 src/Admin/AdminPage.php:1873 +msgid "WP-Cron + Loopback" +msgstr "" + +#: src/Admin/AdminPage.php:1900 +msgid "WP-Cron checks the queue every minute as a fallback." +msgstr "" + +#: src/Admin/AdminPage.php:1701 msgid "WP-Cron Disabled" msgstr "" @@ -1391,27 +1573,31 @@ msgstr "" msgid "WP-Cron is disabled. Background tasks may not run automatically." msgstr "" -#: src/Admin/AdminPage.php:1694 +#: src/Admin/AdminPage.php:1877 +msgid "WP-Cron only" +msgstr "" + +#: src/Admin/AdminPage.php:1697 msgid "WP-Cron Status" msgstr "" -#: src/Admin/AdminPage.php:781 +#: src/Admin/AdminPage.php:784 msgid "WP-Cron status" msgstr "" -#: src/Admin/AdminPage.php:670 +#: src/Admin/AdminPage.php:673 msgid "WP-Cron vs System Cron" msgstr "" -#: src/Admin/AdminPage.php:128 +#: src/Admin/AdminPage.php:131 msgid "" "WP-Cron – list of cron events with the ability to run, pause or delete them." msgstr "" -#: src/Admin/AdminPage.php:1362 +#: src/Admin/AdminPage.php:1365 msgid "WP-Cron:" msgstr "" -#: src/Admin/AdminPage.php:1029 +#: src/Admin/AdminPage.php:1032 msgid "⚠️ Warning:" msgstr "" diff --git a/readme.txt b/readme.txt index 052e0e7..7b485b2 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,7 @@ Tags: queue, cron, background-processing, jobs, scheduler Requires at least: 6.0 Tested up to: 6.9 Requires PHP: 8.3 -Stable tag: 1.1.0 +Stable tag: 1.2.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -147,6 +147,12 @@ Yes, WP Queue works with WordPress multisite installations. == Changelog == += 1.2.0 = +* Added runtime modes: cron_loopback, daemon, auto +* Added loopback dispatch for immediate queue processing after dispatch() +* Added --daemon flag to `wp queue work` CLI command +* WP-Cron scheduling and loopback handler are now gated by runtime mode + = 1.1.0 = * Added Redis queue driver (compatible with redis-cache plugin) * Added Memcached queue driver @@ -167,6 +173,9 @@ Yes, WP Queue works with WordPress multisite installations. == Upgrade Notice == += 1.2.0 = +New runtime modes. Use `define('WP_QUEUE_RUNTIME_MODE', 'daemon')` with a separate worker process, or keep the default `cron_loopback` mode for shared hosting. + = 1.1.0 = New Redis and Memcached drivers for better performance. Set WP_QUEUE_DRIVER to 'auto' for automatic selection. diff --git a/src/Admin/AdminPage.php b/src/Admin/AdminPage.php index b2fa7a4..93c8335 100644 --- a/src/Admin/AdminPage.php +++ b/src/Admin/AdminPage.php @@ -4,6 +4,8 @@ namespace WPQueue\Admin; +use WPQueue\Loopback\LoopbackDispatcher; +use WPQueue\Runtime\RuntimeMode; use WPQueue\WPQueue; /** @@ -24,7 +26,6 @@ class AdminPage public function __construct() { - $this->initTabs(); add_action('init', [$this, 'initTabs'], 5); add_action('admin_menu', [$this, 'addMenuPage']); add_action('admin_enqueue_scripts', [$this, 'enqueueAssets']); @@ -54,6 +55,7 @@ public function initTabs(): void ], 'system' => [ 'status' => ['title' => __('System Status', 'wp-queue'), 'icon' => 'dashicons-heart'], + 'daemon' => ['title' => __('Daemon worker', 'wp-queue'), 'icon' => 'dashicons-admin-generic'], 'tools' => ['title' => __('Tools', 'wp-queue'), 'icon' => 'dashicons-admin-tools'], 'help' => ['title' => __('Help', 'wp-queue'), 'icon' => 'dashicons-editor-help'], ], @@ -1029,7 +1031,7 @@ protected function renderQueuesDrivers(): void

@@ -1041,7 +1043,7 @@ protected function renderQueuesDrivers(): void

- +

@@ -1050,7 +1052,7 @@ protected function renderQueuesDrivers(): void - + @@ -1097,7 +1099,7 @@ protected function renderQueuesDrivers(): void
-

+

define('WP_QUEUE_DRIVER', 'database'); // or 'redis', 'memcached', 'sync', 'auto'
@@ -1853,20 +1855,56 @@ protected function renderSystemStatus(): void +

- + + + + +
+ + + + + +
- + @@ -1878,16 +1916,19 @@ protected function renderSystemStatus(): void 'completed', - 'warning' => 'pending', - default => 'failed', + $lbBadgeClass = match ($loopbackStatus) { + 'ok' => 'status-completed', + 'warning' => 'status-pending', + default => 'status-failed', + }; + $lbStatusLabel = match ($loopbackStatus) { + 'ok' => __('OK', 'wp-queue'), + 'warning' => __('Warning', 'wp-queue'), + 'error' => __('Error', 'wp-queue'), + default => __('Unknown', 'wp-queue'), }; ?> - - - + @@ -2235,6 +2276,101 @@ protected function renderSchedulerPaused(): void +
+
+

+

+
+ +
+

+

+ +

+

+
define('WP_QUEUE_RUNTIME_MODE', 'daemon');
+

+ +

+ +

+

+
wp queue work --daemon --memory=256
+

+ +

+

+
<?php
+define('WP_QUEUE_DAEMON', true);
+define('WP_QUEUE_RUNTIME_MODE', 'daemon');
+
+require '/var/www/html/wordpress/wp-load.php';
+
+$queue = $argv[1] ?? 'default';
+$memory = 256;
+
+ini_set('memory_limit', "{$memory}M");
+set_time_limit(0);
+
+WPQueue\WPQueue::worker()->setMemoryLimit($memory);
+WPQueue\WPQueue::worker()->daemon($queue);
+

+
chmod +x /var/www/html/wp-queue-daemon.php
+nohup php /var/www/html/wp-queue-daemon.php > /var/log/wp-queue-daemon.log 2>&1 &
+ +

+

+ +

+
[Unit]
+Description=WP Queue daemon worker
+After=network.target
+
+[Service]
+Type=simple
+User=www-data
+WorkingDirectory=/var/www/html
+ExecStart=/usr/local/bin/wp queue work --daemon --memory=256
+Restart=always
+RestartSec=5
+
+[Install]
+WantedBy=multi-user.target
+

+ +

+
[program:wp-queue-worker]
+command=/usr/local/bin/wp queue work --daemon --memory=256
+directory=/var/www/html
+user=www-data
+autostart=true
+autorestart=true
+stderr_logfile=/var/log/wp-queue-worker.err.log
+stdout_logfile=/var/log/wp-queue-worker.out.log
+ +

+
worker:
+  image: your-wordpress-image
+  command: ["wp", "queue", "work", "--daemon", "--memory=256"]
+  restart: unless-stopped
+ +

+

+ +

+
wp queue status
+

+
+
+ runDaemon($queue, $assocArgs); + + return; + } + $limit = (int) ($assocArgs['limit'] ?? 100); // Get default memory limit from WordPress @@ -132,13 +142,6 @@ public function work(array $args, array $assocArgs): void $worker = WPQueue::worker(); $worker->setMemoryLimit($memory); - if (isset($assocArgs['daemon'])) { - WP_CLI::log("Starting daemon worker for queue: {$queue}"); - $worker->daemon($queue); - - return; - } - $processed = 0; while ($processed < $limit) { @@ -152,6 +155,26 @@ public function work(array $args, array $assocArgs): void WP_CLI::success("Processed {$processed} jobs from queue: {$queue}"); } + /** + * Run a daemon worker that continuously polls the queue. + */ + protected function runDaemon(string $queue, array $assocArgs): void + { + // Mark this process as the daemon so loopback/cron do not trigger + // additional workers inside the same process. + if (! defined('WP_QUEUE_DAEMON')) { + define('WP_QUEUE_DAEMON', true); + } + + $memory = (int) ($assocArgs['memory'] ?? 256); + + WP_CLI::log("Starting daemon worker for queue: {$queue} (memory limit: {$memory}MB)"); + + $worker = WPQueue::worker(); + $worker->setMemoryLimit($memory); + $worker->daemon($queue); + } + /** * Clear all jobs from a queue. * diff --git a/src/Jobs/PendingDispatch.php b/src/Jobs/PendingDispatch.php index a4ee631..d12cb7b 100644 --- a/src/Jobs/PendingDispatch.php +++ b/src/Jobs/PendingDispatch.php @@ -5,12 +5,17 @@ namespace WPQueue\Jobs; use WPQueue\Contracts\JobInterface; +use WPQueue\Loopback\LoopbackDispatcher; use WPQueue\QueueManager; class PendingDispatch { protected bool $shouldDispatch = true; + protected static bool $spawnRegistered = false; + + protected static bool $spawnQueued = false; + public function __construct( protected JobInterface $job, protected QueueManager $manager, @@ -66,5 +71,40 @@ protected function send(): void { $queue = $this->manager->connection(); $queue->push($this->job); + + $queueName = $this->job->getQueue() ?: 'default'; + LoopbackDispatcher::spawn($queueName); + self::scheduleImmediateProcessing($queueName); + } + + protected static function scheduleImmediateProcessing(string $queue): void + { + if (! function_exists('wp_schedule_single_event') || ! function_exists('spawn_cron')) { + return; + } + + if (! self::$spawnRegistered) { + self::$spawnRegistered = true; + + register_shutdown_function(static function (): void { + if (! self::$spawnQueued) { + return; + } + + self::$spawnQueued = false; + + try { + spawn_cron(); + } catch (\Throwable $e) { + error_log('WP Queue: spawn_cron failed: '.$e->getMessage()); + } + }); + } + + if (wp_next_scheduled('wp_queue_process', [$queue]) === false) { + wp_schedule_single_event(time(), 'wp_queue_process', [$queue]); + } + + self::$spawnQueued = true; } } diff --git a/src/Loopback/LoopbackDispatcher.php b/src/Loopback/LoopbackDispatcher.php new file mode 100644 index 0000000..006f379 --- /dev/null +++ b/src/Loopback/LoopbackDispatcher.php @@ -0,0 +1,151 @@ +get_error_message())); + } elseif (is_array($response) && ($response['response']['code'] ?? 0) >= 400) { + error_log(sprintf( + 'WP Queue: loopback spawn returned HTTP %s for queue %s', + $response['response']['code'] ?? 'unknown', + $queue, + )); + } + } + + /** + * Build the loopback URL with nonce. + */ + public static function buildUrl(string $queue): string + { + $args = [ + 'action' => 'wp_queue_loopback', + 'queue' => self::sanitizeQueue($queue), + 'nonce' => wp_create_nonce(self::nonceAction($queue)), + ]; + + $url = add_query_arg($args, admin_url('admin-ajax.php')); + + /** + * Filters the loopback URL used to trigger immediate queue processing. + * + * @param string $url The loopback URL. + * @param string $queue Queue name. + */ + return apply_filters('wp_queue_loopback_url', $url, $queue); + } + + /** + * Build the loopback POST arguments. + */ + public static function buildPostArgs(): array + { + $args = [ + 'timeout' => 0.01, + 'blocking' => false, + 'sslverify' => apply_filters('https_local_ssl_verify', false), + 'cookies' => $_COOKIE, + 'headers' => [ + 'Referer' => home_url(), + ], + ]; + + /** + * Filters the POST arguments used for the loopback request. + * + * @param array $args + */ + return apply_filters('wp_queue_loopback_post_args', $args); + } + + /** + * Nonce verification action name. + */ + public static function nonceAction(string $queue): string + { + return 'wp_queue_loopback_'.$queue; + } + + /** + * Sanitize queue name. + */ + public static function sanitizeQueue(string $queue): string + { + return preg_replace('/[^a-z0-9_-]/', '', $queue) ?: 'default'; + } + + /** + * Whether loopback dispatch is enabled. + * + * Disable by defining WP_QUEUE_LOOPBACK as false in wp-config.php. + * Also disabled automatically when the runtime mode is set to daemon, + * because a daemon process is already polling the queue. + */ + public static function isEnabled(): bool + { + if (defined('WP_QUEUE_LOOPBACK')) { + return (bool) WP_QUEUE_LOOPBACK; + } + + if (! RuntimeMode::useLoopback()) { + return false; + } + + /** + * Filters whether loopback dispatch is enabled. + * + * @param bool $enabled Default true. + */ + return apply_filters('wp_queue_loopback_enabled', true); + } +} diff --git a/src/Loopback/LoopbackHandler.php b/src/Loopback/LoopbackHandler.php new file mode 100644 index 0000000..d7f5b59 --- /dev/null +++ b/src/Loopback/LoopbackHandler.php @@ -0,0 +1,61 @@ +verifyNonce($queue)) { + wp_die('Unauthorized', 'Unauthorized', ['response' => 403]); + } + + if (WPQueue::isProcessing($queue)) { + wp_die('Already processing', 'Already processing', ['response' => 200]); + } + + // Trigger the same handler the cron job uses. + do_action('wp_queue_process', $queue); + + wp_die('OK', 'OK', ['response' => 200]); + } + + /** + * Verify the loopback nonce. + */ + protected function verifyNonce(string $queue): bool + { + $nonce = $_REQUEST['nonce'] ?? ''; + + if (empty($nonce)) { + return false; + } + + return wp_verify_nonce(sanitize_text_field(wp_unslash($nonce)), LoopbackDispatcher::nonceAction($queue)) !== false; + } +} diff --git a/src/PendingBatch.php b/src/PendingBatch.php index a4d637b..6b6414c 100644 --- a/src/PendingBatch.php +++ b/src/PendingBatch.php @@ -5,6 +5,7 @@ namespace WPQueue; use WPQueue\Contracts\JobInterface; +use WPQueue\Loopback\LoopbackDispatcher; class PendingBatch { @@ -35,6 +36,8 @@ public function dispatch(): string $connection->push($job); } + LoopbackDispatcher::spawn($this->queue); + return $batchId; } } diff --git a/src/PendingChain.php b/src/PendingChain.php index 5664947..33a2280 100644 --- a/src/PendingChain.php +++ b/src/PendingChain.php @@ -6,6 +6,7 @@ use WPQueue\Contracts\JobInterface; use WPQueue\Jobs\ChainedJob; +use WPQueue\Loopback\LoopbackDispatcher; class PendingChain { @@ -40,5 +41,7 @@ public function dispatch(): void $chainedJob->onQueue($this->queue); $this->manager->connection()->push($chainedJob); + + LoopbackDispatcher::spawn($this->queue); } } diff --git a/src/QueueManager.php b/src/QueueManager.php index 0029b89..fac6690 100644 --- a/src/QueueManager.php +++ b/src/QueueManager.php @@ -557,6 +557,106 @@ public function extend(string $driver, callable $callback): void $this->customCreators[$driver] = $callback; } + /** + * Discover all queue names from the current driver. + * + * @return string[] + */ + public function discoverQueues(): array + { + $driver = $this->getDefaultDriver(); + $queues = ['default']; + + try { + switch ($driver) { + case 'redis': + $queues = $this->discoverRedisQueues(); + break; + + case 'memcached': + // Memcached doesn't support key scanning, use known queues + $queues = $this->discoverKnownQueues(); + break; + + case 'database': + default: + $queues = $this->discoverDatabaseQueues(); + break; + } + } catch (\Throwable $e) { + if (function_exists('error_log')) { + error_log('[WP Queue] Failed to discover queues: '.$e->getMessage()); + } + } + + // Always include default queue + if (! in_array('default', $queues, true)) { + array_unshift($queues, 'default'); + } + + return array_unique($queues); + } + + /** + * Discover queues from Redis. + * + * @return string[] + */ + protected function discoverRedisQueues(): array + { + $queue = $this->connection('redis'); + + if (! $queue instanceof RedisQueue) { + return ['default']; + } + + // Use reflection to access getAllQueues method + $reflection = new \ReflectionMethod($queue, 'getAllQueues'); + $reflection->setAccessible(true); + + return $reflection->invoke($queue); + } + + /** + * Discover queues from database (wp_options). + * + * @return string[] + */ + protected function discoverDatabaseQueues(): array + { + global $wpdb; + + $results = $wpdb->get_col( + $wpdb->prepare( + "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s", + 'wp_queue_jobs_%', + ), + ); + + $queues = ['default']; + foreach ($results as $optionName) { + $name = str_replace('wp_queue_jobs_', '', $optionName); + if ($name && ! in_array($name, $queues, true)) { + $queues[] = $name; + } + } + + return $queues; + } + + /** + * Get known queues from scheduled jobs. + * + * Used as fallback when driver doesn't support queue discovery. + * + * @return string[] + */ + protected function discoverKnownQueues(): array + { + // Known queues used by iiko plugin + return ['default', 'imports', 'sync', 'cleanup']; + } + protected function resolve(string $name): QueueInterface { if (isset($this->customCreators[$name])) { diff --git a/src/Runtime/RuntimeMode.php b/src/Runtime/RuntimeMode.php new file mode 100644 index 0000000..4785687 --- /dev/null +++ b/src/Runtime/RuntimeMode.php @@ -0,0 +1,75 @@ +getTableName(); - $rows = $wpdb->get_results("SELECT * FROM {$table} ORDER BY created_at ASC", ARRAY_A) ?: []; + $sql = "SELECT * FROM {$table} ORDER BY created_at ASC"; + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + + if ($this->isMissingTableError($wpdb->last_error)) { + WPQueue::install(); + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + } return array_map(static function (array $row): array { return [ @@ -106,10 +112,13 @@ public function failed(): array $table = $this->getTableName(); - $rows = $wpdb->get_results( - $wpdb->prepare("SELECT * FROM {$table} WHERE status = %s ORDER BY created_at DESC", 'failed'), - ARRAY_A, - ) ?: []; + $sql = $wpdb->prepare("SELECT * FROM {$table} WHERE status = %s ORDER BY created_at DESC", 'failed'); + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + + if ($this->isMissingTableError($wpdb->last_error)) { + WPQueue::install(); + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + } return array_map(static function (array $row): array { return [ @@ -136,10 +145,13 @@ public function completed(): array $table = $this->getTableName(); - $rows = $wpdb->get_results( - $wpdb->prepare("SELECT * FROM {$table} WHERE status = %s ORDER BY created_at DESC", 'completed'), - ARRAY_A, - ) ?: []; + $sql = $wpdb->prepare("SELECT * FROM {$table} WHERE status = %s ORDER BY created_at DESC", 'completed'); + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + + if ($this->isMissingTableError($wpdb->last_error)) { + WPQueue::install(); + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + } return array_map(static function (array $row): array { return [ @@ -165,9 +177,13 @@ public function clearOld(int $daysOld = 7): int $table = $this->getTableName(); $cutoff = gmdate('Y-m-d H:i:s', time() - ($daysOld * DAY_IN_SECONDS)); - $deleted = $wpdb->query( - $wpdb->prepare("DELETE FROM {$table} WHERE created_at < %s", $cutoff), - ); + $sql = $wpdb->prepare("DELETE FROM {$table} WHERE created_at < %s", $cutoff); + $deleted = $wpdb->query($sql); + + if ($this->isMissingTableError($wpdb->last_error)) { + WPQueue::install(); + $deleted = $wpdb->query($sql); + } return (int) $deleted; } @@ -180,7 +196,13 @@ public function clear(): void global $wpdb; $table = $this->getTableName(); - $wpdb->query("TRUNCATE TABLE {$table}"); + $sql = "TRUNCATE TABLE {$table}"; + $wpdb->query($sql); + + if ($this->isMissingTableError($wpdb->last_error)) { + WPQueue::install(); + $wpdb->query($sql); + } } /** @@ -194,7 +216,13 @@ public function metrics(): array $table = $this->getTableName(); - $rows = $wpdb->get_results("SELECT queue, job_class, status FROM {$table}", ARRAY_A) ?: []; + $sql = "SELECT queue, job_class, status FROM {$table}"; + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + + if ($this->isMissingTableError($wpdb->last_error)) { + WPQueue::install(); + $rows = $wpdb->get_results($sql, ARRAY_A) ?: []; + } $metrics = [ 'total' => count($rows), diff --git a/src/WPQueue.php b/src/WPQueue.php index c7e0faa..9741853 100644 --- a/src/WPQueue.php +++ b/src/WPQueue.php @@ -8,6 +8,8 @@ use WPQueue\Admin\RestApi; use WPQueue\Contracts\JobInterface; use WPQueue\Jobs\PendingDispatch; +use WPQueue\Loopback\LoopbackHandler; +use WPQueue\Runtime\RuntimeMode; use WPQueue\Storage\LogStorage; /** @@ -73,30 +75,27 @@ public static function boot(): void add_action('wp_queue_process', static function (string $queue = 'default'): void { error_log('WP Queue: Processing started for queue: '.$queue); + if (self::isProcessing($queue)) { + error_log('WP Queue: Processing already running for queue: '.$queue); + + return; + } + + $lockKey = 'wp_queue_lock_'.$queue; + $lockTtl = 120; + + set_site_transient($lockKey, 1, $lockTtl); + $instance = self::getInstance(); $instance->worker->setMaxJobs(50); $instance->worker->setMaxTime(50); - // Start with the queue passed from the cron event (default: "default") - $queues = [$queue]; - - // Auto-discover all queues stored in options (wp_queue_jobs_*) - if (function_exists('get_option')) { - global $wpdb; + // Discover all queues from the current driver + $queues = $instance->manager->discoverQueues(); - $results = $wpdb->get_col( - $wpdb->prepare( - "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s", - 'wp_queue_jobs_%', - ), - ); - - foreach ($results as $optionName) { - $name = str_replace('wp_queue_jobs_', '', $optionName); - if (! in_array($name, $queues, true)) { - $queues[] = $name; - } - } + // Ensure default queue is always processed + if (! in_array($queue, $queues, true)) { + array_unshift($queues, $queue); } // Process each discovered queue until worker reaches its limits @@ -108,11 +107,19 @@ public static function boot(): void } } - error_log('WP Queue: Processing completed. Jobs processed: '.$instance->worker->getJobsProcessed()); + try { + error_log('WP Queue: Processing completed. Jobs processed: '.$instance->worker->getJobsProcessed()); + } finally { + delete_site_transient($lockKey); + } }); // Schedule queue processing add_action('init', static function (): void { + if (! RuntimeMode::useCron()) { + return; + } + if (! wp_next_scheduled('wp_queue_process')) { wp_schedule_event(time(), 'min', 'wp_queue_process'); } @@ -123,6 +130,11 @@ public static function boot(): void new AdminPage(); } + // Loopback async handler (must be outside is_admin()) + if (RuntimeMode::useLoopback()) { + new LoopbackHandler(); + } + // REST API (must be outside is_admin() for REST requests to work) new RestApi(); @@ -160,7 +172,7 @@ public static function deactivate(): void public static function install(): void { // Schedule queue processing - if (! wp_next_scheduled('wp_queue_process')) { + if (RuntimeMode::useCron() && ! wp_next_scheduled('wp_queue_process')) { wp_schedule_event(time(), 'min', 'wp_queue_process'); } @@ -171,7 +183,9 @@ public static function install(): void public static function uninstall(): void { // Отключаем крон - wp_clear_scheduled_hook('wp_queue_process'); + if (RuntimeMode::useCron()) { + wp_clear_scheduled_hook('wp_queue_process'); + } // Удаляем таблицу логов при деактивации global $wpdb; diff --git a/tests/Feature/AdminPageTest.php b/tests/Feature/AdminPageTest.php index 3356017..ac0d831 100644 --- a/tests/Feature/AdminPageTest.php +++ b/tests/Feature/AdminPageTest.php @@ -37,6 +37,7 @@ function add_menu_page(string $page_title, string $menu_title, string $capabilit test('AdminPage имеет 3 основные вкладки', function (): void { $adminPage = new AdminPage(); + $adminPage->initTabs(); $reflection = new ReflectionClass($adminPage); // Получаем приватное свойство tabs @@ -53,6 +54,7 @@ function add_menu_page(string $page_title, string $menu_title, string $capabilit test('AdminPage имеет секции для каждой вкладки', function (): void { $adminPage = new AdminPage(); + $adminPage->initTabs(); $reflection = new ReflectionClass($adminPage); $sectionsProperty = $reflection->getProperty('sections'); @@ -67,6 +69,7 @@ function add_menu_page(string $page_title, string $menu_title, string $capabilit test('Вкладка Очереди имеет 5 секций', function (): void { $adminPage = new AdminPage(); + $adminPage->initTabs(); $reflection = new ReflectionClass($adminPage); $sectionsProperty = $reflection->getProperty('sections'); @@ -83,6 +86,7 @@ function add_menu_page(string $page_title, string $menu_title, string $capabilit test('Вкладка Планировщик заданий имеет 4 секции', function (): void { $adminPage = new AdminPage(); + $adminPage->initTabs(); $reflection = new ReflectionClass($adminPage); $sectionsProperty = $reflection->getProperty('sections'); @@ -96,16 +100,18 @@ function add_menu_page(string $page_title, string $menu_title, string $capabilit expect($sections['scheduler'])->toHaveKey('scheduled'); }); -test('Вкладка Система имеет 3 секции', function (): void { +test('Вкладка Система имеет 4 секции', function (): void { $adminPage = new AdminPage(); + $adminPage->initTabs(); $reflection = new ReflectionClass($adminPage); $sectionsProperty = $reflection->getProperty('sections'); $sectionsProperty->setAccessible(true); $sections = $sectionsProperty->getValue($adminPage); - expect($sections['system'])->toHaveCount(3); + expect($sections['system'])->toHaveCount(4); expect($sections['system'])->toHaveKey('status'); + expect($sections['system'])->toHaveKey('daemon'); expect($sections['system'])->toHaveKey('tools'); expect($sections['system'])->toHaveKey('help'); }); @@ -167,6 +173,12 @@ function add_menu_page(string $page_title, string $menu_title, string $capabilit expect(method_exists($adminPage, 'renderSchedulerEvents'))->toBeTrue(); }); +test('AdminPage рендерит метод для секции Демон', function (): void { + $adminPage = new AdminPage(); + + expect(method_exists($adminPage, 'renderSystemDaemon'))->toBeTrue(); +}); + test('Метод getStatusLabel возвращает корректные метки', function (): void { $adminPage = new AdminPage(); $reflection = new ReflectionClass($adminPage); diff --git a/wp-queue.php b/wp-queue.php index 9007eb4..9a67827 100644 --- a/wp-queue.php +++ b/wp-queue.php @@ -6,7 +6,7 @@ * Plugin Name: WP Queue * Plugin URI: https://github.com/rwsite/wp-queue * Description: Background job processing and WP-Cron management for WordPress. Schedule tasks, manage queues, and monitor cron events. - * Version: 1.1.0 + * Version: 1.2.0 * Author: Aleksei Tikhomirov * Author URI: https://rwsite.ru * License: GPL-2.0-or-later @@ -26,7 +26,7 @@ return; } -define('WP_QUEUE_VERSION', '1.1.0'); +define('WP_QUEUE_VERSION', '1.2.0'); define('WP_QUEUE_FILE', __FILE__); define('WP_QUEUE_PATH', plugin_dir_path(__FILE__)); define('WP_QUEUE_URL', plugin_dir_url(__FILE__)); @@ -53,19 +53,19 @@ }); } -// Bootstrap -add_action('plugins_loaded', static function (): void { - \WPQueue\WPQueue::boot(); -}); - -// Load text domain -add_action('init', static function (): void { +// Load text domain at after_setup_theme (WordPress 6.7+ requires this or later) +add_action('after_setup_theme', static function (): void { load_plugin_textdomain( 'wp-queue', false, dirname(plugin_basename(__FILE__)).'/languages/', ); -}); +}, 1); + +// Bootstrap after text domain is loaded +add_action('after_setup_theme', static function (): void { + \WPQueue\WPQueue::boot(); +}, 2); // Activation register_activation_hook(__FILE__, static function (): void {