From b4dcd5b23b3f146dbd71d26dd0dfb848202652fe Mon Sep 17 00:00:00 2001 From: Matteo Parenti Date: Mon, 9 Feb 2026 11:58:04 +0100 Subject: [PATCH 1/2] 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)', + }, +}; From 023d817cebb76c513513f4a4816dbacd19a29690 Mon Sep 17 00:00:00 2001 From: Matteo Parenti Date: Mon, 9 Feb 2026 14:18:40 +0100 Subject: [PATCH 2/2] Fixed spacing, diacritics, updated to 0.1.9b --- frontend/src/i18n/locales/it.ts | 5113 ++++++++++++++++--------------- 1 file changed, 2563 insertions(+), 2550 deletions(-) diff --git a/frontend/src/i18n/locales/it.ts b/frontend/src/i18n/locales/it.ts index e175db5e0..52652be4a 100644 --- a/frontend/src/i18n/locales/it.ts +++ b/frontend/src/i18n/locales/it.ts @@ -1,2597 +1,2610 @@ 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', - }, + // 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', - }, + // 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.', - }, + // 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', }, - - // 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', - }, + temperatures: { + nozzle: 'Ugello', + bed: 'Piatto', + chamber: 'Camera', }, - - // Queue page + 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 può 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}}', + nozzleRack: 'Rack Ugelli', + // 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: { - 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', - }, + inQueue: '{{count}} stampa in coda', + inQueue_plural: '{{count}} stampe in 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', + // Controls section + controls: 'Controlli', + // RFID + rfid: { + reread: 'Rileggi RFID', }, - - // 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', + // 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', }, - - // 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', + // 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', }, - - // 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', - }, + // 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', }, - - // 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', + // Confirm modals + confirm: { + deleteTitle: 'Elimina Stampante', + deleteMessage: 'Sei sicuro di eliminare "{{name}}"? Questo rimuoverà tutte le impostazioni di connessione.', + deleteArchivesNote: 'Tutta la cronologia di stampa sarà eliminata definitivamente.', + keepArchivesNote: 'La cronologia sarà mantenuta ma non più associata a questa stampante.', + stopTitle: 'Ferma Stampa', + stopMessage: 'Sei sicuro di fermare la stampa corrente su "{{name}}"? Questo annullerà 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 interromperà la stampa e potrebbe danneggiare la stampante.', + powerOffButton: 'Spegni', }, - - // 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.', + // 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 già configurate.', + alreadyAdded: 'Già 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', }, - - // 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', + // 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 le 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', }, - - // 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}}', - }, + // 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: 'Più recenti', + sortOldest: 'Meno recenti', + sortName: 'Nome', + sortDuration: 'Durata', + sortLargest: 'Più grandi', + sortSmallest: 'Più 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 già 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 è 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: 'Sliced 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 slicing', + 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 può essere annullata.', + deleteButton: 'Elimina', + removeSource3mf: 'Rimuovi Sorgente 3MF', + removeSource3mfConfirm: 'Sei sicuro di rimuovere il file sorgente 3MF da "{{name}}"? Questo eliminerà 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 può 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 è vuota', + position: 'Posizione', + scheduledTime: 'Ora programmata', + moveUp: 'Sposta su', + moveDown: 'Sposta giù', + 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 (più vecchi)', + descendingNewest: 'Decrescente (più 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: { - 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?', + cancelTitle: 'Annulla stampa programmata', + cancelMessage: 'Sei sicuro di annullare "{{name}}"?', + stopTitle: 'Ferma Stampa', + stopMessage: 'Sei sicuro di fermare la stampa corrente "{{name}}"? Questo annullerà 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', }, - - // 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', + // 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', }, - - // 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', - }, + // 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', }, + }, - // 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', + // 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', + }, - // 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', + // 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', }, - - // 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', + 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', }, - - // 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', - }, + // 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', }, - - // 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.', + 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', }, - - // Timelapse - timelapse: { - title: 'Timelapse', - create: 'Crea timelapse', - download: 'Scarica', - delete: 'Elimina', - preview: 'Anteprima', - frameRate: 'Frame rate', - quality: 'Qualita', - processing: 'Elaborazione...', - noTimelapses: 'Nessun timelapse disponibile', + // Updates + checkForUpdatesLabel: 'Controlla aggiornamenti', + checkPrinterFirmware: 'Controlla firmware stampante', + // Queue + enableRetry: 'Abilita retry', + // Home Assistant + homeAssistantDescription: 'Controlla prese smart tramite Home Assistant', + environmentManagedLabel: '(Gestito dall\'ambiente)', + autoEnabledViaEnv: 'Abilitato automaticamente tramite variabili d\'ambiente', + urlFromEnvReadOnly: 'Valore impostato dalla variabile d\'ambiente HA_URL (sola lettura)', + tokenFromEnvReadOnly: 'Valore impostato dalla variabile d\'ambiente HA_TOKEN (sola lettura)', + // 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 più 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 può 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', }, - - // 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', + 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 più.', + deleteKey: 'Elimina chiave', + // Filament tab + amsDisplayThresholds: 'Soglie visualizzazione AMS', + amsThresholdsDescription: 'Configura soglie colore per umidità e temperatura AMS.', + humidity: 'Umidità', + 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 più vecchi saranno eliminati automaticamente', + printModal: 'Modale stampa', + expandCustomMapping: 'Espandi mapping personalizzato di default', + expandCustomMappingDescription: 'Quando stampi su più stampanti, mostra mapping AMS per stampante espanso', + // User management + authentication: 'Autenticazione', + authEnabledDescription: 'La tua istanza è 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 eliminerà definitivamente tutti i log notifiche più vecchi di 30 giorni. Questa azione non può essere annullata.', + clearLogs: 'Cancella log', + // Modal: Reset UI + resetUiPreferences: 'Reimposta preferenze UI', + resetUiPreferencesMessage: 'Questo reimposterà le preferenze UI ai valori predefiniti: ordine barra laterale, tema, layout dashboard, modalità vista e preferenze ordinamento. Stampanti, archivi e impostazioni server NON saranno modificati. La pagina si ricaricherà 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 renderà la tua istanza Bambuddy accessibile senza login. Tutti gli utenti resteranno nel database ma l'autenticazione sarà 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 più vecchi di 30 giorni', + resetUiPreferencesDescription: 'Reimposta ordine barra laterale, tema, modalità 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', + }, - // 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', + // Notifications (for push notifications) + notification: { + printStarted: { + title: 'Stampa avviata', + body: '{{printer}}: {{filename}} ha iniziato a stampare', }, - - // 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', + printCompleted: { + title: 'Stampa completata', + body: '{{printer}}: {{filename}} completata con successo', }, - - // 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', + printFailed: { + title: 'Stampa fallita', + body: '{{printer}}: {{filename}} fallita', }, - - // 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', + 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', + }, + }, - // Edit archive modal - editArchive: { - title: 'Modifica archivio', - name: 'Nome', - namePlaceholder: 'Nome stampa', + // 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 può essere annullata.', + deleteFilesConfirm: 'Eliminare {{count}} file selezionati? Questa azione non può 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 già admin, l\'autenticazione verrà 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 è 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', + chamberLight: 'Accendi/Spegni luce camera', + }, + + // 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 può 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 eliminerà definitivamente "{{name}}" da Bambu Cloud. Questa azione non può 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', - 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 + }, + noFilamentPresets: 'Nessun preset filamento', + noProcessPresets: 'Nessun preset processo', + noPrinterPresets: 'Nessun preset stampante', + // Filters + filters: { + type: 'Tipo', + owner: 'Proprietario', 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', - }, + 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 può 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', + }, + }, + }, - // 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', - }, - }, + // Support/Debug + support: { + debugLoggingActive: 'Log debug attivo', + manageLogs: 'Gestisci', + collectItem7: 'Connettività stampante e versioni firmware', + collectItem8: 'Stato integrazioni (Spoolman, MQTT, HA)', + collectItem9: 'Interfacce di rete (solo subnet)', + collectItem10: 'Versioni dei pacchetti Python', + collectItem11: 'Controlli di integrità del database', + collectItem12: 'Dettagli dell\'ambiente Docker', + }, - // 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', - }, + // 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: 'Root (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 più 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 può 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}}', }, + }, - // 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)', + // 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', + fillSourceLabel: '(Spoolman)', + weight: 'Peso', + remaining: 'Rimanente', + disableWeightSync: 'Disabilita sync peso stimato AMS', + disableWeightSyncDesc: 'Non aggiornare la capacità 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: 'Qualità', + processing: 'Elaborazione...', + noTimelapses: 'Nessun timelapse disponibile', + }, + + // AMS + ams: { + title: 'AMS', + slot: 'Slot', + empty: 'Vuoto', + emptySlot: 'Slot vuoto', + unknown: 'Sconosciuto', + humidity: 'Umidità', + 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 sovrascriverà 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 verrà 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 sarà 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 può essere annullato', + message: 'Sei sicuro di voler eliminare "{{name}}" dalla stampante?', + }, + // Bulk delete + bulkDelete: { + title: 'Elimina profili', + cannotUndo: 'Questo non può 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 è inoltrato via Bambuddy', + proxyStep6: 'Lo streaming della 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 può essere vuoto', + accessCodeLength: 'Il codice accesso deve essere esattamente 8 caratteri', + }, + }, + + // Model Viewer + modelViewer: { + openInSlicer: 'Apri nello 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 un movimento fluido', + cleanNozzle: 'Pulisci hotend e ugello per prevenire intasamenti', + checkBelts: 'Verifica tensione cinghie per stampe accurate', + cleanBuildPlate: 'Pulisci il piatto per migliorare l\'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 qualità aria', + replaceCarbonFilter: 'Sostituisci filtro a carbone attivo', + lubricateLeftNozzleRail: 'Lubrifica guida ugello sinistro (serie H2)', + }, };