{
  "common": {
    "loading": "Loading...",
    "save": "Save",
    "saving": "Saving...",
    "cancel": "Cancel",
    "back": "Back",
    "delete": "Delete",
    "retry": "Retry",
    "create": "Create",
    "edit": "Edit",
    "next": "Next",
    "previous": "Previous",
    "unknown_error": "An unknown error occurred",
    "from": "From",
    "unknown": "Unknown",
    "error": "Error",
    "success": "Success",
    "close": "Close"
  },
  "config": {
    "new_title": "New Translation Job",
    "edit_title": "Edit Translation Job",
    "basic_info": "Basic Info",
    "name": "Name",
    "name_placeholder": "Enter job name",
    "description": "Description",
    "description_placeholder": "Optional description",
    "datasource": "Data Source",
    "environment": "Superset Environment",
    "select_environment": "Select environment...",
    "datasource_id": "Source Datasource ID",
    "datasource_search_placeholder": "Search datasets...",
    "datasource_unavailable": "Datasource unavailable",
    "select_datasource_hint": "Select a datasource to view its columns",
    "detected_dialect": "Detected dialect: {dialect}",
    "column_mapping": "Column Mapping",
    "source_table": "Source Table",
    "source_table_placeholder": "e.g. public.users",
    "source_dialect": "Source Dialect",
    "target_dialect": "Target Dialect",
    "key_columns": "Key Columns (composite key)",
    "add_key_column": "+ Add Key Column",
    "translation_column": "Column to Translate",
    "context_columns": "Context Columns (optional)",
    "select_column": "Select a column...",
    "available_columns": "Available columns ({count})",
    "virtual": "virtual",
    "virtual_column_warning": "Virtual columns cannot be used for translation: {col}",
    "warnings_title": "Warnings",
    "clear_all": "Clear all",
    "target_table": "Target Table",
    "target_table_title": "Target Table",
    "target_schema": "Target Schema",
    "target_schema_placeholder": "e.g. public",
    "target_table_placeholder": "e.g. users_translated",
    "target_language": "Target Language",
    "target_language_search_placeholder": "Search languages...",
    "target_language_required": "Select at least one target language",
    "status": "Status",
    "status_draft": "Draft",
    "status_ready": "Ready",
    "status_active": "Active",
    "target_column_placeholder": "Target Column",
    "target_column_mapping_title": "Target Column Mapping",
    "target_column_mapping_description": "Configure which columns receive translated data, language codes, source text, and detected source language during INSERT.",
    "target_column_label": "Target Column (translated text)",
    "target_column_placeholder": "translated_text",
    "target_column_hint": "Column where translated text will be inserted",
    "target_language_column_label": "Language Column",
    "target_language_column_placeholder": "lang_code",
    "target_language_column_hint": "Column where language code (e.g. 'ru', 'en') will be inserted",
    "target_source_column_label": "Source Text Column",
    "target_source_column_placeholder": "source_text",
    "target_source_column_hint": "Column where original source text will be inserted",
    "target_source_language_column_label": "Source Language Column",
    "target_source_language_column_placeholder": "src_lang",
    "target_source_language_column_hint": "Column where detected source language (BCP-47) will be inserted",
    "write_settings": "Write Settings",
    "batch_size": "Batch Size",
    "insert_method": "Insert Method",
    "insert_method_sqllab": "Superset SQL Lab API",
    "insert_method_sqllab_hint": "Executes via Superset /api/v1/sqllab/execute/",
    "insert_method_direct_db": "Direct Database Connection",
    "insert_method_direct_db_hint": "Executes INSERT directly against target database",
    "insert_method_select": "Select connection",
    "insert_method_no_conns": "No database connections configured.",
    "insert_method_go_settings": "Go to Settings - Connections",
    "insert_method_test": "Test Connection",
    "insert_method_testing": "Testing...",
    "insert_method_no_compatible": "No compatible connections for dialect: {dialect}",
    "insert_method_connection_label": "Database Connection",
    "insert_method_connection_help": "Direct database connection configured in Settings → Connections. Used for INSERT operations.",
    "upsert_strategy": "Strategy",
    "upsert_merge": "UPSERT (MERGE)",
    "upsert_insert": "INSERT only",
    "upsert_update": "UPDATE only",
    "llm_settings": "LLM Settings",
    "provider": "Provider",
    "select_provider": "Select a provider...",
    "terminology_dictionaries": "Terminology Dictionaries",
    "no_dictionaries": "No dictionaries configured",
    "run_translation": "Run Translation",
    "full_translate": "Full Translation",
    "full_translate_title": "Translate all rows from source",
    "run_incremental": "Incremental Run",
    "run_incremental_desc": "Translate only new or changed rows. Fast, uses fewer LLM tokens.",
    "run_full": "Full Re-Run",
    "run_full_desc": "Re-translate ALL rows from the datasource. Use for a complete refresh.",
    "run_started": "Translation run started",
    "running": "Running...",
    "run_failed": "Translation run failed",
    "cancel": "Cancel",
    "back_to_jobs": "← Back to Jobs",
    "recent_runs": "Recent Runs",
    "id_label": "ID: {id}",
    "save": "Save",
    "saving": "Saving...",
    "job_created": "Translation job created",
    "job_updated": "Translation job updated",
    "job_not_found": "Job not found: {id}",
    "save_failed": "Failed to save translation job",
    "name_required": "Name is required",
    "translation_column_required": "Translation column is required",
    "key_mapping_required": "Please add at least one key column",
    "redundant_column_warning": "Column '{col}' appears in both source and target key columns",
    "insert_retry_started": "Insert retry started",
    "insert_retry_failed": "Insert retry failed",
    "target_database": "Target Database (SQL Lab)",
    "select_target_database": "Select database for INSERT...",
    "target_database_hint": "Database connection used for writing translated data via SQL Lab",
    "loading_databases": "Loading databases...",
    "include_source_reference": "Include source language in translations",
    "include_source_reference_hint": "The original text will be stored as a verified reference copy in its detected language",
    "disable_reasoning": "Disable reasoning (save tokens)",
    "disable_reasoning_hint": "Saves output tokens by suppressing Chain of Thought reasoning",
    "mark_ready": "Mark as READY",
    "save_job_first": "Save the job first",
    "breadcrumb_job": "Job",
    "help_name": "A unique job name for quick identification in the list.",
    "help_description": "Optional description — notes for the team about the purpose of this job.",
    "help_environment": "The Superset environment where the source dataset resides. Changing the environment will reset the dataset selection.",
    "help_datasource": "The dataset (table or SQL query) from Superset that contains the text to translate. Start typing to search.",
    "help_translation_column": "The column containing the source text to be sent to the LLM for translation. Must contain string values. The language of each row is auto-detected (lingua detector, BCP-47). If a row is empty or the language is undetermined ('und'), it will require review.",
    "help_key_columns": "Columns that form a unique row key. Used for UPSERT/MERGE into the target table and for tracking changes.",
    "help_context_columns": "Additional columns passed to the LLM as context. Helps improve translation quality (e.g., category, author).",
    "help_provider": "The LLM provider that will perform the translation. Choose a provider that supports the required languages.",
    "help_target_language": "Languages to translate the text into. You can select multiple — a single LLM call translates each row into ALL selected languages at once. ⚠️ Important: the system auto-detects each source row's language (lingua detector). If the detected language matches one of the target languages, translation for THAT language is SKIPPED — the original text is saved as-is. Example: source 'Hello world' is detected as 'en'. If 'English (en)' is selected as a target, this row is skipped for en (stays 'Hello world') but translated into other selected languages (e.g., 'Привет мир' for ru).",
    "help_batch_size": "Number of rows sent to the LLM per request. Smaller batches = higher quality but more tokens spent on overhead.",
    "help_upsert_strategy": "Write strategy for the target table: UPSERT (MERGE) — insert or update; INSERT — new rows only; UPDATE — existing rows only.",
    "help_include_source_reference": "Save the original text in a separate column as a reference copy. Useful for verification and auditing.",
    "help_disable_reasoning": "Disable LLM Chain-of-Thought reasoning. Saves tokens (~20-30%) but may reduce quality for complex translations.",
    "help_dictionaries": "Terminology dictionaries for forced term mapping. Improves translation consistency within the subject domain.",
    "help_target_schema": "The database schema (namespace) where translated data will be written. E.g., public.",
    "help_target_table": "The target table name for translated data. If the table does not exist, data will be inserted via SQL Lab.",
    "help_target_database": "Database connection (SQL Lab) through which translated rows will be INSERTed.",
    "help_target_column": "Target table column where translated text will be written. Must support a string type.",
    "help_target_language_column": "Column for the translation language code (ISO 639-1, e.g., 'en', 'ru'). Used for multilingual storage.",
    "help_target_source_column": "Column for saving the original source text before translation. Required if 'Include source text' is enabled.",
    "help_target_source_language_column": "Column for the automatically detected source language code (BCP-47). Filled by the LLM during translation.",
    "help_incremental": "Translates only rows with new key values (new keys). Previously translated rows are not re-fetched from the LLM — results come from cache. Faster and cheaper. Recommended for regular updates. For scheduled runs, baseline expiry is checked: if the last successful run was >90 days ago, a full translation is automatically triggered.",
    "help_full": "Re-translates ALL rows from the datasource from scratch, ignoring the cache from previous runs. Useful when settings, dictionaries, or provider change. Takes more time and tokens. Language auto-detection (detected_lang) runs for every row on each full run.",
    "target_table_tab": "Target Table",
    "confirm_run_title": "Run translation?",
    "confirm_run_body": "Are you sure you want to start the incremental translation?",
    "confirm_full_run_title": "Run full translation?",
    "confirm_full_run_body": "This will re-translate ALL rows from the source, ignoring the cache. This action may take a long time and consume many LLM tokens.",
    "confirm": "Confirm",
    "unsaved_changes_title": "Unsaved changes",
    "unsaved_changes_body": "You have unsaved changes. Save before leaving?",
    "unsaved_changes_save": "Save",
    "unsaved_changes_discard": "Discard",
    "refresh_metrics": "Refresh",
    "copy_id": "Copy ID",
    "copy_success": "ID copied",
    "copy_failed": "Failed to copy",
    "error_normalized": "Translation execution error",
    "error_db_not_found": "Target database not found. Check your connection settings.",
    "error_connection_failed": "Failed to connect to the database. Check your connection settings.",
    "error_generic": "An error occurred. Please try again.",
    "batch_size_suffix": "rows"
  },
  "preview": {
    "title": "Preview",
    "correct": "Correct",
    "skip": "Skip",
    "accept_all": "Accept All",
    "applying": "Applying...",
    "apply_success": "Corrections applied",
    "apply_failed": "Failed to apply corrections",
    "no_records": "No preview records available",
    "loading": "Loading preview...",
    "fetch_failed": "Failed to load preview",
    "sample_size": "Sample size:",
    "cost_warning": "Large sample size may incur higher costs",
    "run_preview": "Run Preview",
    "running_preview": "Running preview...",
    "retry_preview": "Retry",
    "preview_loaded": "Loaded {count} records",
    "preview_failed": "Failed to run preview",
    "accepted_badge": "Accepted",
    "active_badge": "Active",
    "cost_estimate": "Cost Estimate",
    "sample_rows": "Sample rows:",
    "sample_tokens": "Tokens:",
    "sample_cost": "Sample cost:",
    "est_total_cost": "Estimated total cost:",
    "rows_count": "Total: {count}",
    "approved_count": "Approved: {count}",
    "rejected_count": "Rejected: {count}",
    "pending_count": "Pending: {count}",
    "approve_all": "Approve All",
    "re_run": "Re-run",
    "table_number": "#",
    "table_source": "Source SQL",
    "table_translation": "Translation",
    "table_status": "Status",
    "table_actions": "Actions",
    "empty_placeholder": "(empty)",
    "pending_placeholder": "Pending translation",
    "edited_label": "(edited)",
    "save_edit": "Save",
    "cancel_edit": "Cancel",
    "approve": "Approve",
    "edit": "Edit",
    "reject": "Reject",
    "quality_gate": "Quality Gate",
    "quality_gate_ready": "All rows reviewed. You can accept the preview.",
    "quality_gate_pending": "Not all rows reviewed. Acceptance is blocked.",
    "accepting": "Accepting...",
    "accept_preview": "Accept Preview",
    "accepted_title": "Preview Accepted",
    "accepted_body": "Preview accepted successfully. You can now run the translation.",
    "run_preview_again": "Run Again",
    "config_incomplete": "Job configuration is incomplete",
    "config_requirements": "Translation column, datasource, target languages, and LLM provider must be set",
    "approve_failed": "Failed to approve row",
    "reject_failed": "Failed to reject row",
    "edit_failed": "Failed to save changes",
    "row_updated": "Row updated",
    "accept_failed": "Failed to accept preview",
    "detected_language": "Detected Lang",
    "languages_count": "Languages: {count}",
    "across_languages": "Across {count} language(s)",
    "language_label": "Language",
    "status_approved": "Approved",
    "status_rejected": "Rejected",
    "status_pending": "Pending"
  },
  "jobs": {
    "title": "Translation Jobs",
    "subtitle": "Manage your translation jobs",
    "new_job": "New Job",
    "create_job": "Create Job",
    "status_draft": "Draft",
    "status_ready": "Ready",
    "status_running": "Running",
    "status_completed": "Completed",
    "status_failed": "Failed",
    "no_jobs": "No translation jobs created yet. Create your first job to get started.",
    "no_jobs_filtered": "No {status} jobs found.",
    "load_failed": "Failed to load jobs",
    "an_error_occurred": "An error occurred while loading jobs",
    "clear_filter": "Clear Filter",
    "confirm_delete": "Are you sure you want to delete this translation job?",
    "cancel_delete": "Cancel",
    "by_label": "by {by}",
    "updated_label": "Updated {date}",
    "column_label": "Column: {column}",
    "language_label": "Language: {language}",
    "duplicate": "Duplicate",
    "job_duplicated": "Job duplicated",
    "duplicate_failed": "Failed to duplicate job",
    "job_deleted": "Job deleted",
    "delete_failed": "Failed to delete job",
    "jobs_flow_hint": "Flow: create a job → configure datasource and LLM → run translation → check run history."
  },
  "history": {
    "title": "Translation History",
    "subtitle": "Filterable run history with metrics aggregation",
    "refresh": "Refresh",
    "total_runs": "Total Runs",
    "successful": "Successful",
    "failed": "Failed",
    "records": "Records",
    "all_jobs": "All Jobs",
    "all_status": "All Status",
    "all_triggers": "All Triggers",
    "status_pending": "Pending",
    "status_running": "Running",
    "status_completed": "Completed",
    "status_failed": "Failed",
    "status_cancelled": "Cancelled",
    "trigger_manual": "Manual",
    "trigger_scheduled": "Scheduled",
    "trigger_baseline_expired": "Baseline Expired",
    "filter": "Filter",
    "no_runs": "No translation runs found",
    "no_runs_hint": "Runs appear here after executing a translation job.",
    "showing": "Showing {count} of {total} runs",
    "previous": "Previous",
    "next": "Next",
    "run_detail": "Run Detail",
    "status": "Status",
    "trigger": "Trigger",
    "started": "Started",
    "completed": "Completed",
    "total": "Total",
    "success": "Success",
    "skipped": "Skipped",
    "config_snapshot": "Config Snapshot",
    "snapshots": "Snapshots",
    "events": "Events ({count})",
    "error": "Error",
    "superset_query_id": "Superset Query ID",
    "skipped_csv": "Skipped CSV",
    "load_failed": "Failed to load runs",
    "load_detail_failed": "Failed to load run detail",
    "records_label": "{count} records",
    "ok_label": "{count} ok",
    "fail_label": "{count} fail",
    "by_label": "by {user}",
    "download_failed": "Failed to download"
  },
  "schedule": {
    "title": "Schedule Configuration",
    "no_schedule": "No schedule configured",
    "no_schedule_hint": "Set up a recurring schedule for automatic translations",
    "create_schedule": "Create Schedule",
    "cron_expression": "Cron Expression",
    "timezone": "Timezone",
    "next_executions": "Next Executions",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "tab_label": "Schedule",
    "edit": "Edit",
    "update": "Update",
    "create": "Create",
    "delete_schedule": "Delete Schedule",
    "no_prior_run_warning": "No prior successful manual run. Schedule may run with default settings. Consider running manually first.",
    "saved": "Schedule saved",
    "save_failed": "Failed to save schedule",
    "deleted": "Schedule deleted",
    "delete_failed": "Failed to delete schedule",
    "enabled_toast": "Schedule enabled",
    "disabled_toast": "Schedule disabled",
    "toggle_failed": "Failed to toggle schedule",
    "preset_daily": "Daily at 02:00",
    "preset_every_6h": "Every 6 hours",
    "preset_weekly": "Weekly (Sun 01:30)",
    "preset_monthly": "Monthly (1st at 03:00)",
    "execution_mode": "Execution Mode",
    "mode_full": "Full",
    "mode_full_desc": "Translate all rows every run",
    "mode_new_keys": "New Keys Only",
    "mode_new_keys_desc": "Only translate rows with new key values",
    "preset_every_15min": "Every 15 min",
    "description_daily": "Daily at {hour}:{minute}",
    "description_every_hour": "at :{minute} past the hour",
    "description_cron": "Cron: {cron}",
    "help_cron": "Cron expression for automatic translation job execution. Format: minute hour day month weekday. Example: 0 2 * * * (daily at 2 AM UTC).",
    "help_timezone": "Timezone for schedule execution. All times will be calculated in this timezone. Default: UTC.",
    "help_execution_mode": "Translation execution mode:\n• full — translate all records in the job\n• incremental — only translate records that have changed since the last run"
  },
  "dictionaries": {
    "title": "Dictionaries",
    "new_title": "New Dictionary",
    "name": "Name",
    "name_placeholder": "Enter dictionary name",
    "desc": "Description",
    "desc_placeholder": "Optional description",
    "no_description": "No description",
    "entry_count": "{count} entries",
    "total_entries": "Total: {count}",
    "create": "Create Dictionary",
    "create_first": "Create your first dictionary",
    "confirm_delete": "Delete this dictionary?",
    "no_dicts": "No dictionaries yet",
    "inactive": "Inactive",
    "page_info": "Page {current} of {total}",
    "load_failed": "Failed to load dictionaries",
    "load_entries_failed": "Failed to load entries",
    "name_required": "Dictionary name is required",
    "dict_created": "Dictionary created",
    "create_failed": "Failed to create dictionary",
    "delete_success": "Dictionary deleted",
    "delete_failed": "Failed to delete dictionary",
    "add_entry": "Add Entry",
    "new_entry": "New Entry",
    "save": "Save",
    "loading": "Loading entries...",
    "languages": "Languages",
    "source_term": "Source Term",
    "target_term": "Target Term",
    "context_notes": "Context Notes",
    "context_data": "Context Data",
    "context_data_json": "Context data (JSON)",
    "import_csv": "Import CSV/TSV",
    "import_csv_tsv": "Import CSV/TSV",
    "import_entries": "Import Entries",
    "import_title": "Import Entries",
    "paste_csv": "Paste CSV content...",
    "delimiter": "Delimiter (default: tab)",
    "import_content_label": "CSV/TSV Content (columns: source_term, target_term, source_language, target_language, context_notes, context_data, usage_notes)",
    "import_content_placeholder": "source_term,target_term,source_language,target_language,context_notes,context_data,usage_notes",
    "import_delimiter": "Delimiter",
    "import_delimiter_auto": "Auto-detect",
    "import_delimiter_comma": "Comma (CSV)",
    "import_delimiter_tab": "Tab (TSV)",
    "import_on_conflict": "On Conflict",
    "conflict_overwrite": "Overwrite existing",
    "conflict_skip": "Skip existing",
    "import_conflict_overwrite": "Overwrite existing",
    "import_conflict_keep": "Keep existing",
    "import_conflict_cancel": "Cancel on conflict",
    "preview": "Preview",
    "preview_count": "{count} rows",
    "import_btn": "Import",
    "import_preview_btn": "Preview Import",
    "import_execute_btn": "Execute Import ({count} rows)",
    "import_cancel_btn": "Cancel",
    "import_table_line": "Line",
    "import_table_source": "Source",
    "import_table_target": "Target",
    "import_table_src_lang": "Src Lang",
    "import_table_tgt_lang": "Tgt Lang",
    "import_table_context": "Context",
    "import_table_conflict": "Conflict",
    "import_yes": "yes",
    "import_notes": "notes",
    "import_existing": "Existing: {term}",
    "import_will_overwrite": "will overwrite",
    "import_will_skip": "will skip",
    "import_new": "New",
    "import_errors": "Errors ({count}):",
    "import_error_line": "Line {line}: {error}",
    "required_terms": "Required Terms",
    "entry_added": "Entry added",
    "entry_add_failed": "Failed to add entry",
    "entry_updated": "Entry updated",
    "entry_update_failed": "Failed to update entry",
    "entry_deleted": "Entry deleted",
    "entry_delete_failed": "Failed to delete entry",
    "paste_content_first": "Paste dictionary content first",
    "preview_failed": "Preview failed",
    "import_complete": "Import complete: {count} entries",
    "import_failed": "Import failed",
    "export_csv": "Export CSV",
    "export_success": "Dictionary exported",
    "filter_by_language": "Filter by language:",
    "filter_language": "Filter source language",
    "filter_all_source": "All source languages",
    "filter_all_target": "All target languages",
    "filter_clear": "Clear filter",
    "filter_count": "({filtered} of {total} entries)",
    "table_source_term": "Source Term",
    "table_target_term": "Target Term",
    "table_lang": "Lang",
    "table_context": "Context",
    "table_actions": "Actions",
    "no_entries": "No entries yet.",
    "add_first_entry": "Add First Entry",
    "add_entry_title": "Add Entry",
    "source_term_required": "Source Term *",
    "source_term_placeholder": "Original term",
    "target_term_required": "Target Term *",
    "target_term_placeholder": "Translated term",
    "source_language_label": "Source Language",
    "source_lang_placeholder": "e.g. en",
    "target_language_label": "Target Language",
    "target_lang_placeholder": "e.g. es",
    "context_notes_label": "Context Notes",
    "context_notes_placeholder": "Optional",
    "add_entry_btn": "Add Entry",
    "confirm_delete_entry": "Confirm?",
    "delete_entry_btn": "Delete",
    "no_btn": "No",
    "edit_btn": "Edit",
    "context_data_label": "Context data:",
    "usage_notes_label": "Usage notes:",
    "add_context": "Add context",
    "no_context_data": "No context data",
    "json_placeholder": "JSON object or empty to clear",
    "usage_notes_placeholder": "Optional usage guidance...",
    "source_label": "Source:",
    "save_btn": "Save",
    "cancel_btn": "Cancel",
    "updated_toast": "Updated",
    "save_failed_toast": "Save failed",
    "page_previous": "Previous",
    "page_next": "Next"
  },
  "run": {
    "loading": "Loading run status...",
    "loading_result": "Loading result...",
    "result_title": "Run Result",
    "translate_phase": "Translating...",
    "insert_phase": "Inserting into Superset...",
    "completed": "Completed",
    "completed_with_errors": "Completed with errors",
    "translation_failed": "Translation failed",
    "pending_stuck": "Run was created but never executed",
    "pending_stuck_hint": "The background process may have failed. Cancel this run and start a new one.",
    "insert_failed": "Insert phase failed",
    "cancelled": "Cancelled",
    "cancelling": "Cancelling...",
    "cancel": "Cancel",
    "run_id": "Run ID:",
    "run_cancelled": "Run cancelled",
    "cancel_failed": "Failed to cancel run",
    "total": "Total",
    "success": "Success",
    "failed": "Failed",
    "skipped": "Skipped",
    "total_records": "Total Records",
    "batches_progress": "Batches: {count} ({pct}%)",
    "retry_failed": "Retry Failed",
    "retrying": "Retrying...",
    "retry_success": "Retry started",
    "retry_failed_msg": "Retry failed",
    "retry_insert": "Retry Insert",
    "retrying_insert": "Retrying insert...",
    "insert_retry_success": "Insert retry started",
    "insert_retry_failed_msg": "Insert retry failed",
    "insert_status": "Insert Status",
    "insert_completed": "Insert completed successfully",
    "copy_id": "Copy ID",
    "copy_success": "ID copied to clipboard",
    "copy_failed": "Failed to copy ID",
    "superset_query": "Superset Query ID",
    "error_label": "Error: {error}",
    "sql_audit": "SQL Audit ({count})",
    "no_sql_audit": "No SQL audit available",
    "event_invariants": "Event Invariants:",
    "valid": "Valid",
    "violated": "Violated",
    "superset_query_id_label": "Superset started:",
    "started_yes": "Yes",
    "started_no": "No",
    "terminal_events": "Terminal events: {count}",
    "per_language": "Per-Language Statistics",
    "records_title": "Translation Records",
    "translated_label": "{count} translated",
    "failed_label": "{count} failed",
    "skipped_label": "{count} skipped",
    "tokens_label": "{count} tokens",
    "cost_label": "${count}",
    "duration_label": "{seconds}s",
    "cache_rate": "Cache: {pct}%",
    "trigger_manual": "Manual",
    "trigger_scheduled": "Scheduled",
    "trigger_retry": "Retry",
    "trigger_baseline_expired": "Baseline Expired",
    "load_failed": "Failed to load run status",
    "bulk_replace": "Bulk Replace",
    "status_label": "Status",
    "batches_title": "Batches ({count})",
    "batch_number": "#{n}",
    "batch_records": "{ok}/{total}",
    "batch_duration": "{seconds}s",
    "sum_metrics_title": "Job Metrics",
    "sum_total_runs": "Total Runs",
    "sum_success_rate": "Success Rate",
    "sum_total_records": "Records",
    "sum_total_tokens": "Tokens",
    "sum_total_cost": "Cost",
    "load_more_records": "Load more",
    "showing_records": "Showing {count} of {total} unique rows.",
    "sum_avg_duration": "Avg Duration",
    "help_sum_total_runs": "Total number of translation runs executed for this job, including completed, failed, and cancelled.",
    "help_sum_success_rate": "Percentage of runs that completed successfully relative to total runs.",
    "help_sum_total_records": "Total number of database records processed across all runs of this job.",
    "help_sum_total_tokens": "Cumulative LLM token consumption across all runs. Tokens are the unit of input/output processed by the language model.",
    "help_sum_total_cost": "Estimated cumulative cost of all LLM API calls for this job, calculated from per-run token usage.",
    "help_sum_avg_duration": "Average duration of a translation run across all runs. Measured from run start to completion (wall-clock time, including LLM calls and DB inserts).",
    "show_details": "Show details",
    "hide_details": "Hide details"
  },
  "corrections": {
    "title": "Bulk Corrections",
    "subtitle": "Apply corrections to multiple translations",
    "loading": "Loading corrections...",
    "no_items": "No corrections available",
    "add_hint": "Add source and target terms to correct",
    "source_term": "Source Term",
    "incorrect_target": "Incorrect Target",
    "corrected_target": "Corrected Target",
    "corrected_placeholder": "Enter correct translation",
    "remove": "Remove",
    "submitting": "Submitting corrections...",
    "submit_success": "Corrections applied successfully",
    "submit_partial": "Partially applied: {success} success, {failed} failed",
    "submit_failed": "Failed to submit corrections",
    "submit_all": "Submit All",
    "dictionary": "Dictionary",
    "select_dictionary": "Select dictionary...",
    "cell_saving": "Saving...",
    "cell_submitting": "Submitting to dictionary...",
    "cell_submitted_badge": "Dictionary ✓",
    "cell_saved_badge": "Saved to dictionary",
    "cell_language_pair": "Language pair:",
    "cell_corrected_value": "Corrected value",
    "cell_select_dictionary": "Select dictionary...",
    "cell_context_data": "Context Data",
    "cell_edit": "Edit",
    "cell_cancel_edit": "Cancel Edit",
    "cell_no_context_data": "No context data captured",
    "cell_context_json_placeholder": "Enter context data as JSON...",
    "cell_usage_notes": "Usage Notes",
    "cell_usage_notes_placeholder": "Optional notes about when/how this translation should be used...",
    "cell_save_success": "Correction saved",
    "cell_save_failed": "Failed to save correction",
    "cell_dict_load_failed": "Failed to load dictionaries",
    "cell_select_dict_warning": "Please select a dictionary",
    "cell_dict_submit_success": "Dictionary entry created",
    "cell_dict_submit_failed": "Failed to submit to dictionary",
    "cell_retry": "Retry",
    "cell_submit": "Submit",
    "cell_cancel": "Cancel",
    "cell_submit_to_dict": "Submit to Dictionary",
    "cell_save": "Save",
    "cell_dict_submitted": "Saved to dictionary"
  },
  "bulk_replace": {
    "title": "Bulk Find & Replace",
    "close": "Close",
    "find_pattern": "Find pattern",
    "find_placeholder": "Enter text or regex pattern...",
    "regex": "Regex",
    "replace_with": "Replace with",
    "replace_placeholder": "Replacement text...",
    "target_language": "Target language",
    "select_language": "Select language...",
    "preview_affected": "Preview Affected Rows",
    "preview_count": "Preview: {count} affected record(s)",
    "apply_changes": "Apply Changes",
    "table_number": "#",
    "table_before": "Before",
    "table_after": "After",
    "showing_first": "Showing first {shown} of {total} records. Apply to see all changes.",
    "no_matching": "No matching records found.",
    "no_matching_hint": "Try a different pattern or target language.",
    "confirm_title": "Apply {count} replacement(s)?",
    "confirm_body": "This will modify the translated values in {language}. This action cannot be undone.",
    "submit_to_dict": "Submit changed terms to dictionary",
    "usage_notes_placeholder": "Usage notes (applied to all submitted entries)...",
    "cancel": "Cancel",
    "apply_count": "Apply {count} Change(s)",
    "applying": "Applying bulk replace...",
    "applied_title": "Bulk replace complete",
    "applied_body": "{count} record(s) were updated",
    "done": "Done",
    "retry": "Retry",
    "applied_toast": "Bulk replace applied to {count} records",
    "preview_failed": "Failed to preview replacements",
    "apply_failed": "Failed to apply bulk replace",
    "find_pattern_required": "Please enter a find pattern",
    "target_language_required": "Please select a target language"
  },
  "term_correction": {
    "title": "Submit Term Correction",
    "loading_dictionaries": "Loading dictionaries...",
    "language_pair": "Language pair:",
    "detected": "detected",
    "context_from_source": "Context from source row",
    "edited_badge": "Edited",
    "auto_badge": "Auto",
    "edit_context": "Edit context",
    "remove_context": "Remove context",
    "restore_context": "Restore context",
    "no_context": "No context data available",
    "usage_notes": "Usage notes (optional)",
    "usage_notes_placeholder": "Describe when this term mapping should be used...",
    "source_term": "Source Term",
    "incorrect_target": "Incorrect Target",
    "source_language": "Source Language",
    "target_language": "Target Language",
    "corrected_target": "Corrected Target",
    "corrected_placeholder": "Enter corrected translation...",
    "dictionary": "Dictionary",
    "select_dictionary": "Select dictionary...",
    "cancel": "Cancel",
    "submit_correction": "Submit Correction",
    "submitting": "Submitting correction...",
    "conflict_detected": "Conflict Detected",
    "conflict_description": "\"{source}\" already exists in this dictionary with target \"{existing}\".",
    "keep_existing": "Keep Existing",
    "overwrite": "Overwrite",
    "submitted": "Correction Submitted",
    "close": "Close",
    "submit_success": "Correction submitted",
    "overwrite_success": "Correction overwritten",
    "keep_success": "Existing entry kept",
    "submit_failed": "Failed to submit correction",
    "overwrite_failed": "Failed to overwrite",
    "dict_load_failed": "Failed to load dictionaries",
    "auto_detected": "Auto-detected"
  },
  "metrics": {
    "title": "Translation Metrics",
    "subtitle": "Aggregated metrics across all translation runs",
    "load_failed": "Failed to load metrics",
    "refresh": "Refresh",
    "no_data": "No metrics data available",
    "total_runs": "Total Runs",
    "success_rate": "Success Rate",
    "failed_runs": "Failed Runs",
    "total_records": "Total Records",
    "total_tokens": "Total Tokens",
    "total_cost": "Total Cost",
    "runs_per_job": "Runs per Job",
    "job": "Job",
    "runs": "Runs",
    "successful": "Successful",
    "tokens": "Tokens",
    "cost": "Cost",
    "avg_latency": "Avg Latency"
  },
  "target_schema": {
    "title": "Target Schema",
    "region_label": "Target Table Schema Check",
    "check_button": "Check Schema",
    "check_again": "Check Again",
    "checking": "Checking…",
    "enter_table": "Enter a target table name and click \"Check Schema\".",
    "select_database": "Select a target database and click \"Check Schema\".",
    "press_button": "Click \"Check Schema\" to verify the target table columns.",
    "check_error": "Could not verify target table schema. Make sure the table exists and is accessible.",
    "table_not_found": "Target table not found in the database.",
    "all_present": "Target table has all required columns.",
    "missing_columns_title": "Target table is missing some required columns.",
    "expected_columns": "Required columns for translation inserts:",
    "add_columns": "Add these missing columns to the target table, or configure custom column names in \"Target Column Mapping\" above.",
    "validate_first": "Please verify the target table schema before running translation.",
    "passed": "Schema verified — you can now run the translation."
  }
}
