Files
Skald-Circle/web/i18n/it.js
T

1146 lines
67 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
// ── Navigazione ────────────────────────────────────────────────────────────
'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.plugin_catalog': 'Catalogo plugin',
'nav.catalog': 'Catalogo',
'nav.config': 'Impostazioni',
'nav.llm_requests': 'Richieste LLM',
'nav.tic': 'Sessioni TIC',
// ── 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',
'chat.send': 'Invia',
'chat.stop': 'Ferma',
'chat.thinking': 'Sto pensando…',
'chat.attach': 'Allega file',
'chat.new_session': 'Nuova conversazione',
'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).',
// ── 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.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. main',
'llmr.filter.source': 'Sorgente',
'llmr.filter.source_ph': 'es. web, tic, 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',
// ── Session detail ──────────────────────────────────────────────────────────
'session.back': 'Indietro',
'session.loading': 'Caricamento sessione…',
'session.no_session': 'Nessuna sessione caricata.',
'session.no_session_hint': 'Naviga su <code>#session/{id}</code> 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.set.interface.name': 'Interfaccia',
'config.set.interface.desc': 'Aspetto e stile dell\'interfaccia web.',
'config.set.tic_agent.name': 'Agente TIC',
'config.set.tic_agent.desc': 'TIC è un agente in background che monitora tutti gli eventi asincroni generati dai server MCP connessi (nuove email, aggiornamenti del calendario, messaggi WhatsApp, ecc.). Legge le regole di notifica da data/notifications.md e la memoria per decidere — tramite una chiamata LLM — quali eventi vale la pena segnalare. Le notifiche rilevanti vengono inoltrate all\'agente predefinito impostato tramite /sethome.',
'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.tic__enabled.name': 'Attivo',
'config.prop.tic__enabled.desc': 'Attiva o disattiva l\'agente TIC. Quando disattivato, nessun evento MCP viene elaborato.',
'config.prop.tic__security_group.name': 'Gruppo di sicurezza',
'config.prop.tic__security_group.desc': 'Gruppo di permessi strumenti applicato a ogni sessione dell\'agente TIC. Lascia vuoto per usare il gruppo predefinito.',
'config.prop.tic__interval_minutes.name': 'Intervallo di controllo (minuti)',
'config.prop.tic__interval_minutes.desc': 'Ogni quanto TIC viene eseguito, in minuti. Lascia vuoto per usare il valore da config.yml (tic.interval_secs).',
// ── 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}"?\nTutti i ticket verranno eliminati.',
'projects.modal.title_edit': 'Modifica progetto',
'projects.modal.title_new': 'Nuovo progetto',
'projects.modal.name': 'Nome',
'projects.modal.name_ph': 'Mio progetto',
'projects.modal.path': 'Percorso',
'projects.modal.path_ph': '/percorso/del/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',
// ── Project board ───────────────────────────────────────────────────────────
'project_board.back': 'Progetti',
'project_board.open_chat': 'Apri chat',
'project_board.new_ticket': 'Nuovo ticket',
'project_board.tab.tickets': 'Ticket',
'project_board.section.running': 'In esecuzione',
'project_board.section.running_empty': 'Nessun ticket in esecuzione',
'project_board.section.todo': 'Da fare',
'project_board.section.todo_empty': 'Nessun ticket da fare',
'project_board.section.completed': 'Completati',
'project_board.section.completed_empty': 'Nessun ticket completato',
'project_board.ticket.start': 'Avvia',
'project_board.ticket.running': 'In esecuzione…',
'project_board.ticket.reset': 'Reimposta',
'project_board.ticket.result': 'Risultato',
'project_board.ticket.error': 'Errore',
'project_board.ticket.no_output': '(nessun output)',
'project_board.ticket.no_error': '(nessun errore)',
'project_board.modal.title': 'Nuovo ticket',
'project_board.modal.title_label': 'Titolo',
'project_board.modal.title_ph': 'Cosa bisogna fare',
'project_board.modal.desc_label': 'Descrizione / Prompt',
'project_board.modal.desc_ph': 'Istruzioni dettagliate per l\'agente…',
'project_board.modal.agent': 'Agente',
'project_board.modal.security_group':'Gruppo di sicurezza',
'project_board.modal.inherit': '— eredita dal progetto —',
'project_board.modal.cancel': 'Annulla',
'project_board.modal.saving': 'Salvataggio…',
'project_board.modal.create': 'Crea',
'project_board.confirm.delete': 'Eliminare il ticket "{title}"?',
// ── 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.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, sessioni TIC) 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 <strong>Plugin</strong> sono in sola lettura — gestiti automaticamente dal plugin che li ha registrati.',
'models.readonly_plugin_full': 'I modelli con badge <strong>Plugin</strong> 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.scope': 'Ambito',
'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 <code>client</code> di un agente). Deve essere unico.',
'models.no_providers_llm': 'Aggiungi prima un <strong>Provider</strong>, poi torna qui per aggiungere modelli.',
'models.no_providers_transcribe': 'Nessun provider supporta ancora la trascrizione. Aggiungi prima un provider <strong>OpenAI</strong> o <strong>OpenRouter</strong>.',
'models.no_providers_image': 'Nessun provider supporta ancora la generazione immagini. Aggiungi prima un provider <strong>OpenRouter</strong>.',
'models.no_providers_tts': 'Nessun provider supporta ancora la sintesi vocale. Aggiungi prima un provider <strong>OpenAI</strong>.',
'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 <strong>Aggiungi</strong> per aggiungere un modello cloud.',
'models.list_empty_whisper': 'Attiva il plugin <strong>Whisper Local</strong> 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: <code>alloy</code>/<code>echo</code>/<code>nova</code>… (predefinito <code>alloy</code> se vuoto); Gemini: <code>Kore</code>/<code>Puck</code>/<code>Zephyr</code>…; 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 <code>pcm</code>.',
'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 <span class="text-muted fw-normal">(usato come provider_id nello strumento LLM)</span>',
'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 <code>*</code> come wildcard finale, es. <code>mcp__whatsapp__*</code>',
'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 <code>*</code> come wildcard.',
'approval.form.action': 'Azione',
'approval.form.priority': 'Priorità',
'approval.form.priority_override_hint': 'Deve essere <strong>&lt; 0</strong> (es. 10)',
'approval.form.priority_lowprio_hint': 'Deve essere <strong>1 {max}</strong>',
'approval.form.source': 'Origine',
'approval.form.source_any': 'Qualsiasi',
'approval.form.agent_id': 'ID agente',
'approval.form.agent_id_ph': 'main (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à 1999998 · 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 <strong>{n}</strong> regola{s} da <em>{name}</em> 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': '<strong>I gruppi di permessi</strong> sono insiemi nominati di regole di approvazione. Il <strong>Profilo agente</strong> attivo di una sessione determina quale gruppo si applica — le regole di quel gruppo vengono valutate per prime, con il gruppo <strong>Predefinito</strong> come fallback.',
'security.banner.text2': 'Clicca un gruppo per visualizzare e gestire le sue regole. Il gruppo <strong>Predefinito</strong> 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.badge.simple': 'Semplice',
'roles.badge.full': 'Completa',
'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 <code>ui_mode</code> nell\'attrs JSON qui sotto.',
'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.scope': 'Ambito',
'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.table.scope': 'Ambito',
'agents.banner.title': '<strong>Vista sola lettura.</strong> Gli agenti sono definiti da file in <code>agents/</code> — per aggiungere, rimuovere o modificare un agente, modifica il corrispondente file <code>AGENT.md</code> in quella directory.',
'agents.banner.text': 'Puoi anche chiedere a <strong>Copilot</strong> (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.btn.catalog': 'Catalogo',
'connectors.btn.marketplace': 'Marketplace',
'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.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.detail.access.title': 'Chi può usarlo',
'connectors.detail.access.desc': 'Selezionando un utente gli vengono concessi gli strumenti di questo connettore. Salvando si sostituisce l\'intera lista.',
'connectors.detail.access.empty': 'Nessun utente.',
'connectors.detail.access.save': 'Salva accesso',
'connectors.error.no_connector': 'Nessun connettore chiamato "{name}" è disponibile per te.',
// ── Plugin ──────────────────────────────────────────────────────────────────
'plugins.title': 'Plugin',
'plugins.loading': 'Caricamento…',
'plugins.section.mine': 'I miei plugin',
'plugins.section.manage': 'Gestione plugin',
'plugins.empty.mine': 'Nessun plugin disponibile per te.',
'plugins.empty.ask_admin': "Chiedi a un amministratore di concederti l'accesso.",
'plugins.empty.manage': 'Nessun plugin registrato.',
'plugins.status.active': 'attivo',
'plugins.status.running': 'in esecuzione',
'plugins.status.enabled': 'abilitato',
'plugins.status.off': 'spento',
'plugins.enabled': 'Abilitato',
'plugins.save': 'Salva',
'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.yes': 'sì',
'plugins.no': 'no',
'plugins.badge.user_config': 'impostazioni per utente',
'plugins.access.btn': 'Accesso utenti',
'plugins.access.desc': "Seleziona chi può vedere e configurare questo plugin. Il salvataggio sostituisce l'intera lista.",
'plugins.access.empty': 'Nessun utente.',
'plugins.access.save': 'Salva accesso',
'plugins.error.required': '"{field}" è obbligatorio.',
'plugins.catalog.title': 'Catalogo plugin',
'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 al catalogo',
'plugins.detail.config.title': 'Configurazione istanza',
'plugins.detail.config.empty': 'Questo plugin non ha impostazioni di istanza.',
'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.',
// ── TIC Sessions ────────────────────────────────────────────────────────────
'tic.title': 'Sessioni TIC',
'tic.loading': 'Caricamento…',
'tic.empty': 'Nessuna sessione TIC trovata.',
'tic.total': '{n} totale',
'tic.refresh': 'Aggiorna',
'tic.table.agent': 'Agente',
'tic.table.started': 'Iniziata',
'tic.table.messages': 'Messaggi',
'tic.table.last_activity':'Ultima attività',
'tic.pagination': 'Pagina {cur} di {pages} — {total} sessioni',
// ── 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',
// ── Marketplace ──────────────────────────────────────────────────────────────
'marketplace.title': 'Marketplace',
'marketplace.btn.catalog': 'Catalogo',
'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 <a href="#connectors">Connettori</a>.',
'marketplace.desc': 'Connettori verificati che puoi aggiungere al catalogo di questo computer. Installare non attiva nulla — rende un connettore <em>disponibile</em>.',
'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.reset_pw': 'Reimposta password',
'users.action.edit': 'Modifica',
'users.action.delete': 'Elimina',
'users.modal.create_title': 'Nuovo utente',
'users.modal.edit_title': 'Modifica {username}',
'users.modal.reset_title': 'Reimposta password — {username}',
'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': '<strong>Attenzione:</strong> 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.',
// ── Catalogo ────────────────────────────────────────────────────────────────
'catalog.title': 'Catalogo connettori',
'catalog.loading': 'Caricamento…',
'catalog.not_admin': 'Il catalogo è gestito dall\'amministratore.',
'catalog.not_admin_link': 'Quello che puoi attivare è nella pagina <a href="#connectors">Connettori</a>.',
'catalog.desc': 'Cosa offre questo computer. Niente qui è in esecuzione — una voce globale necessita comunque di essere abilitata, una per utente necessita che ogni utente la attivi, entrambe nella pagina <a href="#connectors">Connettori</a>.',
'catalog.empty.title': 'Il catalogo è vuoto.',
'catalog.empty.hint': 'Aggiungi un connettore dal marketplace per iniziare.',
'catalog.empty.action': 'Sfoglia il marketplace',
'catalog.btn.add': 'Aggiungi connettore',
'catalog.dropdown.marketplace': 'Dal marketplace',
'catalog.dropdown.marketplace_desc': 'Connettori verificati, file controllati tramite SHA-256.',
'catalog.dropdown.manual': 'Manualmente',
'catalog.dropdown.manual_desc': 'Fornisci tu la configurazione e te ne assumi la responsabilità.',
'catalog.table.connector': 'Connettore',
'catalog.table.scope': 'Ambito',
'catalog.table.type': 'Tipo',
'catalog.table.auth': 'Auth',
'catalog.badge.global': 'globale',
'catalog.badge.per_user': 'per utente',
'catalog.badge.local_script':'script locale',
'catalog.badge.remote': 'remoto',
'catalog.action.remove': 'Rimuovi dal catalogo',
'catalog.new.back': 'Indietro',
'catalog.new.title': 'Aggiungi connettore manualmente',
'catalog.new.script_warn': '<i class="bi bi-exclamation-triangle me-1"></i>Uno script locale esegue codice su questo computer. Niente lo verifica — a differenza del marketplace, non c\'è un digest da controllare.',
'catalog.new.name': 'Nome',
'catalog.new.name_hint': 'slug',
'catalog.new.scope': 'Ambito',
'catalog.new.type': 'Tipo',
'catalog.new.transport': 'Trasporto',
'catalog.new.command': 'Comando',
'catalog.new.command_ph': 'python3',
'catalog.new.script_path': 'Percorso script',
'catalog.new.script_path_hint': 'come <connettore>/<file>, sotto ./connectors',
'catalog.new.url': 'URL',
'catalog.new.args': 'Argomenti',
'catalog.new.args_hint': 'uno per riga',
'catalog.new.config_schema': 'Chiavi segrete/env richieste',
'catalog.new.config_schema_hint': 'virgola/nuova riga',
'catalog.new.auth': 'Auth',
'catalog.new.friendly': 'Nome visualizzato',
'catalog.new.desc': 'Descrizione',
'catalog.new.desc_hint': 'l\'LLM legge questo quando decide se attivare il connettore',
'catalog.new.cancel': 'Annulla',
'catalog.new.save': 'Aggiungi al catalogo',
'catalog.error.name': 'Il nome è obbligatorio.',
'catalog.confirm.delete': 'Rimuovere "{name}" dal catalogo?\n\nTutto ciò che è già stato attivato continuerà 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 <code>execute_task</code>.',
'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ì lassistente 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 laccesso. 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/<nome> nello spazio di ogni membro. Non potrà essere rinominata.',
'sf.form.desc': 'A cosa serve?',
'sf.form.desc_desc': 'Lassistente legge questo testo per decidere cosa salvarci e quando consultarla. Scrivilo come istruzioni per lassistente.',
'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',
};