Files
ss-tools/frontend/src/lib/i18n/locales/ru/tasks.json
busya d630573402 fix(backup): orthogonal code review fixes + UI/UX overhaul
## Critical fixes
- H1: Fix env_id/env/environment_id triple inconsistency in API route
  (_action_routes.py now passes 'environment_id', matches scheduler)
- H2: Decompose BackupPlugin.execute() — CC 13 → 5 methods, CC ≤ 5 each
- H3: Fix unhandled int() ValueError on non-numeric dashboard_ids
- H4: Add concurrent guard test with API-style params (env key fallback)
- H5: Make RetentionPolicy configurable via StorageConfig
  (retention_daily/weekly/monthly in config model + backend plugin)
- Fix: storage DELETE route missing 'await' on async delete_file (bug)

## UI/UX overhaul
- NEW: centralized cron utility (frontend/src/lib/utils/cron.ts)
  - validateCron(), calcNextCronRun(), formatNextRun()
  - Used by BackupManager, BackupDashboardModal
- BackupManager: replace custom BackupList with shared FileList
  - Adds: download, delete, bulk actions, search, sort, pagination
  - Adds: cron next-run preview below schedule input
  - Adds: auto-open TaskDrawer on backup task creation
- BackupDashboardModal: dead 'Cron Help' button removed
  - Adds: live cron validation + next-run preview
- StorageSettings: adds retention daily/weekly/monthly fields
- BackupCreateRequest type fixed to match actual API contract
- i18n: 7 new keys for en/ru (next_run, retention_*)
2026-07-13 20:58:02 +03:00

100 lines
5.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"management": "Управление задачами",
"run_backup": "Запустить бэкап",
"recent": "Последние задачи",
"details_logs": "Детали и логи задачи",
"select_task": "Выберите задачу для просмотра логов и деталей",
"loading": "Загрузка задач...",
"no_tasks": "Задачи не найдены.",
"started": "Запущено {time}",
"logs_title": "Логи задачи",
"refresh": "Обновить",
"no_logs": "Логи отсутствуют.",
"manual_backup": "Ручной бэкап",
"target_env": "Целевое окружение",
"select_env": "-- Выберите окружение --",
"start_backup": "Начать бэкап",
"backup_schedule": "Расписание автоматических бэкапов",
"schedule_enabled": "Включено",
"cron_label": "Cron-выражение",
"cron_hint": "например, 0 0 * * * для ежедневного запуска в полночь",
"next_run": "След. запуск",
"footer_text": "Задача продолжает работать в фоновом режиме",
"drawer": "Панель задач",
"close_drawer": "Закрыть панель задач",
"back_to_list": "Назад к списку задач",
"log_stream_failed": "Не удалось подключиться к потоку логов после нескольких попыток.",
"mapping_resolved": "Маппинг сохранен, миграция продолжается...",
"mapping_resolve_failed": "Не удалось сохранить маппинг: {error}",
"passwords_submitted": "Пароли отправлены, миграция возобновляется...",
"resume_failed": "Не удалось возобновить задачу: {error}",
"task_label": "Задача",
"connecting": "Подключение...",
"reconnecting": "Переподключение...",
"live": "Онлайн",
"completed": "Завершено",
"awaiting_mapping": "Ожидание маппинга",
"awaiting_input": "Ожидание ввода",
"disconnected": "Отключено",
"details_parameters": "Детали задачи и параметры",
"started_label": "Запущено",
"plugin": "Плагин",
"parameters": "Параметры",
"waiting_logs": "Ожидание новых логов...",
"result_select_task": "Выберите задачу, чтобы увидеть результат.",
"result_not_structured": "Для этой задачи нет структурированного результата.",
"result_llm_validation": "LLM проверка дашборда",
"result_no_summary": "Нет summary",
"issues": "Проблемы",
"location": "Локация",
"backup_result": "Результат бэкапа",
"total": "Всего",
"successful": "Успешно",
"failed": "С ошибками",
"errors": "Ошибки",
"migration_result": "Результат миграции",
"selected": "Выбрано",
"with_errors": "С ошибками",
"migration_errors": "Ошибки миграции",
"clear_confirm": "Вы уверены, что хотите очистить задачи?",
"fetch_task_details_failed": "Не удалось получить полные детали задачи:",
"clear_tasks": "Очистить задачи",
"clear_non_running": "Очистить все неактивные",
"clear_failed": "Очистить ошибки",
"clear_awaiting_input": "Очистить ожидающие ввода",
"keys": "ключей",
"mappings": "Маппинги",
"summary_report": "Сводный отчет",
"observability_warnings": "Внимание",
"open_dashboard_target": "Открыть дашборд в {env}",
"open_dashboard_target_fallback": "Открыть дашборд",
"show_diff": "Показать Diff",
"diff_preview": "Diff предпросмотр",
"no_diff_available": "Diff недоступен",
"summary_link_unavailable": "Ссылка или diff недоступны для этой задачи",
"open_llm_report": "LLM отчет",
"failure_summary": "Сводка ошибки",
"filter_by_level": "Фильтр по уровню",
"filter_by_source": "Фильтр по источнику",
"log_level_all": "Все",
"log_level_debug": "Debug",
"log_level_info": "Info",
"log_level_warning": "Warn",
"log_level_error": "Error",
"all_sources": "Все источники",
"search_logs": "Поиск в логах...",
"clear_log_filters": "Сбросить фильтры логов",
"log_entries": "записей",
"quick_filter_all": "Все",
"quick_filter_errors": "Ошибки",
"quick_filter_warn": "Warn",
"quick_filter_llm": "LLM",
"quick_filter_plugin": "Plugin",
"quick_filter_system": "System",
"toggle_autoscroll": "Переключить автопрокрутку",
"auto_scroll": "Автопрокрутка",
"auto_scroll_on": "вкл",
"auto_scroll_off": "выкл",
"result": "Проверка"
}