Files
ss-tools/frontend/src/lib/i18n/locales/en/dashboard.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

144 lines
6.2 KiB
JSON

{
"search": "Search dashboards...",
"title": "Title",
"last_modified": "Last Modified",
"status": "Status",
"git": "Git",
"showing": "Showing {start} to {end} of {total} dashboards",
"previous": "Previous",
"next": "Next",
"no_dashboards": "No dashboards found in this environment.",
"select_source": "Select a source environment to view dashboards.",
"overview": "Overview",
"charts": "Charts",
"validate": "Validate",
"validation_started": "Validation started for {title}",
"select_tool": "Select Tool",
"dashboard_validation": "Dashboard Validation",
"dataset_documentation": "Dataset Documentation",
"dashboard_id": "Dashboard ID",
"dataset_id": "Dataset ID",
"environment": "Environment",
"home": "Home",
"llm_provider": "LLM Provider (Optional)",
"use_default": "Use Default",
"screenshot_strategy": "Screenshot Strategy",
"headless_browser": "Headless Browser (Accurate)",
"api_thumbnail": "API Thumbnail (Fast)",
"include_logs": "Include Execution Logs",
"notify_on_failure": "Notify on Failure",
"update_metadata": "Update Metadata Automatically",
"run_task": "Run Task",
"running": "Running...",
"git_status": "Git Status",
"last_task": "Last Task",
"llm_status": "LLM Validation Status",
"changed_on": "Changed On",
"owners": "Owners",
"column_filter": "Column filter",
"actions": "Actions",
"action_migrate": "Migrate",
"action_backup": "Backup",
"action_validate": "Validate",
"action_commit": "Commit",
"select_all": "Select All",
"deselect_all": "Deselect All",
"select_visible": "Select Visible",
"deselect_visible": "Deselect Visible",
"selected_count": "{count} selected",
"open_overview": "Open dashboard overview",
"per_page_option": "{count} per page",
"bulk_migrate": "Migrate",
"bulk_backup": "Backup",
"migrate_modal_title": "Migrate {count} Dashboards",
"backup_modal_title": "Backup {count} Dashboards",
"read_only": "(read-only)",
"target_env_placeholder": "Select target environment...",
"view_summary": "View Summary",
"edit_mappings": "Edit Mappings",
"source_database": "Source Database",
"target_database": "Target Database",
"match_percent": "Match %",
"not_mapped": "Not mapped",
"no_databases_to_map": "No databases found to map",
"select_target_for_mappings": "Select target environment to see mappings",
"mapping_disabled_hint": "Database mapping is disabled. Dashboards will be imported with original database references.",
"saved": "Saved",
"suggested": "Suggested",
"fix_cross_filters_title": "Fix cross-filter bindings",
"fix_cross_filters_hint": "Automatically remap chart and dataset IDs in cross-filters to target environment IDs. Recommended when migrating dashboards with cross-filters.",
"selected_dashboards": "Selected Dashboards",
"starting": "Starting...",
"start_backup": "Start Backup",
"schedule": "Schedule",
"one_time_backup": "One-time backup",
"schedule_backup": "Schedule backup",
"cron_expression": "Cron expression",
"cron_help": "Help with cron syntax",
"cron_placeholder": "0 2 * * * (daily at 2 AM)",
"next_run": "Next: {time}",
"load_failed": "Failed to load dashboards",
"validation_start_failed": "Failed to start validation",
"unknown_error": "Unknown error",
"target_env_required": "Please select a target environment",
"migration_task_failed": "Failed to create migration task",
"backup_task_failed": "Failed to create backup task",
"missing_context": "Missing dashboard ID or environment ID",
"missing_context_hint": "No environment selected. Choose an environment from the top bar and reload the page.",
"load_detail_failed": "Failed to load dashboard details",
"no_charts": "No charts found for this dashboard.",
"no_datasets": "No datasets found for this dashboard.",
"view_task": "View task",
"task_running": "Running...",
"task_done": "Done",
"task_failed": "Failed",
"task_waiting": "Waiting",
"status_repo": "Repo linked",
"status_no_repo": "No repo",
"status_changes": "Changes pending",
"status_no_changes": "No changes",
"status_synced": "Synced",
"status_diff": "Diff",
"status_error": "Error",
"linked_resources": "Linked resources",
"git_history": "Git history",
"run_backup": "Run backup",
"run_llm_check": "Run LLM check",
"thumbnail_generating": "Thumbnail is being generated",
"thumbnail_failed": "Failed to load thumbnail",
"thumbnail_unavailable": "Thumbnail is unavailable",
"settings": "Settings",
"empty": "No dashboards found",
"hub_subtitle": "Manage Superset dashboards: migration, backups, validation, and Git status",
"create_validation_task": "Create Validation Task",
"date_range_placeholder": "Date range",
"date_from": "From",
"date_to": "To",
"date_preset_today": "Today",
"date_preset_days": "d",
"date_preset_month": "This month",
"date_preset_year": "This year",
"setup_badge": "Initial setup",
"setup_title": "Configure your first environment",
"setup_intro": "Dashboards need at least one Superset environment. Create it here instead of landing on an empty screen.",
"setup_open_advanced": "Advanced settings",
"setup_card_title": "What happens next",
"setup_card_body": "The wizard saves a Superset endpoint, validates login, and immediately adds the environment to the global selector.",
"setup_checklist_title": "Prepare these values",
"setup_checklist_url": "Superset base URL without /api/v1",
"setup_checklist_user": "Username with dashboard access",
"setup_checklist_pass": "Password for the selected Superset account",
"setup_step_title": "Starter flow",
"setup_step_one": "Create the first environment",
"setup_step_two": "Select it automatically for the current session",
"setup_step_three": "Load dashboards from the new environment",
"setup_start": "Start setup",
"setup_create": "Create environment",
"setup_creating": "Creating environment...",
"setup_required": "Fill in ID, name, URL, username, and password.",
"setup_failed": "Failed to create environment.",
"setup_created": "Environment created. Loading dashboards.",
"setup_empty_title": "No environments configured yet",
"setup_empty_body": "Add the first Superset environment to unlock dashboards, datasets, backups, and migrations."
}