Files
Skald-Circle/web/i18n/it.js
T
Daniele 027d815b66
Nightly Build / build (push) Canceled after 10m54s
feat(viewer): preview word documents (.docx/.doc/.odt/.rtf) as PDF
The file viewer converts word-processor documents to PDF server-side via
LibreOffice (skald_core::docx::DocxConverter), mirroring the LaTeX pipeline
but content-hash cached: the format is self-contained, so there is no
dependency graph and the file watcher needs no expansion. Container-only
documents are shuttled out and converted on the host. With no LibreOffice
installed the viewer says so and falls back to download-only. Downloads
still save the original document, not the preview PDF.
2026-09-08 16:30:13 +01:00

1281 lines
78 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.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.files': 'File',
'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.copy_code': 'Copia codice',
'chat.copied': 'Copiato',
'chat.attach': 'Allega file',
'chat.new_session': 'Nuova conversazione',
'chat.scroll_to_latest': 'Vai agli ultimi messaggi',
'chat.security_group': 'Gruppo di sicurezza',
'chat.view_context.on': 'Stai condividendo quello che hai aperto — clicca per smettere',
'chat.view_context.off': 'Non stai condividendo quello che hai aperto — clicca per condividerlo',
'chat.view_context.title': 'Inviato con il prossimo messaggio',
'chat.view_context.off_title': 'Non condiviso',
'chat.view_context.off_hint': 'L\'assistente non sa quale pagina, cartella o file hai aperto. Accendi l\'occhio per dirglielo.',
'chat.view_context.empty': 'Da questa pagina non c\'è ancora niente da condividere.',
'chat.view_context.chip': 'Cosa avevi aperto ({n})',
'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 <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.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',
// ── File explorer (shared component: projects, Files section) ───────────────
'files.col.name': 'Nome',
'files.col.created': 'Creazione',
'files.col.modified': 'Ultima modifica',
'files.col.size': 'Dimensione',
'files.empty': 'Questa cartella è vuota.',
'files.refresh': 'Aggiorna',
'files.drop': 'Trascina qui i file per caricarli',
'files.btn.new_folder': 'Nuova cartella',
'files.btn.upload': 'Carica',
'files.btn.download': 'Scarica ZIP',
'files.uploading': 'Caricamento…',
'files.action.download': 'Scarica',
'files.action.rename': 'Rinomina',
'files.action.delete': 'Elimina',
'files.confirm.delete_file': 'Eliminare "{name}"?',
'files.confirm.delete_dir': 'Eliminare la cartella "{name}" e tutto il suo contenuto?',
'files.modal.mkdir': 'Nuova cartella',
'files.modal.rename': 'Rinomina "{name}"',
'files.modal.name': 'Nome',
'files.error.name': 'Inserisci un nome valido (senza barre).',
'files.title': 'File',
'files.note.roots': 'Tutto quello che puoi raggiungere: la tua home, le tue due memorie e le cartelle condivise con te. Sono gli stessi percorsi che usa l\'assistente.',
'files.back': 'Tutti i file',
'files.badge.readonly': 'Sola lettura',
'files.error.unknown_path': '"{path}" non è una delle tue cartelle.',
'files.root.home': 'Home',
'files.root.user_memory': 'Memoria personale',
'files.root.shared_memory': 'Memoria condivisa',
'files.root.shared': 'Cartella condivisa',
'files.root.project': 'Progetto',
'files.root.skills': 'Skill',
'files.root.docs': 'Documentazione',
// ── 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 <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.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': '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à 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.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 <code>ui_mode</code> 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': '<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.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.docx_failed': 'Conversione del documento non riuscita',
'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',
'fv.zoom_in': 'Ingrandisci',
'fv.zoom_out': 'Riduci',
'fv.pdf_failed': 'Impossibile visualizzare questo PDF.',
'fv.history': 'Cronologia',
'fv.current': 'attuale',
'fv.version_banner': 'Versione del {date} — sola lettura',
'fv.back_to_current': 'Torna allattuale',
// ── 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 <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.delete': 'Elimina',
'users.detail.back': 'Utenti',
'users.detail.profile': 'Profilo',
'users.detail.connectors': 'Connettori',
'users.detail.plugins': 'Plugin',
'users.detail.triage': 'Triage eventi',
'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.triage.hint': 'Il triage eventi legge gli eventi arrivati dai connettori di questa persona e le segnala quelli che meritano un\'interruzione. Chi riceve molta posta o molti messaggi lo fa partire quasi a ogni passaggio: qui puoi dargli una cadenza più lenta.',
'users.triage.interval': 'Intervallo di controllo (minuti)',
'users.triage.placeholder': 'Predefinito ({n})',
'users.triage.using_default': 'Vuoto: segue l\'impostazione dell\'istanza ({n} min).',
'users.triage.using_override': 'Solo per questo utente. Svuota il campo per tornare all\'impostazione dell\'istanza.',
'users.triage.invalid': 'Inserisci un numero intero di minuti, oppure lascia il campo vuoto.',
'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': '<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.',
// ── 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': '<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.',
'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 <connettore>/<file>, 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 <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',
'common.create': 'Crea',
// ── 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',
};