From b4dcd5b23b3f146dbd71d26dd0dfb848202652fe Mon Sep 17 00:00:00 2001 From: Matteo Parenti Date: Mon, 9 Feb 2026 11:58:04 +0100 Subject: [PATCH] Added Italian localisation --- frontend/src/i18n/index.ts | 5 +- frontend/src/i18n/locales/it.ts | 2597 +++++++++++++++++++++++++++++++ 2 files changed, 2601 insertions(+), 1 deletion(-) create mode 100644 frontend/src/i18n/locales/it.ts diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts index a48ad8d43..76a74fec6 100644 --- a/frontend/src/i18n/index.ts +++ b/frontend/src/i18n/index.ts @@ -6,11 +6,13 @@ import LanguageDetector from 'i18next-browser-languagedetector'; import en from './locales/en'; import de from './locales/de'; import ja from './locales/ja'; +import it from './locales/it'; const resources = { en: { translation: en }, de: { translation: de }, ja: { translation: ja }, + it: { translation: it }, }; i18n @@ -19,7 +21,7 @@ i18n .init({ resources, fallbackLng: 'en', - supportedLngs: ['en', 'de', 'ja'], + supportedLngs: ['en', 'de', 'ja', 'it'], detection: { // Order of detection methods @@ -46,4 +48,5 @@ export const availableLanguages = [ { code: 'en', name: 'English', nativeName: 'English' }, { code: 'de', name: 'German', nativeName: 'Deutsch' }, { code: 'ja', name: 'Japanese', nativeName: '日本語' }, + { code: 'it', name: 'Italian', nativeName: 'Italiano' }, ]; diff --git a/frontend/src/i18n/locales/it.ts b/frontend/src/i18n/locales/it.ts new file mode 100644 index 000000000..e175db5e0 --- /dev/null +++ b/frontend/src/i18n/locales/it.ts @@ -0,0 +1,2597 @@ +export default { + // Navigation + nav: { + printers: 'Stampanti', + archives: 'Archivi', + queue: 'Coda', + stats: 'Statistiche', + profiles: 'Profili', + maintenance: 'Manutenzione', + projects: 'Progetti', + files: 'File', + settings: 'Impostazioni', + system: 'Sistema', + collapseSidebar: 'Comprimi barra laterale', + expandSidebar: 'Espandi barra laterale', + update: 'Aggiorna', + updateAvailable: 'Aggiornamento disponibile: v{{version}}', + updateAvailableBanner: 'Versione {{version}} disponibile!', + viewUpdate: 'Vedi aggiornamento', + viewOnGithub: 'Vedi su GitHub', + keyboardShortcuts: 'Scorciatoie da tastiera (?)', + switchToLight: 'Passa a tema chiaro', + switchToDark: 'Passa a tema scuro', + smartSwitches: 'Interruttori Smart', + logout: 'Esci', + }, + + // Common + common: { + save: 'Salva', + saving: 'Salvataggio...', + cancel: 'Annulla', + delete: 'Elimina', + edit: 'Modifica', + add: 'Aggiungi', + close: 'Chiudi', + confirm: 'Conferma', + loading: 'Caricamento...', + error: 'Errore', + success: 'Successo', + warning: 'Avviso', + enabled: 'Abilitato', + disabled: 'Disabilitato', + yes: 'Si', + no: 'No', + on: 'On', + off: 'Off', + all: 'Tutti', + none: 'Nessuno', + search: 'Cerca', + filter: 'Filtro', + sort: 'Ordina', + refresh: 'Aggiorna', + download: 'Scarica', + upload: 'Carica', + actions: 'Azioni', + status: 'Stato', + name: 'Nome', + description: 'Descrizione', + date: 'Data', + time: 'Ora', + hours: 'ore', + minutes: 'minuti', + seconds: 'secondi', + days: 'giorni', + enable: 'Abilita', + disable: 'Disabilita', + permissions: 'Permessi', + noPrinters: 'Nessuna stampante configurata', + noData: 'Nessun dato disponibile', + linkNotFound: 'Link non trovato', + required: 'Obbligatorio', + optional: 'Opzionale', + dismiss: 'Chiudi', + apply: 'Applica', + reset: 'Reimposta', + clear: 'Pulisci', + selectAll: 'Seleziona tutto', + deselectAll: 'Deseleziona tutto', + noChange: '— Nessun cambio —', + unchanged: 'Invariato', + unassigned: 'Non assegnato', + unknown: 'Sconosciuto', + unknownError: 'Errore sconosciuto', + today: 'Oggi', + asap: 'ASAP', + overdue: 'Scaduto', + now: 'Ora', + collapse: 'Comprimi', + expand: 'Espandi', + viewArchive: 'Vedi archivio', + viewInFileManager: 'Vedi nel Gestore file', + addedBy: 'Aggiunto da {{username}}', + prints: 'stampe', + more: '+{{count}} altre', + ascending: 'Crescente', + descending: 'Decrescente', + printer: 'Stampante', + remove: 'Rimuovi', + type: 'Tipo', + print: 'Stampa', + rename: 'Rinomina', + move: 'Sposta', + create: 'Crea', + duplicate: 'Duplica', + left: 'Sinistra', + right: 'Destra', + }, + + // Printers page + printers: { + title: 'Stampanti', + addPrinter: 'Aggiungi Stampante', + editPrinter: 'Modifica Stampante', + deletePrinter: 'Elimina Stampante', + printerName: 'Nome Stampante', + serialNumber: 'Numero Seriale', + ipAddress: 'Indirizzo IP', + accessCode: 'Codice di Accesso', + model: 'Modello', + nozzleCount: 'Numero Ugelli', + autoArchive: 'Auto Archiviazione', + status: { + idle: 'Inattiva', + printing: 'In stampa', + paused: 'In pausa', + offline: 'Offline', + error: 'Errore', + finished: 'Finita', + unknown: 'Sconosciuto', + }, + temperatures: { + nozzle: 'Ugello', + bed: 'Piatto', + chamber: 'Camera', + }, + progress: '{{percent}}% completato', + timeRemaining: '{{time}} rimanente', + deleteConfirm: 'Sei sicuro di eliminare "{{name}}"?', + maintenanceOk: 'Manutenzione OK', + maintenanceWarning: '{{count}} avviso', + maintenanceWarning_plural: '{{count}} avvisi', + maintenanceDue: '{{count}} in scadenza', + maintenanceDue_plural: '{{count}} in scadenza', + // Sort options + sort: { + name: 'Nome', + status: 'Stato', + model: 'Modello', + location: 'Posizione', + ascending: 'Ordina crescente', + descending: 'Ordina decrescente', + }, + // Card size + cardSize: { + small: 'Schede piccole', + medium: 'Schede medie', + large: 'Schede grandi', + extraLarge: 'Schede extra grandi', + }, + // Controls + hideOffline: 'Nascondi offline', + powerOn: 'Accendi', + offlinePrintersWithPlugs: 'Stampanti offline con smart plug', + noPrintersConfigured: 'Nessuna stampante configurata', + // Printer card + readyToPrint: 'Pronta a stampare', + external: 'Esterna', + deleteArchives: 'Elimina archivi stampa', + noLabel: 'Nessuna etichetta', + printPreview: 'Anteprima stampa', + width: 'Larghezza', + height: 'Altezza', + noObjectsFound: 'Nessun oggetto trovato', + objectsLoadedOnPrintStart: 'Gli oggetti sono caricati quando inizia una stampa', + willBeSkipped: 'Verra saltato', + name: 'Nome', + serialCannotBeChanged: 'Il numero seriale non puo essere cambiato', + locationHelp: 'Usato per raggruppare stampanti e filtrare i lavori in coda', + // WiFi signal strength + wifiSignal: { + veryWeak: 'Molto debole', + weak: 'Debole', + fair: 'Discreto', + good: 'Buono', + excellent: 'Eccellente', + }, + // Maintenance + maintenanceUpToDate: 'Tutta la manutenzione aggiornata - Clicca per vedere', + // Chamber light + chamberLightOn: 'Accendi luce camera', + chamberLightOff: 'Spegni luce camera', + // Files + browseFiles: 'Sfoglia file stampante', + // Smart plug + autoOffAfterPrint: 'Spegnimento automatico dopo stampa', + autoOffExecuted: 'Spegnimento automatico eseguito - accendi la stampante per reimpostare', + // HMS errors + hmsErrors: 'Errori HMS', + viewHmsErrors: 'Vedi {{count}} errore(i) HMS', + // Actions + resume: 'Riprendi', + pause: 'Pausa', + stop: 'Ferma', + camera: 'Camera', + skipObject: 'Salta Oggetto', + reconnect: 'Riconnetti', + mqttDebug: 'Debug MQTT', + activeNozzle: 'Attivo: ugello {{nozzle}}', + // Firmware + firmwareUpdate: 'Aggiornamento Firmware', + firmwareInstructions: 'Sul touchscreen della stampante, vai a', + firmwareNav: 'Vai a', + settings: 'Impostazioni', + firmware: 'Firmware', + // Discovery + discoverPrinters: 'Trova Stampanti', + searching: 'Ricerca...', + manualEntry: 'Inserimento manuale', + addFromCloud: 'Aggiungi da Cloud', + // Toast messages + toast: { + printerDeleted: 'Stampante eliminata', + printerAdded: 'Stampante aggiunta', + printerUpdated: 'Stampante aggiornata', + failedToDelete: 'Impossibile eliminare stampante', + failedToAdd: 'Impossibile aggiungere stampante', + failedToUpdate: 'Impossibile aggiornare stampante', + commandSent: 'Comando inviato', + failedToSendCommand: 'Impossibile inviare comando', + turnedOn: '{{name}} accesa', + failedToPowerOn: 'Impossibile accendere {{name}}', + scriptTriggered: 'Script avviato', + printStopped: 'Stampa fermata', + printPaused: 'Stampa in pausa', + printResumed: 'Stampa ripresa', + referenceDeleted: 'Riferimento eliminato', + detectionAreaSaved: 'Area rilevamento salvata', + failedToRunScript: 'Impossibile eseguire script', + failedToStopPrint: 'Impossibile fermare stampa', + failedToPausePrint: 'Impossibile mettere in pausa stampa', + failedToResumePrint: 'Impossibile riprendere stampa', + failedToControlChamberLight: 'Impossibile controllare luce camera', + failedToUpdateSetting: 'Impossibile aggiornare impostazione', + failedToSkipObjects: 'Impossibile saltare oggetti', + failedToRereadRfid: 'Impossibile rileggere RFID', + failedToCheckPlate: 'Impossibile controllare piatto', + failedToUpdateLabel: 'Impossibile aggiornare etichetta', + failedToDeleteReference: 'Impossibile eliminare riferimento', + failedToSaveDetectionArea: 'Impossibile salvare area rilevamento', + plateCheckEnabled: 'Controllo piatto abilitato', + plateCheckDisabled: 'Controllo piatto disabilitato', + calibrationSaved: 'Calibrazione salvata!', + calibrationFailed: 'Calibrazione non riuscita', + rfidRereadInitiated: 'Rilettura RFID avviata', + }, + // Connection status + connection: { + connected: 'Connesso', + offline: 'Offline', + }, + // Queue info + queue: { + inQueue: '{{count}} stampa in coda', + inQueue_plural: '{{count}} stampe in coda', + }, + // Controls section + controls: 'Controlli', + // RFID + rfid: { + reread: 'Rileggi RFID', + }, + // Permissions + permission: { + noAdd: 'Non hai il permesso di aggiungere stampanti', + noEdit: 'Non hai il permesso di modificare stampanti', + noDelete: 'Non hai il permesso di eliminare stampanti', + noControl: 'Non hai il permesso di controllare stampanti', + noFiles: 'Non hai il permesso di accedere ai file stampante', + noAmsRfid: 'Non hai il permesso di rileggere AMS RFID', + noSmartPlugControl: 'Non hai il permesso di controllare smart plug', + }, + // Add/Edit modal + modal: { + addTitle: 'Aggiungi Stampante', + editTitle: 'Modifica Stampante', + myPrinter: 'La mia Stampante', + selectModel: 'Seleziona modello...', + locationGroup: 'Posizione / Gruppo (opzionale)', + locationPlaceholder: 'es. Officina, Ufficio, Cantina', + autoArchiveLabel: 'Archivia automaticamente stampe completate', + fromPrinterSettings: 'Dalle impostazioni della stampante', + modelOptional: 'Modello (opzionale)', + saveChanges: 'Salva modifiche', + }, + // Skip objects + skipObjects: { + tooltip: 'Salta oggetti', + onlyWhilePrinting: 'Salta oggetti (solo durante la stampa)', + requiresMultiple: 'Salta oggetti (richiede 2+ oggetti)', + title: 'Salta Oggetti', + matchIdsInfo: 'Abbina gli ID con il display della stampante', + printerShowsIds: 'Lo schermo mostra gli ID oggetto sul piatto', + skipSelected: 'Salta selezionati', + skipping: 'Saltando...', + noObjectsSelected: 'Nessun oggetto selezionato', + selectObjectsToSkip: 'Seleziona gli oggetti da saltare nella stampa corrente', + skipped: 'saltato', + objectsSkipped: 'Oggetti saltati', + activeCount: '{{count}} attivi', + waitForLayer: 'Attendi il layer 2+ per saltare oggetti (attualmente layer {{layer}})', + skip: 'Salta', + }, + // Confirm modals + confirm: { + deleteTitle: 'Elimina Stampante', + deleteMessage: 'Sei sicuro di eliminare "{{name}}"? Questo rimuovera tutte le impostazioni di connessione.', + deleteArchivesNote: 'Tutta la cronologia di stampa sara eliminata definitivamente.', + keepArchivesNote: 'La cronologia sara mantenuta ma non piu associata a questa stampante.', + stopTitle: 'Ferma Stampa', + stopMessage: 'Sei sicuro di fermare la stampa corrente su "{{name}}"? Questo annullera il lavoro di stampa.', + stopButton: 'Ferma Stampa', + pauseTitle: 'Pausa Stampa', + pauseMessage: 'Sei sicuro di mettere in pausa la stampa corrente su "{{name}}"?', + pauseButton: 'Pausa Stampa', + resumeTitle: 'Riprendi Stampa', + resumeMessage: 'Sei sicuro di riprendere la stampa su "{{name}}"?', + resumeButton: 'Riprendi Stampa', + powerOnTitle: 'Accendi Stampante', + powerOnMessage: 'Sei sicuro di accendere "{{name}}"?', + powerOnButton: 'Accendi', + powerOffTitle: 'Spegni Stampante', + powerOffMessage: 'Sei sicuro di spegnere "{{name}}"?', + powerOffWarning: 'AVVISO: "{{name}}" sta stampando! Sei sicuro di spegnere? Questo interrompera la stampa e potrebbe danneggiare la stampante.', + powerOffButton: 'Spegni', + }, + // Discovery + discovery: { + title: 'Trova Stampanti', + searching: 'Ricerca...', + scanning: 'Scansione...', + scanProgress: 'Scansione... {{scanned}}/{{total}}', + foundPrinters: 'Trovate {{count}} stampante(i)', + noPrintersFound: 'Nessuna stampante trovata', + noPrintersFoundSubnet: 'Nessuna stampante trovata nella sottorete specificata.', + noPrintersFoundNetwork: 'Nessuna stampante trovata sulla rete.', + allConfigured: 'Tutte le stampanti trovate sono gia configurate.', + alreadyAdded: 'Gia aggiunta', + select: 'Seleziona', + manualEntry: 'Inserimento manuale', + addFromCloud: 'Aggiungi da Cloud', + subnetToScan: 'Sottorete da scansionare', + dockerNote: 'Docker rilevato. Inserisci la sottorete della stampante in notazione CIDR. Richiede network_mode: host in docker-compose.yml.', + scanSubnet: 'Scansiona sottorete per stampanti', + discoverNetwork: 'Trova stampanti in rete', + scanningSubnet: 'Scansione sottorete per stampanti Bambu...', + scanningNetwork: 'Scansione rete...', + serialRequired: 'Seriale richiesto', + unknown: 'Sconosciuto', + failedToStart: 'Avvio ricerca non riuscito', + }, + // Filaments section + filaments: 'Filamenti', + // Camera + openCameraOverlay: 'Apri overlay camera', + openCameraWindow: 'Apri camera in nuova finestra', + // Firmware + firmwareUpdateAvailable: 'Aggiornamento firmware disponibile: {{current}} → {{latest}}', + firmwareUpdateButton: 'Aggiorna', + // Plate detection + plateDetection: { + noPermission: 'Non hai il permesso di aggiornare stampanti', + enabledClick: 'Controllo piatto abilitato - Clicca per disabilitare', + disabledClick: 'Controllo piatto disabilitato - Clicca per abilitare', + manageCalibration: 'Gestisci calibrazione rilevamento piatto', + calibrationRequired: 'Calibrazione richiesta', + calibrationInstructions: 'Assicurati che il piatto sia completamente vuoto, poi clicca Calibra.', + calibrationDescription: 'La calibrazione salva un\'immagine di riferimento del piatto vuoto. I controlli futuri confronteranno con questo riferimento per rilevare oggetti.', + calibrationTip: 'Suggerimento: Puoi salvare fino a 5 calibrazioni per piatti diversi. Il sistema usa automaticamente la migliore corrispondenza durante il controllo.', + plateEmpty: 'Il piatto sembra vuoto', + objectsDetected: 'Oggetti rilevati sul piatto', + confidence: 'Confidenza', + difference: 'Differenza', + analysisPreview: 'Anteprima analisi:', + analysisLegend: 'Riquadro verde = area rilevamento, overlay rosso = differenze dalla calibrazione', + savedReferences: 'Riferimenti salvati ({{count}}/{{max}})', + deleteReference: 'Elimina riferimento', + labelPlaceholder: 'Etichetta...', + clickToEdit: '{{label}} - Clicca per modificare', + clickToAddLabel: 'Clicca per aggiungere etichetta', + }, + // Fans + fans: { + partCooling: 'Ventola raffreddamento parte', + auxiliary: 'Ventola ausiliaria', + chamber: 'Ventola camera', + }, + // HMS errors + clickToViewHmsErrors: 'Clicca per vedere errori HMS', + estimatedCompletion: 'Tempo completamento stimato', + slotOptions: 'Opzioni slot', + // Firmware modal + firmwareModal: { + title: 'Aggiornamento Firmware', + currentVersion: 'Corrente:', + latestVersion: 'Ultima:', + releaseNotes: 'Note di rilascio', + checkingPrereqs: 'Controllo prerequisiti...', + sdCardReady: 'SD pronta. Clicca sotto per caricare firmware.', + uploadedSuccess: 'Firmware caricato su SD!', + applyInstructions: 'Per applicare l\'aggiornamento sulla stampante:', + step1: 'Sul touchscreen della stampante, vai a Impostazioni', + step2: 'Vai a Firmware', + step3: 'Seleziona Aggiorna da SD', + step4: 'L\'aggiornamento richiede 10-20 minuti', + done: 'Fatto', + starting: 'Avvio...', + uploadFirmware: 'Carica Firmware', + uploadedToast: 'Firmware caricato! Avvia aggiornamento dal display.', + }, + accessCodePlaceholder: 'Lascia vuoto per mantenere quello attuale', + // ROI editor + roi: { + title: 'Area di rilevamento (ROI)', + xStart: 'X Inizio', + yStart: 'Y Inizio', + width: 'Larghezza', + height: 'Altezza', + instruction: 'Regola l\'area di rilevamento per focalizzare il piatto. Il riquadro verde mostra l\'area corrente.', + }, + }, + + // Archives page + archives: { + title: 'Archivi di stampa', + searchPlaceholder: 'Cerca archivi...', + filterByPrinter: 'Filtra per stampante', + filterByStatus: 'Filtra per stato', + sortBy: 'Ordina per', + sortNewest: 'Piu recenti', + sortOldest: 'Meno recenti', + sortName: 'Nome', + sortDuration: 'Durata', + sortLargest: 'Piu grandi', + sortSmallest: 'Piu piccoli', + sortSize: 'Dimensione', + noArchives: 'Nessun archivio trovato', + noArchivesSearch: 'Nessun archivio corrisponde alla ricerca', + noArchivesYet: 'Nessun archivio ancora', + loadingArchives: 'Caricamento archivi...', + releaseToUpload: 'Rilascia per caricare', + showAll: 'Mostra tutti', + showFavoritesOnly: 'Solo preferiti', + gridView: 'Vista griglia', + listView: 'Vista elenco', + calendarView: 'Vista calendario', + manageTags: 'Gestisci tag', + showFailedPrints: 'Mostra stampe fallite', + hideFailedPrints: 'Nascondi stampe fallite', + printTime: 'Tempo di stampa', + filamentUsed: 'Filamento usato', + cost: 'Costo', + reprint: 'Ristampa', + preview: 'Anteprima', + deleteArchive: 'Elimina archivio', + deleteConfirm: 'Sei sicuro di eliminare questo archivio?', + favorite: 'Preferito', + unfavorite: 'Rimuovi dai preferiti', + viewDetails: 'Vedi dettagli', + status: { + completed: 'Completato', + failed: 'Fallito', + stopped: 'Fermato', + }, + toast: { + source3mfAttached: 'Sorgente 3MF allegata: {{filename}}', + failedUploadSource3mf: 'Caricamento sorgente 3MF non riuscito', + source3mfRemoved: 'Sorgente 3MF rimossa', + failedRemoveSource3mf: 'Rimozione sorgente 3MF non riuscita', + f3dAttached: 'F3D allegato: {{filename}}', + failedUploadF3d: 'Caricamento F3D non riuscito', + f3dRemoved: 'F3D rimosso', + failedRemoveF3d: 'Rimozione F3D non riuscita', + timelapseAttached: 'Timelapse allegato: {{filename}}', + timelapseAlreadyAttached: 'Timelapse gia allegato', + noMatchingTimelapse: 'Nessun timelapse corrispondente', + failedScanTimelapse: 'Scansione timelapse non riuscita', + failedAttachTimelapse: 'Allegato timelapse non riuscito', + archiveDeleted: 'Archivio eliminato', + failedDeleteArchive: 'Eliminazione archivio non riuscita', + addedToFavorites: 'Aggiunto ai preferiti', + removedFromFavorites: 'Rimosso dai preferiti', + projectUpdated: 'Progetto aggiornato', + failedUpdateProject: 'Aggiornamento progetto non riuscito', + linkCopied: 'Link copiato negli appunti', + failedCopyLink: 'Copia link non riuscita', + photoDeleted: 'Foto eliminata', + failedDeletePhoto: 'Eliminazione foto non riuscita', + failedDeleteArchives: 'Eliminazione archivi non riuscita', + failedUpdateFavorites: 'Aggiornamento preferiti non riuscito', + exportDownloaded: 'Export scaricato', + exportFailed: 'Export non riuscito', + }, + menu: { + print: 'Stampa', + schedule: 'Programma', + openInBambuStudio: 'Apri in Bambu Studio', + slice: 'Slice', + externalLink: 'Link esterno', + viewOnMakerWorld: 'Vedi su MakerWorld', + preview3d: 'Anteprima 3D', + viewTimelapse: 'Vedi Timelapse', + scanForTimelapse: 'Cerca Timelapse', + downloadSource3mf: 'Scarica Sorgente 3MF', + uploadSource3mf: 'Carica Sorgente 3MF', + replaceSource3mf: 'Sostituisci Sorgente 3MF', + removeSource3mf: 'Rimuovi Sorgente 3MF', + uploadF3d: 'Carica F3D', + replaceF3d: 'Sostituisci F3D', + downloadF3d: 'Scarica F3D', + removeF3d: 'Rimuovi F3D', + download: 'Scarica', + copyDownloadLink: 'Copia link download', + qrCode: 'QR Code', + viewPhotos: 'Vedi foto', + viewPhotosCount: 'Vedi foto ({{count}})', + projectPage: 'Pagina progetto', + addToFavorites: 'Aggiungi ai preferiti', + removeFromFavorites: 'Rimuovi dai preferiti', + edit: 'Modifica', + goToProject: 'Vai al progetto: {{name}}', + addToProject: 'Aggiungi al progetto', + removeFromProject: 'Rimuovi dal progetto', + loading: 'Caricamento...', + noProjectsAvailable: 'Nessun progetto disponibile', + select: 'Seleziona', + deselect: 'Deseleziona', + delete: 'Elimina', + }, + permission: { + noReprint: 'Non hai il permesso di ristampare questo archivio', + noAddToQueue: 'Non hai il permesso di aggiungere alla coda', + noUpdateArchives: 'Non hai il permesso di aggiornare archivi', + noUploadFiles: 'Non hai il permesso di caricare file', + noDownload: 'Non hai il permesso di scaricare archivi', + noCopyLink: 'Non hai il permesso di copiare link download', + noDelete: 'Non hai il permesso di eliminare questo archivio', + noCreate: 'Non hai il permesso di creare archivi', + }, + card: { + previousPlate: 'Piatto precedente', + nextPlate: 'Piatto successivo', + plateNumber: 'Piatto {{index}}', + moreOptions: 'Clic destro per altre opzioni', + addToFavorites: 'Aggiungi ai preferiti', + removeFromFavorites: 'Rimuovi dai preferiti', + cancelled: 'annullato', + failed: 'fallito', + duplicate: 'duplicato', + duplicateTitle: 'Questo modello e stato stampato prima', + openSource3mf: 'Apri sorgente 3MF in Bambu Studio (clic destro per altre opzioni)', + downloadF3d: 'Scarica file design Fusion 360', + viewTimelapse: 'Vedi timelapse', + viewPhoto: 'Vedi 1 foto', + viewPhotos: 'Vedi {{count}} foto', + openFolder: 'Apri cartella: {{name}}', + slicedFile: 'File slice - pronto a stampare', + sourceFile: 'Solo file sorgente - nessuna mappatura AMS disponibile', + gcode: 'GCODE', + source: 'SOURCE', + project: 'Progetto: {{name}}', + estimated: 'Stimato: {{time}}', + actual: 'Reale: {{time}}', + accuracy: 'Accuratezza: {{percent}}%', + filament: '{{weight}}g', + layer: '{{count}} strato', + layers: '{{count}} strati', + object: '{{count}} oggetto', + objects: '{{count}} oggetti', + slicedFor: 'Sliciato per {{model}}', + uploadedBy: 'Caricato da', + noPermissionReprint: 'Non hai il permesso di ristampare', + noPermissionEdit: 'Non hai il permesso di modificare archivi', + noPermissionDelete: 'Non hai il permesso di eliminare archivi', + reprint: 'Ristampa', + schedulePrint: 'Programma Stampa', + schedule: 'Programma', + openInBambuStudio: 'Apri in Bambu Studio', + openInBambuStudioToSlice: 'Apri in Bambu Studio per slice', + slice: 'Slice', + externalLink: 'Link esterno', + makerWorld: 'MakerWorld: {{designer}}', + viewProject: 'Vedi progetto', + noExternalLink: 'Nessun link esterno', + preview3d: 'Anteprima 3D', + download: 'Scarica', + edit: 'Modifica', + delete: 'Elimina', + }, + modal: { + deleteArchive: 'Elimina Archivio', + deleteConfirm: 'Sei sicuro di eliminare "{{name}}"? Questa azione non puo essere annullata.', + deleteButton: 'Elimina', + removeSource3mf: 'Rimuovi Sorgente 3MF', + removeSource3mfConfirm: 'Sei sicuro di rimuovere il file sorgente 3MF da "{{name}}"? Questo eliminera il progetto slicer originale.', + removeButton: 'Rimuovi', + removeF3d: 'Rimuovi F3D', + removeF3dConfirm: 'Sei sicuro di rimuovere il file Fusion 360 da "{{name}}"?', + timelapse: '{{name}} - Timelapse', + selectTimelapse: 'Seleziona Timelapse', + selectTimelapseDesc: 'Nessun abbinamento automatico trovato. Seleziona il timelapse per questa stampa:', + deleteArchives: 'Elimina Archivi', + deleteArchivesConfirm: 'Sei sicuro di eliminare {{count}} archivio(i)? Questa azione non puo essere annullata.', + deleteCount: 'Elimina {{count}}', + }, + page: { + title: 'Archivi', + printsCount: '{{filtered}} di {{total}} stampe', + dropFilesHere: 'Rilascia file .3mf qui', + releaseToUpload: 'Rilascia per caricare', + only3mfSupported: 'Solo file .3mf supportati', + close: 'Chiudi', + selected: '{{count}} selezionati', + selectAll: 'Seleziona tutto', + tags: 'Tag', + project: 'Progetto', + favorite: 'Preferito', + delete: 'Elimina', + toggledFavorites: 'Preferiti aggiornati per {{count}} archivio(i)', + failedUpdateFavorites: 'Aggiornamento preferiti non riuscito', + archivesDeleted: '{{count}} archivio(i) eliminati', + failedDeleteArchives: 'Eliminazione archivi non riuscita', + photoDeleted: 'Foto eliminata', + failedDeletePhoto: 'Eliminazione foto non riuscita', + }, + list: { + name: 'Nome', + printer: 'Stampante', + date: 'Data', + size: 'Dimensione', + actions: 'Azioni', + hasTimelapse: 'Ha timelapse', + }, + }, + + // Queue page + queue: { + title: 'Coda di stampa', + subtitle: 'Programma e gestisci i tuoi lavori di stampa', + addToQueue: 'Aggiungi alla coda', + // Print modal + print: 'Stampa', + reprint: 'Ristampa', + schedulePrint: 'Programma Stampa', + editQueueItem: 'Modifica elemento coda', + printToPrinters: 'Stampa su {{count}} Stampanti', + queueToPrinters: 'Metti in coda su {{count}} Stampanti', + sending: 'Invio...', + sendingProgress: 'Invio {{current}}/{{total}}...', + adding: 'Aggiunta...', + addingProgress: 'Aggiunta {{current}}/{{total}}...', + savingProgress: 'Salvataggio {{current}}/{{total}}...', + clearQueue: 'Svuota coda', + clearHistory: 'Svuota cronologia', + emptyQueue: 'La coda e vuota', + position: 'Posizione', + scheduledTime: 'Ora programmata', + moveUp: 'Sposta su', + moveDown: 'Sposta giu', + startNow: 'Avvia ora', + printingInProgress: 'Stampa in corso...', + viewArchive: 'Vedi archivio', + viewInFileManager: 'Vedi nel Gestore file', + itemCount: '{{count}} elemento', + itemCount_plural: '{{count}} elementi', + dragToReorder: 'Trascina per riordinare (solo ASAP)', + reorderHint: 'La posizione influisce solo sugli elementi ASAP. Quelli programmati partono all\'orario.', + addedBy: 'Aggiunto da {{name}}', + // Sections + sections: { + currentlyPrinting: 'In stampa', + queued: 'In coda', + history: 'Cronologia', + }, + // Status + status: { + pending: 'In attesa', + waiting: 'In attesa', + printing: 'In stampa', + paused: 'In pausa', + completed: 'Completato', + failed: 'Fallito', + skipped: 'Saltato', + cancelled: 'Annullato', + }, + // Summary cards + summary: { + printing: 'In stampa', + queued: 'In coda', + totalTime: 'Tempo totale coda', + history: 'Cronologia', + }, + // Filters + filter: { + allPrinters: 'Tutte le stampanti', + unassigned: 'Non assegnato', + allStatus: 'Tutti gli stati', + allLocations: 'Tutte le posizioni', + any: 'Qualsiasi', + }, + // Sort + sort: { + byPosition: 'Ordina per posizione', + byName: 'Ordina per nome', + byPrinter: 'Ordina per stampante', + bySchedule: 'Ordina per programma', + byDate: 'Ordina per data', + ascendingOldest: 'Crescente (piu vecchi)', + descendingNewest: 'Decrescente (piu recenti)', + }, + // Badges + badges: { + staged: 'In staging', + requiresPrevious: 'Richiede successo precedente', + autoPowerOff: 'Spegnimento automatico', + }, + // Empty state + empty: { + title: 'Nessuna stampa programmata', + description: 'Programma una stampa dalla pagina Archivi usando l\'opzione "Programma" nel menu contestuale, o trascina i file per iniziare.', + }, + // Time + time: { + asap: 'ASAP', + overdue: 'Scaduto', + now: 'Ora', + lessThanMinute: 'Tra meno di un minuto', + inMinutes: 'Tra {{count}} min', + inHours: 'Tra {{count}} ore', + }, + // Actions + actions: { + stopPrint: 'Ferma Stampa', + startPrint: 'Avvia Stampa', + requeue: 'Rimetti in coda', + }, + // Bulk edit + bulkEdit: { + title: 'Modifica {{count}} elemento', + title_plural: 'Modifica {{count}} elementi', + description: 'Solo le impostazioni modificate saranno applicate agli elementi selezionati.', + printer: 'Stampante', + noChange: '— Nessun cambio —', + queueOptions: 'Opzioni coda', + staged: 'In staging (avvio manuale)', + autoPowerOff: 'Spegnimento automatico dopo stampa', + requirePrevious: 'Richiede successo precedente', + printOptions: 'Opzioni stampa', + bedLevelling: 'Livellamento piatto', + flowCalibration: 'Calibrazione flusso', + vibrationCalibration: 'Calibrazione vibrazioni', + layerInspection: 'Controllo primo layer', + timelapse: 'Timelapse', + useAms: 'Usa AMS', + applyChanges: 'Applica modifiche', + selectAll: 'Seleziona tutto', + deselectAll: 'Deseleziona tutto', + selected: '{{count}} selezionati', + editSelected: 'Modifica selezionati', + cancelSelected: 'Annulla selezionati', + }, + // Confirmations + confirm: { + cancelTitle: 'Annulla stampa programmata', + cancelMessage: 'Sei sicuro di annullare "{{name}}"?', + stopTitle: 'Ferma Stampa', + stopMessage: 'Sei sicuro di fermare la stampa corrente "{{name}}"? Questo annullera il lavoro sulla stampante.', + removeTitle: 'Rimuovi dalla cronologia', + removeMessage: 'Sei sicuro di rimuovere "{{name}}" dalla cronologia coda?', + clearHistoryTitle: 'Svuota cronologia', + clearHistoryMessage: 'Sei sicuro di rimuovere {{count}} elemento(i) dalla cronologia?', + cancelButton: 'Annulla Stampa', + stopButton: 'Ferma Stampa', + thisPrint: 'questa stampa', + thisItem: 'questo elemento', + }, + // Toast messages + toast: { + cancelled: 'Elemento coda annullato', + cancelFailed: 'Annullamento non riuscito', + removed: 'Elemento coda rimosso', + removeFailed: 'Rimozione non riuscita', + stopped: 'Stampa fermata', + stopFailed: 'Impossibile fermare stampa', + released: 'Stampa rilasciata in coda', + startFailed: 'Avvio stampa non riuscito', + reorderFailed: 'Riordino coda non riuscito', + historyCleared: 'Cancellati {{count}} elementi cronologia', + clearHistoryFailed: 'Svuotamento cronologia non riuscito', + updateFailed: 'Aggiornamento elementi non riuscito', + bulkCancelled: 'Annullati {{count}} elementi', + bulkCancelFailed: 'Annullamento elementi non riuscito', + }, + // Permissions + permissions: { + noStopPrint: 'Non hai il permesso di fermare stampe', + noStartPrint: 'Non hai il permesso di avviare stampe', + noEdit: 'Non hai il permesso di modificare questo elemento coda', + noCancel: 'Non hai il permesso di annullare questo elemento coda', + noRequeue: 'Non hai il permesso di rimettere in coda elementi', + noRemove: 'Non hai il permesso di rimuovere questo elemento coda', + noClearHistory: 'Non hai il permesso di svuotare tutta la cronologia', + noEditItems: 'Non hai il permesso di modificare elementi coda', + noCancelItems: 'Non hai il permesso di annullare elementi coda', + }, + }, + + // Statistics page + stats: { + title: 'Dashboard', + subtitle: 'Trascina i widget per riordinare. Clicca l\'icona occhio per nascondere.', + overview: 'Panoramica', + totalPrints: 'Stampe totali', + successRate: 'Tasso di successo', + totalPrintTime: 'Tempo totale di stampa', + printTime: 'Tempo di stampa', + totalFilament: 'Filamento totale usato', + filamentUsed: 'Filamento usato', + filamentCost: 'Costo filamento', + totalCost: 'Costo totale', + energyUsed: 'Energia usata', + energyCost: 'Costo energia', + averagePrintTime: 'Tempo medio di stampa', + printsPerDay: 'Stampe al giorno', + byPrinter: 'Per stampante', + printsByPrinter: 'Stampe per stampante', + byMaterial: 'Per materiale', + byMonth: 'Per mese', + last7Days: 'Ultimi 7 giorni', + last30Days: 'Ultimi 30 giorni', + last90Days: 'Ultimi 90 giorni', + allTime: 'Sempre', + // Widgets + quickStats: 'Statistiche rapide', + printActivity: 'Attivita di stampa', + filamentTypes: 'Tipi di filamento', + filamentTrends: 'Trend filamento', + failureAnalysis: 'Analisi guasti', + timeAccuracy: 'Accuratezza tempo', + successful: 'Riuscite:', + failed: 'Fallite:', + perfectEstimate: '100% = stima perfetta', + noTimeAccuracyData: 'Nessun dato accuratezza tempo', + noFilamentData: 'Nessun dato filamento', + noPrinterData: 'Nessun dato stampante', + noPrintData: 'Nessun dato stampa', + noPrintDataLast30Days: 'Nessun dato stampa negli ultimi 30 giorni', + failureReasons: 'Cause guasto', + topFailureReasons: 'Cause principali', + failedPrintsCount: '{{failed}} / {{total}} stampe fallite', + lastWeekRate: 'Settimana scorsa: {{rate}}%', + // Actions + resetLayout: 'Reimposta layout', + recalculateCosts: 'Ricalcola costi', + recalculateCostsHint: 'Ricalcola tutti i costi archivi usando i prezzi filamento correnti', + exportStats: 'Esporta statistiche', + exportAsCsv: 'Esporta come CSV', + exportAsExcel: 'Esporta come Excel', + hiddenCount: '{{count}} Nascosti', + // Toast + exportDownloaded: 'Export scaricato', + exportFailed: 'Export non riuscito', + layoutReset: 'Layout reimpostato', + recalculatedCosts: 'Costi ricalcolati per {{count}} archivi', + recalculateFailed: 'Ricalcolo costi non riuscito', + // Loading + loadingStats: 'Caricamento statistiche...', + // Permissions + noPermissionResetLayout: 'Non hai il permesso di reimpostare il layout', + noPermissionRecalculate: 'Non hai il permesso di ricalcolare i costi', + }, + + // Maintenance page + maintenance: { + title: 'Manutenzione', + overview: 'Panoramica', + allOk: 'Tutta la manutenzione aggiornata', + dueCount: '{{count}} elemento in scadenza', + dueCount_plural: '{{count}} elementi in scadenza', + warningCount: '{{count}} avviso', + warningCount_plural: '{{count}} avvisi', + totalPrintTime: 'Tempo totale di stampa', + nextMaintenance: 'Prossima manutenzione', + nothingDue: 'Niente in scadenza', + tasks: 'Attivita', + lastPerformed: 'Ultima esecuzione', + interval: 'Intervallo', + hoursRemaining: '{{hours}}h rimanenti', + hoursOverdue: '{{hours}}h in ritardo', + markDone: 'Segna come fatto', + performMaintenance: 'Esegui manutenzione', + history: 'Cronologia', + noHistory: 'Nessuna cronologia manutenzione', + editPrintHours: 'Modifica ore stampa', + currentHours: 'Ore attuali', + // Tabs + statusTab: 'Stato', + settingsTab: 'Impostazioni', + // Status + overdueCount: '{{count}} in ritardo', + dueSoonCount: '{{count}} in scadenza', + dueSoon: 'In scadenza', + allGood: 'Tutto ok', + overdueBy: 'In ritardo di {{duration}}', + dueIn: 'Scade tra {{duration}}', + timeLeft: '{{duration}} rimanenti', + // Duration formats + day: '1 giorno', + days: '{{count}} giorni', + week: '1 settimana', + weeks: '{{count}} settimane', + month: '1 mese', + months: '{{count}} mesi', + year: '1 anno', + // Settings + maintenanceTypes: 'Tipi di manutenzione', + maintenanceTypesDescription: 'Tipi di sistema e tue attivita personalizzate', + addCustomType: 'Aggiungi tipo personalizzato', + intervalType: 'Tipo intervallo', + intervalValue: 'Intervallo ({{type}})', + icon: 'Icona', + documentationLink: 'Link documentazione (opzionale)', + assignToPrinters: 'Assegna alle stampanti', + selectAtLeastOnePrinter: 'Seleziona almeno una stampante', + addType: 'Aggiungi tipo', + custom: 'Personalizzato', + printHours: 'Ore di stampa', + calendarDays: 'Giorni calendario', + exampleName: 'es. Sostituisci filtro HEPA', + viewDocumentation: 'Vedi documentazione', + timeBasedInterval: 'Intervallo basato sul tempo', + // Interval overrides + intervalOverrides: 'Override intervallo', + intervalOverridesDescription: 'Personalizza intervalli per stampanti specifiche', + // Printer assignment + assignedToPrinters: 'Assegnato alle stampanti:', + noPrintersAssigned: 'Nessuna stampante assegnata', + addPrinterShort: 'Aggiungi:', + printersAssignedClick: '{{count}} stampante(i) assegnata - clicca per gestire', + removeFromPrinter: 'Rimuovi da questa stampante', + // Types + types: { + lubricateRails: 'Lubrifica guide lineari', + cleanNozzle: 'Pulisci ugello/Hotend', + checkBelts: 'Controlla tensione cinghie', + cleanBuildPlate: 'Pulisci piatto', + checkExtruder: 'Controlla ingranaggi estrusore', + checkCooling: 'Controlla ventole raffreddamento', + generalInspection: 'Ispezione generale', + cleanCarbonRods: 'Pulisci aste in carbonio', + checkPtfeTube: 'Controlla tubo PTFE', + replaceHepaFilter: 'Sostituisci filtro HEPA', + replaceCarbonFilter: 'Sostituisci filtro carbone', + lubricateLeftNozzleRail: 'Lubrifica guida ugello sinistro', + }, + // Toast + maintenanceComplete: 'Manutenzione segnata come completata', + typeUpdated: 'Tipo manutenzione aggiornato', + typeDeleted: 'Tipo manutenzione eliminato', + printHoursUpdated: 'Ore di stampa aggiornate', + printerAssigned: 'Stampante assegnata', + printerRemoved: 'Stampante rimossa', + // Confirmation + deleteTypeConfirm: 'Eliminare "{{name}}"?', + // Permissions + noPermissionUpdate: 'Non hai il permesso di aggiornare elementi manutenzione', + noPermissionPerform: 'Non hai il permesso di eseguire manutenzione', + noPermissionEditTypes: 'Non hai il permesso di modificare tipi manutenzione', + noPermissionDeleteTypes: 'Non hai il permesso di eliminare tipi manutenzione', + noPermissionEditHours: 'Non hai il permesso di modificare ore stampa', + noPermissionRemovePrinter: 'Non hai il permesso di rimuovere assegnazioni stampanti', + noPermissionAssignPrinter: 'Non hai il permesso di assegnare stampanti', + noPermissionEditIntervals: 'Non hai il permesso di modificare intervalli', + // Configure link + configureSettings: 'Configura tipi e intervalli manutenzione', + }, + + // Settings page + settings: { + title: 'Impostazioni', + general: 'Generale', + // Tab names + tabs: { + general: 'Generale', + smartPlugs: 'Prese smart', + notifications: 'Notifiche', + filament: 'Filamento', + network: 'Rete', + apiKeys: 'Chiavi API', + virtualPrinter: 'Stampante virtuale', + users: 'Utenti', + backup: 'Backup', + }, + appearance: 'Aspetto', + notifications: 'Notifiche', + smartPlugs: 'Prese smart', + spoolman: 'Spoolman', + updates: 'Aggiornamenti', + language: 'Lingua', + languageDescription: 'Seleziona la lingua preferita', + theme: 'Tema', + themeLight: 'Chiaro', + themeDark: 'Scuro', + themeSystem: 'Sistema', + defaultView: 'Vista predefinita', + defaultViewDescription: "Pagina da mostrare all'apertura dell'app", + checkForUpdates: 'Controlla aggiornamenti', + autoUpdate: 'Aggiornamento automatico', + currentVersion: 'Versione attuale', + latestVersion: 'Ultima versione', + upToDate: 'Sei aggiornato', + updateAvailable: 'Aggiornamento disponibile', + // Notifications + notificationLanguage: 'Lingua notifiche', + notificationLanguageDescription: 'Lingua per notifiche push', + notificationProviders: 'Provider notifiche', + addProvider: 'Aggiungi provider', + editProvider: 'Modifica provider', + providerType: 'Tipo provider', + testNotification: 'Notifica di test', + testSuccess: 'Notifica di test inviata', + testFailed: 'Invio notifica di test fallito', + quietHours: 'Ore silenziose', + quietHoursDescription: 'Non disturbare in queste ore', + quietHoursStart: 'Inizio', + quietHoursEnd: 'Fine', + events: { + title: 'Eventi notifica', + printStart: 'Stampa avviata', + printComplete: 'Stampa completata', + printFailed: 'Stampa fallita', + printStopped: 'Stampa interrotta', + printProgress: 'Avanzamento', + printProgressDescription: 'Notifica al 25%, 50%, 75%', + printerOffline: 'Stampante offline', + printerError: 'Errore stampante', + filamentLow: 'Filamento in esaurimento', + maintenanceDue: 'Manutenzione dovuta', + maintenanceDueDescription: 'Notifica quando serve manutenzione', + }, + // Smart Plugs + smartPlug: { + title: 'Prese smart', + add: 'Aggiungi presa smart', + edit: 'Modifica presa smart', + name: 'Nome', + ipAddress: 'Indirizzo IP', + linkedPrinter: 'Stampante collegata', + autoOn: 'Accensione automatica', + autoOnDescription: 'Accendi all\'avvio stampa', + autoOff: 'Spegnimento automatico', + autoOffDescription: 'Spegni dopo il completamento', + offDelay: 'Ritardo spegnimento', + offDelayMinutes: 'Minuti dopo la stampa', + offDelayTemp: 'Quando ugello sotto temperatura', + currentState: 'Stato attuale', + turnOn: 'Accendi', + turnOff: 'Spegni', + }, + // Spoolman + spoolmanEnabled: 'Abilita integrazione Spoolman', + spoolmanUrl: 'URL Spoolman', + spoolmanConnected: 'Connesso', + spoolmanDisconnected: 'Disconnesso', + // Default printer + noDefaultPrinter: 'Nessuna predefinita (chiedi ogni volta)', + // Sidebar + sidebarOrder: 'Ordine barra laterale', + // Camera + saveThumbnails: 'Salva miniature', + captureFinishPhoto: 'Acquisisci foto finale', + noPrintersConfigured: 'Nessuna stampante configurata', + // Archive settings + archiveMode: { + always: 'Crea sempre voce archivio', + never: 'Non creare mai voce archivio', + ask: 'Chiedi ogni volta', + }, + // Updates + checkForUpdatesLabel: 'Controlla aggiornamenti', + checkPrinterFirmware: 'Controlla firmware stampante', + // Queue + enableRetry: 'Abilita retry', + // Home Assistant + homeAssistantDescription: 'Controlla prese smart tramite Home Assistant', + // MQTT + mqttConnectedTo: 'Connesso a', + // Prometheus + prometheusDescription: 'Esponi dati stampante in formato Prometheus', + // Smart plugs empty state + noSmartPlugsTitle: 'Nessuna presa smart configurata', + noSmartPlugsDescription: 'Aggiungi una presa smart Tasmota per monitorare energia e automatizzare il controllo.', + // Notifications empty state + noProvidersTitle: 'Nessun provider configurato', + noProvidersDescription: 'Aggiungi un provider per ricevere avvisi.', + noTemplatesAvailable: 'Nessun template disponibile. Riavvia il backend per generare i template predefiniti.', + // API permissions + apiPermissionView: 'Visualizza stato stampante e coda', + apiPermissionEdit: 'Aggiungi e rimuovi elementi dalla coda di stampa', + // API keys + apiKeysEmptyTitle: 'Nessuna chiave API', + apiKeysEmptyDescription: 'Crea una chiave API per integrare servizi esterni.', + // Users + noUsersFound: 'Nessun utente trovato', + noGroupsFound: 'Nessun gruppo trovato', + noGroupsAvailable: 'Nessun gruppo disponibile', + passwordsDoNotMatch: 'Le password non coincidono', + systemGroupWarning: 'I nomi dei gruppi di sistema non possono essere modificati', + // Auth disabled + authDisabledTitle: 'Autenticazione disabilitata', + authDisabledFeature1: 'Richiedi accesso per usare il sistema', + authDisabledFeature2: 'Crea piu utenti con permessi basati sui gruppi', + authDisabledFeature3: 'Controlla accesso con 50+ permessi granulari', + // User deletion + userHasCreated: 'Questo utente ha creato:', + userItemsQuestion: 'Cosa vuoi fare con questi elementi?', + deleteUserConfirm: 'Sei sicuro di voler eliminare questo utente?', + actionCannotBeUndone: 'Questa azione non puo essere annullata.', + // Smart plugs + addFirstSmartPlug: 'Aggiungi la tua prima presa smart', + // Notifications + providers: 'Provider', + log: 'Log', + testAll: 'Testa tutto', + testResults: 'Risultati test', + testPassedCount: '{{count}} riusciti', + testFailedCount: '{{count}} falliti', + messageTemplates: 'Template messaggi', + messageTemplatesDescription: 'Personalizza i messaggi per ogni evento.', + // API Keys section + apiKeys: 'Chiavi API', + apiKeysDescription: 'Crea chiavi API per integrazioni esterne e webhook.', + createKey: 'Crea chiave', + apiKeyCreated: 'Chiave API creata con successo', + apiKeyCopyWarning: "Copia questa chiave ora - non verra mostrata di nuovo!", + useInApiBrowser: 'Usa nel Browser API', + createNewApiKey: 'Crea nuova chiave API', + keyName: 'Nome chiave', + keyNamePlaceholder: 'es., Home Assistant, OctoPrint', + readStatus: 'Leggi stato', + readStatusDescription: 'Visualizza stato stampante e coda', + manageQueue: 'Gestisci coda', + manageQueueDescription: 'Aggiungi e rimuovi elementi dalla coda di stampa', + controlPrinter: 'Controlla stampante', + controlPrinterDescription: 'Metti in pausa, riprendi e ferma stampe', + unnamedKey: 'Chiave senza nome', + lastUsed: 'Ultimo uso', + read: 'Lettura', + control: 'Controllo', + createFirstKey: 'Crea la tua prima chiave', + webhookEndpoints: 'Endpoint webhook', + webhookApiKeyHint: "Usa la tua chiave API nell'header X-API-Key.", + webhook: { + getAllStatus: 'Ottieni stato di tutte le stampanti', + getSpecificStatus: 'Ottieni stato di una stampante', + addToQueue: 'Aggiungi alla coda di stampa', + pausePrint: 'Metti in pausa stampa', + resumePrint: 'Riprendi stampa', + stopPrint: 'Ferma stampa', + }, + apiBrowser: 'Browser API', + apiBrowserDescription: 'Esplora e testa tutti gli endpoint API disponibili.', + apiKeyForTesting: 'Chiave API per test', + apiKeyPlaceholder: 'Incolla qui la tua chiave API per testare gli endpoint autenticati...', + apiKeyHint: "Questa chiave verra inviata come header X-API-Key.", + deleteApiKeyTitle: 'Elimina chiave API', + deleteApiKeyMessage: 'Sei sicuro di voler eliminare questa chiave API? Le integrazioni che la usano non funzioneranno piu.', + deleteKey: 'Elimina chiave', + // Filament tab + amsDisplayThresholds: 'Soglie visualizzazione AMS', + amsThresholdsDescription: 'Configura soglie colore per umidita e temperatura AMS.', + humidity: 'Umidita', + goodGreen: 'Buono (verde)', + fairOrange: 'Discreto (arancione)', + aboveFairBad: 'Sopra soglia discreta mostra rosso (scarso)', + temperature: 'Temperatura', + goodBlue: 'Buono (blu)', + aboveFairHot: 'Sopra soglia discreta mostra rosso (caldo)', + historyRetention: 'Conservazione cronologia', + keepSensorHistory: 'Mantieni cronologia sensori per', + historyRetentionDescription: 'I dati piu vecchi saranno eliminati automaticamente', + printModal: 'Modale stampa', + expandCustomMapping: 'Espandi mapping personalizzato di default', + expandCustomMappingDescription: 'Quando stampi su piu stampanti, mostra mapping AMS per stampante espanso', + // User management + authentication: 'Autenticazione', + authEnabledDescription: 'La tua istanza e protetta con autenticazione', + authDisabledDescription: 'Abilita per richiedere accesso e gestire utenti', + authDisabledMessage: 'Abilita autenticazione per creare account, gestire permessi e proteggere la tua istanza Bambuddy.', + enableAuthentication: 'Abilita autenticazione', + currentUser: 'Utente corrente', + changePassword: 'Cambia password', + admin: 'Admin', + users: 'Utenti', + addUser: 'Aggiungi utente', + groups: 'Gruppi', + addGroup: 'Aggiungi gruppo', + system: 'Sistema', + noDescription: 'Nessuna descrizione', + userCount: '{{count}} utenti', + permissionCount: '{{count}} permessi', + createUser: 'Crea utente', + username: 'Nome utente', + enterUsername: 'Inserisci nome utente', + password: 'Password', + enterPassword: 'Inserisci password (min 6 caratteri)', + confirmPassword: 'Conferma password', + confirmPasswordPlaceholder: 'Conferma password', + // Title tooltips + viewReleaseOnGitHub: 'Vedi release su GitHub', + turnAllPlugsOn: 'Accendi tutte le prese', + turnAllPlugsOff: 'Spegni tutte le prese', + // Modal: Clear logs + clearNotificationLogs: 'Cancella log notifiche', + clearLogsMessage: 'Questo eliminera definitivamente tutti i log notifiche piu vecchi di 30 giorni. Questa azione non puo essere annullata.', + clearLogs: 'Cancella log', + // Modal: Reset UI + resetUiPreferences: 'Reimposta preferenze UI', + resetUiPreferencesMessage: 'Questo reimpostera le preferenze UI ai valori predefiniti: ordine barra laterale, tema, layout dashboard, modalita vista e preferenze ordinamento. Stampanti, archivi e impostazioni server NON saranno modificati. La pagina si ricarichera dopo la cancellazione.', + resetPreferences: 'Reimposta preferenze', + // Modal: Delete group + deleteGroupTitle: 'Elimina gruppo', + deleteGroupMessage: 'Sei sicuro di voler eliminare questo gruppo? Gli utenti in questo gruppo perderanno questi permessi.', + deleteGroup: 'Elimina gruppo', + // Modal: Disable auth + disableAuthenticationTitle: 'Disabilita autenticazione', + disableAuthenticationMessage: "Sei sicuro di voler disabilitare l'autenticazione? Questo rendera la tua istanza Bambuddy accessibile senza login. Tutti gli utenti resteranno nel database ma l'autenticazione sara disabilitata.", + disableAuthentication: 'Disabilita autenticazione', + // Additional settings + configureBambuddy: 'Configura Bambuddy', + systemDefault: 'Predefinito di sistema', + archiveSettings: 'Impostazioni archivio', + newWindow: 'Nuova finestra', + embeddedOverlay: 'Overlay incorporato', + externalCameras: 'Camere esterne', + costTracking: 'Tracciamento costi', + printsOnly: 'Solo stampe', + totalConsumption: 'Consumo totale', + dataManagement: 'Gestione dati', + clearNotificationLogsDescription: 'Elimina log notifiche piu vecchi di 30 giorni', + resetUiPreferencesDescription: 'Reimposta ordine barra laterale, tema, modalita vista e preferenze layout. Stampanti, archivi e impostazioni non vengono modificati.', + enableHomeAssistant: 'Abilita Home Assistant', + enableMqtt: 'Abilita MQTT', + useTls: 'Usa TLS', + enableMetricsEndpoint: 'Abilita endpoint metriche', + availableMetrics: 'Metriche disponibili', + editUser: 'Modifica utente', + deleteUserTitle: 'Elimina utente', + groupName: 'Nome gruppo', + // Placeholders + leaveEmptyForAnonymous: 'Lascia vuoto per anonimo', + leaveEmptyForNoAuth: 'Lascia vuoto per nessuna autenticazione', + enterNewPassword: 'Inserisci nuova password', + confirmNewPassword: 'Conferma nuova password', + enterGroupName: 'Inserisci nome gruppo', + enterDescriptionOptional: 'Inserisci descrizione (opzionale)', + enterCurrentPassword: 'Inserisci password attuale', + enterNewPasswordMin6: 'Inserisci nuova password (min 6 caratteri)', + toast: { + keyCopied: 'Chiave copiata negli appunti', + copyFailed: 'Copia chiave fallita', + keyAddedToBrowser: 'Chiave aggiunta al Browser API', + clearLogsFailed: 'Eliminazione log fallita', + uiPreferencesReset: 'Preferenze UI reimpostate. Aggiornamento...', + authDisabled: 'Autenticazione disabilitata con successo', + authDisableFailed: 'Disabilitazione autenticazione fallita', + apiKeyCreated: 'Chiave API creata', + apiKeyDeleted: 'Chiave API eliminata', + userCreated: 'Utente creato con successo', + userUpdated: 'Utente aggiornato con successo', + userDeleted: 'Utente eliminato con successo', + groupCreated: 'Gruppo creato con successo', + groupUpdated: 'Gruppo aggiornato con successo', + groupDeleted: 'Gruppo eliminato con successo', + fillRequiredFields: 'Compila tutti i campi obbligatori', + passwordsDoNotMatch: 'Le password non coincidono', + passwordTooShort: 'La password deve essere di almeno 6 caratteri', + enterGroupName: 'Inserisci un nome gruppo', + settingsSaved: 'Impostazioni salvate', + cameraSettingsSaved: 'Impostazioni camera salvate', + enterCameraUrl: 'Inserisci un URL camera', + passwordChanged: 'Password cambiata con successo', + connectionFailed: 'Connessione fallita', + testFailed: 'Test fallito', + cameraConnected: 'Camera connessa{{resolution}}', + }, + testConnection: 'Testa connessione', + }, + + // Notifications (for push notifications) + notification: { + printStarted: { + title: 'Stampa avviata', + body: '{{printer}}: {{filename}} ha iniziato a stampare', + }, + printCompleted: { + title: 'Stampa completata', + body: '{{printer}}: {{filename}} completata con successo', + }, + printFailed: { + title: 'Stampa fallita', + body: '{{printer}}: {{filename}} fallita', + }, + printStopped: { + title: 'Stampa interrotta', + body: '{{printer}}: {{filename}} interrotta', + }, + printProgress: { + title: 'Avanzamento stampa', + body: '{{printer}}: {{filename}} al {{percent}}% completamento', + }, + printerOffline: { + title: 'Stampante offline', + body: '{{printer}} e offline', + }, + printerError: { + title: 'Errore stampante', + body: '{{printer}}: {{error}}', + }, + filamentLow: { + title: 'Filamento in esaurimento', + body: '{{printer}}: Filamento in esaurimento', + }, + maintenanceDue: { + title: 'Manutenzione dovuta', + body: '{{printer}}: {{items}} richiedono attenzione', + }, + }, + + // Errors + errors: { + generic: 'Qualcosa e andato storto', + networkError: 'Errore di rete. Controlla la connessione.', + notFound: 'Non trovato', + unauthorized: 'Non autorizzato', + serverError: 'Errore server', + validationError: 'Controlla i dati inseriti', + printerConnectionFailed: 'Connessione alla stampante fallita', + saveFailed: 'Salvataggio modifiche fallito', + deleteFailed: 'Eliminazione fallita', + loadFailed: 'Caricamento dati fallito', + }, + + // HMS Errors modal + hmsErrors: { + title: 'Errori - {{name}}', + noErrors: 'Nessun errore', + viewOnWiki: 'Vedi su Bambu Lab Wiki', + clearInstructions: 'Cancella gli errori sulla stampante per rimuoverli qui.', + }, + + // MQTT Debug modal + mqttDebug: { + title: 'Log debug MQTT', + searchPlaceholder: 'Cerca topic o payload...', + noMessages: 'Nessun messaggio registrato', + startLoggingHint: 'Clicca "Avvia logging" per iniziare a catturare messaggi MQTT', + noMessagesMatch: 'Nessun messaggio corrisponde al filtro', + adjustFilterHint: 'Prova a modificare la ricerca o i filtri', + incoming: 'In ingresso', + outgoing: 'In uscita', + loggingStopped: 'Logging fermato', + loggingActive: 'Logging attivo - i messaggi si aggiornano automaticamente', + startLogging: 'Avvia logging', + stopLogging: 'Ferma logging', + clearLog: 'Pulisci log', + topic: 'Topic', + timestamp: 'Timestamp', + direction: 'Direzione', + all: 'Tutti', + }, + + // Printer File Manager modal (printer internal storage) + printerFiles: { + title: 'Gestore file', + storageUsed: 'Usato:', + storageFree: 'Libero:', + filterPlaceholder: 'Filtra file...', + deleteButton: 'Elimina', + deleteFiles: 'Elimina {{count}} file', + deleteFileConfirm: 'Eliminare "{{name}}"? Questa azione non puo essere annullata.', + deleteFilesConfirm: 'Eliminare {{count}} file selezionati? Questa azione non puo essere annullata.', + noFiles: 'Nessun file sulla stampante', + loadingFiles: 'Caricamento file...', + failedToLoad: 'Caricamento file fallito', + toast: { + filesDeleted: 'Eliminati {{count}} file', + deleteFailed: 'Eliminazione fallita: {{error}}', + }, + }, + + // Confirmations + confirm: { + delete: 'Sei sicuro di voler eliminare questo?', + unsavedChanges: 'Hai modifiche non salvate. Sei sicuro di voler uscire?', + clearQueue: 'Sei sicuro di voler svuotare la coda?', + }, + + // Login page + login: { + title: 'Login Bambuddy', + subtitle: 'Accedi al tuo account', + username: 'Nome utente', + usernamePlaceholder: 'Inserisci il nome utente', + password: 'Password', + passwordPlaceholder: 'Inserisci la password', + signIn: 'Accedi', + signingIn: 'Accesso in corso...', + forgotPassword: 'Hai dimenticato la password?', + loginSuccess: 'Accesso riuscito', + loginFailed: 'Accesso fallito', + enterCredentials: 'Inserisci nome utente e password', + forgotPasswordTitle: 'Password dimenticata', + forgotPasswordMessage: 'Se hai dimenticato la password, contatta il tuo amministratore di sistema per reimpostarla.', + howToReset: 'Come reimpostare la password:', + resetStep1: 'Contatta il tuo amministratore Bambuddy', + resetStep2: 'Chiedi di reimpostare la password in Gestione utenti', + resetStep3: 'Possono impostare una nuova password temporanea', + resetStep4: 'Accedi con la nuova password e cambiala in Impostazioni', + gotIt: 'Capito', + }, + + // Setup page + setup: { + title: 'Configurazione Bambuddy', + subtitle: 'Configura autenticazione per la tua istanza Bambuddy', + enableAuth: 'Abilita autenticazione', + adminAccount: 'Account admin', + adminAccountDesc: 'Se esistono gia admin, l\'autenticazione verra abilitata usando gli account esistenti. Lascia i campi sotto vuoti per usare gli admin esistenti, oppure inserisci nuove credenziali per creare un nuovo utente admin.', + adminUsername: 'Nome utente admin', + adminPassword: 'Password admin', + optionalIfAdminExists: '(opzionale se esistono admin)', + adminUsernamePlaceholder: 'Inserisci nome utente admin (opzionale)', + adminPasswordPlaceholder: 'Inserisci password admin (opzionale)', + confirmPassword: 'Conferma password', + confirmPasswordPlaceholder: 'Conferma password admin', + settingUp: 'Configurazione...', + completeSetup: 'Completa configurazione', + toast: { + authEnabledAdminCreated: 'Autenticazione abilitata e utente admin creato', + authEnabledExistingAdmins: 'Autenticazione abilitata usando admin esistenti', + setupCompleted: 'Configurazione completata', + enterBothCredentials: 'Inserisci nome utente e password admin, oppure lascia entrambi vuoti per usare admin esistenti', + passwordsDoNotMatch: 'Le password non coincidono', + passwordTooShort: 'La password deve essere di almeno 6 caratteri', + }, + }, + + // Password change + changePassword: { + title: 'Cambia password', + currentPassword: 'Password attuale', + currentPasswordPlaceholder: 'Inserisci password attuale', + newPassword: 'Nuova password', + newPasswordPlaceholder: 'Inserisci nuova password (min 6 caratteri)', + confirmPassword: 'Conferma nuova password', + confirmPasswordPlaceholder: 'Conferma nuova password', + passwordsDoNotMatch: 'Le password non coincidono', + passwordTooShort: 'La password deve essere di almeno 6 caratteri', + changing: 'Modifica in corso...', + success: 'Password cambiata con successo', + failed: 'Modifica password fallita', + }, + + // Plate detection alert + plateAlert: { + title: 'Stampa in pausa!', + message: 'Oggetti rilevati sul piatto. La stampa e stata messa automaticamente in pausa. Svuota il piatto e riprendi la stampa.', + understand: 'Ho capito', + }, + + // Camera page + camera: { + title: 'Vista camera', + invalidPrinterId: 'ID stampante non valido', + live: 'Live', + snapshot: 'Snapshot', + restartStream: 'Riavvia stream', + refreshSnapshot: 'Aggiorna snapshot', + fullscreen: 'Schermo intero', + exitFullscreen: 'Esci da schermo intero', + connectingToCamera: 'Connessione alla camera...', + capturingSnapshot: 'Acquisizione snapshot...', + connectionLost: 'Connessione persa', + connectionFailed: 'Connessione camera fallita', + reconnecting: 'Riconnessione tra {{countdown}}s... (tentativo {{attempt}}/{{max}})', + reconnectNow: 'Riconnetti ora', + cameraUnavailable: 'Camera non disponibile', + cameraUnavailableDesc: 'Assicurati che la stampante sia accesa e connessa.', + noCamera: 'Nessuna camera disponibile', + retry: 'Riprova', + cameraStream: 'Stream camera', + zoomOut: 'Zoom indietro', + zoomIn: 'Zoom avanti', + resetZoom: 'Reset zoom', + recording: 'Registrazione', + startRecording: 'Avvia registrazione', + stopRecording: 'Ferma registrazione', + }, + + // Groups management + groups: { + title: 'Gestione gruppi', + subtitle: 'Gestisci gruppi permessi per controllo accesso', + backToSettings: 'Torna a Impostazioni', + createGroup: 'Crea gruppo', + noPermission: 'Non hai il permesso di accedere a questa pagina.', + system: 'Sistema', + noDescription: 'Nessuna descrizione', + usersCount: '{{count}} utenti', + permissionsCount: '{{count}} permessi', + edit: 'Modifica', + delete: 'Elimina', + toast: { + created: 'Gruppo creato con successo', + updated: 'Gruppo aggiornato con successo', + deleted: 'Gruppo eliminato con successo', + enterGroupName: 'Inserisci un nome gruppo', + }, + modal: { + editGroup: 'Modifica gruppo', + createGroup: 'Crea gruppo', + cancel: 'Annulla', + saving: 'Salvataggio...', + creating: 'Creazione...', + saveChanges: 'Salva modifiche', + }, + form: { + groupName: 'Nome gruppo', + groupNamePlaceholder: 'Inserisci nome gruppo', + systemGroupWarning: 'I nomi dei gruppi di sistema non possono essere modificati', + description: 'Descrizione', + descriptionPlaceholder: 'Inserisci descrizione (opzionale)', + permissions: 'Permessi ({{count}} selezionati)', + }, + deleteModal: { + title: 'Elimina gruppo', + message: 'Sei sicuro di voler eliminare questo gruppo? Gli utenti in questo gruppo perderanno questi permessi.', + confirm: 'Elimina gruppo', + }, + }, + + // Users management + users: { + title: 'Gestione utenti', + subtitle: 'Gestisci utenti e accesso alla tua istanza Bambuddy', + backToSettings: 'Torna a Impostazioni', + createUser: 'Crea utente', + noPermission: 'Non hai il permesso di accedere a questa pagina.', + admin: 'Admin', + noGroups: 'Nessun gruppo', + active: 'Attivo', + inactive: 'Inattivo', + edit: 'Modifica', + delete: 'Elimina', + system: 'Sistema', + noGroupsAvailable: 'Nessun gruppo disponibile', + table: { + username: 'Nome utente', + groups: 'Gruppi', + status: 'Stato', + actions: 'Azioni', + }, + toast: { + created: 'Utente creato con successo', + updated: 'Utente aggiornato con successo', + deleted: 'Utente eliminato con successo', + fillRequired: 'Compila tutti i campi obbligatori', + passwordsDoNotMatch: 'Le password non coincidono', + passwordTooShort: 'La password deve essere di almeno 6 caratteri', + }, + modal: { + createUser: 'Crea utente', + editUser: 'Modifica utente', + cancel: 'Annulla', + creating: 'Creazione...', + saving: 'Salvataggio...', + saveChanges: 'Salva modifiche', + }, + form: { + username: 'Nome utente', + usernamePlaceholder: 'Inserisci nome utente', + password: 'Password', + passwordPlaceholder: 'Inserisci password', + confirmPassword: 'Conferma password', + confirmPasswordPlaceholder: 'Conferma password', + newPasswordPlaceholder: 'Inserisci nuova password', + confirmNewPasswordPlaceholder: 'Conferma nuova password', + leaveBlankToKeep: 'lascia vuoto per mantenere attuale', + groups: 'Gruppi', + }, + deleteModal: { + title: 'Elimina utente', + message: 'Sei sicuro di voler eliminare questo utente? Questa azione non puo essere annullata.', + confirm: 'Elimina utente', + }, + }, + + // Stream overlay + streamOverlay: { + title: 'Overlay stream', + invalidPrinterId: 'ID stampante non valido', + cameraStream: 'Stream camera', + progress: 'Avanzamento', + eta: 'ETA', + tomorrow: 'Domani', + printerIdle: 'Stampante inattiva', + printerOffline: 'Stampante offline', + status: { + printing: 'In stampa', + paused: 'In pausa', + finished: 'Completata', + failed: 'Fallita', + idle: 'Inattiva', + unknown: 'Sconosciuto', + }, + }, + + // Profiles + profiles: { + title: 'Profili', + subtitle: 'Gestisci preset slicer e calibrazioni pressure advance', + tabs: { + cloud: 'Profili cloud', + kprofiles: 'K-Profiles', + }, + connectedAs: 'Connesso come', + logout: 'Esci', + noLogoutPermission: 'Non hai il permesso di disconnetterti', + failedToLoad: 'Caricamento profili fallito', + retry: 'Riprova', + time: { + justNow: 'Proprio ora', + minsAgo: '{{count}}m fa', + hoursAgo: '{{count}}h fa', + daysAgo: '{{count}}g fa', + }, + toast: { + loggedOut: 'Disconnesso', + }, + login: { + title: 'Connetti a Bambu Cloud', + subtitle: 'Sincronizza i preset del slicer tra dispositivi', + email: 'Email', + password: 'Password', + region: 'Regione', + regionGlobal: 'Globale', + regionChina: 'Cina', + verificationCode: 'Codice di verifica', + totpCode: 'Codice autenticatore', + checkEmail: 'Controlla la tua email ({{email}}) per un codice a 6 cifre', + enterTotpHint: 'Inserisci il codice a 6 cifre dalla tua app autenticatore', + accessToken: 'Access Token', + accessTokenHint: 'Incolla il tuo access token Bambu Lab (da Bambu Studio)', + back: 'Indietro', + loginButton: 'Accedi', + verifyButton: 'Verifica', + setTokenButton: 'Imposta token', + useToken: 'Usa access token invece', + useEmail: 'Accedi con email invece', + toast: { + loggedIn: 'Accesso riuscito', + codeSent: 'Codice di verifica inviato via email', + enterTotp: 'Inserisci il codice dalla tua app autenticatore', + tokenSet: 'Token impostato con successo', + }, + }, + presets: { + myPreset: 'Il mio preset (modificabile)', + duplicate: 'Duplica', + editable: 'Modificabile', + failedToLoadDetails: 'Caricamento dettagli preset fallito', + deleteConfirm: 'Eliminare questo preset?', + deleteWarning: 'Questo eliminera definitivamente "{{name}}" da Bambu Cloud. Questa azione non puo essere annullata.', + noDuplicatePermission: 'Non hai il permesso di duplicare preset', + noEditPermission: 'Non hai il permesso di modificare preset', + noDeletePermission: 'Non hai il permesso di eliminare preset', + types: { + filament: 'Preset filamento', + printer: 'Preset stampante', + process: 'Preset processo', + }, + toast: { + deleted: 'Preset eliminato', + created: 'Preset creato', + updated: 'Preset aggiornato', + duplicated: 'Preset duplicato', + fieldAdded: 'Campo "{{key}}" aggiunto', + exported: 'Preset esportato', + }, + baseLabel: 'Base: {{name}}', + currentLabel: 'Corrente: {{name}}', + newPreset: 'Nuovo preset', + editPreset: 'Modifica preset', + duplicatePreset: 'Duplica preset', + createNewPreset: 'Crea nuovo preset', + customizeSettings: 'Personalizza le impostazioni per il nuovo preset', + compareWithBase: 'Confronta con base', + compare: 'Confronta', + // CreatePresetModal - Basic Info + basePreset: 'Preset base', + selectBasePreset: 'Seleziona preset base...', + presetName: 'Nome preset', + myCustomPreset: 'Il mio preset personalizzato', + inheritsFrom: 'Deriva da', + dropJsonToImport: 'Rilascia JSON per importare', + // CreatePresetModal - Tabs + tabs: { + common: 'Comune', + allFields: 'Tutti i campi', + }, + // CreatePresetModal - All Fields Tab + availableFields: 'Campi disponibili', + searchFieldsPlaceholder: 'Cerca campi...', + noMatchingFields: 'Nessun campo corrispondente', + allFieldsAdded: 'Tutti i campi aggiunti', + addCustomField: 'Aggiungi campo personalizzato', + yourOverrides: 'Le tue override', + noOverridesYet: 'Nessun override ancora', + clickFieldsToAdd: 'Clicca i campi a sinistra per aggiungerli', + saveAsTemplate: 'Salva come template', + jsonTip: 'Suggerimento: trascina e rilascia un file .json ovunque in questa modale per importare impostazioni', + }, + cloudView: { + searchPlaceholder: 'Cerca preset...', + templates: 'Template', + refresh: 'Aggiorna', + newPreset: 'Nuovo preset', + clearFilters: 'Pulisci filtri', + // Compare mode + compareMode: 'Modalita confronto', + selectAnotherPreset: 'Seleziona un altro preset {{type}}', + clickTwoPresets: 'Clicca due preset dello stesso tipo per confrontare', + selectFirst: '1. Seleziona il primo', + selectSecond: '2. Seleziona il secondo', + compareNow: 'Confronta ora', + // Status row + lastSynced: 'Ultima sincronizzazione:', + showingCount: 'Mostrati {{showing}} di {{total}} preset', + noPresetsFound: 'Nessun preset trovato', + // Column headers + columns: { + filament: 'Filamento', + process: 'Processo', + printer: 'Stampante', + }, + noFilamentPresets: 'Nessun preset filamento', + noProcessPresets: 'Nessun preset processo', + noPrinterPresets: 'Nessun preset stampante', + // Filters + filters: { + type: 'Tipo', + owner: 'Proprietario', + printer: 'Stampante', + nozzle: 'Ugello', + filament: 'Filamento', + layer: 'Layer', + all: 'Tutti', + myPresets: 'I miei preset', + builtIn: 'Integrati', + process: 'Processo', + }, + // Permissions + noTemplatesPermission: 'Non hai il permesso di gestire i template', + noRefreshPermission: 'Non hai il permesso di aggiornare i profili', + noCreatePermission: 'Non hai il permesso di creare preset', + }, + templates: { + title: 'Template rapidi', + noTemplates: 'Nessun template ancora', + createFirst: 'Crea template dall\'editor preset', + typeFilter: 'Tipo:', + deleteTitle: 'Elimina template', + deleteWarning: 'Questa azione non puo essere annullata', + deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?', + namePlaceholder: 'Nome template', + descriptionPlaceholder: 'Descrizione', + settingsJson: 'Impostazioni (JSON)', + fieldsCount: '{{count}} campi', + shownInModals: 'Mostrati nelle modali', + hiddenInModals: 'Nascosti nelle modali', + apply: 'Applica', + toast: { + deleted: 'Template eliminato', + updated: 'Template aggiornato', + created: 'Template creato', + applied: 'Template applicato', + }, + }, + }, + + // Support/Debug + support: { + debugLoggingActive: 'Log debug attivo', + manageLogs: 'Gestisci', + }, + + // File manager + fileManager: { + title: 'Gestore file', + subtitle: 'Organizza e gestisci i tuoi file di stampa', + uploadFiles: 'Carica file', + newFolder: 'Nuova cartella', + folderName: 'Nome cartella', + folderNamePlaceholder: 'es., Parti funzionali', + renameFile: 'Rinomina file', + renameFolder: 'Rinomina cartella', + moveFiles: 'Sposta {{count}} file', + rootNoFolder: 'Radice (nessuna cartella)', + current: 'corrente', + linkFolder: 'Collega cartella', + linkFolderDescription: 'Collega "{{name}}" a un progetto o archivio per accesso rapido.', + project: 'Progetto', + archive: 'Archivio', + noProjectsFound: 'Nessun progetto trovato', + noArchivesFound: 'Nessun archivio trovato', + unlink: 'Scollega', + link: 'Collega', + dragDropFiles: 'Trascina e rilascia file qui', + dropFilesHere: 'Rilascia file qui', + orClickToBrowse: 'oppure clicca per sfogliare', + allFileTypesSupported: 'Tutti i tipi di file supportati. I file ZIP saranno estratti.', + zipFilesDetected: 'File ZIP rilevati', + zipExtractOptions: 'I file ZIP saranno estratti. Scegli come gestire la struttura cartelle:', + preserveZipStructure: 'Mantieni struttura cartelle dal ZIP', + createFolderFromZip: 'Crea cartella dal nome ZIP', + stlThumbnailGeneration: 'Generazione miniature STL', + zipMayContainStl: 'I file ZIP possono contenere STL. Le miniature possono essere generate durante l\'estrazione.', + thumbnailsCanBeGenerated: 'Le miniature possono essere generate per file STL. I modelli grandi possono richiedere piu tempo.', + generateThumbnailsForStl: 'Genera miniature per file STL', + threemfDetected: 'File 3MF rilevati', + threemfExtractionInfo: 'Modello stampante, materiale, colore e impostazioni stampa saranno estratti automaticamente dai file 3MF.', + willBeExtracted: 'Sara estratto', + filesExtracted: '{{count}} file estratti', + uploadComplete: 'Caricamento completato: {{succeeded}} riusciti', + uploadFailed: '{{count}} falliti', + uploading: 'Caricamento...', + changeLink: 'Cambia collegamento...', + linkTo: 'Collega a...', + linkToProjectOrArchive: 'Collega a progetto o archivio', + addToQueue: 'Aggiungi alla coda', + schedulePrint: 'Pianifica', + generateThumbnail: 'Genera miniatura', + generateThumbnails: 'Genera miniature', + generateThumbnailsForMissing: 'Genera miniature per STL senza miniatura', + gridView: 'Vista griglia', + listView: 'Vista elenco', + lowDiskSpaceWarning: 'Avviso spazio disco basso', + lowDiskSpaceDetails: 'Solo {{free}} liberi su {{total}} totali. La soglia e {{threshold}} GB nelle impostazioni.', + files: 'File', + folders: 'Cartelle', + size: 'Dimensione', + free: 'Libero', + allFiles: 'Tutti i file', + wrap: 'A capo', + enableTextWrapping: 'Abilita a capo testo', + disableTextWrapping: 'Disabilita a capo testo', + dragToResizeTooltip: 'Trascina per ridimensionare, doppio clic per reset', + searchFiles: 'Cerca file...', + allTypes: 'Tutti i tipi', + prints: 'Stampe', + ascending: 'Crescente', + descending: 'Decrescente', + resultsCount: '{{showing}} di {{total}} file', + selectAll: 'Seleziona tutto', + deselectAll: 'Deseleziona tutto', + selected: '{{count}} selezionati', + adding: 'Aggiunta...', + loadingFiles: 'Caricamento file...', + folderIsEmpty: 'La cartella e vuota', + noFilesYet: 'Nessun file ancora', + folderEmptyDescription: 'Carica file o sposta file in questa cartella per iniziare.', + noFilesDescription: 'Carica file per iniziare a organizzare i file di stampa.', + noMatchingFiles: 'Nessun file corrispondente', + noMatchingFilesDescription: 'Nessun file corrisponde ai criteri di ricerca o filtro.', + clearFilters: 'Pulisci filtri', + printedCount: 'Stampato {{count}}x', + uploadedBy: 'Caricato da', + deleteFolder: 'Elimina cartella', + deleteFile: 'Elimina file', + deleteFilesCount: 'Elimina {{count}} file', + deleteFolderConfirm: 'Sei sicuro di voler eliminare questa cartella? Tutti i file dentro saranno eliminati.', + deleteFileConfirm: 'Sei sicuro di voler eliminare questo file?', + deleteFilesConfirm: 'Sei sicuro di voler eliminare {{count}} file selezionati? Questa azione non puo essere annullata.', + deleting: 'Eliminazione...', + noPermissionRenameFolder: 'Non hai il permesso di rinominare cartelle', + noPermissionLinkFolder: 'Non hai il permesso di collegare cartelle', + noPermissionDeleteFolder: 'Non hai il permesso di eliminare cartelle', + noPermissionPrint: 'Non hai il permesso di stampare', + noPermissionAddToQueue: 'Non hai il permesso di aggiungere alla coda', + noPermissionDownload: 'Non hai il permesso di scaricare file', + noPermissionRenameFile: 'Non hai il permesso di rinominare questo file', + noPermissionGenerateThumbnail: 'Non hai il permesso di generare miniature', + noPermissionDeleteFile: 'Non hai il permesso di eliminare questo file', + noPermissionCreateFolder: 'Non hai il permesso di creare cartelle', + noPermissionUpload: 'Non hai il permesso di caricare file', + noPermissionMoveFiles: 'Non hai il permesso di spostare file', + noPermissionDeleteFiles: 'Non hai il permesso di eliminare file', + toast: { + folderCreated: 'Cartella creata', + folderDeleted: 'Cartella eliminata', + fileDeleted: 'File eliminato', + filesDeleted: 'Eliminati {{count}} file', + filesMoved: 'File spostati', + folderLinked: 'Cartella collegata', + folderUnlinked: 'Cartella scollegata', + addedToQueue: 'Aggiunti {{count}} file alla coda', + addedToQueuePartial: 'Aggiunti {{added}} file, {{failed}} falliti', + failedToAddToQueue: 'Aggiunta file fallita: {{error}}', + fileRenamed: 'File rinominato', + folderRenamed: 'Cartella rinominata', + thumbnailsGenerated: 'Generate {{count}} miniature', + thumbnailsGeneratedPartial: 'Generate {{succeeded}} miniature, {{failed}} fallite', + noStlMissingThumbnails: 'Nessun file STL senza miniature', + failedToGenerateThumbnails: 'Generazione miniature fallita: {{error}}', + thumbnailGenerated: 'Miniatura generata', + failedToGenerateThumbnail: 'Generazione miniatura fallita: {{error}}', + }, + }, + + // Projects + projects: { + title: 'Progetti', + subtitle: 'Organizza e traccia i tuoi progetti di stampa 3D', + newProject: 'Nuovo progetto', + editProject: 'Modifica progetto', + deleteProject: 'Elimina progetto', + projectName: 'Nome progetto', + description: 'Descrizione', + noProjects: 'Nessun progetto ancora', + noProjectsFiltered: 'Nessun progetto {{status}}', + noProjectsFilteredHelp: 'Non hai progetti {{status}}. I progetti appariranno qui quando il loro stato cambia.', + createFirst: 'Crea il tuo primo progetto per organizzare stampe correlate, tracciare progressi e gestire i tuoi build.', + createFirstButton: 'Crea il tuo primo progetto', + create: 'Crea', + files: 'File', + prints: 'Stampe', + plates: 'piatti', + parts: 'parti', + lastModified: 'Ultima modifica', + deleteConfirm: 'Sei sicuro di voler eliminare questo progetto? Archivi e elementi in coda saranno scollegati ma non eliminati.', + addFiles: 'Aggiungi file', + removeFile: 'Rimuovi file', + viewDetails: 'Vedi dettagli', + // Modal fields + namePlaceholder: 'es., Build Voron 2.4', + descriptionPlaceholder: 'Descrizione opzionale...', + color: 'Colore', + targetPlates: 'Piatti target', + targetPlatesPlaceholder: 'es., 25', + targetPlatesHelp: 'Numero di job di stampa', + targetParts: 'Parti target', + targetPartsPlaceholder: 'es., 150', + targetPartsHelp: 'Totale oggetti necessari', + tagsLabel: 'Tag (separati da virgola)', + tagsPlaceholder: 'es., voron, funzionale, regalo', + dueDate: 'Data scadenza', + priority: 'Priorita', + priorityLow: 'Bassa', + priorityNormal: 'Normale', + priorityHigh: 'Alta', + priorityUrgent: 'Urgente', + // Status + statusActive: 'Attivo', + statusCompleted: 'Completato', + statusArchived: 'Archiviato', + done: 'Fatto', + completed: 'completato', + failed: 'fallito', + inQueue: 'in coda', + noPrintsYet: 'Nessuna stampa ancora', + // Footer stats + printJobs: 'Job di stampa (piatti)', + partsPrinted: 'Parti stampate', + failedParts: 'Parti fallite', + // Actions + import: 'Importa', + export: 'Esporta', + importProject: 'Importa progetto', + exportAll: 'Esporta tutti i progetti', + loading: 'Caricamento progetti...', + // Permissions + noEditPermission: 'Non hai il permesso di modificare progetti', + noDeletePermission: 'Non hai il permesso di eliminare progetti', + noCreatePermission: 'Non hai il permesso di creare progetti', + noImportPermission: 'Non hai il permesso di importare progetti', + noExportPermission: 'Non hai il permesso di esportare progetti', + // Toast + toast: { + created: 'Progetto creato', + updated: 'Progetto aggiornato', + deleted: 'Progetto eliminato', + imported: 'Progetto importato', + multipleImported: '{{count}} progetti importati', + importFailed: 'Import fallito', + exported: 'Progetti esportati (solo metadati)', + }, + }, + + // Project detail page + projectDetail: { + notFound: 'Progetto non trovato', + backToProjects: 'Torna a Progetti', + export: 'Esporta', + exportProject: 'Esporta progetto', + noExportPermission: 'Non hai il permesso di esportare progetti', + noEditPermission: 'Non hai il permesso di modificare progetti', + partOf: 'Parte di:', + priorityLabel: 'Priorita:', + noPrints: 'Nessuna stampa in questo progetto ancora', + status: { + active: 'Attivo', + completed: 'Completato', + archived: 'Archiviato', + }, + priority: { + low: 'Bassa', + normal: 'Normale', + high: 'Alta', + urgent: 'Urgente', + }, + dueDate: { + overdue: 'Scaduto', + today: 'Scade oggi', + daysLeft: '{{count}} giorni rimanenti', + }, + progress: { + platesProgress: 'Avanzamento piatti', + partsProgress: 'Avanzamento parti', + printJobs: 'job di stampa', + parts: 'parti', + percentComplete: '{{percent}}% completato', + remaining: '{{count}} rimanenti', + }, + stats: { + printJobs: 'Job di stampa', + total: 'totale', + failed: '{{count}} falliti', + partsPrinted: '{{count}} parti stampate', + printTime: 'Tempo di stampa', + filamentUsed: 'Filamento usato', + }, + cost: { + title: 'Tracciamento costi', + filamentCost: 'Costo filamento', + energy: 'Energia', + budget: 'Budget', + remaining: 'Rimanente', + }, + subProjects: { + title: 'Sotto-progetti ({{count}})', + }, + notes: { + title: 'Note', + noEditPermission: 'Non hai il permesso di modificare le note', + placeholder: 'Aggiungi note su questo progetto...', + empty: 'Nessuna nota ancora. Clicca Modifica per aggiungere note.', + }, + files: { + title: 'File', + linkFolders: 'Collega cartelle dal Gestore file', + forQuickAccess: 'a questo progetto per accesso rapido.', + fileCount: '{{count}} file', + empty: 'Nessuna cartella collegata. Vai a Gestore file e collega una cartella a questo progetto.', + }, + bom: { + title: 'Distinta materiali', + acquired: '{{completed}}/{{total}} acquisiti', + showAll: 'Mostra tutti', + hideDone: 'Nascondi completati', + addPart: 'Aggiungi parte', + noAddPermission: 'Non hai il permesso di aggiungere parti', + partNamePlaceholder: 'Nome parte (es., viti M3x8)', + partName: 'Nome parte', + qty: 'Qta', + price: 'Prezzo ({{currency}})', + sourcingUrlPlaceholder: 'URL fornitura (opzionale)', + remarksPlaceholder: 'Note (opzionale)', + deletePart: 'Elimina parte', + deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?', + noUpdatePermission: 'Non hai il permesso di aggiornare parti', + noEditPermission: 'Non hai il permesso di modificare parti', + noDeletePermission: 'Non hai il permesso di eliminare parti', + totalCost: 'Costo totale:', + empty: 'Nessuna parte nella distinta materiali. Aggiungi hardware, elettronica o altri componenti da reperire.', + }, + timeline: { + title: 'Timeline attivita', + empty: 'Nessuna attivita ancora.', + }, + template: { + saveAsTemplate: 'Salva come template', + noCreatePermission: 'Non hai il permesso di creare template', + }, + queue: { + title: 'Coda', + viewAll: 'Vedi tutto', + printing: '{{count}} in stampa', + queued: '{{count}} in coda', + }, + prints: { + title: 'Stampe ({{count}})', + }, + toast: { + projectUpdated: 'Progetto aggiornato', + partAdded: 'Parte aggiunta', + partRemoved: 'Parte rimossa', + exportFailed: 'Export fallito', + projectExported: 'Progetto esportato', + templateCreated: 'Template creato', + }, + }, + + // System info + system: { + title: 'Informazioni sistema', + version: 'Versione', + uptime: 'Tempo attivo', + cpuUsage: 'Uso CPU', + memoryUsage: 'Uso memoria', + diskUsage: 'Uso disco', + networkInfo: 'Info rete', + logs: 'Log', + debugMode: 'Modalita debug', + enableDebug: 'Abilita log debug', + disableDebug: 'Disabilita log debug', + downloadLogs: 'Scarica log', + clearLogs: 'Cancella log', + dockerInfo: 'Info Docker', + containerName: 'Nome container', + imageName: 'Nome immagine', + platform: 'Piattaforma', + architecture: 'Architettura', + }, + + // Library (K Profiles) + library: { + title: 'Libreria filamenti', + addFilament: 'Aggiungi filamento', + editFilament: 'Modifica filamento', + deleteFilament: 'Elimina filamento', + vendor: 'Produttore', + material: 'Materiale', + color: 'Colore', + kFactor: 'K Factor', + temperature: 'Temperatura', + noFilaments: 'Nessun filamento in libreria', + deleteConfirm: 'Sei sicuro di voler eliminare questo filamento?', + importFromPrinter: 'Importa da stampante', + exportToFile: 'Esporta su file', + }, + + // Spoolman + spoolman: { + title: 'Integrazione Spoolman', + enabled: 'Spoolman abilitato', + url: 'URL Spoolman', + connected: 'Connesso', + disconnected: 'Non connesso', + testConnection: 'Testa connessione', + sync: 'Sincronizza', + syncing: 'Sincronizzazione...', + lastSync: 'Ultima sincronizzazione', + linkToSpoolman: 'Collega a Spoolman', + openInSpoolman: 'Apri in Spoolman', + unlinkSpool: 'Scollega bobina', + selectSpool: 'Seleziona bobina', + noUnlinkedSpools: 'Nessuna bobina scollegata disponibile', + linkSuccess: 'Bobina collegata a Spoolman con successo', + linkFailed: 'Collegamento bobina fallito', + spoolId: 'ID bobina', + weight: 'Peso', + remaining: 'Rimanente', + disableWeightSync: 'Disabilita sync peso stimato AMS', + disableWeightSyncDesc: 'Non aggiornare la capacita rimanente dalle stime AMS. Usalo se preferisci il tracciamento di Spoolman rispetto alle stime AMS. Le nuove bobine useranno comunque la stima AMS come peso iniziale.', + reportPartialUsage: 'Segnala uso parziale per stampe fallite', + reportPartialUsageDesc: 'Quando una stampa fallisce o viene annullata, segnala il filamento stimato usato fino a quel punto in base all\'avanzamento layer.', + }, + + // Timelapse + timelapse: { + title: 'Timelapse', + create: 'Crea timelapse', + download: 'Scarica', + delete: 'Elimina', + preview: 'Anteprima', + frameRate: 'Frame rate', + quality: 'Qualita', + processing: 'Elaborazione...', + noTimelapses: 'Nessun timelapse disponibile', + }, + + // AMS + ams: { + title: 'AMS', + slot: 'Slot', + empty: 'Vuoto', + emptySlot: 'Slot vuoto', + unknown: 'Sconosciuto', + humidity: 'Umidita', + temperature: 'Temperatura', + filamentType: 'Tipo filamento', + filamentColor: 'Colore', + remaining: 'Rimanente', + history: 'Cronologia AMS', + noHistory: 'Nessuna cronologia disponibile', + configureSlot: 'Configura slot', + externalSpool: 'Bobina esterna', + profile: 'Profilo', + kFactor: 'K Factor', + fill: 'Riempi', + configure: 'Configura', + }, + + // Print modal + printModal: { + title: 'Avvia stampa', + selectPrinter: 'Seleziona stampante', + selectPlate: 'Seleziona piatto', + filamentMapping: 'Mappatura filamento', + printSettings: 'Impostazioni stampa', + bedLeveling: 'Livellamento piatto', + flowCalibration: 'Calibrazione flusso', + vibrationCalibration: 'Calibrazione vibrazioni', + layerInspection: 'Ispezione primo layer', + timelapse: 'Timelapse', + startPrint: 'Avvia stampa', + addToQueue: 'Aggiungi alla coda', + cancel: 'Annulla', + noPrintersAvailable: 'Nessuna stampante disponibile', + printerBusy: 'Stampante occupata', + printerOffline: 'Stampante offline', + }, + + // Backup + backup: { + title: 'Backup e ripristino', + createBackup: 'Crea backup', + restoreBackup: 'Ripristina backup', + restoreDescription: 'Sostituisci tutti i dati da un file di backup', + downloadBackup: 'Scarica backup', + uploadBackup: 'Carica backup', + lastBackup: 'Ultimo backup', + autoBackup: 'Backup automatico', + backupNow: 'Esegui backup ora', + restoreWarning: 'Avviso: il ripristino sovrascrivera tutti i dati attuali.', + includeArchives: 'Includi archivi', + includeSettings: 'Includi impostazioni', + includeProfiles: 'Includi profili', + backupSuccess: 'Backup creato con successo', + restoreSuccess: 'Backup ripristinato con successo', + backupFailed: 'Backup fallito', + restoreFailed: 'Ripristino fallito', + restoreNote: 'La stampante virtuale verra fermata durante il ripristino', + }, + + // Tags + tags: { + title: 'Tag', + addTag: 'Aggiungi tag', + editTag: 'Modifica tag', + deleteTag: 'Elimina tag', + tagName: 'Nome tag', + tagColor: 'Colore tag', + noTags: 'Nessun tag', + deleteConfirm: 'Sei sicuro di voler eliminare questo tag?', + manageTags: 'Gestisci tag', + }, + + // Upload modal (archives) + uploadModal: { + title: 'Carica file 3MF', + dragDrop: 'Trascina e rilascia file .3mf qui', + or: 'o', + browseFiles: 'Sfoglia file', + extractionInfo: 'Il modello stampante sara estratto automaticamente dai metadati del file 3MF.', + uploaded: 'caricati', + failed: 'falliti', + uploading: 'Caricamento...', + upload: 'Carica', + uploadFailed: 'Caricamento fallito', + }, + + // Edit archive modal + editArchive: { + title: 'Modifica archivio', + name: 'Nome', + namePlaceholder: 'Nome stampa', + printer: 'Stampante', + noPrinter: 'Nessuna stampante', + project: 'Progetto', + noProject: 'Nessun progetto', + itemsPrinted: 'Elementi stampati', + itemsPrintedHelp: 'Numero di elementi prodotti in questo job di stampa', + notes: 'Note', + notesPlaceholder: 'Aggiungi note su questa stampa...', + externalLink: 'Link esterno', + externalLinkPlaceholder: 'https://printables.com/model/...', + externalLinkHelp: 'Link a Printables, Thingiverse o altra fonte', + tags: 'Tag', + tagsPlaceholder: 'Aggiungi tag...', + addMoreTags: 'Aggiungi altri tag...', + matchingTags: 'Tag corrispondenti "{{query}}"', + existingTags: 'Tag esistenti', + clickToAdd: '(clicca per aggiungere)', + status: 'Stato', + failureReason: 'Motivo fallimento', + selectReason: 'Seleziona motivo...', + photos: 'Foto del risultato stampato', + photosHelp: 'Clicca + per aggiungere foto del risultato stampato', + printResult: 'Risultato stampa', + saving: 'Salvataggio...', + // Failure reasons + failureReasons: { + adhesionFailure: 'Fallimento adesione', + spaghettiDetached: 'Spaghetti / staccato', + layerShift: 'Spostamento layer', + cloggedNozzle: 'Ugello intasato', + filamentRunout: 'Filamento esaurito', + warping: 'Warping', + stringing: 'Stringing', + underExtrusion: 'Sotto-estrusione', + powerFailure: 'Mancanza corrente', + userCancelled: 'Annullato dall\'utente', + other: 'Altro', + }, + // Archive statuses + statuses: { + completed: 'Completato', + failed: 'Fallito', + aborted: 'Annullato', + printing: 'In stampa', + }, + }, + + // K-Profiles + kProfiles: { + title: 'K-Profiles', + noPrintersConfigured: 'Nessuna stampante configurata', + addPrinterInSettings: 'Aggiungi una stampante in Impostazioni per gestire i K-profiles', + noActivePrinters: 'Nessuna stampante attiva', + enablePrinterConnection: 'Abilita una connessione stampante per vedere i K-profiles', + loadingProfiles: 'Caricamento K-Profiles...', + printerOffline: 'Stampante offline', + printerOfflineDesc: 'La stampante selezionata non e connessa. Accendila per vedere i K-profiles.', + noMatchingProfiles: 'Nessun profilo corrispondente', + noMatchingProfilesDesc: 'Nessun profilo corrisponde ai criteri di ricerca', + noKProfiles: 'Nessun K-Profile', + noKProfilesDesc: 'Nessun profilo pressure advance per ugello da {{diameter}}mm', + createFirstProfile: 'Crea primo profilo', + // Controls + printer: 'Stampante', + nozzle: 'Ugello', + refresh: 'Aggiorna', + addProfile: 'Aggiungi profilo', + export: 'Esporta', + import: 'Importa', + select: 'Seleziona', + selectAll: 'Seleziona tutto', + delete: 'Elimina', + // Filters + searchPlaceholder: 'Cerca per nome o filamento...', + allExtruders: 'Tutti gli estrusori', + leftOnly: 'Solo sinistro', + rightOnly: 'Solo destro', + allFlow: 'Tutto flow', + hfOnly: 'Solo HF', + sOnly: 'Solo S', + sortName: 'Ordina: Nome', + sortKValue: 'Ordina: K-Value', + sortFilament: 'Ordina: Filamento', + // Dual extruder labels + leftExtruder: 'Estrusore sinistro', + rightExtruder: 'Estrusore destro', + // Modal + modal: { + addTitle: 'Aggiungi K-Profile', + editTitle: 'Modifica K-Profile', + profileName: 'Nome profilo', + profileNamePlaceholder: 'Il mio profilo PLA', + kValue: 'K-Value', + kValuePlaceholder: '0.020', + kValueHelp: 'Intervallo tipico: 0.01 - 0.06 per PLA, 0.02 - 0.10 per PETG', + filament: 'Filamento', + selectFilament: 'Seleziona filamento...', + noFilamentsHelp: 'Nessun filamento trovato. Crea prima un K-profile in Bambu Studio.', + flowType: 'Tipo flow', + highFlow: 'High Flow', + standard: 'Standard', + nozzleSize: 'Dimensione ugello', + extruder: 'Estrusore', + extruders: 'Estrusori', + left: 'Sinistra', + right: 'Destra', + notes: 'Note (salvate localmente)', + notesPlaceholder: 'Aggiungi note su questo profilo...', + notesHelp: 'Le note sono salvate in Bambuddy, non sulla stampante', + syncing: 'Sincronizzazione con stampante...', + savingExtruder: 'Salvataggio su estrusore {{current}}/{{total}}...', + pleaseWait: 'Attendere', + }, + // Delete confirmation + deleteConfirm: { + title: 'Elimina profilo', + cannotUndo: 'Questo non puo essere annullato', + message: 'Sei sicuro di voler eliminare "{{name}}" dalla stampante?', + }, + // Bulk delete + bulkDelete: { + title: 'Elimina profili', + cannotUndo: 'Questo non puo essere annullato', + message: 'Sei sicuro di voler eliminare {{count}} profili selezionati dalla stampante?', + }, + // Toast + toast: { + profileSaved: 'K-profile salvato', + profilesSaved: 'K-profile salvato su {{count}} estrusori', + selectAtLeastOneExtruder: 'Seleziona almeno un estrusore', + profileDeleted: 'K-profile eliminato', + profilesDeleted: 'Eliminati {{count}} profili', + exportedProfiles: 'Esportati {{count}} profili', + importedProfiles: 'Importati {{count}} di {{total}} profili', + noProfilesToExport: 'Nessun profilo da esportare', + invalidFileFormat: 'Formato file non valido', + failedToParseImport: 'Parsing file import fallito', + failedToSaveBatch: 'Salvataggio K-profiles fallito', + noteSaved: 'Nota salvata', + failedToSaveNote: 'Salvataggio nota fallito', + }, + // Permissions + permission: { + noRead: 'Non hai il permesso di aggiornare i profili', + noCreate: 'Non hai il permesso di aggiungere profili', + noUpdate: 'Non hai il permesso di aggiornare K-profiles', + noDelete: 'Non hai il permesso di eliminare K-profiles', + noExport: 'Non hai il permesso di esportare profili', + noImport: 'Non hai il permesso di importare profili', + }, + }, + + // Virtual Printer + virtualPrinter: { + title: 'Stampante virtuale', + running: 'In esecuzione', + stopped: 'Ferma', + description: { + default: 'Abilita una stampante virtuale che appare in Bambu Studio e OrcaSlicer. I file inviati a questa stampante saranno archiviati senza stampare.', + proxy: 'Abilita un proxy che inoltra il traffico slicer a una stampante reale, permettendo la stampa remota su qualsiasi rete.', + }, + enable: { + title: 'Abilita stampante virtuale', + visibleInSlicer: 'Visibile come "Bambuddy" nella ricerca slicer', + proxyingTo: 'In proxy verso {{name}}', + notActive: 'Non attivo', + }, + model: { + title: 'Modello stampante', + description: 'Seleziona il modello stampante da emulare.', + restartWarning: 'Cambiare il modello riavviera la stampante virtuale', + }, + accessCode: { + title: 'Codice accesso', + isSet: 'Codice accesso impostato', + notSet: 'Nessun codice accesso impostato - richiesto per abilitare', + placeholder: 'Inserisci codice 8 caratteri', + placeholderChange: 'Inserisci nuovo codice per cambiare', + hint: 'Deve essere esattamente 8 caratteri. Usato dagli slicer per autenticarsi.', + charCount: '({{count}}/8)', + }, + targetPrinter: { + title: 'Stampante target', + configured: 'Target proxy configurato', + notConfigured: 'Nessuna stampante target selezionata - richiesta per modalita proxy', + placeholder: 'Seleziona una stampante...', + hint: 'Seleziona la stampante a cui fare proxy. La stampante deve essere in modalita LAN.', + noPrinters: 'Nessuna stampante configurata. Aggiungi una stampante per usare la modalita proxy.', + }, + remoteInterface: { + title: 'Interfaccia rete slicer', + configured: 'Proxy SSDP abilitato', + optional: 'Opzionale - per discovery SSDP tra reti', + placeholder: 'Seleziona interfaccia per rete slicer...', + hint: 'Seleziona l\'interfaccia di rete connessa allo slicer. Abilita scoperta automatica in Bambu Studio.', + }, + mode: { + title: 'Modalita', + archive: 'Archivio', + archiveDesc: 'Archivia subito i file', + review: 'Revisione', + reviewDesc: 'Rivedi prima di archiviare', + queue: 'Coda', + queueDesc: 'Archivia e aggiungi alla coda', + proxy: 'Proxy', + proxyDesc: 'Inoltra a stampante reale', + }, + setupRequired: { + title: 'Configurazione necessaria', + description: 'La stampante virtuale richiede configurazioni di sistema aggiuntive prima di funzionare. Include port forwarding, regole firewall e impostazioni specifiche della piattaforma.', + readGuide: 'Leggi la guida prima di abilitare', + }, + howItWorks: { + title: 'Come funziona', + titleProxy: 'Come funziona (Modalita proxy)', + step1: 'Completa la guida di configurazione per la tua piattaforma', + step2: 'Abilita la stampante virtuale e imposta un codice accesso', + step3: 'In Bambu Studio o OrcaSlicer, vai su "Aggiungi stampante"', + step4: 'La stampante "Bambuddy" dovrebbe apparire nella lista', + step5: 'Connettiti usando il codice accesso impostato', + step6: 'Quando "stampi" su Bambuddy, il file 3MF viene archiviato', + proxyStep1: 'Seleziona la stampante target (deve essere in modalita LAN)', + proxyStep2: 'Per rete diversa: seleziona l\'interfaccia rete slicer', + proxyStep3: 'Abilita il proxy - la stampante appare via SSDP', + proxyStep4: 'Connettiti usando il codice accesso della stampante', + proxyStep5: 'Stampa normalmente - il traffico e inoltrato via Bambuddy', + proxyStep6: 'Lo streaming camera richiede NAT/IP forwarding (vedi docs)', + }, + status: { + title: 'Dettagli stato', + printerName: 'Nome stampante', + model: 'Modello', + serialNumber: 'Numero seriale', + mode: 'Modalita', + pendingFiles: 'File in sospeso', + targetPrinter: 'Stampante target', + ftpPort: 'Porta FTP', + mqttPort: 'Porta MQTT', + ftpConnections: 'Connessioni FTP', + mqttConnections: 'Connessioni MQTT', + }, + toast: { + updated: 'Impostazioni stampante virtuale aggiornate', + failedToUpdate: 'Aggiornamento impostazioni fallito', + accessCodeRequired: 'Imposta prima un codice accesso', + targetPrinterRequired: 'Seleziona prima una stampante target', + accessCodeEmpty: 'Il codice accesso non puo essere vuoto', + accessCodeLength: 'Il codice accesso deve essere esattamente 8 caratteri', + }, + }, + + // Model Viewer + modelViewer: { + openInSlicer: 'Apri in slicer', + tabs: { + model: 'Modello 3D', + gcode: 'Anteprima G-code', + }, + notAvailable: 'non disponibile', + notSliced: 'non sezionato', + plates: 'Piatti', + allPlates: 'Tutti i piatti', + plateNumber: 'Piatto {{number}}', + plateCount: '{{count}} piatto', + plateCount_other: '{{count}} piatti', + objectCount: '{{count}} oggetto', + objectCount_other: '{{count}} oggetti', + filamentCount: '{{count}} filamento', + filamentCount_other: '{{count}} filamenti', + eta: 'ETA {{minutes}} min', + noPreview: 'Nessuna anteprima disponibile per questo file', + pagination: { + pageOf: 'Pagina {{current}} di {{total}}', + prev: 'Prec', + next: 'Succ', + }, + errors: { + failedToLoad: 'Caricamento file fallito', + noMeshes: 'Nessuna mesh trovata nel file 3MF', + unsupportedFormat: 'Formato file non supportato', + }, + }, + + // Maintenance type descriptions (built-in) + maintenanceDescriptions: { + lubricateRails: 'Applica lubrificante alle guide lineari per movimento fluido', + cleanNozzle: 'Pulisci hotend e ugello per prevenire intasamenti', + checkBelts: 'Verifica tensione cinghie per stampe accurate', + cleanBuildPlate: 'Pulisci il piatto per migliore adesione', + checkExtruder: 'Ispeziona ingranaggi estrusore per usura', + checkCooling: 'Assicurati che le ventole di raffreddamento funzionino', + generalInspection: 'Ispezione generale stampante', + cleanCarbonRods: 'Pulisci le aste in carbonio per ridurre attrito', + checkPtfeTube: 'Ispeziona il tubo PTFE per usura o danni', + replaceHepaFilter: 'Sostituisci filtro HEPA per qualita aria', + replaceCarbonFilter: 'Sostituisci filtro a carbone attivo', + lubricateLeftNozzleRail: 'Lubrifica guida ugello sinistro (serie H2)', + }, +};