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', 'nav.collapse_sidebar': 'Comprimi il menu', 'nav.expand_sidebar': 'Espandi il menu', // ── 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.new_tab': 'Nuova chat', 'chat.new_tab.loading': 'Caricamento…', '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 non chiedere più per questo stesso strumento per 15 minuti', 'approval.bypass_all': 'Consenti e non chiedere più per questo stesso strumento per il resto della conversazione', // ── 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', };