{
"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",
"data_invalid": "Valore non valido per «{}»",
"data_required": "«{}» è obbligatorio",
"data_password": "Impossibile calcolare l'hash della password di «{}»: non è stato salvato nulla",
"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",
"unknown_group": "GuardRules: gruppo/i inesistente/i in roles([...]): {}",
"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": {
"bad_request": "Richiesta non valida",
"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"
},
"invalid_query": "Parametri di query non validi: {}",
"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": {
"subscriber_already_installed": "Un subscriber di tracing è già installato; la configurazione di log di Runique è inattiva (RUST_LOG / with_log non hanno effetto)",
"external_outputs_ignored": "`with_log(|l| l.external())` è impostato; gli output di log configurati vengono ignorati (l'applicazione possiede il subscriber)",
"validation_failed": "Validazione del build fallita: {}",
"check_failed": "Build fallita con {} errore/i di verifica",
"template_failed": "Caricamento del template fallito: {}",
"driver_not_enabled": "Driver {} non attivato: Runique è stato compilato senza la feature '{}'.\n\nNel Cargo.toml del progetto:\nrunique = { version = \"{}\", features = [\"{}\"] }\n\nPer la CLI runique:\ncargo install runique --features {} --locked --force\n\nPer supportare tutti i motori, usare la feature 'all-databases'.",
"db_missing": "Connessione al database richiesta quando la feature 'orm' è attiva",
"component_not_ready": "Il componente '{}' non è pronto",
"check": {
"db_required": "Connessione o configurazione del database richiesta (feature `orm` attiva)",
"db_required_hint": "Aggiungi .with_database(db) o .with_database_config(config) alla tua catena di costruzione",
"admin_prefix_empty": "Il prefisso di route dell'admin non può essere vuoto",
"admin_prefix_empty_hint": "Usa .prefix(\"/admin\") o lascia il valore predefinito",
"extra_route_unknown": "La route aggiuntiva `{}` indica la risorsa `{}`, che non è registrata",
"extra_route_unknown_hint": "Usa la chiave di una risorsa dichiarata in admin!{}",
"cache_control_invalid": "Valore dell'intestazione Cache-Control non valido: '{}'",
"cache_control_invalid_hint": "Usa solo caratteri ASCII visibili (niente caratteri di controllo né a capo).",
"media_root_unusable": "Impossibile creare o accedere alla cartella MEDIA_ROOT '{}': {}",
"media_root_unusable_hint": "Imposta MEDIA_ROOT su un percorso assoluto scrivibile nel tuo .env (es. MEDIA_ROOT=/var/www/miaapp/media) e verifica che il processo possa scriverci.",
"secret_key_weak": "SECRET_KEY è assente, vuota, al valore predefinito o più corta di 32 caratteri",
"secret_key_weak_hint": "Imposta SECRET_KEY su una stringa casuale di almeno 32 caratteri nel tuo .env (la CLI `runique` può generarne una)",
"public_url_missing": "Nessun URL pubblico: i link di reset verrebbero costruiti dall'intestazione Host della richiesta",
"public_url_missing_hint": "Impostalo nel builder: .with_public_url(\"https://miosito.it\")",
"acme_domain_missing": "ACME_ENABLED=true ma ACME_DOMAIN non è impostato",
"acme_domain_missing_hint": "Imposta ACME_DOMAIN sul tuo dominio di produzione nel tuo .env",
"acme_email_missing": "ACME_ENABLED=true ma ACME_EMAIL non è impostato",
"acme_email_missing_hint": "Imposta ACME_EMAIL sul tuo indirizzo di contatto Let's Encrypt nel tuo .env",
"suggestion": "Suggerimento",
"context": "Contesto"
}
},
"server": {
"operational": "Runique è operativo",
"launched": "Server avviato su {}",
"connected_db": "Connesso al database {} -> {}",
"stop_hint": "ctrl + c per fermare",
"shutting_down": "Arresto del server Runique...",
"acme_not_compiled": "ACME_ENABLED=true ma la feature `acme` non è compilata.",
"acme_add_feature": "Aggiungi la feature `acme` al tuo Cargo.toml.",
"test_utils_feature_enabled": "La feature `test-utils` è compilata in questa build — assicurati che sia sotto [dev-dependencies], mai [dependencies], prima di un deploy in produzione."
},
"middleware": {
"bad_request": "Richiesta non valida",
"slot_collision": "Collisione di slot middleware Runique: '{}' e '{}' rivendicano entrambi lo slot {}. Registra meno middleware personalizzati o assegna a questo uno slot esplicito."
},
"html": {
"400_title": "400",
"400_text": "Richiesta non valida: i parametri dell'indirizzo non sono validi.",
"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.",
"503_title": "503",
"503_text": "Servizio temporaneamente non disponibile per sovraccarico. Riprova tra poco.",
"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."
},
"cli": {
"creating_project": "Creazione del progetto '{}'...",
"admin_detected": "Admin rilevato → generazione del codice admin",
"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",
"fmt_failed": "cargo fmt è fallito — formattazione ignorata: {}"
},
"daemon": {
"unable_read": "Impossibile leggere: {}",
"parse_error": "Errore di parsing: {}",
"no_resource": "Nessuna risorsa in admin!{} — nulla da generare",
"operational": "Daemon operativo → src/admins/admin.rs",
"generation_error": "Errore di generazione: {}",
"generated_header": "GENERATO AUTOMATICAMENTE — NON MODIFICARE MANUALMENTE",
"generated_notice": "Prodotto da `runique start` da src/admin.rs. Qualsiasi modifica verrà sovrascritta."
},
"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": {
"multiple_admin_blocks": "admin!: è consentito un solo blocco admin! per file (primo blocco alla riga {}, secondo alla riga {}) — unificali",
"title_required": "admin!: 'title' è 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",
"not_activated": "Questo account non è ancora stato attivato dal suo utente: lo sarà quando avrà scelto la password tramite l'email ricevuta."
},
"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": {
"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",
"see_list": "Vedi la lista →",
"empty_title": "Nessuna risorsa registrata",
"empty_desc": "Dichiara le tue risorse in src/admin.rs con la macro admin!{{}} poi esegui runique start",
"kpi_resources": "Risorse",
"kpi_entries": "Voci totali",
"kpi_largest": "Più grande",
"th_count": "Voci"
},
"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?",
"btn_reset_password": "Reimposta password",
"btn_reset_password_short": "Reimposta"
},
"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_unavailable": "Il ripristino della password non è disponibile per questo elemento.",
"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",
"theme_toggle": "Cambia tema",
"back_to_site": "← Sito"
},
"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 12 caratteri.",
"password_weak": "La password deve contenere almeno una lettera minuscola, una maiuscola, una cifra e un carattere speciale.",
"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": {
"destructive_detected": "Modifiche distruttive rilevate:",
"destructive_require_force": "Usa --force per applicare queste modifiche distruttive.",
"long_identifier_detected": "Gli identificatori SQL generati sono troppo lunghi (limite MariaDB/MySQL: 64 caratteri):",
"long_identifier_rename_required": "Accorcia i nomi di tabella/colonna coinvolti — Runique non tronca automaticamente gli identificatori.",
"files_ready": "{} file pronti per la migrazione.",
"snapshots_upgraded": "{} snapshot aggiornati per registrare la lunghezza delle colonne (nessuna migrazione)."
},
"migrate": {
"applying": "Applicazione migrazioni da '{}'...",
"complete_up": "Migrazione completata.",
"crate_missing": "Crate delle migrazioni non trovato: '{}' non contiene Cargo.toml."
},
"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_weak": "La password deve contenere almeno una maiuscola, una minuscola, una cifra e un carattere speciale (!@#$%...).",
"password_mismatch": "Le password non coincidono.",
"check_inbox": "Se questo indirizzo è associato a un account, riceverai un'email con le istruzioni.",
"blocked_subject": "Il tuo account è bloccato",
"blocked_body": "<p>Ciao {},</p><p>È stata richiesta la reimpostazione della password per il tuo account, ma questo account è bloccato. Contatta l'amministratore del sito per sbloccarlo.</p><p>Se non hai fatto tu questa richiesta, ignora questa email.</p>",
"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",
"can_create": "Creare",
"can_delete": "Eliminare",
"can_delete_own": "Eliminare (proprio)",
"can_read": "Leggere",
"can_update": "Modificare",
"can_update_own": "Modificare (proprio)",
"groupes": "Gruppi",
"resource_key": "Risorsa",
"actions": "Azioni"
}
},
"runique_test": {
"connect_failed": "connessione impossibile: {}",
"begin_failed": "impossibile aprire la transazione di test: {}",
"env_read_failed": "impossibile leggere {}: {}",
"env_parse_failed": "impossibile analizzare {}: {}",
"env_line_malformed": "impossibile analizzare {}: una riga non è valida al carattere {} (la riga non viene mostrata, potrebbe contenere una password)",
"no_panic_message": "nessun messaggio",
"query_failed": "fallita",
"panicked": "panic: {}",
"rollback_failed": "rollback: {}",
"test_failed": "{} non è riuscito, vedi l'output qui sopra",
"clone_outlived": "un clone della connessione di test è sopravvissuto all'handler; la transazione verrà annullata quando quel clone sarà rilasciato",
"not_a_transaction": "il test non è stato eseguito in una transazione, quindi non è stato possibile annullare nulla",
"nested": "runique_test non può girare dentro un altro runique_test: aspetterebbe all'infinito il proprio chiamante",
"timed_out": "l'handler non ha finito entro {} s: un deadlock, o una riga bloccata da un'altra connessione? RUNIQUE_TEST_TIMEOUT nel file env cambia il limite",
"bad_timeout": "{} deve essere un numero intero di secondi maggiore di 0, ricevuto \"{}\"",
"transaction_ended": "la transazione del test è stata chiusa dall'interno del test (un COMMIT, o DDL su MariaDB/MySQL): tutto ciò che è stato scritto prima ora è nel database",
"swallowed_failures": "query fallite: {}, eppure l'handler ha restituito Ok: un errore è stato ingoiato da qualche parte (racchiudi i fallimenti attesi in expect_db_error)",
"rollback_timed_out": "il rollback non ha finito entro {} s",
"expected": "atteso",
"not_refused": "il database ha accettato ciò che il test si aspettava che rifiutasse",
"no_db_config": "il file env non imposta né DATABASE_URL né DB_ENGINE: il database di test deve essere indicato lì, nulla viene preso dalla shell",
"in_memory": "in memoria: ogni test parte da un database vuoto"
},
"test_runner": {
"no_cargo_toml": "Nessun Cargo.toml qui: esegui `runique test` dalla root del tuo progetto.",
"test_utils_missing": "La feature `test-utils` non è attiva per runique in Cargo.toml.\nAggiungila come dev-dependency, così non finirà mai in una build di release:\n cargo add --dev runique --features test-utils",
"test_utils_shipped": "Cargo.toml attiva `test-utils` fuori da [dev-dependencies], quindi il builder di test finirebbe nella tua build di release.\nRimuovila da [dependencies] (e da ogni voce di [features]), poi aggiungila solo come dev-dependency:\n cargo add --dev runique --features test-utils",
"no_mod_file": "Nessun src/runique_test/mod.rs: crealo, poi dichiara al suo interno ogni file di test (`mod user;`).",
"module_not_declared": "src/main.rs non dichiara il modulo di test. Aggiungi:\n #[cfg(test)]\n mod runique_test;",
"module_not_gated": "Il modulo runique_test non è protetto da `cfg(test)`, quindi finirebbe in ogni build.\nMetti `#[cfg(test)]` subito sopra `mod runique_test;` in src/main.rs.",
"file_not_declared_warning": "attenzione: src/runique_test/{}.rs non è dichiarato in mod.rs, quindi i suoi test non verranno eseguiti. Aggiungi `mod {};` a mod.rs.",
"no_test_file": "Nessun src/runique_test/{}.rs. File di test: {}",
"file_not_declared": "src/runique_test/{}.rs non è dichiarato in mod.rs: aggiungi `mod {};`.",
"cargo_spawn_failed": "Impossibile eseguire cargo.",
"output_failed": "Impossibile mostrare l'output di cargo.",
"cargo_wait_failed": "cargo test non è terminato correttamente.",
"tests_failed": "cargo test non è riuscito, vedi l'output qui sopra.",
"build_failed": "cargo non è riuscito a compilare i test, vedi gli errori qui sopra.",
"no_such_test": "Nessun test \"{}\" in {}.rs. Test disponibili: {}",
"dir_read_failed": "Impossibile leggere {}"
},
"auth": {
"login_cannot_sign_in": "Questo account non può accedere: è inattivo o non è mai stato attivato.",
"login_session_failed": "Impossibile salvare la sessione: {}"
}
}