-
- Cancel
-
-
- {isSubmitting ? 'Saving...' : 'Save Policy'}
-
+
+
+
+ {$t.settings?.cancel || 'Cancel'}
+
+
+ {isSubmitting ? ($t.settings?.saving_policy || 'Saving...') : ($t.settings?.save_policy || 'Save Policy')}
+
diff --git a/frontend/src/lib/i18n/locales/en/settings.json b/frontend/src/lib/i18n/locales/en/settings.json
index 6b3427e7..822e4233 100644
--- a/frontend/src/lib/i18n/locales/en/settings.json
+++ b/frontend/src/lib/i18n/locales/en/settings.json
@@ -149,5 +149,50 @@
"help_migration_cron": "Cron expression for automatic cross-environment ID synchronization. Format: minute hour day month weekday. Example: 0 2 * * * (daily at 2 AM UTC).",
"help_migration_sync_now": "Triggers an immediate synchronization of Dashboard, Chart, and Dataset IDs across all configured environments.",
"help_feature_dataset_review": "Enable the Dataset Review workflow: automatic review, clarification sessions, and SQL execution for imported datasets.",
- "help_feature_health_monitor": "Enable dashboard health monitoring: validation reports, status aggregation, and health summary display."
+ "help_feature_health_monitor": "Enable dashboard health monitoring: validation reports, status aggregation, and health summary display.",
+
+ "automation_policies": "Automation Policies",
+ "automation_policies_subtitle": "Manage scheduled validation rules and execution windows.",
+ "create_policy": "Create Policy",
+ "edit_policy": "Edit Policy",
+ "new_policy": "New Policy",
+ "back_to_list": "Back to list",
+ "no_policies": "No policies",
+ "no_policies_desc": "Get started by creating a new automation policy.",
+ "translation_schedules": "Translation Schedules",
+ "policy_name": "Policy Name",
+ "policy_name_placeholder": "e.g., Production Morning Check",
+ "environment": "Environment",
+ "schedule_days": "Schedule Days",
+ "window_start": "Window Start",
+ "window_end": "Window End",
+ "alert_condition": "Alert Condition",
+ "alert_fail_only": "Only on Failure",
+ "alert_warn_and_fail": "On Warning or Failure",
+ "alert_always": "Always",
+ "notify_owners": "Auto-notify Dashboard Owners",
+ "cancel": "Cancel",
+ "save_policy": "Save Policy",
+ "saving_policy": "Saving...",
+ "policy_created": "Policy created successfully",
+ "policy_updated": "Policy updated successfully",
+ "policy_deleted": "Policy deleted successfully",
+ "policy_save_failed": "Failed to save policy",
+ "policy_delete_failed": "Failed to delete policy",
+ "policy_load_failed": "Failed to load automation data",
+ "delete_confirm": "Are you sure you want to delete this policy?",
+ "dashboards_count": "{count} Dashboards",
+ "active": "Active",
+ "inactive": "Inactive",
+ "last_run": "Last: {date}",
+ "distribution_info": "System will automatically distribute {count} checks within this {hours}h {minutes}m window.",
+ "window_warning": "Window might be too narrow for {count} dashboards.",
+
+ "day_sun": "Sun",
+ "day_mon": "Mon",
+ "day_tue": "Tue",
+ "day_wed": "Wed",
+ "day_thu": "Thu",
+ "day_fri": "Fri",
+ "day_sat": "Sat"
}
diff --git a/frontend/src/lib/i18n/locales/en/validation.json b/frontend/src/lib/i18n/locales/en/validation.json
index adcfb560..055a4b11 100644
--- a/frontend/src/lib/i18n/locales/en/validation.json
+++ b/frontend/src/lib/i18n/locales/en/validation.json
@@ -1,6 +1,7 @@
{
"tasks_title": "Validation Tasks",
"new_task_page": "New Validation Task",
+ "new_task_description": "Configure a new LLM-powered dashboard validation task",
"edit_task_page": "Edit Task",
"step_name": "Name & Environment",
"step_sources": "Sources",
diff --git a/frontend/src/lib/i18n/locales/ru/settings.json b/frontend/src/lib/i18n/locales/ru/settings.json
index a9c86a35..d2dcc187 100644
--- a/frontend/src/lib/i18n/locales/ru/settings.json
+++ b/frontend/src/lib/i18n/locales/ru/settings.json
@@ -149,5 +149,50 @@
"help_migration_cron": "Cron-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ID ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΠΌΠΈ. Π€ΠΎΡΠΌΠ°Ρ: ΠΌΠΈΠ½ΡΡΠ° ΡΠ°Ρ Π΄Π΅Π½Ρ ΠΌΠ΅ΡΡΡ Π΄Π΅Π½Ρ_Π½Π΅Π΄Π΅Π»ΠΈ. ΠΡΠΈΠΌΠ΅Ρ: 0 2 * * * (Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ Π² 02:00 UTC).",
"help_migration_sync_now": "ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ID Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ², ΡΠ°ΡΡΠΎΠ² ΠΈ Π΄Π°ΡΠ°ΡΠ΅ΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΠΌΠΈ.",
"help_feature_dataset_review": "ΠΠΊΠ»ΡΡΠΈΡΡ workflow ΠΎΠ±Π·ΠΎΡΠ° Π΄Π°ΡΠ°ΡΠ΅ΡΠΎΠ²: Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ, ΡΡΠΎΡΠ½ΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ SQL Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°ΡΠ°ΡΠ΅ΡΠΎΠ².",
- "help_feature_health_monitor": "ΠΠΊΠ»ΡΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π·Π΄ΠΎΡΠΎΠ²ΡΡ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ²: ΠΎΡΡΡΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΡΡΠ°ΡΡΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠ΄ΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ."
+ "help_feature_health_monitor": "ΠΠΊΠ»ΡΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π·Π΄ΠΎΡΠΎΠ²ΡΡ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ²: ΠΎΡΡΡΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΡΡΠ°ΡΡΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠ΄ΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.",
+
+ "automation_policies": "ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ",
+ "automation_policies_subtitle": "Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.",
+ "create_policy": "Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ",
+ "edit_policy": "Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ",
+ "new_policy": "ΠΠΎΠ²Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°",
+ "back_to_list": "ΠΠ°Π·Π°Π΄ ΠΊ ΡΠΏΠΈΡΠΊΡ",
+ "no_policies": "ΠΠ΅Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ",
+ "no_policies_desc": "ΠΠ°ΡΠ½ΠΈΡΠ΅ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ.",
+ "translation_schedules": "Π Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ²",
+ "policy_name": "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ",
+ "policy_name_placeholder": "Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π£ΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Production",
+ "environment": "ΠΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅",
+ "schedule_days": "ΠΠ½ΠΈ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ",
+ "window_start": "ΠΠ°ΡΠ°Π»ΠΎ ΠΎΠΊΠ½Π°",
+ "window_end": "ΠΠΎΠ½Π΅Ρ ΠΎΠΊΠ½Π°",
+ "alert_condition": "Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ",
+ "alert_fail_only": "Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅",
+ "alert_warn_and_fail": "ΠΡΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅",
+ "alert_always": "ΠΡΠ΅Π³Π΄Π°",
+ "notify_owners": "ΠΠ²ΡΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅Π² Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ²",
+ "cancel": "ΠΡΠΌΠ΅Π½Π°",
+ "save_policy": "Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ",
+ "saving_policy": "Π‘ΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅...",
+ "policy_created": "ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π°",
+ "policy_updated": "ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π°",
+ "policy_deleted": "ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ΄Π°Π»Π΅Π½Π°",
+ "policy_save_failed": "ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ",
+ "policy_delete_failed": "ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ",
+ "policy_load_failed": "ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ",
+ "delete_confirm": "ΠΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ?",
+ "dashboards_count": "{count} Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ²",
+ "active": "ΠΠΊΡΠΈΠ²Π΅Π½",
+ "inactive": "ΠΠ΅Π°ΠΊΡΠΈΠ²Π΅Π½",
+ "last_run": "ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ: {date}",
+ "distribution_info": "Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ {count} ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π² ΡΡΠΎΠΌ ΠΎΠΊΠ½Π΅ {hours}Ρ {minutes}ΠΌ.",
+ "window_warning": "ΠΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ·ΠΊΠΈΠΌ Π΄Π»Ρ {count} Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ².",
+
+ "day_sun": "ΠΡ",
+ "day_mon": "ΠΠ½",
+ "day_tue": "ΠΡ",
+ "day_wed": "Π‘Ρ",
+ "day_thu": "Π§Ρ",
+ "day_fri": "ΠΡ",
+ "day_sat": "Π‘Π±"
}
diff --git a/frontend/src/lib/i18n/locales/ru/validation.json b/frontend/src/lib/i18n/locales/ru/validation.json
index ec06e6f4..a238fa11 100644
--- a/frontend/src/lib/i18n/locales/ru/validation.json
+++ b/frontend/src/lib/i18n/locales/ru/validation.json
@@ -1,6 +1,7 @@
{
"tasks_title": "ΠΠ°Π΄Π°ΡΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ",
"new_task_page": "ΠΠΎΠ²Π°Ρ Π·Π°Π΄Π°ΡΠ° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ",
+ "new_task_description": "ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ Π·Π°Π΄Π°ΡΡ LLM-Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ²",
"edit_task_page": "Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΡ",
"step_name": "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅",
"step_sources": "ΠΡΡΠΎΡΠ½ΠΈΠΊΠΈ",
diff --git a/frontend/src/routes/settings/automation/+page.svelte b/frontend/src/routes/settings/automation/+page.svelte
index d599bbf7..f345301e 100644
--- a/frontend/src/routes/settings/automation/+page.svelte
+++ b/frontend/src/routes/settings/automation/+page.svelte
@@ -1,17 +1,17 @@
-
+
+
+
+
+
+
+
+
-
-
-
-
Automation Policies
-
Manage scheduled validation rules and execution windows.
-
- {#if !showForm}
-
-
-
-
- Create Policy
-
- {/if}
-
-
+
{#if showForm}
-
+
+
-
showForm = false} class="text-sm text-primary hover:text-primary-hover flex items-center">
+ showForm = false}>
- Back to list
-
+ {$t.settings?.back_to_list || 'Back to list'}
+
|
-
- {selectedPolicy ? 'Edit Policy' : 'New Policy'}
+
+ {selectedPolicy ? ($t.settings?.edit_policy || 'Edit Policy') : ($t.settings?.new_policy || 'New Policy')}
{:else if isLoading}
+
{:else}
-