diff --git a/frontend/src/lib/locales/index.ts b/frontend/src/lib/locales/index.ts index 8b4c976..f6d2682 100644 --- a/frontend/src/lib/locales/index.ts +++ b/frontend/src/lib/locales/index.ts @@ -3,6 +3,7 @@ import { enUS } from './en-US'; import { zhTW } from './zh-TW'; import { ptBR } from './pt-BR'; import { jaJP } from './ja-JP'; +import { itIT } from './it-IT'; export const resources = { 'zh-CN': { translation: zhCN }, @@ -10,11 +11,12 @@ export const resources = { 'zh-TW': { translation: zhTW }, 'pt-BR': { translation: ptBR }, 'ja-JP': { translation: jaJP }, + 'it-IT': { translation: itIT }, } as const; export type TranslationKeys = typeof enUS; -export type LanguageCode = 'zh-CN' | 'en-US' | 'zh-TW' | 'pt-BR' | 'ja-JP'; +export type LanguageCode = 'zh-CN' | 'en-US' | 'zh-TW' | 'pt-BR' | 'ja-JP' | 'it-IT'; export type Language = { code: LanguageCode; @@ -27,6 +29,7 @@ export const languages: Language[] = [ { code: 'zh-TW', label: '繁體中文' }, { code: 'pt-BR', label: 'Português' }, { code: 'ja-JP', label: '日本語' }, + { code: 'it-IT', label: 'Italiano' }, ]; -export { zhCN, enUS, zhTW, ptBR, jaJP }; +export { zhCN, enUS, zhTW, ptBR, jaJP, itIT }; diff --git a/frontend/src/lib/locales/it-IT/index.ts b/frontend/src/lib/locales/it-IT/index.ts new file mode 100644 index 0000000..b4cdb47 --- /dev/null +++ b/frontend/src/lib/locales/it-IT/index.ts @@ -0,0 +1,957 @@ +export const itIT = { + common: { + search: "Cerca...", + create: "Nuovo", + new: "Nuovo", + cancel: "Annulla", + delete: "Elimina", + edit: "Modifica", + theme: "Tema", + signOut: "Esci", + noMatches: "Nessun risultato trovato", + tryDifferentSearch: "Prova con un termine di ricerca diverso.", + light: "Chiaro", + dark: "Scuro", + system: "Sistema", + loading: "Caricamento...", + note: "Nota", + insight: "Approfondimento", + newSource: "Nuova fonte", + newNotebook: "Nuovo quaderno", + newPodcast: "Nuovo podcast", + language: "Lingua", + english: "English", + chinese: "简体中文", + japanese: "日本語", + italian: "Italiano", + source: "Fonte", + notebook: "Quaderno", + podcast: "Podcast", + quickActions: "Azioni rapide", + quickActionsDesc: "Navigazione, ricerca, domande, tema", + appName: "Open Notebook", + add: "Aggiungi", + remove: "Rimuovi", + confirm: "Conferma", + warning: "Attenzione", + error: "Errore", + success: "Successo", + sessions: "Sessioni", + model: "Modello", + send: "Invia", + back: "Indietro", + next: "Avanti", + done: "Fatto", + processing: "Elaborazione...", + creating: "Creazione...", + tokenCount: "Token", + charCount: "Caratteri", + linked: "Collegato", + added: "Aggiunto il {date}", + adding: "Aggiunta in corso...", + addSelected: "Aggiungi selezionati", + customModel: "Modello personalizzato", + messages: "Messaggi", + failed: "fallito", + current: "Corrente", + save: "Salva", + writeNote: "Scrivi nota", + batchMode: "Modalità batch", + optional: "Opzionale", + type: "Tipo", + title: "Titolo", + created: "Creato {time}", + updated: "Aggiornato {time}", + actions: "Azioni", + noResults: "Nessun risultato", + references: "Riferimenti", + refreshPage: "Prova ad aggiornare la pagina", + refresh: "Aggiorna", + aiGenerated: "Generato da IA", + human: "Umano", + unknown: "Sconosciuto", + notes: "Note", + chat: "Chat", + details: "Dettagli", + deleteForever: "Elimina definitivamente", + connectionError: "Errore di connessione", + unableToConnect: "Impossibile connettersi al server API", + retryConnection: "Riprova connessione", + diagnosticInfo: "Informazioni diagnostiche", + version: "Versione", + built: "Compilato", + apiUrl: "URL API", + frontendUrl: "URL Frontend", + checkConsoleLogs: "Controlla la console del browser per log dettagliati (cerca i messaggi 🔧 [Config])", + yes: "Sì", + no: "No", + simple: "Semplice", + saving: "Salvataggio...", + description: "Descrizione", + saveToNote: "Salva come nota", + copyToClipboard: "Copia negli appunti", + close: "Chiudi", + insights: "Approfondimenti", + progress: "Progresso", + deleting: "Eliminazione...", + created_label: "Creato", + updated_label: "Aggiornato", + download: "Scarica", + saveChanges: "Salva modifiche", + name: "Nome", + default: "Predefinito", + nameRequired: "Il nome è obbligatorio", + modelConfiguration: "Configurazione modello", + resetToDefault: "Ripristina predefinito", + notFound: "Non trovato", + reasoning: "Ragionamento", + searchTerms: "Termini di ricerca", + strategy: "Strategia", + individualAnswers: "Risposte individuali ({count})", + finalAnswer: "Risposta finale", + notebookLabel: "Quaderno: {name}", + itemNotFound: "Questo {type} non è stato trovato", + accessibility: { + navigation: "Navigazione", + transformationViews: "Viste trasformazioni", + searchKB: "Chiedi o cerca nella tua base di conoscenza", + enterQuestion: "Inserisci la tua domanda per interrogare la base di conoscenza", + enterSearch: "Inserisci la query di ricerca", + searchKBBtn: "Cerca nella base di conoscenza", + podcastViews: "Viste podcast", + chatSessions: "Sessioni chat", + ytVideo: "Video YouTube", + askResponse: "Risposta alla domanda", + searchNotebooks: "Cerca quaderni", + }, + url: "URL", + errorDetails: "Dettagli errore", + editTransformation: "Modifica trasformazione", + comingSoon: "Prossimamente", + retry: "Riprova", + traditionalChinese: "繁體中文", + portuguese: "Português", + completed: "completato", + saveSuccess: "Salvato con successo", + contextModes: { + off: "Non incluso nella chat", + insights: "Solo approfondimenti", + full: "Contenuto completo", + clickToCycle: "Clicca per cambiare", + }, + clickToEdit: "Clicca per modificare", + }, + apiErrors: { + notebookNotFound: "Quaderno non trovato", + sourceNotFound: "Fonte non trovata", + transformationNotFound: "Trasformazione non trovata", + fileUploadFailed: "Caricamento file fallito", + urlRequired: "L'URL è obbligatorio per il tipo link", + contentRequired: "Il contenuto è obbligatorio per il tipo testo", + invalidSourceType: "Tipo di fonte non valido", + processingFailed: "Elaborazione fallita", + failedToQueue: "Impossibile accodare l'elaborazione", + invalidSortBy: "Il campo di ordinamento deve essere 'created' o 'updated'", + invalidSortOrder: "L'ordine deve essere 'asc' o 'desc'", + accessDenied: "Accesso al file negato", + fileNotFoundOnServer: "File non trovato sul server", + searchFailed: "Ricerca fallita", + askFailed: "Richiesta fallita", + pleaseEnterQuestion: "Inserisci una domanda", + pleaseConfigureModels: "Configura tutti i modelli richiesti", + failedToCreateSession: "Impossibile creare la sessione", + failedToUpdateSession: "Impossibile aggiornare la sessione", + failedToDeleteSession: "Impossibile eliminare la sessione", + failedToSendMessage: "Impossibile inviare il messaggio", + unauthorized: "Accesso non autorizzato, controlla la password", + invalidPassword: "Password non valida", + missingAuth: "Autenticazione mancante", + embeddingModelRequired: "Questa funzionalità richiede un modello di embedding. Configurane uno nella sezione Modelli.", + strategyModelNotFound: "Modello strategia non trovato", + answerModelNotFound: "Modello risposta non trovato", + finalAnswerModelNotFound: "Modello risposta finale non trovato", + noAnswerGenerated: "Nessuna risposta generata", + genericError: "Si è verificato un errore imprevisto", + }, + connectionErrors: { + apiTitle: "Impossibile connettersi al server API", + apiDesc: "Il server API di Open Notebook non è raggiungibile", + dbTitle: "Connessione al database fallita", + dbDesc: "Il server API è in esecuzione, ma il database non è accessibile", + troubleshooting: "Questo di solito significa:", + apiUnreachable1: "Il server API non è in esecuzione", + apiUnreachable2: "Il server API è su un indirizzo diverso", + apiUnreachable3: "Problemi di connettività di rete", + dbFailed1: "SurrealDB non è in esecuzione", + dbFailed2: "Le impostazioni di connessione al database sono errate", + dbFailed3: "Problemi di rete tra API e database", + quickFixes: "Soluzioni rapide:", + setApiUrl: "Imposta la variabile d'ambiente API_URL:", + checkSurreal: "Verifica se SurrealDB è in esecuzione:", + seeDocumentation: "Per istruzioni dettagliate, consulta:", + docLink: "Documentazione Open Notebook", + showTechnical: "Mostra dettagli tecnici", + attemptedUrl: "URL tentato", + message: "Messaggio", + technicalDetails: "Dettagli tecnici", + stackTrace: "Stack trace", + retryLabel: "Riprova connessione", + retryHint: "Premi R o clicca il pulsante per riprovare", + dockerLabel: "Per docker", + localDevLabel: "Per sviluppo locale", + }, + auth: { + loginTitle: "Open Notebook", + loginDesc: "Inserisci la password per accedere all'applicazione", + passwordPlaceholder: "Password", + signingIn: "Accesso in corso...", + signIn: "Accedi", + unhandledError: "Errore non gestito durante l'accesso", + connectErrorHint: "Impossibile connettersi al server. Verifica che l'API sia in esecuzione.", + }, + navigation: { + collect: "Raccogli", + process: "Elabora", + create: "Crea", + manage: "Gestisci", + sources: "Fonti", + notebooks: "Quaderni", + askAndSearch: "Chiedi e cerca", + podcasts: "Podcast", + models: "Modelli", + transformations: "Trasformazioni", + transformation: "Trasformazione", + settings: "Impostazioni", + advanced: "Avanzate", + nav: "Navigazione", + language: "Cambia lingua", + theme: "Tema", + search: "Cerca", + ask: "Chiedi", + }, + notebooks: { + title: "Quaderni", + newNotebook: "Nuovo quaderno", + searchPlaceholder: "Cerca quaderni...", + archived: "Archiviati", + archive: "Archivia", + unarchive: "Ripristina", + deleteNotebook: "Elimina quaderno", + deleteNotebookDesc: "Sei sicuro di voler eliminare \"{name}\"? Questa azione non può essere annullata.", + deleteNotebookLoading: "Caricamento anteprima eliminazione...", + deleteNotebookNotes: "{count} nota/e verranno eliminate definitivamente.", + deleteNotebookNoNotes: "Nessuna nota da eliminare.", + deleteNotebookExclusiveSources: "{count} fonte/i esistono solo in questo quaderno.", + deleteNotebookSharedSources: "{count} fonte/i sono condivise con altri quaderni e verranno scollegate.", + deleteNotebookNoSources: "Nessuna fonte in questo quaderno.", + deleteExclusiveSourcesLabel: "Elimina fonti esclusive", + keepExclusiveSourcesLabel: "Scollega e mantieni", + activeNotebooks: "Quaderni attivi", + archivedNotebooks: "Quaderni archiviati", + emptyDescription: "Inizia creando il tuo primo quaderno per organizzare la tua ricerca.", + noActiveNotebooks: "Nessun quaderno attivo", + noArchivedNotebooks: "Nessun quaderno archiviato", + notFound: "Quaderno non trovato", + notFoundDesc: "Il quaderno richiesto non esiste.", + noDescription: "Nessuna descrizione...", + updated: "Aggiornato", + namePlaceholder: "Nome quaderno", + addDescription: "Aggiungi descrizione...", + noNotesYet: "Ancora nessuna nota", + deleteNote: "Elimina Nota", + deleteNoteConfirm: "Sei sicuro di voler eliminare questa nota? Questa azione non può essere annullata.", + noteCreatedSuccess: "Nota creata con successo", + failedToCreateNote: "Impossibile creare la nota", + noteUpdatedSuccess: "Nota aggiornata con successo", + failedToUpdateNote: "Impossibile aggiornare la nota", + noteDeletedSuccess: "Nota eliminata con successo", + failedToDeleteNote: "Impossibile eliminare la nota", + createNew: "Crea nuovo quaderno", + createNewDesc: "Inserisci un nome e una descrizione opzionale per iniziare.", + descPlaceholder: "Aggiungi più informazioni su questo quaderno qui...", + createSuccess: "Quaderno creato con successo", + updateSuccess: "Quaderno aggiornato con successo", + deleteSuccess: "Quaderno eliminato con successo", + }, + sources: { + title: "Fonti", + add: "Aggiungi fonte", + addNew: "Aggiungi nuova fonte", + addExisting: "Aggiungi fonte esistente", + empty: "Ancora nessuna fonte", + emptyDesc: "Aggiungi la tua prima fonte per iniziare a costruire la tua base di conoscenza.", + delete: "Elimina Fonte", + deleteMsg: "Sei sicuro di voler eliminare questa fonte? Questa azione non può essere annullata.", + statusPreparing: "In preparazione", + statusQueued: "In coda", + statusProcessing: "In elaborazione", + statusCompleted: "Completato", + statusFailed: "Fallito", + statusPreparingDesc: "Preparazione all'elaborazione", + statusQueuedDesc: "In attesa di elaborazione", + statusProcessingDesc: "In fase di elaborazione", + statusCompletedDesc: "Elaborato con successo", + statusFailedDesc: "Elaborazione fallita", + failedToLoad: "Impossibile caricare le fonti", + allSourcesDesc: "Visualizza tutte le tue fonti qui. Puoi aggiungere nuove fonti o gestire quelle esistenti.", + allSources: "Tutte le fonti", + insights: "Approfondimenti", + yes: "Sì", + no: "No", + loadingMore: "Caricamento...", + noSourcesYet: "Ancora nessuna fonte", + allSourcesDescShort: "Visualizza tutte le tue fonti qui.", + cannotSaveNoteNoNotebook: "Impossibile salvare la nota: ID quaderno non disponibile", + createFirstSource: "Aggiungi la tua prima fonte per iniziare a costruire la tua base di conoscenza.", + deleteSourceConfirm: "Sei sicuro di voler eliminare questa fonte?", + deleteConfirm: "Sei sicuro di voler eliminare questo elemento?", + deleteConfirmWithTitle: "Sei sicuro di voler eliminare \"{title}\"?", + deleteSuccess: "Fonte eliminata con successo. Nota: Per eliminare il file dallo storage, devi abilitare l'opzione \"elimina file\" nella pagina impostazioni.", + failedToDelete: "Impossibile eliminare la fonte", + sourceQueued: "Fonte in coda", + sourceQueuedDesc: "Fonte inviata per l'elaborazione in background. Puoi monitorare il progresso nella lista fonti.", + sourceAddedSuccess: "Fonte aggiunta con successo", + failedToAddSource: "Impossibile aggiungere la fonte", + sourceUpdatedSuccess: "Fonte aggiornata con successo", + failedToUpdateSource: "Impossibile aggiornare la fonte", + sourceDeletedSuccess: "Fonte eliminata con successo", + failedToDeleteSource: "Impossibile eliminare la fonte", + fileUploadedSuccess: "File caricato con successo", + failedToUploadFile: "Impossibile caricare il file", + sourceRequeued: "Fonte rimessa in coda", + sourceRequeuedDesc: "La fonte è stata rimessa in coda per l'elaborazione.", + failedToRetry: "Nuovo tentativo fallito", + failedToRetryDesc: "Impossibile ritentare l'elaborazione della fonte. Riprova.", + sourcesAddedToNotebook: "{count} fonte/i aggiunte al quaderno", + failedToAddSourcesToNotebook: "Impossibile aggiungere le fonti al quaderno", + partialAddSuccess: "{success} fonte/i aggiunte, {failed} fallite", + sourceRemovedFromNotebook: "Fonte rimossa dal quaderno con successo", + failedToRemoveSourceFromNotebook: "Impossibile rimuovere la fonte dal quaderno", + removeConfirm: "Sei sicuro di voler rimuovere questa fonte dal quaderno?", + checking: "Verifica...", + untitledSource: "Fonte senza titolo", + maxItems: "max {count}", + insightsCount: "{count} approfondimenti", + details: "Dettagli", + detailsTitle: "Dettagli fonte", + content: "Contenuto", + metadata: "Metadati", + type: { + link: "Link", + file: "File", + text: "Testo", + }, + id: "ID Fonte", + topics: "Argomenti", + embedded: "Indicizzato", + notEmbedded: "Non indicizzato", + embedContent: "Indicizza contenuto", + embedding: "Indicizzazione...", + alreadyEmbedded: "Già indicizzato", + downloadFile: "Scarica file", + fileUnavailable: "File non disponibile", + preparing: "Preparazione...", + generateNewInsight: "Genera nuovo approfondimento", + selectTransformation: "Seleziona una trasformazione...", + noInsightsYet: "Ancora nessun approfondimento", + createFirstInsight: "Crea il tuo primo approfondimento usando una trasformazione sopra", + viewInsight: "Visualizza approfondimento", + deleteInsight: "Elimina approfondimento", + deleteInsightConfirm: "Sei sicuro di voler eliminare questo approfondimento? Questa azione non può essere annullata.", + deleteNoteConfirm: "Sei sicuro di voler eliminare questa nota? Questa azione non può essere annullata.", + editNote: "Modifica nota", + createNote: "Crea nota", + addTitle: "Aggiungi un titolo...", + untitledNote: "Nota Senza Titolo", + writeNotePlaceholder: "Scrivi il contenuto della tua nota qui...", + saveNote: "Salva nota", + createNoteBtn: "Crea nota", + noNotesYet: "Ancora nessuna nota", + createFirstNote: "Crea la tua prima nota per catturare intuizioni e osservazioni.", + deleteNote: "Elimina nota", + urlLabel: "URL *", + fileLabel: "File *", + textContentLabel: "Contenuto testo *", + enterUrlsPlaceholder: "Inserisci gli URL, uno per riga\nhttps://esempio.com/articolo1\nhttps://esempio.com/articolo2", + batchUrlHint: "Incolla più URL (uno per riga) per importazione batch", + invalidUrlsDetected: "URL non validi rilevati:", + lineLabel: "Riga {line}", + fixInvalidUrls: "Correggi o rimuovi gli URL non validi per continuare", + selectMultipleFilesHint: "Seleziona più file per importazione batch. Supportati: Documenti (PDF, DOC, DOCX, PPT, XLS, EPUB, TXT, MD), Media (MP4, MP3, WAV, M4A), Immagini (JPG, PNG), Archivi (ZIP)", + selectedFiles: "File selezionati:", + textPlaceholder: "Incolla o digita il contenuto qui...", + htmlDetected: "Rilevato contenuto HTML. Verrà convertito in Markdown dopo l'elaborazione.", + titlePlaceholder: "Dai alla tua fonte un titolo descrittivo", + batchTitlesAuto: "I titoli verranno generati automaticamente per ogni fonte.", + batchCommonSettings: "Gli stessi quaderni e trasformazioni verranno applicati a tutti gli elementi.", + urlsCount: "{count} URL", + filesCount: "{count} file", + addSource: "Aggiungi Fonte", + notEmbeddedAlert: "Contenuto non indicizzato", + notEmbeddedDesc: "Questo contenuto non è stato indicizzato per la ricerca vettoriale. L'indicizzazione abilita funzionalità di ricerca avanzate e una migliore scoperta dei contenuti.", + openOnYoutube: "Apri su YouTube", + urlCopied: "URL copiato negli appunti", + viewSource: "Visualizza fonte", + noInsightSelected: "Nessun approfondimento selezionato", + sourceInsight: "Approfondimento Fonte", + manageNotebooks: "Gestisci quaderni", + manageNotebooksDesc: "Gestisci quali quaderni contengono questa fonte", + noNotebooksAvailable: "Nessun quaderno disponibile", + loadFailed: "Impossibile caricare i dettagli della fonte", + removeFromNotebook: "Rimuovi dal quaderno", + retryProcessing: "Riprova elaborazione", + deleteSource: "Elimina fonte", + retry: "Riprova", + progress: "Progresso", + addExistingTitle: "Aggiungi fonti esistenti", + addExistingDesc: "Seleziona fonti esistenti da tutti i tuoi quaderni per aggiungerle a quello corrente.", + searchPlaceholder: "Cerca fonti per nome o URL...", + noNotebooksFound: "Nessun quaderno trovato.", + showingFirst100: "Mostrate le prime 100 fonti. Usa la ricerca per trovarne di specifiche.", + selectedCount: "{count} fonti selezionate", + added: "Aggiunto il {date}", + addUrl: "Aggiungi URL", + uploadFile: "Carica file", + enterText: "Inserisci testo", + processDescription: "Il contenuto verrà elaborato e analizzato dall'IA.", + processingFiles: "Elaborazione dei tuoi file...", + titleRequired: "Un titolo è obbligatorio per il contenuto testuale", + titleGenerated: "Se lasciato vuoto, verrà generato un titolo dal contenuto", + batchCount: "{count} {type} verranno elaborati", + enableEmbedding: "Abilita indicizzazione per la ricerca", + embeddingDesc: "Permette di trovare questa fonte nelle ricerche vettoriali e query IA", + embeddingAlways: "Indicizzazione abilitata automaticamente", + embeddingAlwaysDesc: "Le tue impostazioni sono configurate per indicizzare sempre il contenuto per la ricerca vettoriale.", + embeddingNever: "Indicizzazione disabilitata", + embeddingNeverDesc: "Le tue impostazioni sono configurate per saltare l'indicizzazione. La ricerca vettoriale non sarà disponibile per questa fonte.", + changeInSettings: "Puoi modificare questo nelle Impostazioni", + notFound: "Fonte non trovata", + noContent: "Nessun contenuto disponibile", + insightsDesc: "Approfondimenti generati dall'analisi del modello", + uploadedFile: "File caricato", + fileUnavailableDesc: "Questo file non è attualmente disponibile per motivi di storage.", + batchSuccess: "{count} fonte/i create con successo", + batchFailed: "Impossibile creare tutte le {count} fonti", + batchPartial: "{success} riuscite, {failed} fallite", + submittingSource: "Invio fonte per l'elaborazione...", + contentRequired: "Fornisci il contenuto richiesto per il tipo di fonte selezionato", + titleRequiredForText: "Il titolo è obbligatorio per le fonti testuali", + processingBatchSources: "Elaborazione di {count} fonti. Potrebbe richiedere qualche istante.", + processingSource: "La tua fonte è in elaborazione. Potrebbe richiedere qualche istante.", + maxFilesAllowed: "Massimo {count} file consentiti per batch", + }, + chat: { + sessions: "Sessioni", + sessionTitlePlaceholder: "Digita un titolo qui...", + noSessions: "Ancora nessuna sessione chat", + startChatting: "Inizia a chattare sulle tue fonti.", + deleteSession: "Elimina sessione", + deleteSessionDesc: "Sei sicuro di voler eliminare questa sessione chat? Questa azione non può essere annullata.", + sendPlaceholder: "Chiedi qualsiasi cosa sulle tue fonti...", + newChat: "Nuova chat", + sessionsTitle: "Sessioni chat", + clearhistory: "Cancella cronologia", + renameSession: "Rinomina sessione", + noSourcesLinked: "Nessuna fonte collegata", + thinking: "L'IA sta pensando...", + chatWith: "Chatta con {name}", + startConversation: "Inizia una conversazione su questo {type}", + askQuestions: "Fai domande per capire meglio il contenuto", + pressToSend: "Premi {key} per inviare", + model: "Modello", + createToStart: "Crea una sessione per iniziare.", + chatWithNotebook: "Chatta con il quaderno", + unableToLoadChat: "Impossibile caricare la chat", + noDescription: "Nessuna descrizione", + startByCreating: "Inizia creando il tuo primo quaderno per organizzare la tua ricerca.", + messagesCount: "{count} messaggi", + sessionCreated: "Sessione chat creata", + sessionUpdated: "Sessione aggiornata", + sessionDeleted: "Sessione eliminata", + }, + searchPage: { + askAndSearch: "Chiedi e cerca", + chooseAMode: "Scegli una modalità", + askBeta: "Chiedi (beta)", + search: "Cerca", + askYourKb: "Chiedi alla tua base di conoscenza (beta)", + askYourKbDesc: "L'LLM risponderà alla tua domanda basandosi sui documenti nella tua base di conoscenza.", + question: "Domanda", + enterQuestionPlaceholder: "Inserisci la tua domanda...", + pressToSubmit: "Premi Cmd/Ctrl+Invio per inviare", + noEmbeddingModel: "Non puoi usare questa funzionalità perché non hai un modello di embedding selezionato. Configurane uno nella pagina modelli.", + usingCustomModels: "Uso modelli personalizzati", + usingDefaultModels: "Uso modelli predefiniti", + advanced: "Avanzate", + strategy: "Strategia", + answer: "Risposta", + final: "Finale", + ask: "Chiedi", + processing: "Elaborazione...", + saveToNotebooks: "Salva nei quaderni", + searchDesc: "Cerca nella tua base di conoscenza parole chiave o concetti specifici", + enterSearchPlaceholder: "Inserisci la query di ricerca...", + pressToSearch: "Premi invio per cercare", + searchType: "Tipo di ricerca", + vectorSearchWarning: "La ricerca vettoriale richiede un modello di embedding. Solo la ricerca testuale è disponibile.", + textSearch: "Ricerca testuale", + vectorSearch: "Ricerca vettoriale", + searchIn: "Cerca In", + searchSources: "Cerca nelle fonti", + searchNotes: "Cerca nelle note", + resultsFound: "{count} risultati trovati", + matches: "Corrispondenze ({count})", + noResultsFor: "Nessun risultato trovato per \"{query}\"", + notSet: "Non impostato", + saveToNotebook: "Salva nel quaderno", + saveSuccess: "Salvato con successo nel quaderno", + saveError: "Impossibile salvare nel quaderno", + selectNotebook: "Seleziona quaderno", + createNewNotebook: "Crea nuovo quaderno", + cancel: "Annulla", + searchAndAsk: "Cerca e chiedi", + searchResultsFor: "Risultati di ricerca per \"{query}\"", + askAbout: "Chiedi riguardo \"{query}\"", + orSearchKb: "Oppure cerca nella tua base di conoscenza", + saving: "Salvataggio...", + advancedModelTitle: "Selezione modello avanzata", + advancedModelDesc: "Scegli modelli specifici per ogni fase del processo Chiedi", + strategyModel: "Modello strategia", + answerModel: "Modello risposta", + finalAnswerModel: "Modello risposta finale", + selectStrategyPlaceholder: "Seleziona modello strategia", + selectAnswerPlaceholder: "Seleziona modello risposta", + selectFinalPlaceholder: "Seleziona modello risposta finale", + saveChanges: "Salva modifiche", + processingQuestion: "Elaborazione della tua domanda...", + }, + podcasts: { + generateEpisode: "Genera episodio podcast", + generateEpisodeDesc: "Seleziona il contenuto da includere e configura i dettagli dell'episodio prima di generare un nuovo episodio podcast.", + content: "Contenuto", + contentDesc: "Scegli quaderni, fonti e note da includere in questo episodio.", + itemsSelected: "{count} elementi selezionati", + tokens: "{count} token", + chars: "{count} caratteri", + loadingNotebooks: "Caricamento quaderni...", + noNotebooksFoundInPodcasts: "Nessun quaderno trovato. Crea un quaderno e aggiungi contenuto prima di generare un podcast.", + noContentSelected: "Nessun contenuto selezionato", + summary: "Riepilogo", + fullContent: "Contenuto completo", + untitledSource: "Fonte senza titolo", + untitledNote: "Nota senza titolo", + episodeSettings: "Impostazioni episodio", + episodeProfile: "Profilo episodio", + episodeProfilePlaceholder: "Seleziona un profilo episodio", + episodeName: "Nome episodio", + episodeNamePlaceholder: "es., IA e il futuro del Lavoro", + additionalInstructions: "Istruzioni aggiuntive", + instructionsPlaceholder: "Eventuali consigli supplementari da aggiungere al briefing dell'episodio...", + generating: "Generazione...", + generate: "Genera", + hostPlaceholder: "Conduttore {number}", + profileRequired: "Profilo episodio richiesto", + profileRequiredDesc: "Seleziona un profilo episodio prima di generare un podcast.", + nameRequired: "Nome episodio richiesto", + nameRequiredDesc: "Fornisci un nome per l'episodio.", + addContext: "Aggiungi contesto", + addContextDesc: "Seleziona almeno una fonte o nota da includere nell'episodio.", + generationFailed: "Generazione podcast fallita", + speakerProfile: "Profilo Speaker", + usesSpeakerProfile: "Usa profilo speaker", + sources: "Fonti", + notes: "Note", + noSources: "Nessuna fonte disponibile in questo quaderno.", + noNotes: "Nessuna nota disponibile in questo quaderno.", + selectMode: "Seleziona modalità", + buildContextFailed: "Impossibile costruire il contesto. Rivedi le tue selezioni.", + podcastTaskStarted: "Attività podcast avviata", + loadingProfiles: "Caricamento profili episodio...", + noProfilesFound: "Nessun profilo episodio trovato. Crea un profilo episodio prima di generare un podcast.", + listTitle: "Podcast", + listDesc: "Tieni traccia degli episodi generati e gestisci i modelli riutilizzabili.", + chooseAView: "Scegli una vista", + episodesTab: "Episodi", + templatesTab: "Modelli", + overviewTitle: "Panoramica episodi", + overviewDesc: "Monitora i lavori di generazione podcast e rivedi gli artefatti finali.", + generateBtn: "Genera Podcast", + total: "Totale", + processingLabel: "In elaborazione", + completedLabel: "Completati", + failedLabel: "Falliti", + pendingLabel: "In attesa", + loadErrorTitle: "Impossibile caricare gli episodi", + loadErrorDesc: "Non siamo riusciti a recuperare gli ultimi episodi podcast. Riprova tra poco.", + loadingEpisodes: "Caricamento episodi…", + noEpisodesYet: "Ancora nessun episodio podcast. Genera il tuo primo dalle interfacce chat di quaderni o fonti.", + statusRunningTitle: "In elaborazione", + statusRunningDesc: "Episodi che stanno attivamente generando risorse.", + statusPendingTitle: "In coda / In attesa", + statusPendingDesc: "Episodi inviati in attesa di iniziare l'elaborazione.", + statusCompletedTitle: "Episodi completati", + statusCompletedDesc: "Pronti per revisione, download o pubblicazione.", + statusFailedTitle: "Episodi falliti", + statusFailedDesc: "Episodi che hanno riscontrato problemi durante la generazione.", + templatesWorkspaceTitle: "Area di lavoro modelli", + templatesWorkspaceDesc: "Costruisci configurazioni riutilizzabili per episodi e speaker per una produzione podcast rapida.", + howTemplatesPowerTitle: "Come i modelli potenziano la generazione podcast", + howTemplatesPowerDesc: "I modelli dividono il flusso di lavoro podcast in due blocchi riutilizzabili. Combinali quando generi un nuovo episodio.", + episodeProfilesSetFormat: "I profili episodio impostano il formato", + episodeProfilesList1: "Delinea il numero di segmenti e come scorre la storia", + episodeProfilesList2: "Scegli i modelli linguistici usati per briefing, outline e scrittura script", + episodeProfilesList3: "Memorizza briefing predefiniti così ogni episodio inizia con un tono coerente", + speakerProfilesBringVoices: "I profili speaker danno vita alle voci", + speakerProfilesList1: "Scegli il provider e modello text-to-speech", + speakerProfilesList2: "Cattura personalità, background e note di pronuncia per speaker", + speakerProfilesList3: "Riutilizza le stesse voci di conduttori o ospiti in diversi formati episodio", + recommendedWorkflow: "Flusso di lavoro consigliato", + workflowStep1: "Crea profili speaker per ogni voce di cui hai bisogno", + workflowStep2: "Costruisci profili episodio che riferiscono quegli speaker per nome", + workflowStep3: "Genera podcast selezionando il profilo episodio adatto alla storia", + workflowHint: "I profili episodio riferiscono i profili speaker per nome, quindi iniziare dagli speaker evita assegnazioni vocali mancanti.", + failedToLoadTemplates: "Impossibile caricare i dati dei modelli", + failedToLoadTemplatesDesc: "Assicurati che l'API sia in esecuzione e riprova. Alcune sezioni potrebbero essere incomplete.", + loadingTemplates: "Caricamento modelli…", + speakerProfilesTitle: "Profili speaker", + speakerProfilesDesc: "Configura voci e personalità per gli episodi generati.", + createSpeaker: "Crea speaker", + noSpeakerProfiles: "Ancora nessun profilo speaker. Creane uno per rendere disponibili i modelli episodio.", + noDescription: "Nessuna descrizione fornita.", + usedByCount_one: "Usato da 1 episodio", + usedByCount_other: "Usato da {count} episodi", + usedByCount: "Usato da {count} episodi", + unused: "Non utilizzato", + voiceId: "ID Voce", + backstory: "Background", + personality: "Personalità", + edit: "Modifica", + duplicate: "Duplica", + deleteSpeakerProfileTitle: "Eliminare il profilo speaker?", + deleteSpeakerProfileDesc: "L'eliminazione di \"{name}\" non può essere annullata.", + deleteSpeakerDisabledHint: "Rimuovi questo speaker dai profili episodio prima di eliminarlo.", + deleting: "Eliminazione…", + episodeProfilesTitle: "Profili episodio", + episodeProfilesDesc: "Definisci impostazioni di generazione riutilizzabili per i tuoi programmi.", + createProfile: "Crea profilo", + createSpeakerFirst: "Crea un profilo speaker prima di aggiungere un profilo episodio.", + noEpisodeProfiles: "Ancora nessun profilo episodio. Creane uno per avviare la generazione podcast.", + speakerCreated: "Speaker creato", + speakerCreatedDesc: "Lo speaker \"{name}\" è stato aggiunto con successo.", + failedToCreateSpeaker: "Impossibile creare il profilo speaker", + speakerUpdated: "Speaker aggiornato", + speakerUpdatedDesc: "Lo speaker \"{name}\" è stato aggiornato con successo.", + failedToUpdateSpeaker: "Impossibile aggiornare il profilo speaker", + speakerDeleted: "Speaker eliminato", + speakerDeletedDesc: "Lo speaker \"{name}\" è stato rimosso con successo.", + failedToDeleteSpeaker: "Impossibile eliminare il profilo speaker", + speakerDuplicated: "Speaker duplicato", + speakerDuplicatedDesc: "Lo speaker \"{name}\" è stato duplicato con successo.", + failedToDuplicateSpeaker: "Impossibile duplicare il profilo speaker", + generationStarted: "Generazione Avviata", + generationStartedDesc: "La generazione del podcast è stata accodata.", + failedToStartGeneration: "Impossibile avviare la generazione", + tryAgainMoment: "Riprova tra un momento.", + deleteProfileTitle: "Eliminare il profilo?", + deleteProfileDesc: "Questo rimuoverà \"{name}\". Gli episodi esistenti mantengono i loro dati, ma i nuovi non useranno più questa configurazione.", + profileCreated: "Profilo creato", + profileCreatedDesc: "Il profilo episodio \"{name}\" è stato creato con successo.", + failedToCreateProfile: "Impossibile creare il profilo", + profileUpdated: "Profilo aggiornato", + profileUpdatedDesc: "Il profilo episodio \"{name}\" è stato aggiornato con successo.", + failedToUpdateProfile: "Impossibile aggiornare il profilo", + profileDeleted: "Profilo eliminato", + profileDeletedDesc: "Il profilo episodio \"{name}\" è stato rimosso con successo.", + failedToDeleteProfile: "Impossibile eliminare il profilo", + failedToDeleteProfileDesc: "Impossibile rimuovere il profilo episodio.", + profileDuplicated: "Profilo duplicato", + profileDuplicatedDesc: "Il profilo episodio \"{name}\" è stato duplicato con successo.", + failedToDuplicateProfile: "Impossibile duplicare il profilo", + episodeDeleted: "Episodio eliminato", + episodeDeletedDesc: "L'episodio è stato eliminato con successo.", + failedToDeleteEpisode: "Impossibile eliminare l'episodio", + failedToDeleteSpeakerDesc: "Impossibile rimuovere il profilo speaker.", + outlineModel: "Modello outline", + transcriptModel: "Modello trascrizione", + segments: "Segmenti", + defaultBriefingTitle: "Briefing predefinito", + created: "Creato il {time}", + details: "Dettagli", + summaryTab: "Riepilogo", + outlineTab: "Outline", + transcriptTab: "Trascrizione", + briefing: "Briefing", + noOutline: "Nessun outline disponibile.", + noTranscript: "Nessuna trascrizione disponibile.", + deleteEpisodeTitle: "Eliminare l'episodio?", + deleteEpisodeDesc: "Questo rimuoverà \"{name}\" e il suo file audio permanentemente.", + audioUnavailable: "Audio non disponibile", + segment: "Segmento", + speaker: "Speaker", + profile: "Profilo", + link: "Link", + file: "File", + embedded: "Indicizzato", + notEmbedded: "Non indicizzato", + noSpeakerProfilesAvailable: "Nessun profilo speaker disponibile", + noLanguageModelsAvailable: "Nessun modello linguistico disponibile", + editEpisodeProfile: "Modifica profilo episodio", + createEpisodeProfile: "Crea profilo episodio", + episodeProfileFormDesc: "Definisci come devono essere generati gli episodi e quale configurazione speaker usare di default.", + noSpeakerProfilesDesc: "Crea un profilo speaker prima di configurare un profilo episodio.", + noLanguageModelsDesc: "Aggiungi modelli linguistici nella sezione modelli per configurare la generazione di outline e trascrizione.", + profileName: "Nome profilo", + profileNamePlaceholder: "es., Discussione tech", + descriptionPlaceholder: "Breve riepilogo di quando usare questo profilo", + speakerConfig: "Configurazione speaker", + selectSpeakerProfile: "Seleziona un profilo speaker", + outlineGeneration: "Generazione outline", + transcriptGeneration: "Generazione trascrizione", + defaultBriefingPlaceholder: "Delinea struttura, tono e obiettivi per questo formato episodio", + editSpeakerProfile: "Modifica profilo speaker", + createSpeakerProfile: "Crea profilo speaker", + speakerProfileFormDesc: "Configura le impostazioni text-to-speech e definisci fino a quattro speaker.", + noTtsModelsAvailable: "Nessun modello text-to-speech disponibile", + noTtsModelsDesc: "Aggiungi modelli TTS nella sezione modelli prima di creare un profilo speaker.", + speakers: "Speaker", + speakersDesc: "Configura da una a quattro voci per questo profilo.", + addSpeaker: "Aggiungi speaker", + speakerNumber: "Speaker {number}", + backstoryPlaceholder: "Breve biografia o contesto per lo speaker", + personalityPlaceholder: "Descrivi stile e tono", + outlineProviderRequired: "Il provider outline è obbligatorio", + outlineModelRequired: "Il modello outline è obbligatorio", + transcriptProviderRequired: "Il provider trascrizione è obbligatorio", + transcriptModelRequired: "Il modello trascrizione è obbligatorio", + defaultBriefingRequired: "Il briefing predefinito è obbligatorio", + segmentsInteger: "Deve essere un numero intero", + segmentsMin: "Almeno 3 segmenti", + segmentsMax: "Massimo 20 segmenti", + voiceIdRequired: "L'ID voce è obbligatorio", + backstoryRequired: "Il background è obbligatorio", + personalityRequired: "La personalità è obbligatoria", + speakerCountMin: "È richiesto almeno uno speaker", + speakerCountMax: "Puoi configurare fino a 4 speaker", + delete: "Elimina", + unknown: "Sconosciuto", + deleteSuccess: "Podcast eliminato con successo", + failedToDelete: "Impossibile eliminare il podcast", + }, + settings: { + contentProcessing: "Elaborazione contenuti", + contentProcessingDesc: "Configura come vengono elaborati documenti e URL", + docEngine: "Motore elaborazione documenti", + docEnginePlaceholder: "Seleziona motore elaborazione documenti", + urlEngine: "Motore elaborazione URL", + urlEnginePlaceholder: "Seleziona motore elaborazione URL", + autoRecommended: "Auto (consigliato)", + simple: "Semplice", + docling: "Docling", + helpMeChoose: "Aiutami a scegliere", + docHelp: "· Docling è un po' più lento ma più accurato, specialmente se i documenti contengono tabelle e immagini. · Semplice estrarrà qualsiasi contenuto dal documento senza formattarlo. · Auto (consigliato) proverà a elaborare tramite docling e userà semplice come fallback.", + firecrawl: "Firecrawl", + jina: "Jina", + urlHelp: "· Firecrawl è un servizio a pagamento (con piano gratuito), molto potente. · Jina è una buona alternativa con piano gratuito. · Semplice usa estrazione HTTP base e perderà contenuto su siti basati su javascript. · Auto (consigliato) proverà firecrawl poi Jina, infine semplice come fallback.", + embeddingAndSearch: "Indicizzazione e ricerca", + embeddingAndSearchDesc: "Configura opzioni di ricerca e indicizzazione", + defaultEmbeddingOption: "Opzione indicizzazione predefinita", + embeddingOptionPlaceholder: "Seleziona opzione indicizzazione", + ask: "Chiedi", + always: "Sempre", + never: "Mai", + embeddingHelp: "Indicizzare il contenuto renderà più facile trovarlo per te e per i tuoi agenti IA. Se usi un modello di embedding locale (Ollama, per esempio), non dovresti preoccuparti del costo e indicizzare tutto.", + fileManagement: "Gestione file", + fileManagementDesc: "Configura opzioni di gestione e archiviazione file", + autoDeleteFiles: "Elimina file automaticamente", + autoDeletePlaceholder: "Seleziona opzione eliminazione automatica", + filesHelp: "Una volta caricati ed elaborati, i tuoi file non sono più necessari. La maggior parte degli utenti dovrebbe permettere a Open Notebook di eliminare automaticamente i file caricati dalla cartella upload.", + loadFailed: "Impossibile caricare le impostazioni", + }, + advanced: { + title: "Strumenti avanzati", + desc: "Strumenti e utilità avanzate per utenti esperti", + systemInfo: "Informazioni sistema", + systemInfoDesc: "Visualizza lo stato dei componenti di sistema sottostanti", + rebuildEmbeddings: "Ricostruisci indicizzazioni", + rebuildEmbeddingsDesc: "Ricostruisci l'indice di ricerca vettoriale per tutte le fonti", + rebuildWarning: "Questa azione può richiedere molto tempo a seconda del numero di fonti. Cancellerà gli indici vettoriali esistenti e rigenererà le indicizzazioni per tutto.", + startRebuild: "Avvia ricostruzione", + rebuilding: "Ricostruzione...", + rebuildSuccess: "Ricostruzione indicizzazioni avviata con successo", + currentVersion: "Versione corrente", + latestVersion: "Ultima versione", + status: "Stato", + updateAvailable: "Versione {version} disponibile", + updateAvailableDesc: "È disponibile una nuova versione di Open Notebook.", + upToDate: "Aggiornato", + unknown: "Sconosciuto", + viewOnGithub: "Visualizza su GitHub", + updateCheckFailed: "Impossibile verificare aggiornamenti. GitHub potrebbe non essere raggiungibile.", + rebuild: { + mode: "Modalità ricostruzione", + existing: "Esistenti", + all: "Tutti", + existingDesc: "Re-indicizza solo elementi che hanno già indicizzazioni (più veloce, per cambio modello)", + allDesc: "Re-indicizza elementi esistenti + crea indicizzazioni per elementi senza (più lento, completo)", + include: "Includi nella ricostruzione", + selectOneError: "Seleziona almeno un tipo di elemento da ricostruire", + starting: "Avvio ricostruzione...", + startBtn: "🚀 Avvia ricostruzione", + queued: "In coda", + running: "In esecuzione...", + completed: "Completato!", + failed: "Fallito", + leavePageHint: "Puoi lasciare questa pagina poiché verrà eseguito in background", + startNew: "Avvia nuova ricostruzione", + itemsProcessed: "{processed}/{total} elementi ({percent}%)", + failedItems: "{count} elementi non elaborati", + time: "Tempo", + whenToRebuild: "Quando dovrei ricostruire le indicizzazioni?", + whenToRebuildAns: "Dovresti ricostruire quando cambi modelli, aggiorni versioni, correggi corruzione o dopo importazioni massive.", + howLong: "Quanto tempo richiede la ricostruzione?", + howLongAns: "Il tempo di elaborazione dipende dal numero di elementi, velocità del modello e limiti API. I modelli locali sono solitamente molto veloci.", + isSafe: "È sicuro ricostruire mentre uso l'app?", + isSafeAns: "Sì, la ricostruzione è sicura! Non elimina contenuti, sostituisce solo le indicizzazioni e gestisce gli errori con grazia.", + }, + }, + transformations: { + title: "Trasformazioni", + desc: "Le trasformazioni sono prompt che verranno usati dall'LLM per elaborare una fonte ed estrarre approfondimenti, riepiloghi, ecc.", + workspace: "Scegli un'area di lavoro", + playground: "Playground", + defaultPrompt: "Prompt trasformazione predefinito", + defaultPromptDesc: "Questo verrà aggiunto a tutti i tuoi prompt di trasformazione", + defaultPromptPlaceholder: "Inserisci le tue istruzioni di trasformazione predefinite...", + saveDefault: "Salva predefinito", + listTitle: "Trasformazioni personalizzate", + createNew: "Crea Nuova", + testInPlayground: "Testa nel playground", + inputLabel: "Testo di input", + inputPlaceholder: "Inserisci del testo da trasformare...", + outputLabel: "Output", + runTest: "Esegui trasformazione", + running: "Esecuzione...", + selectToStart: "Seleziona una trasformazione per iniziare", + name: "Nome", + namePlaceholder: "Identificativo unico, es. argomenti_chiave", + titlePlaceholder: "Titolo visualizzato, default al nome", + promptPlaceholder: "Scrivi il prompt che alimenterà questa trasformazione...", + descriptionPlaceholder: "Descrivi cosa fa questa trasformazione.", + suggestDefault: "Suggerisci di default per nuove fonti", + promptHint: "I prompt dovrebbero essere scritti considerando il contenuto della fonte. Puoi chiedere al modello di riassumere, estrarre approfondimenti o produrre output strutturati come tabelle.", + createSuccess: "Trasformazione creata con successo", + updateSuccess: "Trasformazione aggiornata con successo", + deleteSuccess: "Trasformazione eliminata con successo", + noTransformations: "Ancora nessuna trasformazione", + createOne: "Crea una trasformazione per iniziare", + deleteDesc: "L'eliminazione di questa trasformazione non può essere annullata.", + selectModel: "Seleziona un modello", + deleteConfirm: "Sei sicuro di voler eliminare questa trasformazione?", + model: "Modello", + systemPrompt: "Prompt di sistema", + type: "Tipo", + extraction: "Estrazione", + summary: "Riepilogo", + custom: "Personalizzato", + saveChanges: "Salva modifiche", + overrideModelDesc: "Sovrascrivi il modello predefinito per questa sessione chat. Lascia vuoto per usare il default di sistema.", + sessionUseReplacement: "Questa sessione userà {name} invece del modello predefinito.", + systemDefault: "Predefinito di sistema", + }, + models: { + title: "Gestione modelli", + desc: "Configura i modelli IA per diversi scopi in Open Notebook", + failedToLoad: "Impossibile caricare i dati dei modelli", + language: "Modelli linguistici", + embedding: "Modelli di embedding", + tts: "Text to Speech (TTS)", + stt: "Speech to Text (STT)", + providers: "Provider", + defaultModels: "Modelli predefiniti", + status: "Stato", + notConfigured: "Non configurato", + active: "Attivo", + inactive: "Inattivo", + configure: "Configura", + saveChanges: "Salva modifiche", + addModel: "Aggiungi modello", + modelName: "Nome modello", + provider: "Provider", + apiKey: "Chiave API", + baseUrl: "URL Base", + capabilities: "Capacità", + enabled: "Abilitato", + disabled: "Disabilitato", + deleteConfirm: "Sei sicuro di voler eliminare questo modello?", + deleteSuccess: "Modello eliminato con successo", + saveSuccess: "Modello salvato con successo", + providerStatus: "Stato provider", + connectionOk: "Connessione OK", + connectionFailed: "Connessione fallita", + changeEmbeddingWarning: "Cambiare il modello di embedding predefinito influenzerà le nuove fonti. Le fonti esistenti potrebbero dover essere re-indicizzate.", + changeEmbeddingTitle: "Cambiare il modello di embedding predefinito?", + aiProviders: "Provider IA", + providerConfigDesc: "Configura i provider tramite variabili d'ambiente per abilitare i loro modelli.", + configuredCount: "{count} di {total} configurati", + noModels: "Nessun modello", + learnMore: "Scopri come configurare i provider →", + seeLess: "Mostra meno", + seeAll: "Mostra tutti i {count} provider", + language_models: "Modelli linguistici", + embedding_models: "Modelli di embedding", + text_to_speech: "Text to Speech (TTS)", + speech_to_text: "Speech to Text (STT)", + languageDesc: "Chat, trasformazioni e generazione testo", + embeddingDesc: "Ricerca semantica e embedding vettoriali", + ttsDesc: "Genera audio da testo", + sttDesc: "Trascrivi audio in testo", + all: "Tutti", + noModelsConfigured: "Nessun modello configurato", + noProviderModelsConfigured: "Nessun modello {provider} configurato", + showMore: "Mostra altri {count}", + deleteModel: "Elimina modello", + deleteModelDesc: "Sei sicuro di voler eliminare \"{name}\"? Questa azione non può essere annullata.", + defaultAssignments: "Assegnazioni modelli predefiniti", + defaultAssignmentsDesc: "Configura quali modelli usare per diversi scopi in Open Notebook", + missingRequiredModels: "Modelli richiesti mancanti: {models}. Open Notebook potrebbe non funzionare correttamente senza questi.", + selectModelPlaceholder: "Seleziona un modello", + requiredModelPlaceholder: "⚠️ Richiesto - Seleziona un modello", + whichModelToChoose: "Quale modello dovrei scegliere? →", + chatModelLabel: "Modello chat", + chatModelDesc: "Usato per le conversazioni chat", + transformationModelLabel: "Modello trasformazione", + transformationModelDesc: "Usato per riepiloghi, approfondimenti e trasformazioni", + toolsModelLabel: "Modello strumenti", + toolsModelDesc: "Usato per chiamate funzione - OpenAI o Anthropic consigliati", + largeContextModelLabel: "Modello contesto ampio", + largeContextModelDesc: "Usato per elaborare documenti grandi - Gemini consigliato", + embeddingModelLabel: "Modello di embedding", + embeddingModelDesc: "Usato per ricerca semantica e embedding vettoriali", + ttsModelLabel: "Modello Text-to-Speech", + ttsModelDesc: "Usato per la generazione podcast", + sttModelLabel: "Modello Speech-to-Text", + sttModelDesc: "Usato per la trascrizione audio", + addSpecificModel: "Aggiungi modello {type}", + addSpecificModelDesc: "Configura un nuovo modello {type} dai provider disponibili.", + noProvidersForType: "Nessun provider disponibile per modelli {type}", + selectProviderPlaceholder: "Seleziona un provider", + providerRequired: "Il provider è obbligatorio", + modelNameRequired: "Il nome del modello è obbligatorio", + modelRequired: "Il modello è obbligatorio", + adding: "Aggiunta...", + azureHint: "Per Azure, usa il nome del deployment come nome del modello", + enterModelName: "Inserisci nome modello", + embeddingChangeTitle: "Cambio modello di embedding", + embeddingChangeConfirm: "Stai per cambiare il modello di embedding da {from} a {to}.", + rebuildRequired: "Importante: ricostruzione richiesta", + rebuildReason: "Cambiare il modello di embedding richiede la ricostruzione di tutti gli embedding esistenti per mantenere la coerenza. Senza ricostruzione, le tue ricerche potrebbero restituire risultati errati o incompleti.", + whatHappensNext: "Cosa succede dopo:", + step1: "Il tuo modello di embedding predefinito verrà aggiornato", + step2: "Gli embedding esistenti rimarranno invariati fino alla ricostruzione", + step3: "I nuovi contenuti useranno il nuovo modello di embedding", + step4: "Dovresti ricostruire gli embedding il prima possibile", + proceedToRebuildPrompt: "Vuoi procedere alla pagina avanzate per avviare la ricostruzione ora?", + changeModelOnly: "Cambia solo modello", + changeAndRebuild: "Cambia e vai a ricostruzione", + } +}