{
  "forms": {
    "upload_dir_error": "Error creating upload directory",
    "file_create_error": "Error creating file",
    "multipart_stream_error": "Multipart stream error",
    "file_write_error": "Error writing file",
    "required": "This field is required",
    "too_short": "Too short (min {})",
    "too_long": "Too long (max {})",
    "email_invalid": "Invalid email address format",
    "url_invalid": "Please enter a valid URL",
    "phone_invalid": "Invalid phone number (digits, +, spaces, dashes allowed, 7-15 digits)",
    "hash_error": "Hashing error: {}",
    "password_empty": "Password cannot be empty",
    "filter_invalid_value": "The static/media filter received an invalid value ({}) instead of a file path.",
    "number_invalid": "Invalid number",
    "number_required": "Required",
    "integer_required": "Must be an integer",
    "decimal_required": "Must be decimal format",
    "min_value": "Min {} required",
    "max_value": "Max {} exceeded",
    "precision_max": "Max {} decimal places",
    "precision_min": "Min {} decimal places",
    "color_invalid": "Invalid color (format: #RRGGBB or #RGB)",
    "color_no_hash": "Color must start with #",
    "color_bad_hex": "Contains non-hexadecimal characters",
    "slug_invalid": "Invalid slug",
    "slug_no_dash": "Slug must not start or end with dash",
    "uuid_invalid": "Invalid UUID format (expected: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
    "json_invalid": "Invalid JSON: {}",
    "ipv4_only": "Only IPv4 addresses accepted",
    "ipv6_only": "Only IPv6 addresses accepted",
    "ip_invalid": "Invalid IP address",
    "date_invalid": "Invalid date format",
    "date_too_old": "Too old (min: {})",
    "date_too_far": "Too far (max: {})",
    "time_invalid": "Invalid time format",
    "file_required": "Please select at least one file",
    "file_extension_blocked": "File '{}' not allowed. Extensions: {}",
    "finalize_error": "Error finalizing field '{}': {}",
    "template_missing": "Missing template: {}",
    "render_js_error": "JS render error: {}",
    "tera_not_configured": "Tera not configured",
    "config_not_found": "Config not found in extensions",
    "hint_slug": "Format: letters-digits-hyphens",
    "hint_uuid": "Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "hint_json": "Valid JSON format required",
    "hint_ip_v4": "Format IPv4: 192.168.1.1",
    "hint_ip_v6": "Format IPv6: 2001:0db8:85a3::8a2e:0370:7334",
    "hint_ip": "Format IPv4 or IPv6",
    "validation_overflow": "Stack overflow detected: infinite recursion in validation",
    "choice_invalid": "Invalid choice",
    "choice_invalid_value": "Invalid choice: {}",
    "select_required": "Please select an option",
    "checkbox_required": "Please select at least one option",
    "multipart_error": "Multipart error",
    "body_error": "Body read error",
    "aegis_query_error": "Failed to parse query string: {}",
    "aegis_urlencoded_error": "Failed to parse urlencoded body: {}",
    "aegis_json_error": "Failed to parse JSON body: {}",
    "auth_required": "Authentication required",
    "role_insufficient": "Insufficient role",
    "time_too_old": "Too early (min: {})",
    "time_too_far": "Too late (max: {})",
    "datetime_too_old": "Too early (min: {})",
    "datetime_too_far": "Too late (max: {})",
    "duration_invalid": "Invalid duration (expected: number of seconds)",
    "duration_too_short": "Min {} seconds required",
    "duration_too_long": "Max {} seconds exceeded",
    "file_max_count": "Max {} files allowed",
    "file_too_large": "File '{}' too large ({}MB > {}MB max)",
    "file_invalid_image": "File '{}' is not a valid image",
    "image_too_wide": "Image '{}' too wide ({}px > {}px)",
    "image_too_tall": "Image '{}' too tall ({}px > {}px)",
    "boolean_required": "You must accept this field",
    "slug_unicode_invalid": "Only letters, digits, hyphens and underscores allowed",
    "unique_field_taken": "This {} is already taken.",
    "unique_value_taken": "Field '{}' value is already taken.",
    "unique_constraint_violated": "A uniqueness constraint was violated.",
    "db_error": "DB error: {}",
    "text_field_too_large": "Text field too large (max 1 MB)",
    "upload_too_large": "File upload too large (max {}MB)"
  },
  "csrf": {
    "missing": "CSRF token missing",
    "invalid": "Invalid CSRF token",
    "invalid_or_missing": "Invalid or missing CSRF token",
    "forbidden": "Invalid CSRF token",
    "session_write_error": "Session write error"
  },
  "error": {
    "source": "Source: {}",
    "AppError": "Application error",
    "build": "Build error: {}",
    "internal": "Internal error",
    "forbidden": "Access forbidden",
    "not_found": "Resource not found",
    "validation": "Validation error: {}",
    "database": "Database error: {}",
    "io": "IO error: {}",
    "template": "Template error: {}",
    "custom": "Custom error: {}",
    "title": {
      "not_found": "Page Not Found",
      "forbidden": "Access Forbidden",
      "validation": "Validation Error",
      "database": "Database Error",
      "template": "Template Rendering Error",
      "internal": "Internal Server Error"
    },
    "path_not_found": "The requested path '{}' was not found",
    "internal_occurred": "An internal error occurred",
    "context_occurred": "AppError occurred"
  },
  "title": {
    "template": "Template error in '{}'"
  },
  "build": {
    "validation_failed": "Build validation failed: {}",
    "check_failed": "Build failed with {} check error(s)",
    "template_failed": "Template loading failed: {}",
    "db_missing": "Database connection required when 'orm' feature is enabled",
    "component_not_ready": "Component '{}' is not ready"
  },
  "middleware": {
    "host_invalid": "Invalid host: '{}' (Allowed: {})",
    "host_debug": "Invalid Host: '{}'. Add it to RUNIQUE_ALLOWED_HOSTS.",
    "bad_request": "Bad Request"
  },
  "html": {
    "404_title": "404",
    "404_text": "Page not found",
    "500_title": "500",
    "500_text": "Internal server error",
    "500_notice": "Our teams have been notified and are working on it.",
    "429_title": "429",
    "429_text": "Too many requests. Please wait a moment before trying again.",
    "back_home": "Back to home",
    "critical_error_title": "Critical Error",
    "critical_error_text": "The error handling system itself encountered an error.",
    "critical_error_contact": "This should never happen. Please contact the system administrator."
  },
  "debug": {
    "stack_trace_title": "Detailed error trace",
    "stack_trace_tip": "The highest error (level 0) is usually the root cause. Following errors show how the error propagated through the code."
  },
  "flash": {
    "welcome": "Welcome {}, your account has been created!",
    "fix_errors": "Please correct the errors",
    "success_demo": "This is a success message.",
    "info_demo": "This is an info message.",
    "warning_demo": "This is a warning message.",
    "error_demo": "This is an error message."
  },
  "log": {
    "db_connecting": "Connecting to {} database...",
    "db_connected": "Database connected successfully ({})",
    "db_failed": "Database connection failed",
    "db_engine": "Engine: {}",
    "template_render_error": "Template rendering error",
    "error_handler": "Critical error occurred",
    "error_handled": "Handled error",
    "files_count": "add files JS to form",
    "js_file_skip": "Skipping JS file",
    "already_initialized": "Logger already initialized"
  },
  "cli": {
    "creating_project": "Creating project '{}'...",
    "admin_detected": "Admin detected → starting the daemon",
    "add_admin_hint": "Add .with_admin(...) in your builder to enable the AdminPanel.",
    "daemon_error": "[Daemon] Error: {}",
    "cargo_run_failed": "Application server failed to start correctly (cargo run)",
    "file_not_found": "File not found: {}\\nMake sure you're at the root of your Runique project.",
    "admin_not_found": "Admin file not found: {}\\nCreate src/admin.rs with admin!{{}} macro.",
    "name_empty": "The project name cannot be empty",
    "name_invalid": "The project name must contain only letters, numbers, _ or -",
    "name_dash": "The project name cannot start with -",
    "folder_exists": "The folder '{}' already exists",
    "cargo_run_expect": "Failed to launch cargo run",
    "project_created": "Project '{}' created successfully!",
    "getting_started": "To get started:",
    "cd_hint": "cd {}",
    "cargo_run_hint": "cargo run"
  },
  "daemon": {
    "modification_detected": "Modification detected → regeneration...",
    "unable_read": "Unable to read: {}",
    "parse_error": "Parsing error: {}",
    "no_resource": "No resource in admin!{{}} — nothing to generate",
    "with_admin_disabled": "with_admin disabled → daemon stopped",
    "operational": "Daemon operational → src/admin/generated.rs",
    "generation_error": "Generation error: {}",
    "watcher_error": "Watcher error: {}",
    "unable_create": "Unable to create watcher: {}",
    "unable_watch": "Unable to watch {}: {}"
  },
  "macro": {
    "named_fields_only": "Named fields structs only",
    "structs_only": "Works only on structs",
    "forms_field_required": "Struct '{}' must have a 'Forms' field",
    "field_no_name": "Field without name",
    "model_form_named_only": "DeriveModelForm: structs with named fields only",
    "model_form_structs_only": "DeriveModelForm: structs only"
  },
  "parser": {
    "string_expected": "Expected string literal, found: {}",
    "string_eof": "Expected string literal, end of file",
    "array_expected": "Expected [...] for permissions, found: {}",
    "array_eof": "Expected [...] for permissions, end of file",
    "role_required": "At least one role required in permissions: [...]",
    "punct_expected": "Expected '{}', found: {}",
    "punct_eof": "Expected '{}', end of file",
    "title_required": "admin!: 'title' is required",
    "permissions_required": "admin!: 'permissions' is required",
    "list_display_exclude_exclusive": "admin!: 'list_display' and 'list_exclude' are mutually exclusive"
  },
  "TemplateMessage": {
    "debug_info_title": "Debug Information",
    "debug_field_title": "Title",
    "debug_field_count": "Field Count",
    "debug_error_count": "Errors",
    "debug_main_message": "Main Message",
    "debug_root_cause": "Root Cause",
    "debug_details": "Additional Details",
    "debug_request_info": "Request Information",
    "debug_http_method": "HTTP Method",
    "debug_path": "Path",
    "debug_query_params": "Query Parameters",
    "debug_http_headers": "HTTP Headers",
    "debug_template_info": "Template Information",
    "debug_template_name": "Template Name",
    "debug_error_line": "Error Line",
    "debug_template_source": "Template Source Code",
    "debug_available_templates": "Available Templates",
    "debug_stack_trace_title": "Detailed Error Trace",
    "debug_stack_trace_tip": "The topmost error (level 0) is usually the root cause. Subsequent errors show how the error propagated through the code.",
    "debug_environment": "Environment",
    "debug_debug_mode": "Debug Mode",
    "debug_enabled": "Enabled",
    "debug_disabled": "Disabled",
    "debug_rust_version": "Rust Version",
    "debug_app_version": "App Version",
    "debug_status_code": "Status Code",
    "debug_header_name": "Name",
    "debug_header_value": "Value"
  },
  "admin": {
    "group": "Group",
    "groups": "Groups",
    "resource": "Resource",
    "resources": "Resources",
    "can_create": "Create",
    "can_read": "Read",
    "can_update": "Update",
    "can_delete": "Delete",
    "can_update_own": "Update",
    "can_delete_own": "Delete",
    "name": "Name",
    "username": "Username",
    "email": "Email",
    "staff": "Staff",
    "superuser": "Superuser",
    "active": "Active",
    "user": {
      "username_too_short": "Username is too short (min 3 chars)",
      "invalid_email": "Invalid email address format"
    },

    "login": {
      "title": "Login",
      "subtitle": "Sign in to access the admin panel",
      "label_username": "Username",
      "label_password": "Password",
      "btn_submit": "Sign in",
      "error_session": "Error while opening session.",
      "error_credentials": "Incorrect credentials or insufficient rights.",
      "error_locked": "Too many attempts. Account temporarily locked. Try again in {} seconds."
    },
    "logout": {
      "success": "Successfully logged out."
    },
    "access": {
      "no_auth_handler": "No authentication handler configured. Call .auth(MyAuth) on AdminConfig.",
      "insufficient_rights": "Insufficient rights to access administration"
    },
    "dashboard": {
      "title": "Dashboard",
      "subtitle": "Application overview",
      "card_resources": "Resources",
      "th_resource": "Resource",
      "th_key": "Key",
      "th_permissions": "Permissions",
      "th_actions": "Actions",
      "btn_list": "List",
      "btn_create": "Create",
      "empty_title": "No resources registered",
      "empty_desc": "Declare your resources in src/admin.rs with the admin!{{}} macro then run runique start"
    },
    "list": {
      "breadcrumb_admin": "Administration",
      "entries_count_one": "entry",
      "entries_count_many": "entries",
      "btn_create": "Create",
      "th_id": "id",
      "th_actions": "Actions",
      "bool_true": "Yes",
      "bool_false": "No",
      "btn_detail": "Detail",
      "btn_edit": "Edit",
      "btn_delete": "Delete",
      "confirm_delete": "Really delete?",
      "empty_title": "No entries",
      "empty_desc": "Start by creating an item.",
      "btn_create_first": "Create the first",
      "search_placeholder": "Search..."
    },
    "create": {
      "title": "Create",
      "breadcrumb": "Create",
      "card_info": "Information",
      "no_fields": "No fields available at the moment.",
      "btn_cancel": "Cancel",
      "btn_submit": "Create",
      "success": "Entry created successfully!"
    },
    "edit": {
      "title": "Edit",
      "breadcrumb": "Edit",
      "card_info": "Information",
      "no_fields": "No fields available at the moment.",
      "btn_cancel": "Cancel",
      "btn_submit": "Save",
      "success": "Entry updated successfully!"
    },
    "detail": {
      "title": "Detail",
      "breadcrumb": "Detail",
      "entry_label": "Entry",
      "btn_list": "← List",
      "btn_edit": "Edit",
      "btn_delete": "Delete",
      "confirm_delete": "Delete this entry?"
    },
    "reset_password": {
      "btn": "Reset password",
      "success_email": "Reset link sent to {}.",
      "success_link": "Reset link (mailer not configured): {}",
      "error_no_email": "No email field found for this user.",
      "error_send": "Error sending email: {}",
      "email_subject": "Reset your password",
      "email_title": "Password reset",
      "email_greeting": "Hello,",
      "email_body": "Click the link below to reset your password (valid for 1 hour):",
      "email_btn": "Reset my password",
      "email_ignore": "If you did not request this reset, ignore this message."
    },
    "user_created": {
      "email_subject": "Welcome — set your password",
      "email_sent": "Welcome email sent to {}.",
      "email_greeting": "Welcome,",
      "email_body": "An account has been created for you. Click the link below to set your password:",
      "email_btn": "Set my password",
      "email_validity": "This link is valid for 1 hour. If you were not expecting this message, ignore it."
    },
    "delete": {
      "title": "Delete",
      "breadcrumb": "Delete",
      "heading": "Confirm deletion",
      "btn_cancel": "← Cancel",
      "success": "Entry deleted successfully!",
      "btn_confirm": "Yes, delete permanently",
      "warning": {
        "title": "Warning!",
        "desc": "You are about to delete the entry",
        "of": "from resource",
        "irreversible": "This action is irreversible."
      },
      "not_found": "Resource not found."
    },
    "bulk": {
      "no_selection": "No items selected.",
      "no_field_selected": "No field changed.",
      "delete_success": "item(s) deleted.",
      "update_success": "item(s) updated."
    },
    "base": {
      "title": "Administration",
      "breadcrumb": "Admin",
      "toggle": "Collapse menu",
      "logout_title": "Logout"
    },
    "superuser_wizard": {
      "title": "=== Create Superuser ===",
      "algo_prompt": "[1/5] Hashing algorithm",
      "algo_argon2": "Argon2 (recommended)",
      "algo_bcrypt": "Bcrypt",
      "algo_scrypt": "Scrypt",
      "algo_custom": "Custom provider",
      "provider_path": "Provider path",
      "invalid_path": "Invalid path.",
      "username_prompt": "[2/5] Username",
      "username_empty": "Username cannot be empty.",
      "username_taken": "A user with this name already exists.",
      "email_prompt": "[3/5] Email",
      "email_invalid": "Invalid email.",
      "email_taken": "A user with this email already exists.",
      "password_prompt": "[4/5] Password",
      "password_too_short": "Password must be at least 10 characters.",
      "confirm_prompt": "[5/5] Confirm password",
      "password_mismatch": "Passwords do not match. Please try again.",
      "review_algo": "  Algorithm   : {}",
      "review_username": "  Username    : {}",
      "review_email": "  Email       : {}",
      "review_password": "  Password    : ••••••••",
      "review_action": "Action",
      "confirm_create": "Confirm and create",
      "change_algo": "Change algorithm",
      "modify_password": "Modify password",
      "success": "✓ Superuser created successfully!",
      "id_line": "  ID       : {}",
      "username_line": "  Username : {}",
      "email_line": "  Email    : {}"
    },
    "builtin": {
      "invalid_id": "Invalid identifier.",
      "droit_resource_required": "Please select at least one resource.",
      "droit_exists": "The right \"{}\" already exists for this group.",
      "groupe_exists": "A group named \"{}\" already exists.",
      "user_username_exists": "The username \"{}\" is already taken.",
      "user_email_exists": "The email address \"{}\" is already registered."
    }
  },
  "reset": {
    "forgot_title": "Forgot password",
    "reset_title": "New password",
    "success_title": "Password reset",
    "email_label": "Email address",
    "new_password_label": "New password",
    "confirm_label": "Confirm password",
    "email_mismatch": "The email address does not match the link.",
    "invalid_link": "Invalid link.",
    "invalid_or_expired": "Reset link is invalid or expired.",
    "password_min_length": "Password must be at least {} characters.",
    "password_mismatch": "Passwords do not match.",
    "check_inbox": "If this address is associated with an account, you will receive a reset email.",
    "email_subject": "Password reset request",
    "email_body": "<p>Hello {},</p><p>Click the link below to reset your password (valid for 1 hour):</p><p><a href=\"{}\">{}</a></p>"
  },
  "makemigrations": {
    "scanning": "Scanning entities in '{}'...",
    "found_schema": "-> Found schema: {}",
    "found_extend": "-> Found framework table extension: {}",
    "no_schema": "No schema() functions found in '{}'.",
    "schema_count": "Found {} schema(s).",
    "updated_lib": "Updated {}",
    "no_changes": "No changes detected. Your schema is up to date.",
    "destructive_detected": "Destructive changes detected:",
    "destructive_require_force": "Use --force to apply these destructive changes.",
    "generated": "Generated: {}",
    "snapshot_updated": "Updated snapshot: {}",
    "seaorm_alter": "SeaORM ALTER migration generated: {}",
    "batch_up": "Generated batch up: {}",
    "batch_down": "Generated batch down: {}",
    "apply_hint": "Run 'sea-orm-cli migrate up' to apply.",
    "extend_unknown_table": "extend!{{}} : \"{}\" is not a known framework table. Allowed tables: {}. To extend an app table, modify its model!{{}} directly.",
    "extend_invalid_syntax": "extend!{{}} : invalid syntax. Expected: table: \"table_name\", fields: {{ ... }}",
    "admin_positioned": "AdminTableMigration positioned after '{}' migration",
    "files_ready": "{} file(s) ready to migrate."
  },
  "migrate": {
    "applying": "Applying migrations from '{}'...",
    "run_hint": "Run: sea-orm-cli migrate up",
    "complete_up": "Migration complete.",
    "complete": "Rollback complete.",
    "available_for": "Available rollback files for '{}':",
    "rolling_back_batch": "Rolling back batch: {}",
    "done": "Done: {}",
    "rolling_back": "Rolling back: {}",
    "no_applied_dir": "No applied/ directory found.",
    "by_time_header": "by_time (full batches):",
    "none_available": "No rollback files available.",
    "usage": "Usage:",
    "usage_files": "runique migration down --files <table/timestamp> [<table/timestamp> ...]",
    "usage_batch": "runique migration down --batch <timestamp>",
    "no_down": "No down statements found.",
    "executing": "Executing: {}"
  },
  "permission": {
    "col.id": "ID",
    "col.can_create": "Create",
    "col.can_delete": "Delete",
    "col.can_delete_own": "Delete (own)",
    "col.can_read": "Read",
    "col.can_update": "Update",
    "col.can_update_own": "Update (own)",
    "col.groupes": "Groups",
    "col.resource_key": "Resource",
    "col.actions": "Actions"
  }
}
