export default {
// ── Navigazione ────────────────────────────────────────────────────────────
'nav.section.workspace': 'Il tuo spazio',
'nav.section.extensions': 'Estensioni',
'nav.section.config': 'Configurazione',
'nav.section.dev': 'Sviluppo',
'nav.chat': 'Chat',
'nav.inbox': 'Richieste',
'nav.dashboard': 'Dashboard',
'nav.projects': 'Progetti',
'nav.tasks': 'Gestione attività',
'nav.tasks.running': 'Attività in corso',
'nav.tasks.cron': 'Attività ricorrenti',
'nav.tasks.scheduled': 'Attività pianificate',
'nav.tasks.history': 'Cronologia',
'nav.models': 'Modelli',
'nav.providers': 'Provider',
'nav.security': 'Sicurezza',
'nav.agents': 'Agenti',
'nav.users': 'Utenti',
'nav.roles': 'Ruoli',
'nav.connectors': 'Connettori',
'nav.plugins': 'Plugin',
'nav.config': 'Impostazioni',
'nav.llm_requests': 'Richieste LLM',
'nav.system_agents': 'Agenti di sistema',
// ── Barra superiore ────────────────────────────────────────────────────────
'topbar.profile': 'Profilo',
'topbar.logout': 'Esci',
'topbar.account': 'Account',
'topbar.open_chat': 'Apri la chat',
'topbar.brand': 'Skald',
'topbar.to_light': 'Passa al tema chiaro',
'topbar.to_dark': 'Passa al tema scuro',
// ── Chat ───────────────────────────────────────────────────────────────────
'chat.title': 'Skald',
'chat.tab.general': 'Generale',
'chat.hello': 'Ciao! Come posso aiutarti oggi?',
'chat.greeting': 'Ciao!',
'chat.greeting.named': 'Ciao, {name}!',
'chat.greeting.sub': 'Cosa posso fare per te oggi?',
'chat.placeholder': 'Scrivi un messaggio… (Invio per inviare, Maiusc+Invio per andare a capo)',
'chat.mobile.placeholder': 'Scrivi un messaggio…',
'chat.mobile.ask': 'Chiedimi qualsiasi cosa',
'chat.mobile.back_general': 'Torna a Generale',
'chat.mobile.project': 'Progetto',
'chat.mobile.chat': 'Chat',
'chat.mobile.record_voice': 'Registra voce',
'chat.mobile.stop_record': 'Interrompi registrazione',
'mobile.coming_soon': 'Prossimamente',
'mobile.nav.inbox': 'Richiesta',
'mobile.nav.projects': 'Progetti',
'mobile.nav.chat': 'Chat',
'mobile.nav.alerts': 'Avvisi',
'mobile.nav.settings': 'Impostazioni',
'mobile.settings.theme': 'Tema',
'mobile.settings.light': 'Chiaro',
'mobile.settings.dark': 'Scuro',
'mobile.settings.language': 'Lingua',
'chat.send': 'Invia',
'chat.stop': 'Ferma',
'chat.thinking': 'Sto pensando…',
'chat.reasoning': 'Ragionamento…',
'chat.attach': 'Allega file',
'chat.new_session': 'Nuova conversazione',
'chat.scroll_to_latest': 'Vai agli ultimi messaggi',
'chat.security_group': 'Gruppo di sicurezza',
'chat.collapse': 'Nascondi la chat',
'chat.close_tab': 'Chiudi scheda',
'chat.privacy': 'Privata',
'chat.privacy.hint': 'Solo tu puoi vedere questa conversazione. Condividere qualcosa con il gruppo richiede sempre prima un\'approvazione.',
'chat.suggest.1': 'Cosa sai fare?',
'chat.suggest.2': 'Aiutami a pianificare la giornata',
'chat.suggest.3': 'Raccontami una storia',
'chat.suggest.4': 'Cosa ricordi di me?',
'chat.rejected': 'Negata.',
'chat.rejected_by_user': 'Negata dall\'utente.',
'chat.truncated': 'Risposta troncata dal limite di token (↓{tokens} tok).',
'chat.not_connected': 'Non connesso — riconnessione in corso. Il messaggio è rimasto nella casella: premi di nuovo Invio tra un istante.',
'chat.mic.insecure': 'Il browser consente il microfono solo su connessione sicura. Apri Skald su http://localhost (dalla macchina stessa) oppure mettilo dietro HTTPS.',
'chat.mic.unsupported': 'Questo browser non supporta la registrazione vocale.',
'chat.mic.denied': 'Accesso al microfono negato. Consentilo per questo sito nelle impostazioni del browser e riprova.',
'chat.mic.failed': 'Impossibile avviare la registrazione: {error}',
'chat.tasks.title': 'Attività in background',
'chat.tasks.running_n': 'Attività in background · {n} in corso',
'chat.tasks.open': 'Guarda cosa sta facendo questa attività',
'chat.tasks.stop': 'Ferma questa attività',
'chat.tasks.dismiss': 'Togli dalla lista',
'chat.tasks.completed': 'completata',
'chat.tasks.failed': 'fallita',
'chat.tasks.cancelled': 'fermata',
'chat.tasks.see_all': 'Tutte le attività',
'chat.tasks.needs_you': 'Aspetta te',
'chat.tasks.pending_n': '1 di {n}',
'chat.tasks.ask_hide': 'Nascondi — resta nella Inbox',
'chat.tasks.hidden_n': '{n} in attesa nella Inbox',
// ── Copilot render ─────────────────────────────────────────────────────────
'copilot.open_in_viewer': 'Apri nel visualizzatore',
'copilot.unchanged_lines': '⋯ {n} righe invariate ⋯',
'copilot.cancel': 'Annulla',
'copilot.clarification_ph': 'Scrivi la risposta…',
'copilot.send': 'Invia',
'copilot.result': 'risultato',
'copilot.error_label': 'errore',
'copilot.not_sent_to_llm': 'Questo messaggio non viene inviato all\'LLM',
'copilot.remove': 'Rimuovi',
'copilot.result_json': 'risultato · json',
'copilot.changes': 'modifiche',
'copilot.view_details': 'Vedi dettagli',
'tool_detail.title': 'Chiamata tool',
'tool_detail.target': 'target',
'tool_detail.input': 'input',
'copilot.agent_done': 'completato',
'copilot.agent_running': 'in esecuzione…',
'copilot.agent_finished': 'finito',
'copilot.status_awaiting': 'In attesa di approvazione',
'copilot.status_cancelled': 'Annullato dall\'utente',
'copilot.status_denied': 'Negato dalle regole',
'copilot.bypass_session': 'Sessione',
'copilot.bypass_15min': '15 min',
// ── Copilot comandi slash ──────────────────────────────────────────────────
'copilot.cmd.help': 'Mostra comandi disponibili',
'copilot.cmd.clear': 'Avvia una nuova conversazione',
'copilot.cmd.new': 'Alias per /clear',
'copilot.cmd.models': 'Elenca i modelli LLM disponibili',
'copilot.cmd.model': 'Seleziona il modello per questa chat',
'copilot.cmd.context': 'Utilizzo token dell\'ultimo turno',
'copilot.cmd.cost': 'Spesa sessione (USD)',
'copilot.cmd.compact': 'Forza compattazione contesto',
'copilot.cmd.resettools': 'Rimuovi gruppi di strumenti attivati',
'copilot.cmd.sethome': 'Imposta web come home notifiche',
// ── LLM Requests ───────────────────────────────────────────────────────────
'llmr.title': 'Richieste LLM',
'llmr.loading': 'Caricamento…',
'llmr.empty': 'Nessuna richiesta trovata.',
'llmr.total': '{n} righe',
'llmr.filter.agent_id': 'ID Agente',
'llmr.filter.agent_ph': 'es. assistant',
'llmr.filter.source': 'Sorgente',
'llmr.filter.source_ph': 'es. web, event-triage, cron',
'llmr.filter.from': 'Da',
'llmr.filter.to': 'A',
'llmr.filter.apply': 'Applica',
'llmr.filter.reset': 'Reimposta',
'llmr.table.agent': 'Agente',
'llmr.table.source': 'Sorgente',
'llmr.table.model': 'Modello',
'llmr.table.date': 'Data',
'llmr.table.in_tokens': 'Token in',
'llmr.table.out_tokens': 'Token out',
'llmr.table.cache_hit': 'Cache hit',
'llmr.cache_read': 'lettura: {n} tk',
'llmr.cache_write': 'scrittura: {n} tk',
'llmr.pagination': 'Pagina {cur} di {pages} — {total} risultati',
// ── LLM Request Detail ──────────────────────────────────────────────────────
'llmr.detail.back': 'Indietro',
'llmr.detail.loading': 'Caricamento…',
'llmr.detail.request': 'Richiesta',
'llmr.detail.no_agent': 'nessun agente',
'llmr.detail.error_badge': 'errore',
'llmr.detail.purged': 'Payload non disponibile — questa richiesta è stata eliminata dalla politica di conservazione.',
'llmr.detail.reasoning_label': 'ragionamento',
'llmr.detail.tool_params': 'Parametri',
'llmr.detail.tool_result': 'Risultato',
'llmr.detail.system_role': 'sistema',
'llmr.detail.cache_label': 'cache {pct}',
'llmr.detail.stat_input': 'Token in input',
'llmr.detail.stat_output': 'Token in output',
'llmr.detail.section_req_headers': 'Intestazioni richiesta',
'llmr.detail.section_resp_headers':'Intestazioni risposta',
'llmr.detail.section_params': 'Parametri',
'llmr.detail.section_system': 'Prompt di sistema',
'llmr.detail.section_conversation':'Conversazione',
'llmr.detail.section_tools': 'Strumenti definiti',
'llmr.detail.section_response': 'Risposta',
'llmr.detail.tools_activated': 'Strumenti attivati (DTL)',
'llmr.detail.tool_reference_loads': 'carica {n}',
'llmr.detail.flag_deferred': 'differito',
'llmr.detail.flag_cached': 'in cache',
// ── Session detail ──────────────────────────────────────────────────────────
'session.back': 'Indietro',
'session.loading': 'Caricamento sessione…',
'session.no_session': 'Nessuna sessione caricata.',
'session.no_session_hint': 'Naviga su #session/{id} per vedere una sessione.',
'session.empty': 'Nessun messaggio in questa sessione.',
'session.user_role': 'Utente',
'session.assistant_role': 'Assistente',
'session.reasoning_label': 'Ragionamento',
'session.thinking_role': 'Pensiero',
'session.failed': 'fallito',
'session.ephemeral': 'effimero',
'session.automated': 'automatico',
'session.live': 'dal vivo',
'session.agent': 'agente:',
'session.id': 'id:',
'session.sub_agent': 'Sotto-agente:',
'session.end_of': 'fine di',
'session.depth': 'profondità {n}',
'session.synthetic': 'sintetico',
'session.tool_args': 'Argomenti',
'session.tool_result': 'Risultato',
'session.tool_error': 'Errore',
// ── Config ──────────────────────────────────────────────────────────────────
'config.title': 'Config',
'config.loading': 'Caricamento…',
'config.developer': 'Sviluppatore',
'config.error_save':'Errore durante il salvataggio di "{name}": {msg}',
'config.enabled': 'Attivato',
'config.disabled': 'Disattivato',
'config.llm_model.auto': 'automatico',
'config.set.interface.name': 'Interfaccia',
'config.set.interface.desc': 'Aspetto e stile dell\'interfaccia web.',
'config.set.compaction.name': 'Compattazione',
'config.set.compaction.desc': 'Quando una conversazione diventa troppo lunga, i messaggi più vecchi vengono riassunti da un LLM per mantenere il contesto entro i limiti.',
'config.prop.ui_locale.name': 'Lingua',
'config.prop.ui_locale.desc': 'Lingua predefinita per l\'intera istanza. Ogni utente può modificarla nel proprio profilo.',
'config.prop.event_triage__enabled.name': 'Attivo',
'config.prop.event_triage__enabled.desc': 'Attiva o disattiva il triage eventi per l\'intera istanza. Quando è disattivato, non viene elaborato alcun evento per nessuno.',
'config.prop.event_triage__security_group.name': 'Gruppo di sicurezza',
'config.prop.event_triage__security_group.desc': 'Gruppo di permessi strumenti applicato a ogni esecuzione del triage eventi. Viene riverificato sul ruolo di ciascun utente: se il ruolo non consente questo gruppo, l\'esecuzione usa il gruppo predefinito del ruolo. Lascia vuoto per usare sempre il predefinito del ruolo.',
'config.prop.event_triage__interval_minutes.name': 'Intervallo di controllo (minuti)',
'config.prop.event_triage__interval_minutes.desc': 'Quanto tempo passa tra un giro e l\'altro per ciascun utente, in minuti. Conteggiato per persona a partire dal suo ultimo giro. Lascia vuoto per usare il valore da config.yml (event_triage.interval_secs).',
'config.prop.memory_lint_private__enabled.name': 'Attivo',
'config.prop.memory_lint_private__enabled.desc': 'Attiva la manutenzione della memoria privata per l\'intera istanza. Quando è disattivata, la memoria privata di nessuno viene controllata.',
'config.prop.memory_lint_private__security_group.name': 'Gruppo di sicurezza',
'config.prop.memory_lint_private__security_group.desc': 'Gruppo di permessi strumenti applicato a ogni esecuzione. Viene riverificato sul ruolo di ciascun utente: se il ruolo non consente questo gruppo, l\'esecuzione usa il gruppo predefinito del ruolo. Lascia vuoto per usare sempre il predefinito del ruolo.',
'config.prop.memory_lint_private__interval_days.name': 'Intervallo (giorni)',
'config.prop.memory_lint_private__interval_days.desc': 'Quanto tempo passa tra un giro e l\'altro per ciascun utente. Conteggiato per persona dal suo ultimo giro, e sopravvive al riavvio: riavviare la macchina non azzera un intervallo lungo.',
'config.prop.memory_lint_shared__enabled.name': 'Attivo',
'config.prop.memory_lint_shared__enabled.desc': 'Attiva la manutenzione della memoria condivisa per l\'intera istanza.',
'config.prop.memory_lint_shared__security_group.name': 'Gruppo di sicurezza',
'config.prop.memory_lint_shared__security_group.desc': 'Gruppo di permessi strumenti applicato a ogni esecuzione, riverificato sul ruolo dell\'amministratore. Lascia vuoto per usare il predefinito del ruolo.',
'config.prop.memory_lint_shared__interval_days.name': 'Intervallo (giorni)',
'config.prop.memory_lint_shared__interval_days.desc': 'Quanto tempo passa tra un giro e l\'altro sulla memoria condivisa. Sopravvive al riavvio: riavviare la macchina non azzera un intervallo lungo.',
'config.prop.compaction_model.name': 'Modello per la compattazione',
'config.prop.compaction_model.desc': 'Modello usato per riassumere le conversazioni compattate, per tutta l\'istanza. Un modello economico di solito è sufficiente. Lascia vuoto per la selezione automatica.',
// ── Projects ────────────────────────────────────────────────────────────────
'projects.title': 'Progetti',
'projects.btn.new': 'Nuovo progetto',
'projects.empty': 'Nessun progetto. Creane uno per iniziare.',
'projects.action.edit': 'Modifica',
'projects.action.delete': 'Elimina',
'projects.card.updated': 'Aggiornato',
'projects.confirm.delete': 'Eliminare il progetto "{name}"? Verrà rimosso per tutti coloro con cui è condiviso.',
'projects.badge.owned': 'Tuo',
'projects.badge.shared_by': 'Condiviso da {name}',
'projects.badge.readonly': 'Sola lettura',
'projects.modal.title_edit': 'Modifica progetto',
'projects.modal.title_new': 'Nuovo progetto',
'projects.modal.name': 'Nome',
'projects.modal.name_ph': 'Mio progetto',
'projects.modal.desc': 'Descrizione',
'projects.modal.desc_ph': 'Di cosa tratta questo progetto',
'projects.modal.cancel': 'Annulla',
'projects.modal.saving': 'Salvataggio…',
'projects.modal.save': 'Salva',
'projects.modal.create': 'Crea',
// ── Condivisione progetto ───────────────────────────────────────────────────
'projects.share.title': 'Condivisione',
'projects.share.owner': 'proprietario',
'projects.share.choose_user': 'Scegli una persona…',
'projects.share.add': 'Aggiungi',
'projects.share.all_added': 'Tutti hanno già accesso.',
'projects.share.remove': 'Rimuovi',
'projects.share.access.read': 'Lettura',
'projects.share.access.write': 'Scrittura',
'projects.share.access.readonly': 'Sola lettura',
'projects.share.access.readwrite':'Lettura e scrittura',
'projects.tabs.files': 'File',
'projects.tabs.sharing': 'Condivisione',
'projects.files.col.name': 'Nome',
'projects.files.col.created': 'Creazione',
'projects.files.col.modified': 'Ultima modifica',
'projects.files.col.size': 'Dimensione',
'projects.files.empty': 'Questa cartella è vuota.',
'projects.files.refresh': 'Aggiorna',
'projects.files.drop': 'Trascina qui i file per caricarli',
'projects.files.btn.new_folder': 'Nuova cartella',
'projects.files.btn.upload': 'Carica',
'projects.files.uploading': 'Caricamento…',
'projects.files.action.rename': 'Rinomina',
'projects.files.action.delete': 'Elimina',
'projects.files.confirm.delete_file': 'Eliminare "{name}"?',
'projects.files.confirm.delete_dir': 'Eliminare la cartella "{name}" e tutto il suo contenuto?',
'projects.files.modal.mkdir': 'Nuova cartella',
'projects.files.modal.rename': 'Rinomina "{name}"',
'projects.files.modal.name': 'Nome',
'projects.files.error.name': 'Inserisci un nome valido (senza barre).',
// ── Dettaglio progetto ──────────────────────────────────────────────────────
'project_board.back': 'Progetti',
'project_board.open_chat': 'Apri chat',
// ── Richieste ──────────────────────────────────────────────────────────────
'inbox.empty': 'Nessuna richiesta in attesa',
'inbox.reject_prompt': 'Motivo del rifiuto (facoltativo):',
// ── Approvazioni ───────────────────────────────────────────────────────────
'approval.pending': 'In attesa del tuo OK',
'approval.approved': 'Consentito',
'approval.rejected': 'Negato',
'approval.approve': 'Consenti',
'approval.reject': 'Nega',
'approval.confirm_reject': 'Conferma il rifiuto',
'approval.reject_hint': 'Facoltativo: spiega perché (lo leggerà l\'assistente)',
'approval.bypass_15': 'Consenti e salta richieste simili per 15 minuti',
'approval.bypass_all': 'Consenti e salta tutte le richieste di questa sessione',
// ── Accesso ────────────────────────────────────────────────────────────────
'login.title': 'Bentornato',
'login.subtitle': 'Accedi al tuo account.',
'login.expired.title': 'Sessione scaduta',
'login.expired': 'Il server è stato riavviato e la sessione è terminata. Accedi di nuovo per proseguire: la pagina resta com\'era, messaggio non inviato compreso.',
'login.username': 'Nome utente',
'login.password': 'Password',
'login.submit': 'Accedi',
'login.signing': 'Accesso in corso…',
'login.missing': 'Inserisci nome utente e password.',
'login.error': 'Nome utente o password non validi.',
'login.network': 'Errore di rete — riprova.',
// ── Profilo ────────────────────────────────────────────────────────────────
'profile.title': 'Profilo',
'profile.account': 'Account',
'profile.username': 'Nome utente',
'profile.role': 'Ruolo',
'profile.name': 'Nome visualizzato',
'profile.name.ph': 'Il tuo nome',
'profile.language': 'Lingua',
'profile.language.default': 'Predefinita del gruppo ({locale})',
'profile.saved': 'Salvato.',
'profile.pw': 'Cambia password',
'profile.pw.current': 'Password attuale',
'profile.pw.new': 'Nuova password',
'profile.pw.confirm': 'Conferma nuova password',
'profile.pw.short': 'La password deve avere almeno 4 caratteri.',
'profile.pw.mismatch': 'Le password non coincidono.',
'profile.pw.changed': 'Password aggiornata.',
'profile.pw.submit': 'Cambia password',
// ── Impostazioni (extra pagina config) ─────────────────────────────────────
'config.debug': 'Modalità debug',
'config.debug.desc': 'Mostra le pagine per sviluppatori (richieste LLM) nella barra laterale.',
// ── Configurazione iniziale ────────────────────────────────────────────────
'setup.title': 'Benvenuto in Skald',
'setup.subtitle': 'Crea l\'account amministratore per iniziare.',
'setup.username': 'Scegli un nome utente.',
'setup.pw.short': 'La password deve avere almeno 4 caratteri.',
'setup.pw.mismatch': 'Le due password non coincidono.',
'setup.confirm': 'Conferma password',
'setup.language': 'Lingua dell\'interfaccia',
'setup.profile': 'Tipo di istanza',
'setup.encrypt': 'Cifra la cronologia delle mie conversazioni',
'setup.warn': 'la tua password genera la chiave di cifratura. Se la dimentichi, l\'intera cronologia delle conversazioni andrà persa per sempre — non esiste alcun recupero.',
'setup.warn.strong': 'Attenzione:',
'setup.submit': 'Crea account',
'setup.creating': 'Creazione…',
'setup.network': 'Errore di rete — riprova.',
// ── Dashboard ───────────────────────────────────────────────────────────────
'dashboard.status.loading': 'Caricamento…',
'dashboard.status.no_models': 'Nessun modello LLM',
'dashboard.status.online': 'Online e funzionante',
'dashboard.status.degraded': 'Degradato',
'dashboard.status.offline': 'Tutti i modelli offline',
'dashboard.stats.loading': 'Caricamento statistiche…',
'dashboard.stats.empty': 'Nessuna richiesta LLM nell\'intervallo selezionato.',
'dashboard.stats.requests': 'Richieste {per}',
'dashboard.stats.tokens': 'Token {per}',
'dashboard.stats.latency': 'Latenza media (ms)',
'dashboard.stats.models': 'Modelli',
'dashboard.stats.per_min': '/ min',
'dashboard.stats.per_hour': '/ h',
'dashboard.stats.per_day': '/ giorno',
'dashboard.stats.range.hour': '1h',
'dashboard.stats.range.day': '24h',
'dashboard.stats.range.week': '7g',
'dashboard.stats.range.month': '30g',
'dashboard.stats.chart.input': 'Input',
'dashboard.stats.chart.output': 'Output',
'dashboard.stats.chart.cached': 'In cache',
'dashboard.stats.chart.non_cached': 'Non in cache',
'dashboard.stats.chart.cache_hit': 'Cache hit: {pct}%',
'dashboard.hero.subtitle': 'Il tuo centro di comando AI — ricerca, codice, pianificazione e orchestrazione. Tutto in un unico posto.',
'dashboard.banner.no_models.title': 'Nessun modello LLM configurato.',
'dashboard.banner.no_models.desc': 'Inizia aggiungendo un provider (Anthropic, OpenAI, OpenRouter…), poi aggiungi almeno un modello nella sezione Modelli.',
'dashboard.banner.no_models.action': 'Aggiungi un provider',
'dashboard.section.stats': 'Statistiche LLM',
'dashboard.section.pending': 'In sospeso',
'dashboard.section.guide': 'Guida rapida',
'dashboard.tip.honcho.title': 'Abilita Honcho',
'dashboard.tip.honcho.desc': 'Memoria persistente a lungo termine — l\'agente impara le tue preferenze col tempo. Chiedi al Copilot di attivarla.',
'dashboard.refresh': 'Aggiorna',
'dashboard.guide.chat.title': 'Chat',
'dashboard.guide.chat.desc': 'La tua home page è una conversazione — sa tutto: chiedile di eseguire agenti, attivare plugin, scrivere codice o cercare sul web.',
'dashboard.guide.inbox.title': 'Richieste',
'dashboard.guide.inbox.desc': 'Approvazioni in sospeso e domande degli agenti che richiedono il tuo contributo prima che le attività in background possano continuare.',
'dashboard.guide.agents.title': 'Agenti',
'dashboard.guide.agents.desc': 'Sub-agenti specializzati (ingegnere, architetto, QA…). Ciascuno ha un prompt di sistema mirato, un set di strumenti e un modello specifico.',
'dashboard.guide.cron.title': 'Cron',
'dashboard.guide.cron.desc': 'Attività pianificate che vengono eseguite automaticamente a intervalli regolari, anche quando il Copilot è inattivo.',
'dashboard.guide.models.title': 'Modelli',
'dashboard.guide.models.desc': 'Gestisci modelli LLM, di trascrizione e generazione immagini. Trascina per riordinare le priorità.',
'dashboard.guide.providers.title': 'Provider',
'dashboard.guide.providers.desc': 'Aggiungi chiavi API per provider LLM (Anthropic, OpenAI, OpenRouter, Ollama…).',
'dashboard.guide.security.title': 'Sicurezza',
'dashboard.guide.security.desc': 'Definisci regole per auto-approvare o auto-rifiutare chiamate strumentali — salta le richieste di conferma ripetitive.',
// ── Modelli (hub + sezioni) ──────────────────────────────────────────────────
'models.hub.title': 'Modelli',
'models.hub.subtitle': 'Configura provider LLM, trascrizione e generazione immagini.',
'models.hub.count.none': 'Nessun modello',
'models.hub.count.one': '1 modello',
'models.hub.count.many': '{n} modelli',
'models.hub.card.llm.title': 'LLM',
'models.hub.card.llm.desc': 'Modelli di chat e completamento per agenti e strumenti',
'models.hub.card.transcribe.title': 'Trascrizione',
'models.hub.card.transcribe.desc': 'Modelli di riconoscimento vocale tramite cloud o plugin locale',
'models.hub.card.image.title': 'Generazione immagini',
'models.hub.card.image.desc': 'Modelli text-to-image tramite API cloud',
'models.hub.card.tts.title': 'Sintesi vocale',
'models.hub.card.tts.desc': 'Modelli di sintesi vocale tramite cloud o plugin locale',
'models.back': 'Torna ai modelli',
'models.add': 'Aggiungi',
'models.add_model': 'Aggiungi modello',
'models.add_first': 'Aggiungi il primo modello',
'models.edit': 'Modifica',
'models.delete': 'Elimina',
'models.saving': 'Salvataggio…',
'models.save_changes': 'Salva modifiche',
'models.cancel': 'Annulla',
'models.search': 'Cerca modelli…',
'models.loading': 'Caricamento modelli…',
'models.no_results': 'Nessun modello trovato',
'models.enter_id': 'Inserisci manualmente l\'ID del modello',
'models.managed_plugin': 'Gestito dal plugin',
'models.readonly_plugin': 'I modelli con badge Plugin sono in sola lettura — gestiti automaticamente dal plugin che li ha registrati.',
'models.readonly_plugin_full': 'I modelli con badge Plugin sono in sola lettura — gestiti automaticamente dal plugin che li ha registrati. Per aggiungerli, modificarli o rimuoverli, chiedi direttamente all\'agente: ha tutta la documentazione necessaria.',
'models.default': 'predefinito',
'models.move_up': 'Sposta su',
'models.move_down': 'Sposta giù',
'models.strength.very_high': 'Molto alta',
'models.strength.high': 'Alta',
'models.strength.average': 'Media',
'models.strength.low': 'Bassa',
'models.strength.very_low': 'Molto bassa',
'models.strength.none': '— nessuna —',
'models.reasoning.off': '— disattivato —',
'models.reasoning.label': 'Ragionamento',
'models.reasoning.thinking': 'Ragionamento (thinking)',
'models.strength': 'Forza',
'models.priority': 'Priorità',
'models.default_model': 'Modello predefinito',
'models.extra_params': 'Parametri extra',
'models.extra_params_hint': '(JSON, opzionale)',
'models.model_id': 'ID modello',
'models.model_id_hint': '(inviato all\'API)',
'models.model_id_immutable': 'L\'ID modello non può essere modificato dopo la creazione.',
'models.name_alias': 'Nome / Alias',
'models.name_alias_hint': '(opzionale)',
'models.name_alias_ph': 'uguale all\'ID modello',
'models.edit_title': 'Modifica {name}',
'models.edit_info': 'ID modello e provider non possono essere modificati. Per usare un modello diverso, aggiungi una nuova voce.',
'models.name_help': 'Usato per riferirsi a questo modello (es. nel client di un agente). Deve essere unico.',
'models.no_providers_llm': 'Aggiungi prima un Provider, poi torna qui per aggiungere modelli.',
'models.no_providers_transcribe': 'Nessun provider supporta ancora la trascrizione. Aggiungi prima un provider OpenAI o OpenRouter.',
'models.no_providers_image': 'Nessun provider supporta ancora la generazione immagini. Aggiungi prima un provider OpenRouter.',
'models.no_providers_tts': 'Nessun provider supporta ancora la sintesi vocale. Aggiungi prima un provider OpenAI.',
'models.list_empty_llm': 'Nessun modello configurato.',
'models.list_empty_transcribe': 'Nessun modello di trascrizione configurato.',
'models.list_empty_image': 'Nessun modello di generazione immagini configurato.',
'models.list_empty_tts': 'Nessun modello TTS configurato.',
'models.list_empty_add_hint': 'Clicca Aggiungi per aggiungere un modello cloud.',
'models.list_empty_whisper': 'Attiva il plugin Whisper Local per la trascrizione su dispositivo.',
'models.source': 'Origine',
'models.source_plugin': 'Plugin',
'models.source_cloud': 'Cloud',
'models.name_col': 'Nome',
'models.provider_col': 'Provider',
'models.model_id_col': 'ID modello',
'models.language_col': 'Lingua',
'models.language_auto': 'auto',
'models.choose_provider': 'Scegli provider',
'models.add_model_title': 'Aggiungi modello',
'models.model_label': 'Modello',
'models.add_model_provider': 'Aggiungi modello {type} — Scegli provider',
'models.add_model_type': 'Aggiungi modello {type}',
'models.priority_hint': 'Numero più basso = provato per primo. Predefinito: 100.',
'models.priority_hint_short': 'Numero più basso = usato per primo. Predefinito: 100.',
'models.status_healthy': 'Funzionante',
'models.status_degraded': 'Degradato',
'models.status_down': 'Non disponibile',
'models.llm.title': 'Modelli LLM',
'models.transcribe.title': 'Modelli di trascrizione',
'models.image.title': 'Modelli di generazione immagini',
'models.tts.title': 'Modelli di sintesi vocale',
'models.confirm_delete': 'Eliminare il modello {type} "{name}"?',
'models.error.save_order': 'Errore durante il salvataggio dell\'ordine: {msg}',
'models.error.load_models': 'Errore durante il caricamento dei modelli: {msg}',
'models.error.invalid_json': 'Parametri extra: JSON non valido',
'models.error.select_model': 'Seleziona un modello',
'models.label.sent_to_api': '(inviato all\'API)',
'models.label.optional': '(opzionale)',
'models.label.bcp47': '(BCP-47, opzionale)',
'models.label.required_elevenlabs': '(opzionale — richiesto per ElevenLabs)',
'models.label.shown_to_llm': '(opzionale — mostrato all\'LLM)',
'models.label.response_fmt': 'Formato risposta',
'models.label.response_fmt_hint': '(opzionale)',
'models.label.description': 'Descrizione',
'models.label.description_hint': '(opzionale)',
'models.label.instructions': 'Istruzioni',
'models.label.instructions_hint': '(opzionale — mostrato all\'LLM)',
'models.label.voice_id': 'ID voce',
'models.label.voice_id_hint': '(opzionale — richiesto per ElevenLabs)',
'models.label.max_output': 'Token massimi di output',
'models.label.max_output_hint': '(opzionale)',
'models.ph.model_id': 'es. gpt-4o',
'models.ph.model_id_transcribe': 'es. openai/whisper-1',
'models.ph.model_id_tts': 'es. tts-1-hd',
'models.ph.model_id_image': 'es. x-ai/grok-2-vision',
'models.ph.name_alias': 'uguale all\'ID modello',
'models.ph.language': 'es. it, en — lascia vuoto per rilevamento automatico',
'models.ph.voice_id': 'es. alloy, Kore, 21m00Tcm4TlvDq8ikWAM',
'models.ph.description': 'es. Alta qualità, lento — ideale per risposte lunghe',
'models.ph.instructions': 'es. Parla con tono calmo e neutro. Fai una breve pausa tra le frasi.',
'models.ph.max_tokens': 'fino a {n}',
'models.form.model_lock': 'L\'ID modello non può essere modificato dopo la creazione.',
'models.form.voice_hint': 'Voce del parlante. OpenAI: alloy/echo/nova… (predefinito alloy se vuoto); Gemini: Kore/Puck/Zephyr…; ElevenLabs: l\'ID voce.',
'models.form.instructions_hint': 'Guida per voce/tono iniettata nel prompt di sistema LLM quando questo modello è attivo.',
'models.form.response_hint': 'Formato audio richiesto al provider. Lascia vuoto a meno che il modello non ne richieda uno specifico — es. Gemini TTS accetta solo pcm.',
'models.form.response_default': 'Predefinito del provider (mp3)',
'models.form.priority_img': 'Numero più basso = provato per primo. Predefinito: 100.',
'models.form.name_as_provider': 'Nome / Alias (usato come provider_id nello strumento LLM)',
'models.tts.cost_multiplier': 'Moltiplicatore di costo rispetto alla tariffa base',
'models.llm.price_tooltip': 'Input/Output per 1M token',
// ── Regole di approvazione ──────────────────────────────────────────────────
'approval.action.require': 'Richiedi',
'approval.action.allow': 'Consenti',
'approval.action.deny': 'Nega',
'approval.chip.unset': '—',
'approval.chip.req': 'Rich',
'approval.category.filesystem': 'File System',
'approval.category.shell': 'Shell',
'approval.category.subagent': 'Agenti',
'approval.category.introspection': 'Introspezione',
'approval.category.config': 'Config',
'approval.category.dynamic': 'Dinamico',
'approval.fs.allow_read': 'Consenti lettura',
'approval.fs.allow_write': 'Consenti scrittura',
'approval.fs.deny': 'Nega',
'approval.fs.require': 'Richiedi',
'approval.fs.default': 'Richiedi (predefinito di sistema)',
'approval.error.enter_path': 'Inserisci un percorso di directory.',
'approval.error.tool_required': 'Il pattern dello strumento è obbligatorio.',
'approval.error.override_prio': 'Le regole di override devono avere priorità < 0.',
'approval.error.lowprio_range': 'Le regole a bassa priorità devono avere priorità tra 1 e {max}.',
'approval.tool.any': 'Qualsiasi strumento',
'approval.tool.any_mcp': 'Qualsiasi strumento MCP',
'approval.tool.search': 'Cerca strumenti…',
'approval.tool.no_results': 'Nessun risultato',
'approval.tool.group_builtin': 'Integrati',
'approval.tool.group_glob': 'Glob',
'approval.tool.group_mcp': 'MCP · {server}',
'approval.form.new_override': 'Nuova regola di override',
'approval.form.new_lowprio': 'Nuova regola a bassa priorità',
'approval.form.edit': 'Modifica regola',
'approval.form.tool_pattern': 'Pattern strumento',
'approval.form.tool_pattern_ph': 'es. mcp__whatsapp__* o execute_cmd',
'approval.form.tool_pattern_hint': 'Usa * come wildcard finale, es. mcp__whatsapp__*',
'approval.form.select_tool': 'Seleziona strumento',
'approval.form.path_pattern': 'Pattern percorso',
'approval.form.path_pattern_ph': 'es. data/* o data/notes/*',
'approval.form.path_pattern_hint': 'Filtra per percorso file. Usa * come wildcard.',
'approval.form.action': 'Azione',
'approval.form.priority': 'Priorità',
'approval.form.priority_override_hint': 'Deve essere < 0 (es. −10)',
'approval.form.priority_lowprio_hint': 'Deve essere 1 – {max}',
'approval.form.source': 'Origine',
'approval.form.source_any': 'Qualsiasi',
'approval.form.agent_id': 'ID agente',
'approval.form.agent_id_ph': 'assistant (vuoto = qualsiasi)',
'approval.form.note': 'Nota',
'approval.form.note_ph': 'Breve descrizione…',
'approval.form.cancel': 'Annulla',
'approval.form.saving': 'Salvataggio…',
'approval.form.save': 'Salva',
'approval.card.priority': 'Priorità',
'approval.card.edit': 'Modifica',
'approval.card.delete': 'Elimina',
'approval.card.remove': 'Rimuovi',
'approval.matrix.title': 'Per strumento',
'approval.matrix.subtitle': 'priorità = 0 · nome esatto · nessun filtro percorso/origine',
'approval.matrix.loading': 'Caricamento strumenti…',
'approval.fs.title': 'File System',
'approval.fs.subtitle': 'accesso in lettura/scrittura per percorso',
'approval.fs.empty': 'Nessuna regola di percorso — aggiungine una qui sotto.',
'approval.fs.add_ph': 'Aggiungi percorso directory, es. docs',
'approval.fs.default_label': 'Predefinito',
'approval.fs.default_hint': 'percorsi non configurati',
'approval.sidebar.overrides': 'Override',
'approval.sidebar.overrides_sub': 'priorità < 0 · valutate per prime',
'approval.sidebar.lowprio': 'Bassa priorità',
'approval.sidebar.lowprio_sub': 'priorità 1–999998 · valutate dopo per-strumento',
'approval.sidebar.add': 'Aggiungi',
'approval.sidebar.empty': 'Nessuna regola.',
'approval.default_bar.title': 'Azione predefinita',
'approval.default_bar.hint': 'se nessuna regola corrisponde',
'approval.default_bar.unset': 'predefinito di sistema: consenti',
'approval.header.default_badge': 'Predefinito',
'approval.header.rule_count': '{n} regola',
'approval.header.rule_count_plural': '{n} regole',
'approval.confirm.delete_fs': 'Rimuovere la regola File System per "{path}"?',
'approval.confirm.delete_rule': 'Eliminare la regola per "{pattern}"?',
'approval.label.optional': '(opzionale)',
// ── Sicurezza (gruppi) ──────────────────────────────────────────────────────
'security.title': 'Sicurezza',
'security.group_count': '{n} gruppo',
'security.group_count_plural': '{n} gruppi',
'security.new_group': 'Nuovo gruppo',
'security.rename_group': 'Rinomina gruppo',
'security.duplicate': 'Duplica',
'security.duplicate_title': 'Duplica {name}',
'security.duplicating': 'Duplicazione…',
'security.create_first': 'Crea il primo gruppo',
'security.form.id': 'ID',
'security.form.id_ph': 'es. cron_strict',
'security.form.id_hint': 'Slug minuscolo, senza spazi. Non può essere modificato in seguito.',
'security.form.name': 'Nome',
'security.form.name_ph': 'es. Cron strict',
'security.form.description': 'Descrizione',
'security.form.description_ph': 'Breve descrizione…',
'security.form.new_name': 'Nuovo nome',
'security.form.new_id': 'Nuovo ID',
'security.form.copy_info': 'Tutte le {n} regola{s} da {name} verranno copiate.',
'security.form.cancel': 'Annulla',
'security.form.saving': 'Salvataggio…',
'security.form.save': 'Salva',
'security.card.default_badge': 'Predefinito',
'security.card.rule_count': '{n} regola',
'security.card.rule_count_plural': '{n} regole',
'security.card.duplicate': 'Duplica',
'security.card.rename': 'Rinomina',
'security.card.delete_disabled': 'Non puoi eliminare il gruppo predefinito',
'security.card.delete': 'Elimina gruppo',
'security.confirm.delete': 'Eliminare il gruppo "{name}"?',
'security.confirm.delete_with_rules': 'Eliminare il gruppo "{name}" e le sue {n} regola{s}?',
'security.banner.text1': 'I gruppi di permessi sono insiemi nominati di regole di approvazione. Il Profilo agente attivo di una sessione determina quale gruppo si applica — le regole di quel gruppo vengono valutate per prime, con il gruppo Predefinito come fallback.',
'security.banner.text2': 'Clicca un gruppo per visualizzare e gestire le sue regole. Il gruppo Predefinito non può essere eliminato, ma le sue regole possono essere modificate liberamente.',
'security.empty.title': 'Nessun gruppo.',
'security.error.name_required': 'Il nome è obbligatorio.',
'security.error.id_required': 'L\'ID è obbligatorio.',
'security.error.group_name_required': 'Il nome del gruppo è obbligatorio.',
'security.error.group_id_required': 'L\'ID del gruppo è obbligatorio.',
// ── Ruoli ───────────────────────────────────────────────────────────────────
'roles.title': 'Ruoli',
'roles.count': '{n} ruolo',
'roles.count_plural': '{n} ruoli',
'roles.new_role': 'Nuovo ruolo',
'roles.loading': 'Caricamento…',
'roles.empty': 'Nessun ruolo.',
'roles.col.id': 'ID',
'roles.col.label': 'Etichetta',
'roles.col.group': 'Gruppo di permessi',
'roles.col.interface': 'Interfaccia',
'roles.col.assistant': 'Assistente',
'roles.col.auto_grant': 'Nuove estensioni',
'roles.badge.simple': 'Semplice',
'roles.badge.full': 'Completa',
'roles.badge.auto_grant_on': 'Automatiche',
'roles.badge.auto_grant_off': 'Su richiesta',
'roles.form.new': 'Nuovo ruolo',
'roles.form.edit': 'Modifica {name}',
'roles.form.id': 'ID',
'roles.form.id_hint': '(slug)',
'roles.form.id_ph': 'es. editor',
'roles.form.id_desc': 'Minuscolo, senza spazi. Non può essere modificato in seguito.',
'roles.form.label': 'Etichetta',
'roles.form.group': 'Gruppo di sicurezza predefinito',
'roles.form.allowed': 'Gruppi di sicurezza aggiuntivi',
'roles.form.allowed_hint': 'Gruppi a cui questo ruolo può passare a runtime, oltre al predefinito. Gli utenti li scelgono in chat.',
'roles.form.interface': 'Interfaccia',
'roles.form.interface_full': 'Completa — tutte le pagine',
'roles.form.interface_simple': 'Semplice — solo chat',
'roles.form.interface_hint': 'I membri con interfaccia semplice vedono solo chat e richieste. Memorizzato come ui_mode nell\'attrs JSON qui sotto.',
'roles.form.assistant': 'Assistente predefinito',
'roles.form.assistant_default': 'Predefinito (Assistente)',
'roles.form.assistant_hint': 'L\'agente con cui i membri di questo ruolo parlano di default. In futuro sovrascrivibile per persona.',
'roles.form.auto_grant': 'Nuovi plugin e connettori',
'roles.form.auto_grant_label': 'Assegnali automaticamente a questo ruolo',
'roles.form.auto_grant_hint': 'Se attivo, un plugin o connettore che installi arriva subito a questo ruolo e lo togli dalla pagina della singola persona. Disattivalo per i ruoli che devono ricevere solo ci\u00f2 che dai tu \u2014 bambini, ospiti. Gli accessi gi\u00e0 concessi non vengono toccati da questa opzione.',
'roles.form.attrs': 'Attrs',
'roles.form.attrs_hint': '(JSON, opzionale)',
'roles.form.attrs_ph': '{}',
'roles.form.cancel': 'Annulla',
'roles.form.create': 'Crea',
'roles.form.save': 'Salva',
'roles.error.id_label': 'ID ed etichetta sono obbligatori.',
'roles.error.label': 'L\'etichetta è obbligatoria.',
'roles.tooltip.locked': 'Ruolo integrato — bloccato',
'roles.tooltip.edit': 'Modifica',
'roles.tooltip.delete': 'Elimina',
'roles.confirm.delete': 'Eliminare il ruolo "{name}"?',
// ── Agenti ──────────────────────────────────────────────────────────────────
'agents.title': 'Agenti',
'agents.loading': 'Caricamento…',
'agents.empty': 'Nessun agente trovato.',
'agents.back': 'Agenti',
'agents.section.chat': 'Chat',
'agents.section.task': 'Esecutori attività',
'agents.section.system': 'Sistema',
'agents.strength.very_high': 'Molto alta',
'agents.strength.high': 'Alta',
'agents.strength.average': 'Media',
'agents.strength.low': 'Bassa',
'agents.strength.very_low': 'Molto bassa',
'agents.detail.meta': 'Metadati',
'agents.detail.id': 'ID',
'agents.detail.strength': 'Forza',
'agents.detail.pinned_model': 'Modello fissato',
'agents.detail.memory_files': 'File di memoria',
'agents.detail.model_order': 'Ordine di risoluzione modelli',
'agents.detail.model_order_desc': 'Modelli ordinati per quanto corrispondono ai requisiti di questo agente. Il sistema usa il primo modello disponibile partendo dall\'alto.',
'agents.detail.no_models': 'Nessun modello configurato.',
'agents.detail.prompt': 'Prompt di sistema',
'agents.detail.default': 'predefinito',
'agents.table.rank': '#',
'agents.table.strength': 'Forza',
'agents.table.name': 'Nome',
'agents.table.model_id': 'ID modello',
'agents.banner.title': 'Vista sola lettura. Gli agenti sono definiti da file in agents/ — per aggiungere, rimuovere o modificare un agente, modifica il corrispondente file AGENT.md in quella directory.',
'agents.banner.text': 'Puoi anche chiedere a Copilot (barra superiore) di creare un nuovo agente per te — descrivi cosa dovrebbe fare e configurerà automaticamente tutti i file necessari.',
// ── Connettori ──────────────────────────────────────────────────────────────
'connectors.title': 'Connettori',
'connectors.loading': 'Caricamento…',
'connectors.search': 'Cerca connettori…',
'connectors.btn.signin_providers': 'Provider di accesso',
'connectors.empty.installed': 'Nessun connettore installato.',
'connectors.empty.available': 'Niente di disponibile per te.',
'connectors.empty.install_hint': 'Installane uno dal Marketplace per iniziare.',
'connectors.empty.ask_admin': 'Chiedi a un amministratore di renderne disponibile uno.',
'connectors.empty.match': 'Nessun connettore corrisponde a "{query}".',
'connectors.chip.global': 'globale',
'connectors.chip.per_user': 'per utente',
'connectors.chip.local_script': 'script locale',
'connectors.chip.auth.api_key': 'Richiede una API key',
'connectors.chip.auth.oauth': 'Richiede accesso (OAuth)',
'connectors.chip.auth.qr': 'Richiede abbinamento QR',
'connectors.chip.auth.ssh_key': 'Richiede una chiave SSH',
'connectors.status.active': 'attivo',
'connectors.status.needs_fix': 'da sistemare',
'connectors.status.needs_signin': 'richiede accesso',
'connectors.status.enabled': 'abilitato',
'connectors.status.off': 'spento',
'connectors.status.available': 'disponibile',
'connectors.providers.title': 'Provider di accesso',
'connectors.providers.desc': 'App OAuth attraverso cui i connettori per utente si autenticano. Un\'app (es. Google) copre tutti i suoi servizi. Il client secret è memorizzato su questo computer e non verrà mai più mostrato.',
'connectors.providers.empty': 'Nessun provider di accesso.',
'connectors.providers.secret_set': 'secret impostato',
'connectors.providers.no_secret': 'nessun secret',
'connectors.providers.no_client_id': '(nessun client id)',
'connectors.providers.add_google': 'Aggiungi Google',
'connectors.providers.add_other': 'Aggiungi altro',
'connectors.providers.save': 'Salva',
'connectors.providers.cancel': 'Annulla',
'connectors.providers.delete_confirm': 'Eliminare il provider di accesso "{name}"?\n\nI connettori che lo usano non potranno più accedere.',
'connectors.providers.error.name_client': 'Nome e client id sono obbligatori.',
'connectors.providers.error.secret': 'Il client secret è obbligatorio per un nuovo provider.',
'connectors.providers.field.name': 'ID provider',
'connectors.providers.field.name_help': 'Lo slug a cui i connettori fanno riferimento (deve corrispondere a auth.provider del manifest).',
'connectors.providers.field.display': 'Nome visualizzato',
'connectors.providers.field.client_id': 'Client id',
'connectors.providers.field.client_secret': 'Client secret',
'connectors.providers.field.secret_help_new': 'Obbligatorio.',
'connectors.providers.field.secret_help_edit': 'Lascia vuoto per mantenere il secret memorizzato.',
'connectors.providers.field.auth_url': 'URL di autorizzazione',
'connectors.providers.field.token_url': 'URL del token',
'connectors.providers.field.redirect': 'URI di reindirizzamento',
'connectors.providers.field.redirect_help': 'La pagina copia-e-incolla. Deve essere registrata come reindirizzamento autorizzato nella console del provider.',
'connectors.providers.field.extra': 'Parametri extra (JSON)',
'connectors.providers.field.extra_help': 'Uniti all\'URL di consenso. Google necessita di questi due per restituire un refresh token.',
'connectors.detail.back': 'Indietro',
'connectors.detail.global_note': 'Eseguito una volta per il gruppo, sull\'host. Nessuno può raggiungerlo finché non gli viene concesso l\'accesso.',
'connectors.detail.managed.title': 'Questo connettore è gestito per te.',
'connectors.detail.managed.desc': 'È abilitato da un amministratore e ti è stato concesso — non c\'è niente da configurare.',
'connectors.detail.config.title_active': 'Configurazione',
'connectors.detail.config.title_setup': 'Imposta',
'connectors.detail.config.already_global': 'Già abilitato. Re-inviando si sostituiscono le credenziali memorizzate.',
'connectors.detail.config.already_user': 'Già attivo. Re-inviando si sostituiscono le credenziali memorizzate.',
'connectors.detail.config.api_key': 'Chiave API',
'connectors.detail.config.btn_test': 'Verifica credenziali',
'connectors.detail.config.btn_testing': 'Verifica…',
'connectors.detail.config.btn_enable_global': 'Abilita globalmente',
'connectors.detail.config.btn_save_restart': 'Salva e riavvia',
'connectors.detail.config.btn_disable': 'Disabilita',
'connectors.detail.config.btn_activate': 'Attiva',
'connectors.detail.config.btn_deactivate': 'Disattiva',
'connectors.detail.detail_scope_global': 'globale',
'connectors.detail.scope_local': 'esegue codice su questo computer',
'connectors.detail.status.active': 'attivo',
'connectors.detail.status.needs_fix': 'da sistemare',
'connectors.detail.status.needs_signin': 'richiede accesso',
'connectors.detail.confirm.deactivate': 'Disattivare "{name}"?',
'connectors.detail.confirm.disable_global': 'Disabilitare "{name}"?\n\nSi ferma per tutti coloro che possono usarlo.',
'connectors.detail.oauth.title': 'Accesso',
'connectors.detail.oauth.desc': 'Accede con {provider}. Approvi l\'accesso in una scheda del browser, poi incolli il codice che la pagina ti mostra — niente viene memorizzato su questo computer finché non lo fai.',
'connectors.detail.oauth.scopes': 'Richiederà accesso a:',
'connectors.detail.oauth.signed_in': 'Accesso effettuato e attivo.',
'connectors.detail.oauth.btn_signin': 'Accedi con {provider}',
'connectors.detail.oauth.btn_signin_again':'Accedi di nuovo',
'connectors.detail.oauth.btn_finish': 'Completa accesso',
'connectors.detail.oauth.btn_complete': 'Completa accesso',
'connectors.detail.oauth.step1': 'Una scheda si è aperta per {provider}. Approva l\'accesso lì.',
'connectors.detail.oauth.step1_link': 'Riapri la pagina di accesso',
'connectors.detail.oauth.step2': 'Incolla il codice che la pagina ti ha mostrato:',
'connectors.detail.oauth.cancel': 'Annulla',
'connectors.detail.oauth.deactivate': 'Disattiva',
'connectors.detail.test.running': 'Verifica credenziali…',
'connectors.detail.test.skipped': 'Nessun passaggio di verifica per questo connettore.',
'connectors.detail.test.ok_label': 'OK',
'connectors.detail.test.fail_label': 'Fallito',
'connectors.detail.test.error_saved': 'Salvato, ma le credenziali non hanno superato la verifica — correggile e prova di nuovo.',
'connectors.detail.test.error_verify': 'Verifica fallita — il connettore rimane disabilitato finché le credenziali non vengono corrette.',
'connectors.error.no_connector': 'Nessun connettore chiamato "{name}" è disponibile per te.',
// ── Plugin ──────────────────────────────────────────────────────────────────
'plugins.loading': 'Caricamento…',
'plugins.empty.manage': 'Nessun plugin registrato.',
'plugins.enabled': 'Abilitato',
'plugins.save_config': 'Salva configurazione',
'plugins.saved': 'Salvato.',
'plugin_page.loading': 'Caricamento…',
'plugin_page.unavailable': 'Pagina non disponibile (plugin disabilitato o pagina non concessa).',
'plugins.badge.user_page': 'pagina utente',
'plugins.access.desc': "Chi può vedere e usare questo plugin. L'accesso si concede dalla pagina della singola persona, accanto ai suoi connettori. Gli amministratori hanno sempre accesso.",
'plugins.access.nobody': 'Nessuno ha ancora accesso a questo plugin.',
'plugins.access.manage': 'Gestisci gli accessi da Utenti',
'plugins.error.required': '"{field}" è obbligatorio.',
'plugins.catalog.configure': 'Configura',
'plugins.health.ok': 'attivo',
'plugins.health.off': 'spento',
'plugins.health.needs_config': 'da configurare',
'plugins.health.not_running': 'non in esecuzione',
'plugins.badge.instance_config': 'impostazioni istanza',
'plugins.detail.back': 'Torna ai plugin',
'plugins.detail.config.title': 'Configurazione istanza',
'plugins.detail.config.empty': 'Questo plugin non ha impostazioni di istanza.',
'plugins.detail.config.custom_page': 'Questo plugin ha una propria pagina di configurazione.',
'plugins.detail.config.open': 'Apri configurazione',
'plugins.detail.access.title': 'Accesso utenti',
'plugins.detail.not_found': 'Nessun plugin chiamato "{id}".',
// ── Provider ────────────────────────────────────────────────────────────────
'providers.title': 'Provider',
'providers.add': 'Aggiungi',
'providers.add_first': 'Aggiungi il primo provider',
'providers.empty': 'Nessun provider configurato.',
'providers.count': '{n}',
'providers.card.models_title': 'Modelli che usano questo provider',
'providers.card.api_key_configured': 'Chiave API configurata',
'providers.card.api_key_missing': 'Chiave API mancante',
'providers.card.edit': 'Modifica',
'providers.card.delete': 'Elimina',
'providers.card.base_url': 'URL base',
'providers.modal.add': 'Aggiungi provider',
'providers.modal.edit': 'Modifica provider',
'providers.modal.name': 'Nome',
'providers.modal.name_ph': 'es. Il mio Anthropic',
'providers.modal.type': 'Tipo',
'providers.modal.api_key': 'Chiave API',
'providers.modal.api_key_ph': 'Lascia vuoto per mantenere la chiave esistente',
'providers.modal.base_url': 'URL base',
'providers.modal.base_url_ollama': 'http://localhost:11434',
'providers.modal.base_url_oai': 'http://localhost:1234/v1',
'providers.modal.description': 'Descrizione',
'providers.modal.description_optional': '(opzionale)',
'providers.modal.cancel': 'Annulla',
'providers.modal.saving': 'Salvataggio…',
'providers.modal.save_changes': 'Salva modifiche',
'providers.modal.add_provider': 'Aggiungi provider',
'providers.confirm.delete': 'Eliminare il provider "{name}"? Tutti i modelli associati verranno eliminati.',
// ── Agenti di sistema ───────────────────────────────────────────────────────
'system_agents.title': 'Agenti di sistema',
'system_agents.subtitle': 'Agenti in background che vengono eseguiti a intervalli regolari, senza che tu debba chiedere nulla. Ognuno lavora sui tuoi dati e avvisa te direttamente; le esecuzioni qui sotto sono le tue e nessun altro le vede.',
'system_agents.loading': 'Caricamento…',
'system_agents.empty': 'Nessuna esecuzione.',
'system_agents.empty_hint': 'Un\'esecuzione viene registrata solo quando ci sono nuovi eventi da esaminare.',
'system_agents.total': '{n} totale',
'system_agents.refresh': 'Aggiorna',
'system_agents.table.agent': 'Agente',
'system_agents.table.started': 'Iniziata',
'system_agents.table.status': 'Esito',
'system_agents.table.duration': 'Durata',
'system_agents.table.result': 'Risultato',
'system_agents.status.running': 'In corso',
'system_agents.status.completed': 'Completata',
'system_agents.status.failed': 'Fallita',
'system_agents.status.cancelled': 'Annullata',
'system_agents.stat.events_processed': 'eventi',
'system_agents.stat.notifications_emitted': 'notifiche',
'system_agents.stat.notes_examined': 'note lette',
'system_agents.pagination': 'Pagina {cur} di {pages} — {total} esecuzioni',
'system_agents.tab.all': 'Tutti',
'system_agents.settings': 'Impostazioni',
'system_agents.run.now': 'Esegui ora',
'system_agents.run.hint': 'Esegue subito una passata per te, senza aspettare la pianificazione.',
'system_agents.run.started': 'Avviato — compare nel registro qui sotto e ti avvisa quando ha finito.',
'system_agents.run.nothing': 'Al momento non c\'è nulla da esaminare, quindi non è stata avviata nessuna esecuzione.',
'system_agents.agent.event-triage.name': 'Triage eventi',
'system_agents.agent.event-triage.desc': 'Legge gli eventi che arrivano dai tuoi connettori — nuove email, modifiche al calendario, messaggi in arrivo — decide quali meritano la tua attenzione e ti avvisa solo di quelli. Viene eseguito per una persona alla volta e legge solo gli eventi di quella persona.',
'system_agents.agent.memory-lint-private.name': 'Manutenzione memoria privata',
'system_agents.agent.memory-lint-private.desc': 'Un controllo periodico della tua memoria. Cerca fatti la cui data è ormai passata, domande che ti sono state poste e a cui non hai mai risposto, note di cui l\'indice ha perso traccia e duplicati da unire — poi ti dice cosa ha trovato. Non modifica mai le tue note.',
'system_agents.agent.memory-lint-shared.name': 'Manutenzione memoria condivisa',
'system_agents.agent.memory-lint-shared.desc': 'Lo stesso controllo sulla memoria condivisa del gruppo, più il problema che esiste solo lì: qualcosa di privato scritto dove tutti i membri possono leggerlo. La memoria condivisa non appartiene a nessuno, quindi questo agente viene eseguito come amministratore e segnala a lui. Non modifica mai nulla.',
// ── File viewer ──────────────────────────────────────────────────────────────
'fv.back': 'Indietro',
'fv.download': 'Scarica',
'fv.mode_preview': 'Mostra anteprima',
'fv.mode_source': 'Mostra sorgente',
'fv.binary_unavailable': 'Anteprima non disponibile per questo tipo di file.',
'fv.latex_failed': 'Compilazione LaTeX fallita — mostra il sorgente',
'fv.tab_view': 'Visualizza',
'fv.tab_edit': 'Modifica',
'fv.dirty_badge': 'Modifiche non salvate',
'fv.dirty_warn': 'Scartare le modifiche non salvate?',
'fv.save': 'Salva',
'fv.saving': 'Salvataggio…',
'fv.cancel': 'Annulla',
'fv.edit_placeholder': 'Scrivi in Markdown…',
'fv.edit_hint': 'Passa a Visualizza per l\'anteprima',
'fv.conflict_title': 'Il file è stato modificato da remoto mentre stavi scrivendo. Cosa vuoi fare?',
'fv.conflict_reload': 'Ricarica remoto',
'fv.conflict_copy': 'Copia le mie, poi ricarica',
'fv.conflict_overwrite': 'Sovrascrivi',
// ── Marketplace ──────────────────────────────────────────────────────────────
'marketplace.title': 'Marketplace',
'marketplace.btn.connectors': 'Connettori',
'marketplace.action.refetch': 'Ricarica il feed',
'marketplace.not_admin': 'Il marketplace è gestito dall\'amministratore.',
'marketplace.not_admin_link': 'I connettori installati dall\'amministratore appaiono nella pagina Connettori.',
'marketplace.desc': 'Connettori verificati che puoi aggiungere al catalogo di questo computer. Installare non attiva nulla — rende un connettore disponibile.',
'marketplace.feed_unreachable': 'Marketplace irraggiungibile — {error}',
'marketplace.loading': 'Caricamento feed…',
'marketplace.filter.search': 'Cerca connettori…',
'marketplace.filter.scope': 'Ambito',
'marketplace.filter.type': 'Tipo',
'marketplace.filter.all': 'Tutti',
'marketplace.filter.global': 'Globale',
'marketplace.filter.per_user': 'Per utente',
'marketplace.filter.remote': 'Remoto',
'marketplace.filter.local': 'Locale',
'marketplace.grid.empty_feed': 'Il feed è vuoto.',
'marketplace.grid.no_match': 'Nessun connettore corrisponde a questi filtri.',
'marketplace.card.installed': 'installato',
'marketplace.card.scope_global': 'globale',
'marketplace.card.scope_per_user': 'per utente',
'marketplace.card.type_script': 'script locale',
'marketplace.card.type_remote': 'remoto',
'marketplace.card.files_one': '{n} file, verificato SHA-256 all\'installazione',
'marketplace.card.files_other': '{n} file, verificati SHA-256 all\'installazione',
'marketplace.card.oauth_scopes_one': 'Richiede {n} ambito OAuth',
'marketplace.card.oauth_scopes_other': 'Richiede {n} ambiti OAuth',
'marketplace.card.installing': 'Installazione…',
'marketplace.card.reinstall': 'Reinstalla',
'marketplace.card.install': 'Installa',
'marketplace.card.homepage': 'Homepage',
'marketplace.confirm.install_warn': 'Questo mette codice sul computer:\n • {n} file, ciascuno verificato con SHA-256\n • installato in ./connectors/{id}/',
'marketplace.confirm.install_body':'Installare "{name}" nel catalogo?\n\nInstallare non lo attiva.',
// ── Utenti ──────────────────────────────────────────────────────────────────
'users.title': 'Utenti',
'users.loading': 'Caricamento…',
'users.empty': 'Nessun utente.',
'users.count_one': '{n} utente',
'users.count_other': '{n} utenti',
'users.btn.new': 'Nuovo utente',
'users.table.username': 'Nome utente',
'users.table.display_name': 'Nome visualizzato',
'users.table.role': 'Ruolo',
'users.table.db': 'DB',
'users.table.status': 'Stato',
'users.badge.encrypted': 'Cifrato',
'users.badge.cleartext': 'In chiaro',
'users.badge.active': 'Attivo',
'users.badge.inactive': 'Inattivo',
'users.action.delete': 'Elimina',
'users.detail.back': 'Utenti',
'users.detail.profile': 'Profilo',
'users.detail.connectors': 'Connettori',
'users.detail.plugins': 'Plugin',
'users.detail.security': 'Sicurezza',
'users.detail.saved': 'Salvato',
'users.detail.delete_hint': 'Elimina questo utente, il suo database e tutta la cronologia delle conversazioni.',
'users.detail.no_such': 'Utente non trovato.',
'users.conn.globals': 'Connettori condivisi',
'users.conn.catalog': 'Connettori personali',
'users.conn.hint_global': 'Disponibile per questo utente non appena lo abiliti.',
'users.conn.hint_catalog': 'Questo utente può attivarli e accedere da sé dalla propria pagina Connettori.',
'users.conn.empty': 'Nessun connettore ancora registrato.',
'users.conn.disabled': 'disabilitato',
'users.plug.hint': "Seleziona i plugin che questo utente può vedere e usare. Un plugin disabilitato può essere concesso ora: comparirà appena lo abiliti.",
'users.plug.empty': 'Nessun plugin disponibile.',
'users.plug.admin_note': 'Gli amministratori possono usare qualsiasi plugin abilitato, indipendentemente da ciò che è selezionato qui.',
'users.modal.create_title': 'Nuovo utente',
'users.modal.username': 'Nome utente',
'users.modal.display_name': 'Nome visualizzato',
'users.modal.optional': '(opzionale)',
'users.modal.role': 'Ruolo',
'users.modal.birthdate': 'Data di nascita',
'users.modal.sex': 'Sesso',
'users.modal.notes': 'Note',
'users.modal.notes_hint': 'Incluse nel profilo mostrato agli agenti.',
'users.modal.password': 'Password',
'users.modal.new_password': 'Nuova password',
'users.modal.encrypt': 'Cifra cronologia conversazioni',
'users.modal.encrypt_warn': 'Attenzione: se la password viene persa, la cronologia delle conversazioni non sarà mai più recuperabile.',
'users.modal.active': 'Attivo',
'users.modal.only_cleartext': 'Funziona solo per utenti in chiaro (non cifrati).',
'users.modal.cancel': 'Annulla',
'users.modal.create_btn': 'Crea',
'users.modal.save_btn': 'Salva',
'users.modal.reset_btn': 'Reimposta',
'users.error.required_username_pw': 'Nome utente e password sono obbligatori.',
'users.error.required_username': 'Il nome utente è obbligatorio.',
'users.error.password_empty': 'La password non può essere vuota.',
'users.confirm.delete': 'Eliminare l\'utente "{username}"? Questo cancella definitivamente il database e tutta la cronologia delle conversazioni.',
// ── Connettori: aggiunta / inserimento manuale ───────────────────────────────
'connectors.add.btn': 'Aggiungi connettore',
'connectors.add.marketplace': 'Dal marketplace',
'connectors.add.marketplace_desc': 'Connettori verificati, file controllati tramite SHA-256.',
'connectors.add.manual': 'Manualmente',
'connectors.add.manual_desc': 'Fornisci tu la configurazione e te ne assumi la responsabilità.',
'connectors.action.remove': 'Rimuovi',
'connectors.new.back': 'Indietro',
'connectors.new.title': 'Aggiungi connettore manualmente',
'connectors.new.script_warn': 'Uno script locale esegue codice su questo computer. Niente lo verifica — a differenza del marketplace, non c\'è un digest da controllare.',
'connectors.new.name': 'Nome',
'connectors.new.name_hint': 'slug',
'connectors.new.scope': 'Ambito',
'connectors.new.type': 'Tipo',
'connectors.new.transport': 'Trasporto',
'connectors.new.command': 'Comando',
'connectors.new.command_ph': 'python3',
'connectors.new.script_path': 'Percorso script',
'connectors.new.script_path_hint': 'come /, sotto ./connectors',
'connectors.new.url': 'URL',
'connectors.new.args': 'Argomenti',
'connectors.new.args_hint': 'uno per riga',
'connectors.new.config_schema': 'Chiavi segrete/env richieste',
'connectors.new.config_schema_hint': 'virgola/nuova riga',
'connectors.new.auth': 'Auth',
'connectors.new.friendly': 'Nome visualizzato',
'connectors.new.desc': 'Descrizione',
'connectors.new.desc_hint': 'l\'LLM legge questo quando decide se attivare il connettore',
'connectors.new.cancel': 'Annulla',
'connectors.new.save': 'Aggiungi connettore',
'connectors.new.error_name': 'Il nome è obbligatorio.',
'connectors.confirm.remove': 'Rimuovere "{name}"?\n\nLe attivazioni già fatte continueranno a funzionare.',
// ── Cron ────────────────────────────────────────────────────────────────────
'cron.title': 'Processi pianificati (Cron)',
'cron.count_one': '{n} processo',
'cron.count_other': '{n} processi',
'cron.empty.title': 'Nessun processo cron ricorrente.',
'cron.empty.hint': 'Chiedi all\'agente di crearne uno con execute_task.',
'cron.badge.running': 'in esecuzione',
'cron.badge.disabled': 'disabilitato',
'cron.badge.idle': 'inattivo',
'cron.action.delete': 'Elimina',
'cron.card.label_agent': 'Agente',
'cron.card.label_last_run': 'Ultima esecuzione',
'cron.card.label_next_run': 'Prossima esecuzione',
'cron.card.enabled': 'Abilitato',
'cron.card.disabled': 'Disabilitato',
'cron.confirm.delete': 'Eliminare il processo "{title}"?',
// ── Comuni ─────────────────────────────────────────────────────────────────
'common.save': 'Salva',
'common.saving': 'Salvataggio…',
'common.cancel': 'Annulla',
'common.loading': 'Caricamento…',
'common.saved': 'Salvato',
// ── Cartelle condivise (blueprint §6) ────────────────────────────────────────
'nav.shared_folders': 'Cartelle condivise',
'sf.title': 'Cartelle condivise',
'sf.count': '{n} cartella',
'sf.count_plural': '{n} cartelle',
'sf.new': 'Nuova cartella',
'sf.loading': 'Caricamento…',
'sf.empty': 'Ancora nessuna cartella condivisa.',
'sf.empty_hint': 'Creane una per condividere file con gli altri membri.',
'sf.note.propagation': 'Aggiungere o rimuovere un membro viene applicato subito al suo ambiente.',
'sf.members': 'Membri',
'sf.no_members': 'Ancora nessun membro — solo tu (admin) puoi accedere a questa cartella.',
'sf.no_desc': 'Ancora nessuna descrizione — aggiungine una così l’assistente sa cosa tenerci.',
'sf.all_added': 'Tutti i membri disponibili sono già stati aggiunti.',
'sf.choose_user': 'Scegli un membro…',
'sf.add': 'Aggiungi',
'sf.remove': 'Rimuovi',
'sf.edit_desc': 'Modifica descrizione',
'sf.delete': 'Elimina',
'sf.access.label': 'Accesso',
'sf.access.read': 'Lettura',
'sf.access.write': 'Scrittura',
'sf.access.readonly': 'Sola lettura',
'sf.access.readwrite': 'Lettura e scrittura',
'sf.confirm.delete': 'Eliminare la cartella condivisa “{name}”?\n\nI membri perderanno l’accesso. I file su disco restano intatti.',
'sf.confirm.remove_member': 'Rimuovere {name} da “{folder}”?',
'sf.error.name': 'Il nome della cartella è obbligatorio.',
'sf.form.new': 'Nuova cartella condivisa',
'sf.form.edit': 'Modifica “{name}”',
'sf.form.name': 'Nome cartella',
'sf.form.name_hint': '(lettere, numeri, trattini — niente slash)',
'sf.form.name_ph': 'documenti',
'sf.form.name_desc': 'Diventa shared/ nello spazio di ogni membro. Non potrà essere rinominata.',
'sf.form.desc': 'A cosa serve?',
'sf.form.desc_desc': 'L’assistente legge questo testo per decidere cosa salvarci e quando consultarla. Scrivilo come istruzioni per l’assistente.',
'sf.form.desc_ph': 'Bollette, contratti e garanzie di casa. Salva qui i PDF delle utenze e le scadenze; consulta qui quando ti chiedono di una fattura o una garanzia.',
'sf.form.create': 'Crea',
'sf.form.save': 'Salva',
'sf.form.cancel': 'Annulla',
};