{
  "forms": {
    "upload_dir_error": "Errore durante la creazione della cartella di upload",
    "file_create_error": "Errore durante la creazione del file",
    "multipart_stream_error": "Errore nel stream multipart",
    "file_write_error": "Errore durante la scrittura del file",
    "required": "Questo campo è obbligatorio",
    "too_short": "Troppo corto (min {})",
    "too_long": "Troppo lungo (max {})",
    "email_invalid": "Formato dell'indirizzo email non valido",
    "url_invalid": "Inserisci un URL valido",
    "phone_invalid": "Numero di telefono non valido (cifre, +, spazi, trattini, 7-15 cifre)",
    "hash_error": "Errore di hashing: {}",
    "password_empty": "La password non può essere vuota",
    "filter_invalid_value": "Il filtro static/media ha ricevuto un valore non valido ({}) invece di un percorso di file.",
    "number_invalid": "Numero non valido",
    "number_required": "Richiesto",
    "integer_required": "Deve essere un numero intero",
    "decimal_required": "Deve essere in formato decimale",
    "min_value": "Min {} richiesto",
    "max_value": "Max {} superato",
    "precision_max": "Precisione massima {} cifre dopo la virgola",
    "precision_min": "Precisione minima {} cifre dopo la virgola",
    "color_invalid": "Colore non valido (formato: #RRGGBB o #RGB)",
    "color_no_hash": "Il colore deve iniziare con #",
    "color_bad_hex": "Contiene caratteri non esadecimali",
    "slug_invalid": "Slug non valido",
    "slug_no_dash": "Lo slug non deve iniziare o finire con un trattino",
    "uuid_invalid": "Formato UUID non valido (atteso: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
    "json_invalid": "JSON non valido: {}",
    "ipv4_only": "Sono accettati solo indirizzi IPv4",
    "ipv6_only": "Sono accettati solo indirizzi IPv6",
    "ip_invalid": "Indirizzo IP non valido",
    "date_invalid": "Formato della data non valido",
    "date_too_old": "Troppo vecchia (min: {})",
    "date_too_far": "Troppo lontana (max: {})",
    "time_invalid": "Formato dell'ora non valido",
    "file_required": "Seleziona almeno un file",
    "file_extension_blocked": "File '{}' non autorizzato. Estensioni: {}",
    "finalize_error": "Errore durante la finalizzazione del campo '{}': {}",
    "template_missing": "Template mancante: {}",
    "render_js_error": "Errore nel rendering JS: {}",
    "tera_not_configured": "Tera non configurato",
    "config_not_found": "Configurazione non trovata nelle estensioni",
    "hint_slug": "Formato: lettere-numeri-trattini",
    "hint_uuid": "Formato: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "hint_json": "Formato JSON valido richiesto",
    "hint_ip_v4": "Formato IPv4: 192.168.1.1",
    "hint_ip_v6": "Formato IPv6: 2001:0db8:85a3::8a2e:0370:7334",
    "hint_ip": "Formato IPv4 o IPv6",
    "validation_overflow": "Stack overflow rilevato: ricorsione infinita nella validazione",
    "choice_invalid": "Scelta non valida",
    "choice_invalid_value": "Scelta non valida: {}",
    "select_required": "Seleziona un'opzione",
    "checkbox_required": "Seleziona almeno un'opzione",
    "multipart_error": "Errore multipart",
    "body_error": "Errore durante la lettura del body",
    "aegis_query_error": "Errore nel parsing della query string: {}",
    "aegis_urlencoded_error": "Errore nel parsing del body urlencoded: {}",
    "aegis_json_error": "Errore nel parsing del body JSON: {}",
    "auth_required": "Autenticazione richiesta",
    "role_insufficient": "Ruolo insufficiente",
    "time_too_old": "Troppo presto (min: {})",
    "time_too_far": "Troppo tardi (max: {})",
    "datetime_too_old": "Troppo presto (min: {})",
    "datetime_too_far": "Troppo tardi (max: {})",
    "duration_invalid": "Durata non valida (numero di secondi atteso)",
    "duration_too_short": "Durata minima: {} secondi",
    "duration_too_long": "Durata massima: {} secondi",
    "file_max_count": "Massimo {} file consentiti",
    "file_too_large": "File '{}' troppo grande ({}MB > {}MB max)",
    "file_invalid_image": "Il file '{}' non è un'immagine valida",
    "image_too_wide": "L'immagine '{}' è troppo larga ({}px > {}px)",
    "image_too_tall": "L'immagine '{}' è troppo alta ({}px > {}px)",
    "boolean_required": "Devi accettare questo campo",
    "slug_unicode_invalid": "Sono consentiti solo lettere, numeri, trattini e underscore",
    "unique_field_taken": "Questo {} è già utilizzato.",
    "unique_value_taken": "Il valore del campo '{}' è già utilizzato.",
    "unique_constraint_violated": "È stata violata una restrizione di unicità.",
    "db_error": "Errore DB: {}",
    "text_field_too_large": "Campo di testo troppo grande (max 1 MB)",
    "upload_too_large": "File troppo grande (max {}MB)"
  },
  "csrf": {
    "missing": "Token CSRF mancante",
    "invalid": "Token CSRF non valido",
    "invalid_or_missing": "Token CSRF non valido o mancante",
    "forbidden": "Token CSRF non valido",
    "session_write_error": "Errore di scrittura della sessione"
  },
  "error": {
    "source": "Fonte: {}",
    "AppError": "Errore dell'applicazione",
    "build": "Errore di build: {}",
    "internal": "Errore interno",
    "forbidden": "Accesso vietato",
    "not_found": "Risorsa non trovata",
    "validation": "Errore di validazione: {}",
    "database": "Errore del database: {}",
    "io": "Errore IO: {}",
    "template": "Errore del template: {}",
    "custom": "Errore personalizzato: {}",
    "title": {
      "not_found": "Pagina non trovata",
      "forbidden": "Accesso vietato",
      "validation": "Errore di validazione",
      "database": "Errore del database",
      "template": "Errore di rendering del template",
      "internal": "Errore interno del server"
    },
    "path_not_found": "Il percorso richiesto '{}' non è stato trovato",
    "internal_occurred": "Si è verificato un errore interno",
    "context_occurred": "Errore AppError verificato"
  },
  "title": {
    "template": "Errore del template in '{}'"
  },
  "build": {
    "validation_failed": "Validazione del build fallita: {}",
    "check_failed": "Build fallita con {} errore/i di verifica",
    "template_failed": "Caricamento del template fallito: {}",
    "db_missing": "Connessione al database richiesta quando la feature 'orm' è attiva",
    "component_not_ready": "Il componente '{}' non è pronto"
  },
  "middleware": {
    "host_invalid": "Host non valido: '{}' (Host consentiti: {})",
    "host_debug": "Host non valido: '{}'. Aggiungilo a RUNIQUE_ALLOWED_HOSTS.",
    "bad_request": "Richiesta non valida"
  },
  "html": {
    "404_title": "404",
    "404_text": "Pagina non trovata",
    "500_title": "500",
    "500_text": "Errore interno del server",
    "500_notice": "Il nostro team è stato notificato e sta lavorando al problema.",
    "429_title": "429",
    "429_text": "Troppe richieste. Attendi un momento prima di riprovare.",
    "back_home": "Torna alla home",
    "critical_error_title": "Errore critico",
    "critical_error_text": "Il sistema di gestione degli errori ha riscontrato un errore.",
    "critical_error_contact": "Questa situazione non dovrebbe mai verificarsi. Contatta l'amministratore di sistema."
  },
  "debug": {
    "stack_trace_title": "Trace dettagliato dell'errore",
    "stack_trace_tip": "L'errore più alto (livello 0) è generalmente la causa principale. Gli errori successivi mostrano come l'errore si è propagato nel codice."
  },
  "flash": {
    "welcome": "Benvenuto {}, il tuo account è stato creato!",
    "fix_errors": "Correggi gli errori",
    "success_demo": "Questo è un messaggio di successo.",
    "info_demo": "Questo è un messaggio informativo.",
    "warning_demo": "Questo è un messaggio di avviso.",
    "error_demo": "Questo è un messaggio di errore."
  },
  "log": {
    "db_connecting": "Connessione al database {}...",
    "db_connected": "Database connesso con successo ({})",
    "db_failed": "Connessione al database fallita",
    "db_engine": "Motore: {}",
    "template_render_error": "Errore di rendering del template",
    "error_handler": "Errore critico verificato",
    "error_handled": "Errore gestito",
    "files_count": "aggiunta di file JS al modulo",
    "js_file_skip": "File JS ignorato",
    "already_initialized": "Logger già inizializzato"
  },
  "cli": {
    "creating_project": "Creazione del progetto '{}'...",
    "admin_detected": "Admin rilevato → avvio del daemon",
    "add_admin_hint": "Aggiungi .with_admin(...) nel tuo builder per attivare il pannello admin.",
    "daemon_error": "[Daemon] Errore: {}",
    "cargo_run_failed": "Il server applicativo non si è avviato correttamente (cargo run)",
    "file_not_found": "File non trovato: {}\\nAssicurati di essere nella root del tuo progetto Runique.",
    "admin_not_found": "File admin non trovato: {}\\nCrea src/admin.rs con la macro admin!{{}}.",
    "name_empty": "Il nome del progetto non può essere vuoto",
    "name_invalid": "Il nome del progetto deve contenere solo lettere, numeri, _ o -",
    "name_dash": "Il nome del progetto non può iniziare con -",
    "folder_exists": "La cartella '{}' esiste già",
    "cargo_run_expect": "Avvio di cargo run fallito",
    "project_created": "Progetto '{}' creato con successo!",
    "getting_started": "Per iniziare:",
    "cd_hint": "cd {}",
    "cargo_run_hint": "cargo run"
  },
  "daemon": {
    "modification_detected": "Modifica rilevata → rigenerazione...",
    "unable_read": "Impossibile leggere: {}",
    "parse_error": "Errore di parsing: {}",
    "no_resource": "Nessuna risorsa in admin!{{}} — nulla da generare",
    "with_admin_disabled": "with_admin disabilitato → daemon fermato",
    "operational": "Daemon operativo → src/admin/generated.rs",
    "generation_error": "Errore di generazione: {}",
    "watcher_error": "Errore del watcher: {}",
    "unable_create": "Impossibile creare il watcher: {}",
    "unable_watch": "Impossibile monitorare {} : {}"
  },
  "macro": {
    "named_fields_only": "Solo struct con campi nominati",
    "structs_only": "Funziona solo su struct",
    "forms_field_required": "La struct '{}' deve avere un campo 'Forms'",
    "field_no_name": "Campo senza nome",
    "model_form_named_only": "DeriveModelForm: solo struct con campi nominati",
    "model_form_structs_only": "DeriveModelForm: solo struct"
  },
  "parser": {
    "string_expected": "Stringa letterale attesa, trovato: {}",
    "string_eof": "Stringa letterale attesa, fine del file",
    "array_expected": "Array [...] atteso per i permessi, trovato: {}",
    "array_eof": "Array [...] atteso per i permessi, fine del file",
    "role_required": "È richiesto almeno un ruolo in permissions: [...]",
    "punct_expected": "'{}' atteso, trovato: {}",
    "punct_eof": "'{}' atteso, fine del file",
    "title_required": "admin!: 'title' è obbligatorio",
    "permissions_required": "admin!: 'permissions' è obbligatorio",
    "list_display_exclude_exclusive": "admin!: 'list_display' e 'list_exclude' sono mutuamente esclusivi"
  },
  "TemplateMessage": {
    "debug_info_title": "Informazioni di debug",
    "debug_field_title": "Titolo",
    "debug_field_count": "Numero di campi",
    "debug_error_count": "Errori",
    "debug_main_message": "Messaggio principale",
    "debug_root_cause": "Causa principale",
    "debug_details": "Dettagli aggiuntivi",
    "debug_request_info": "Informazioni sulla richiesta",
    "debug_http_method": "Metodo HTTP",
    "debug_path": "Percorso",
    "debug_query_params": "Parametri di query",
    "debug_http_headers": "Intestazioni HTTP",
    "debug_template_info": "Informazioni sul template",
    "debug_template_name": "Nome del template",
    "debug_error_line": "Riga dell'errore",
    "debug_template_source": "Codice sorgente del template",
    "debug_available_templates": "Template disponibili",
    "debug_stack_trace_title": "Traccia errore dettagliata",
    "debug_stack_trace_tip": "L'errore più in alto (livello 0) è generalmente la causa principale. Gli errori successivi mostrano come l'errore si è propagato nel codice.",
    "debug_environment": "Ambiente",
    "debug_debug_mode": "Modalità debug",
    "debug_enabled": "Abilitato",
    "debug_disabled": "Disabilitato",
    "debug_rust_version": "Versione Rust",
    "debug_app_version": "Versione App",
    "debug_status_code": "Codice di stato",
    "debug_header_name": "Nome",
    "debug_header_value": "Valore"
  },
  "admin": {
    "group": "Gruppo",
    "groups": "Gruppi",
    "resource": "Risorsa",
    "resources": "Risorse",
    "can_create": "Crea",
    "can_read": "Leggere",
    "can_update": "Modificare",
    "can_delete": "Eliminare",
    "can_update_own": "Modificare",
    "can_delete_own": "Eliminare",
    "name": "Nome",
    "username": "Nome utente",
    "email": "Email",
    "staff": "Staff",
    "superuser": "Superutente",
    "active": "Attivo",
    "user": {
      "username_too_short": "Il nome utente è troppo corto (min 3 car.)",
      "invalid_email": "Formato dell'indirizzo email non valido"
    },

    "login": {
      "title": "Accesso",
      "subtitle": "Accedi per accedere al pannello di amministrazione",
      "label_username": "Nome utente",
      "label_password": "Password",
      "btn_submit": "Accedi",
      "error_session": "Errore durante l'apertura della sessione.",
      "error_credentials": "Credenziali errate o diritti insufficienti.",
      "error_locked": "Troppi tentativi. Account temporaneamente bloccato. Riprova tra {} secondi."
    },
    "logout": {
      "success": "Disconnessione riuscita."
    },
    "access": {
      "no_auth_handler": "Nessun gestore di autenticazione configurato. Chiama .auth(MyAuth) su AdminConfig.",
      "insufficient_rights": "Diritti insufficienti per accedere all'amministrazione"
    },
    "dashboard": {
      "title": "Dashboard",
      "subtitle": "Panoramica dell'applicazione",
      "card_resources": "Risorse",
      "th_resource": "Risorsa",
      "th_key": "Chiave",
      "th_permissions": "Permessi",
      "th_actions": "Azioni",
      "btn_list": "Elenco",
      "btn_create": "Crea",
      "empty_title": "Nessuna risorsa registrata",
      "empty_desc": "Dichiara le tue risorse in src/admin.rs con la macro admin!{{}} poi esegui runique start"
    },
    "list": {
      "breadcrumb_admin": "Amministrazione",
      "entries_count_one": "voce",
      "entries_count_many": "voci",
      "btn_create": "Crea",
      "th_id": "id",
      "th_actions": "Azioni",
      "bool_true": "Sì",
      "bool_false": "No",
      "btn_detail": "Dettaglio",
      "btn_edit": "Modifica",
      "btn_delete": "Elimina",
      "confirm_delete": "Eliminare davvero?",
      "empty_title": "Nessuna voce",
      "empty_desc": "Inizia creando un elemento.",
      "btn_create_first": "Crea il primo",
      "search_placeholder": "Cerca..."
    },
    "create": {
      "title": "Crea",
      "breadcrumb": "Crea",
      "card_info": "Informazioni",
      "no_fields": "Nessun campo disponibile al momento.",
      "btn_cancel": "Annulla",
      "btn_submit": "Crea",
      "success": "Voce creata con successo!"
    },
    "edit": {
      "title": "Modifica",
      "breadcrumb": "Modifica",
      "card_info": "Informazioni",
      "no_fields": "Nessun campo disponibile al momento.",
      "btn_cancel": "Annulla",
      "btn_submit": "Salva",
      "success": "Voce aggiornata con successo!"
    },
    "detail": {
      "title": "Dettaglio",
      "breadcrumb": "Dettaglio",
      "entry_label": "Voce",
      "btn_list": "← Elenco",
      "btn_edit": "Modifica",
      "btn_delete": "Elimina",
      "confirm_delete": "Eliminare questa voce?"
    },
    "reset_password": {
      "btn": "Reimposta la 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": "Reimposta la tua password",
      "email_title": "Reimpostazione password",
      "email_greeting": "Salve,",
      "email_body": "Clicca il link qui sotto per reimpostare la tua password (valido 1 ora):",
      "email_btn": "Reimposta la mia password",
      "email_ignore": "Se non hai richiesto questa reimpostazione, ignora questo messaggio."
    },
    "user_created": {
      "email_subject": "Benvenuto — imposta la tua password",
      "email_sent": "Email di benvenuto inviata a {}.",
      "email_greeting": "Benvenuto,",
      "email_body": "È stato creato un account per te. Clicca il link per impostare la tua password:",
      "email_btn": "Imposta la mia password",
      "email_validity": "Questo link è valido 1 ora. Se non ti aspettavi questo messaggio, ignoralo."
    },
    "delete": {
      "title": "Elimina",
      "breadcrumb": "Elimina",
      "heading": "Conferma eliminazione",
      "btn_cancel": "← Annulla",
      "btn_confirm": "Sì, elimina definitivamente",
      "success": "Voce eliminata con successo!",
      "warning": {
        "title": "Attenzione!",
        "desc": "Stai per eliminare la voce",
        "of": "dalla risorsa",
        "irreversible": "Questa azione è irreversibile."
      },
      "not_found": "Risorsa non trovata."
    },
    "bulk": {
      "no_selection": "Nessun elemento selezionato.",
      "no_field_selected": "Nessun campo modificato.",
      "delete_success": "elemento/i eliminato/i.",
      "update_success": "elemento/i aggiornato/i."
    },
    "base": {
      "title": "Amministrazione",
      "breadcrumb": "Admin",
      "toggle": "Comprimi menu",
      "logout_title": "Disconnessione"
    },
    "superuser_wizard": {
      "title": "=== Crea superutente ===",
      "algo_prompt": "[1/5] Algoritmo di hash",
      "algo_argon2": "Argon2 (consigliato)",
      "algo_bcrypt": "Bcrypt",
      "algo_scrypt": "Scrypt",
      "algo_custom": "Provider personalizzato",
      "provider_path": "Percorso provider",
      "invalid_path": "Percorso non valido.",
      "username_prompt": "[2/5] Nome utente",
      "username_empty": "Il nome utente non può essere vuoto.",
      "username_taken": "Esiste già un utente con questo nome.",
      "email_prompt": "[3/5] Email",
      "email_invalid": "Email non valida.",
      "email_taken": "Esiste già un utente con questa email.",
      "password_prompt": "[4/5] Password",
      "password_too_short": "La password deve contenere almeno 10 caratteri.",
      "confirm_prompt": "[5/5] Conferma password",
      "password_mismatch": "Le password non corrispondono. Riprovare.",
      "review_algo": "  Algoritmo  : {}",
      "review_username": "  Utente     : {}",
      "review_email": "  Email      : {}",
      "review_password": "  Password   : ••••••••",
      "review_action": "Azione",
      "confirm_create": "Conferma e crea",
      "change_algo": "Cambia algoritmo",
      "modify_password": "Modifica password",
      "success": "✓ Superutente creato con successo!",
      "id_line": "  ID         : {}",
      "username_line": "  Utente     : {}",
      "email_line": "  Email      : {}"
    },
    "builtin": {
      "invalid_id": "Identificativo non valido.",
      "droit_resource_required": "Seleziona almeno una risorsa.",
      "droit_exists": "Il diritto \"{}\" esiste già.",
      "groupe_exists": "Esiste già un gruppo chiamato \"{}\".",
      "user_username_exists": "Il nome utente \"{}\" è già in uso.",
      "user_email_exists": "L'indirizzo e-mail \"{}\" è già registrato."
    }
  },
  "makemigrations": {
    "scanning": "Scansione delle entità in '{}'...",
    "found_schema": "-> Schema trovato: {}",
    "found_extend": "-> Estensione tabella framework trovata: {}",
    "no_schema": "Nessuna funzione schema() trovata in '{}'.",
    "schema_count": "{} schema/i trovato/i.",
    "updated_lib": "Aggiornato {}",
    "no_changes": "Nessuna modifica rilevata. Lo schema è aggiornato.",
    "destructive_detected": "Modifiche distruttive rilevate:",
    "destructive_require_force": "Usa --force per applicare queste modifiche distruttive.",
    "generated": "Generato: {}",
    "snapshot_updated": "Snapshot aggiornato: {}",
    "seaorm_alter": "Migrazione ALTER SeaORM generata: {}",
    "batch_up": "Batch up generato: {}",
    "batch_down": "Batch down generato: {}",
    "apply_hint": "Eseguire 'sea-orm-cli migrate up' per applicare.",
    "extend_unknown_table": "extend!{{}} : \"{}\" non è una tabella framework conosciuta. Tabelle consentite: {}. Per estendere una tabella applicativa, modificare direttamente il suo model!{{}}.",
    "extend_invalid_syntax": "extend!{{}} : sintassi non valida. Atteso: table: \"nome_tabella\", fields: {{ ... }}",
    "admin_positioned": "AdminTableMigration posizionata dopo la migrazione di '{}'",
    "files_ready": "{} file pronti per la migrazione."
  },
  "migrate": {
    "applying": "Applicazione migrazioni da '{}'...",
    "run_hint": "Eseguire: sea-orm-cli migrate up",
    "complete": "Rollback completato.",
    "complete_up": "Migrazione completata.",
    "available_for": "File di rollback disponibili per '{}':",
    "rolling_back_batch": "Rollback del batch: {}",
    "done": "Completato: {}",
    "rolling_back": "Rollback: {}",
    "no_applied_dir": "Nessuna directory applied/ trovata.",
    "by_time_header": "by_time (batch completi):",
    "none_available": "Nessun file di rollback disponibile.",
    "usage": "Utilizzo:",
    "usage_files": "runique migration down --files <table/timestamp> [<table/timestamp> ...]",
    "usage_batch": "runique migration down --batch <timestamp>",
    "no_down": "Nessuna istruzione down trovata.",
    "executing": "Esecuzione: {}"
  },
  "reset": {
    "forgot_title": "Password dimenticata",
    "reset_title": "Nuova password",
    "success_title": "Password reimpostata",
    "email_label": "Indirizzo email",
    "new_password_label": "Nuova password",
    "confirm_label": "Conferma password",
    "email_mismatch": "L'indirizzo email non corrisponde al link.",
    "invalid_link": "Link non valido.",
    "invalid_or_expired": "Il link di reimpostazione non è valido o è scaduto.",
    "password_min_length": "La password deve contenere almeno {} caratteri.",
    "password_mismatch": "Le password non coincidono.",
    "check_inbox": "Se questo indirizzo è associato a un account, riceverà un'email di reimpostazione.",
    "email_subject": "Reimpostazione password",
    "email_body": "<p>Ciao {},</p><p>Clicca sul link seguente per reimpostare la password (valido per 1 ora):</p><p><a href=\"{}\">{}</a></p>"
  },
  "permission": {
    "col.id": "ID",
    "col.can_create": "Creare",
    "col.can_delete": "Eliminare",
    "col.can_delete_own": "Eliminare (proprio)",
    "col.can_read": "Leggere",
    "col.can_update": "Modificare",
    "col.can_update_own": "Modificare (proprio)",
    "col.groupes": "Gruppi",
    "col.resource_key": "Risorsa",
    "col.actions": "Azioni"
  }
}
