Browse Source

Merge pull request #309 from Keybored02/main

Added Italian localization
MartinNYHC 3 months ago
parent
commit
d9895aae5b
2 changed files with 2614 additions and 1 deletions
  1. 4 1
      frontend/src/i18n/index.ts
  2. 2610 0
      frontend/src/i18n/locales/it.ts

+ 4 - 1
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' },
 ];

+ 2610 - 0
frontend/src/i18n/locales/it.ts

@@ -0,0 +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',
+  },
+
+  // 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 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: {
+      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 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',
+    },
+    // 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',
+    },
+    // 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 <strong>completamente vuoto</strong>, 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: '<strong>Suggerimento:</strong> 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 <strong>Impostazioni</strong>',
+      step2: 'Vai a <strong>Firmware</strong>',
+      step3: 'Seleziona <strong>Aggiorna da SD</strong>',
+      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: {
+      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',
+    },
+    // 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',
+    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',
+    },
+    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',
+  },
+
+  // 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 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',
+      },
+      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 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',
+      },
+    },
+  },
+
+  // 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',
+  },
+
+  // 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}}',
+    },
+  },
+
+  // 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)',
+  },
+};