1199 lines
70 KiB
JavaScript
1199 lines
70 KiB
JavaScript
export default {
|
||
// ── Navigazione ────────────────────────────────────────────────────────────
|
||
'nav.section.workspace': 'Il tuo spazio',
|
||
'nav.section.extensions': 'Estensioni',
|
||
'nav.section.config': 'Configurazione',
|
||
'nav.section.dev': 'Sviluppo',
|
||
'nav.chat': 'Chat',
|
||
'nav.inbox': 'Richieste',
|
||
'nav.dashboard': 'Dashboard',
|
||
'nav.projects': 'Progetti',
|
||
'nav.tasks': 'Gestione attività',
|
||
'nav.tasks.running': 'Attività in corso',
|
||
'nav.tasks.cron': 'Attività ricorrenti',
|
||
'nav.tasks.scheduled': 'Attività pianificate',
|
||
'nav.tasks.history': 'Cronologia',
|
||
'nav.models': 'Modelli',
|
||
'nav.providers': 'Provider',
|
||
'nav.security': 'Sicurezza',
|
||
'nav.agents': 'Agenti',
|
||
'nav.users': 'Utenti',
|
||
'nav.roles': 'Ruoli',
|
||
'nav.connectors': 'Connettori',
|
||
'nav.plugins': 'Plugin',
|
||
'nav.plugin_catalog': 'Catalogo plugin',
|
||
'nav.catalog': 'Catalogo connettori',
|
||
'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',
|
||
'mobile.settings.theme': 'Tema',
|
||
'mobile.settings.light': 'Chiaro',
|
||
'mobile.settings.dark': 'Scuro',
|
||
'mobile.settings.language': 'Lingua',
|
||
'chat.send': 'Invia',
|
||
'chat.stop': 'Ferma',
|
||
'chat.thinking': 'Sto pensando…',
|
||
'chat.reasoning': 'Ragionamento…',
|
||
'chat.attach': 'Allega file',
|
||
'chat.new_session': 'Nuova conversazione',
|
||
'chat.scroll_to_latest': 'Vai agli ultimi messaggi',
|
||
'chat.security_group': 'Gruppo di sicurezza',
|
||
'chat.collapse': 'Nascondi la chat',
|
||
'chat.close_tab': 'Chiudi scheda',
|
||
'chat.privacy': 'Privata',
|
||
'chat.privacy.hint': 'Solo tu puoi vedere questa conversazione. Condividere qualcosa con il gruppo richiede sempre prima un\'approvazione.',
|
||
'chat.suggest.1': 'Cosa sai fare?',
|
||
'chat.suggest.2': 'Aiutami a pianificare la giornata',
|
||
'chat.suggest.3': 'Raccontami una storia',
|
||
'chat.suggest.4': 'Cosa ricordi di me?',
|
||
'chat.rejected': 'Negata.',
|
||
'chat.rejected_by_user': 'Negata dall\'utente.',
|
||
'chat.truncated': 'Risposta troncata dal limite di token (↓{tokens} tok).',
|
||
|
||
// ── 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, 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',
|
||
'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.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}"? Verrà rimosso per tutti coloro con cui è condiviso.',
|
||
'projects.badge.owned': 'Tuo',
|
||
'projects.badge.shared_by': 'Condiviso da {name}',
|
||
'projects.badge.readonly': 'Sola lettura',
|
||
|
||
'projects.modal.title_edit': 'Modifica progetto',
|
||
'projects.modal.title_new': 'Nuovo progetto',
|
||
'projects.modal.name': 'Nome',
|
||
'projects.modal.name_ph': 'Mio progetto',
|
||
'projects.modal.desc': 'Descrizione',
|
||
'projects.modal.desc_ph': 'Di cosa tratta questo progetto',
|
||
'projects.modal.cancel': 'Annulla',
|
||
'projects.modal.saving': 'Salvataggio…',
|
||
'projects.modal.save': 'Salva',
|
||
'projects.modal.create': 'Crea',
|
||
|
||
// ── Condivisione progetto ───────────────────────────────────────────────────
|
||
'projects.share.title': 'Condivisione',
|
||
'projects.share.owner': 'proprietario',
|
||
'projects.share.choose_user': 'Scegli una persona…',
|
||
'projects.share.add': 'Aggiungi',
|
||
'projects.share.all_added': 'Tutti hanno già accesso.',
|
||
'projects.share.remove': 'Rimuovi',
|
||
'projects.share.access.read': 'Lettura',
|
||
'projects.share.access.write': 'Scrittura',
|
||
'projects.share.access.readonly': 'Sola lettura',
|
||
'projects.share.access.readwrite':'Lettura e scrittura',
|
||
'projects.tabs.files': 'File',
|
||
'projects.tabs.sharing': 'Condivisione',
|
||
'projects.files.col.name': 'Nome',
|
||
'projects.files.col.created': 'Creazione',
|
||
'projects.files.col.modified': 'Ultima modifica',
|
||
'projects.files.col.size': 'Dimensione',
|
||
'projects.files.empty': 'Questa cartella è vuota.',
|
||
'projects.files.refresh': 'Aggiorna',
|
||
'projects.files.drop': 'Trascina qui i file per caricarli',
|
||
'projects.files.btn.new_folder': 'Nuova cartella',
|
||
'projects.files.btn.upload': 'Carica',
|
||
'projects.files.uploading': 'Caricamento…',
|
||
'projects.files.action.rename': 'Rinomina',
|
||
'projects.files.action.delete': 'Elimina',
|
||
'projects.files.confirm.delete_file': 'Eliminare "{name}"?',
|
||
'projects.files.confirm.delete_dir': 'Eliminare la cartella "{name}" e tutto il suo contenuto?',
|
||
'projects.files.modal.mkdir': 'Nuova cartella',
|
||
'projects.files.modal.rename': 'Rinomina "{name}"',
|
||
'projects.files.modal.name': 'Nome',
|
||
'projects.files.error.name': 'Inserisci un nome valido (senza barre).',
|
||
|
||
// ── Dettaglio progetto ──────────────────────────────────────────────────────
|
||
'project_board.back': 'Progetti',
|
||
'project_board.open_chat': 'Apri chat',
|
||
|
||
// ── Richieste ──────────────────────────────────────────────────────────────
|
||
'inbox.empty': 'Nessuna richiesta in attesa',
|
||
'inbox.reject_prompt': 'Motivo del rifiuto (facoltativo):',
|
||
|
||
// ── Approvazioni ───────────────────────────────────────────────────────────
|
||
'approval.pending': 'In attesa del tuo OK',
|
||
'approval.approved': 'Consentito',
|
||
'approval.rejected': 'Negato',
|
||
'approval.approve': 'Consenti',
|
||
'approval.reject': 'Nega',
|
||
'approval.confirm_reject': 'Conferma il rifiuto',
|
||
'approval.reject_hint': 'Facoltativo: spiega perché (lo leggerà l\'assistente)',
|
||
'approval.bypass_15': 'Consenti e salta richieste simili per 15 minuti',
|
||
'approval.bypass_all': 'Consenti e salta tutte le richieste di questa sessione',
|
||
|
||
// ── Accesso ────────────────────────────────────────────────────────────────
|
||
'login.title': 'Bentornato',
|
||
'login.subtitle': 'Accedi al tuo account.',
|
||
'login.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>< 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à 1–999998 · valutate dopo per-strumento',
|
||
'approval.sidebar.add': 'Aggiungi',
|
||
'approval.sidebar.empty': 'Nessuna regola.',
|
||
|
||
'approval.default_bar.title': 'Azione predefinita',
|
||
'approval.default_bar.hint': 'se nessuna regola corrisponde',
|
||
'approval.default_bar.unset': 'predefinito di sistema: consenti',
|
||
|
||
'approval.header.default_badge': 'Predefinito',
|
||
'approval.header.rule_count': '{n} regola',
|
||
'approval.header.rule_count_plural': '{n} regole',
|
||
|
||
'approval.confirm.delete_fs': 'Rimuovere la regola File System per "{path}"?',
|
||
'approval.confirm.delete_rule': 'Eliminare la regola per "{pattern}"?',
|
||
'approval.label.optional': '(opzionale)',
|
||
|
||
// ── Sicurezza (gruppi) ──────────────────────────────────────────────────────
|
||
'security.title': 'Sicurezza',
|
||
'security.group_count': '{n} gruppo',
|
||
'security.group_count_plural': '{n} gruppi',
|
||
'security.new_group': 'Nuovo gruppo',
|
||
'security.rename_group': 'Rinomina gruppo',
|
||
'security.duplicate': 'Duplica',
|
||
'security.duplicate_title': 'Duplica {name}',
|
||
'security.duplicating': 'Duplicazione…',
|
||
'security.create_first': 'Crea il primo gruppo',
|
||
|
||
'security.form.id': 'ID',
|
||
'security.form.id_ph': 'es. cron_strict',
|
||
'security.form.id_hint': 'Slug minuscolo, senza spazi. Non può essere modificato in seguito.',
|
||
'security.form.name': 'Nome',
|
||
'security.form.name_ph': 'es. Cron strict',
|
||
'security.form.description': 'Descrizione',
|
||
'security.form.description_ph': 'Breve descrizione…',
|
||
'security.form.new_name': 'Nuovo nome',
|
||
'security.form.new_id': 'Nuovo ID',
|
||
'security.form.copy_info': 'Tutte le <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.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.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.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.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.',
|
||
|
||
// ── 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',
|
||
'fv.tab_view': 'Visualizza',
|
||
'fv.tab_edit': 'Modifica',
|
||
'fv.dirty_badge': 'Modifiche non salvate',
|
||
'fv.dirty_warn': 'Scartare le modifiche non salvate?',
|
||
'fv.save': 'Salva',
|
||
'fv.saving': 'Salvataggio…',
|
||
'fv.cancel': 'Annulla',
|
||
'fv.edit_placeholder': 'Scrivi in Markdown…',
|
||
'fv.edit_hint': 'Passa a Visualizza per l\'anteprima',
|
||
'fv.conflict_title': 'Il file è stato modificato da remoto mentre stavi scrivendo. Cosa vuoi fare?',
|
||
'fv.conflict_reload': 'Ricarica remoto',
|
||
'fv.conflict_copy': 'Copia le mie, poi ricarica',
|
||
'fv.conflict_overwrite': 'Sovrascrivi',
|
||
|
||
// ── Marketplace ──────────────────────────────────────────────────────────────
|
||
'marketplace.title': 'Marketplace',
|
||
'marketplace.btn.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.connectors': 'Connettori',
|
||
'users.action.delete': 'Elimina',
|
||
|
||
'users.modal.connectors_title': 'Connettori — {username}',
|
||
'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.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ì l’assistente sa cosa tenerci.',
|
||
'sf.all_added': 'Tutti i membri disponibili sono già stati aggiunti.',
|
||
'sf.choose_user': 'Scegli un membro…',
|
||
'sf.add': 'Aggiungi',
|
||
'sf.remove': 'Rimuovi',
|
||
'sf.edit_desc': 'Modifica descrizione',
|
||
'sf.delete': 'Elimina',
|
||
'sf.access.label': 'Accesso',
|
||
'sf.access.read': 'Lettura',
|
||
'sf.access.write': 'Scrittura',
|
||
'sf.access.readonly': 'Sola lettura',
|
||
'sf.access.readwrite': 'Lettura e scrittura',
|
||
'sf.confirm.delete': 'Eliminare la cartella condivisa “{name}”?\n\nI membri perderanno l’accesso. I file su disco restano intatti.',
|
||
'sf.confirm.remove_member': 'Rimuovere {name} da “{folder}”?',
|
||
'sf.error.name': 'Il nome della cartella è obbligatorio.',
|
||
'sf.form.new': 'Nuova cartella condivisa',
|
||
'sf.form.edit': 'Modifica “{name}”',
|
||
'sf.form.name': 'Nome cartella',
|
||
'sf.form.name_hint': '(lettere, numeri, trattini — niente slash)',
|
||
'sf.form.name_ph': 'documenti',
|
||
'sf.form.name_desc': 'Diventa shared/<nome> nello spazio di ogni membro. Non potrà essere rinominata.',
|
||
'sf.form.desc': 'A cosa serve?',
|
||
'sf.form.desc_desc': 'L’assistente legge questo testo per decidere cosa salvarci e quando consultarla. Scrivilo come istruzioni per l’assistente.',
|
||
'sf.form.desc_ph': 'Bollette, contratti e garanzie di casa. Salva qui i PDF delle utenze e le scadenze; consulta qui quando ti chiedono di una fattura o una garanzia.',
|
||
'sf.form.create': 'Crea',
|
||
'sf.form.save': 'Salva',
|
||
'sf.form.cancel': 'Annulla',
|
||
};
|