export default {
  // Navigation
  nav: {
    printers: 'Stampanti',
    archives: 'Archivi',
    queue: 'Coda di stampa',
    stats: 'Statistiche',
    profiles: 'Profili',
    maintenance: 'Manutenzione',
    projects: 'Progetti',
    inventory: 'Filamento',
    files: 'File',
    makerworld: 'MakerWorld',
    notifications: 'Notifiche',
    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',
    errorLoading: 'Errore di caricamento',
    retry: 'Riprova',
    success: 'Successo',
    warning: 'Avviso',
    enabled: 'Abilitato',
    disabled: 'Disabilitato',
    yes: 'Si',
    no: 'No',
    on: 'On',
    off: 'Spento',
    all: 'Tutti',
    none: 'Nessuno',
    search: 'Cerca',
    filter: 'Filtro',
    sort: 'Ordina',
    refresh: 'Aggiorna',
    download: 'Scarica',
    upload: 'Carica',
    uploading: 'Caricamento...',
    uploadFailed: 'Caricamento fallito',
    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',
    export: 'Esporta',
    import: 'Importa',
    clear: 'Pulisci',
    selectAll: 'Seleziona tutto',
    deselectAll: 'Deseleziona tutto',
    noChange: '— Nessun cambio —',
    unchanged: 'Invariato',
    unassigned: 'Non assegnato',
    unknown: 'Sconosciuto',
    unknownError: 'Errore sconosciuto',
    today: 'Oggi',
    tomorrow: 'Domani',
    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',
    back: 'Indietro',
    copy: 'Copia',
    copied: 'Copiato!',
    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: {
      available: 'Disponibile',
      idle: 'Inattiva',
      printing: 'In stampa',
      paused: 'In pausa',
      offline: 'Offline',
      problem: 'Problema',
      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',
    nextAvailable: 'Prossima disponibile',
    powerOn: 'Accendi',
    offlinePrintersWithPlugs: 'Stampanti offline con smart plug',
    noPrintersConfigured: 'Nessuna stampante configurata',
    search: 'Cerca stampanti...',
    noSearchResults: 'Nessuna stampante corrisponde alla tua ricerca o ai tuoi filtri',
    filter: {
      allStatuses: 'Tutti gli stati',
      allLocations: 'Tutti i luoghi',
    },
    toolbar: {
      filters: 'Filtri',
      view: 'Vista',
      actions: 'Azioni',
    },
    // Printer card
    readyToPrint: 'Pronta a stampare',
    external: 'Esterna',
    extL: 'Ext-L',
    extR: 'Ext-R',
    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
    files: 'File',
    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: 'Telecamera',
    skipObject: 'Salta Oggetto',
    reconnect: 'Riconnetti',
    forceRefresh: 'Forza aggiornamento',
    forceRefreshSuccess: 'Aggiornamento richiesto',
    mqttDebug: 'Debug MQTT',
    printerInformation: 'Informazioni stampante',
    copyToClipboard: 'Copia',
    copied: 'Copiato!',
    state: 'Stato',
    wifiSignalLabel: 'Segnale WiFi',
    developerMode: 'Modalità sviluppatore',
    enabled: 'Attivato',
    disabled: 'Disattivato',
    addedOn: 'Aggiunta il',
    sdCard: 'Scheda SD',
    inserted: 'Inserita',
    notInserted: 'Non inserita',
    totalPrintHours: 'Ore di stampa',
    activeNozzle: 'Attivo: ugello {{nozzle}}',
    nozzleRack: 'Rack Ugelli',
    nozzleDocked: 'Agganciato',
    nozzleMounted: 'Montato',
    nozzleActive: 'Attivo',
    nozzleIdle: 'Inattivo',
    nozzleDiameter: 'Diametro',
    nozzleType: 'Tipo',
    nozzleStatus: 'Stato',
    nozzleFilament: 'Filamento',
    nozzleWear: 'Usura',
    nozzleMaxTemp: 'Temp Max',
    nozzleSerial: 'Seriale',
    nozzleHardenedSteel: 'Acciaio Temprato',
    nozzleStainlessSteel: 'Acciaio Inox',
    nozzleTungstenCarbide: 'Carburo di Tungsteno',
    nozzleFlow: 'Flusso',
    nozzleHighFlow: 'Alto Flusso',
    nozzleStandardFlow: 'Standard',
    // 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',
      missingSpoolAssignment: 'Stampa avviata su {{printer}}. Mancano assegnazioni bobina per: {{slots}}',
      printerAdded: 'Stampante aggiunta',
      printerUpdated: 'Stampante aggiornata',
      failedToDelete: 'Impossibile eliminare stampante',
      failedToAdd: 'Impossibile aggiungere stampante',
      connectionFailedNotAdded: 'Impossibile connettersi alla stampante. Verifica IP, numero di serie e codice di accesso e conferma che la modalità solo LAN sia attiva. La stampante non è stata aggiunta.',
      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',
      failedToSetSpeed: 'Impossibile impostare la velocità di stampa',
      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',
      loadInitiated: 'Caricamento filamento…',
      unloadInitiated: 'Scaricamento filamento…',
      failedToLoad: 'Caricamento filamento fallito',
      failedToUnload: 'Scaricamento filamento fallito',
    },
    // Connection status
    connection: {
      connected: 'Connesso',
      offline: 'Offline',
    },
    plateStatus: {
      markCleared: 'Segna il piatto come liberato',
      cleared: 'Piatto libero',
      notCleared: 'Piatto non libero',
      inUse: 'Piatto in uso',
    },
    // Queue info
    queue: {
      inQueue: '{{count}} stampa in coda',
      inQueue_plural: '{{count}} stampe in coda',
    },
    // Controls section
    controls: 'Controlli',
    // RFID
    rfid: {
      reread: 'Rileggi RFID',
    },
    // AMS load/unload (#891)
    ams: {
      load: 'Carica',
      unload: 'Scarica',
    },
    bedJog: {
      title: 'Muovi il piano di stampa',
      bed: 'Piano',
      step: 'Passo (mm)',
      up: 'Sposta piano su',
      down: 'Sposta piano giù',
      disabledWhilePrinting: 'Disabilitato durante la stampa',
      notHomedTitle: 'Stampante non azzerata',
      notHomedMessage: 'La stampante non è stata azzerata dall\'ultima stampa. Esegui prima l\'azzeramento automatico per un posizionamento sicuro (parcheggia la testa di stampa, poi azzera X, Y e Z), oppure muovi comunque — i finecorsa software verranno ignorati.',
      homeZ: 'Azzeramento automatico',
      moveAnyway: 'Muovi comunque',
      homingStarted: 'Azzeramento automatico in corso…',
    },
    // 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',
      noCamera: 'Non hai il permesso di visualizzare le telecamere',
    },
    // 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',
      confirmTitle: 'Saltare oggetto?',
      confirmMessage: 'Sei sicuro di voler saltare "{{name}}"? Questa azione non può essere annullata.',
    },
    // 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',
      haToggleTitle: 'Commuta "{{name}}"',
      haToggleMessage: 'Commutare l\'entità Home Assistant {{entity}}? Questo potrebbe spegnere l\'alimentazione se attualmente è accesa.',
      haToggleWarning: 'AVVISO: "{{name}}" sta stampando! La commutazione di {{entity}} potrebbe togliere l\'alimentazione e interrompere la stampa. Continuare?',
      haToggleButton: 'Commuta',
    },
    // Bulk actions
    bulk: {
      select: 'Seleziona',
      selectAll: 'Seleziona tutto',
      selectByLocation: 'Seleziona per posizione',
      selected: '{{count}} selezionato/i',
      actions: {
        stop: 'Ferma',
        pause: 'Pausa',
        resume: 'Riprendi',
        clearPlate: 'Svuota piano',
        clearHMS: 'Cancella notifiche',
      },
      confirm: {
        stopTitle: 'Ferma {{count}} stampe',
        stopMessage: 'Questo annullerà le stampe attive su {{count}} stampante/i. Questa azione non può essere annullata.',
        stopButton: 'Ferma tutte',
        pauseTitle: 'Pausa {{count}} stampe',
        pauseMessage: 'Questo metterà in pausa le stampe attive su {{count}} stampante/i.',
        pauseButton: 'Pausa tutte',
        clearPlateTitle: 'Svuota {{count}} piani di stampa',
        clearPlateMessage: 'Questo svuoterà il piano di stampa su {{count}} stampante/i e potrebbe avviare i lavori in coda.',
        clearPlateButton: 'Svuota tutti',
      },
      success: '{{action}} completato su {{count}} stampante/i',
      partial: '{{succeeded}} riuscito/i, {{failed}} fallito/i',
      noneApplicable: 'Nessuna stampante selezionata è nello stato corretto per questa azione',
      selectByState: 'Seleziona per stato',
    },
    // 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',
    },
    // AMS Drying
    drying: {
      start: 'Avvia essiccazione',
      stop: 'Ferma essiccazione',
      temperature: 'Temperatura',
      duration: 'Durata',
      hours: 'ore',
      timeRemaining: '{{time}} rimanente',
      active: 'Essiccazione',
      notSupported: 'Essiccazione non supportata',
      powerRequired: 'Collegare l\'alimentatore AMS per abilitare l\'asciugatura',
      startingDrying: 'Avvio essiccazione...',
      stoppingDrying: 'Arresto essiccazione...',
      rotateTray: 'Ruota la bobina durante l\'essiccazione',
    },
    // Filaments section
    filaments: 'Filamenti',
    // Camera
    openCameraOverlay: 'Apri overlay camera',
    openCameraWindow: 'Apri camera in nuova finestra',
    // Firmware
    firmwareUpdateAvailable: 'Aggiornamento firmware disponibile: {{current}} → {{latest}}',
    firmwareUpToDate: 'Firmware {{version}} — Aggiornato',
    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',
    },
    // Speed
    speed: {
      title: 'Velocità di stampa',
      silent: 'Silenzioso (50%)',
      standard: 'Standard (100%)',
      sport: 'Sport (124%)',
      ludicrous: 'Ludicrous (166%)',
    },
    airduct: {
      title: 'Modalità condotto d\'aria',
      cooling: 'Raffreddamento',
      heating: 'Riscaldamento',
    },
    noSdCard: 'Nessuna SD',
    door: {
      open: 'Aperta',
      closed: 'Chiusa',
    },
    // Fans
    fans: {
      partCooling: 'Ventola raffreddamento parte',
      auxiliary: 'Ventola ausiliaria',
      chamber: 'Ventola camera',
    },
    // HMS errors
    clickToViewHmsErrors: 'Clicca per vedere errori HMS',
    estimatedCompletion: 'Tempo completamento stimato',
    plateNumber: 'Piastra {{number}}',
    slotOptions: 'Opzioni slot',
    // AMS hover popup
    amsPopup: {
      friendlyName: 'Nome AMS',
      friendlyNamePlaceholder: 'es. Nome AMS amichevole',
      serialNumber: 'Numero di serie',
      firmwareVersion: 'Firmware',
      save: 'Salva',
      clear: 'Cancella',
      noEditPermission: 'Non hai il permesso di rinominare le unità AMS',
    },
    // Firmware modal
    firmwareModal: {
      title: 'Aggiornamento Firmware',
      titleUpToDate: 'Info 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',
      uploadFailed: 'Avvio caricamento fallito: {{error}}',
      uploadedToast: 'Firmware caricato! Avvia aggiornamento dal display.',
      availableVersions: 'Versioni disponibili',
      usable: 'Utilizzabile',
      unavailable: 'Non disponibile',
      installed: 'Installato',
      newerBadge: 'più recente',
      olderBadge: 'più vecchio',
      currentBadge: 'attuale',
    },
    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.',
    },
    developerModeWarning: 'La modalità sviluppatore LAN non è attivata su: {{names}}. Alcune funzionalità potrebbero non funzionare.',
    howToEnable: 'Come attivare',
    incompatibleFile: 'Questo file è stato preparato per {{slicedFor}}, ma questa stampante è una {{printerModel}}',
    dropNotPrintable: 'Solo i file .gcode e .gcode.3mf possono essere stampati',
    dropToPrint: 'Rilascia per stampare',
    cannotPrint: 'Stampante occupata',
  },

  // 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',
    originalPrintNotVisible: 'Stampa originale non visibile - prova a rimuovere i filtri',
    noArchivesYet: 'Nessun archivio ancora',
    prints: 'stampe',
    pagination: {
      showing: 'Mostrando',
      to: 'a',
      of: 'di',
      show: 'Mostra',
      page: 'Pagina',
      all: 'Tutti',
    },
    loadingArchives: 'Caricamento archivi...',
    releaseToUpload: 'Rilascia per caricare',
    showAll: 'Mostra tutti',
    showFavoritesOnly: 'Solo preferiti',
    gridView: 'Vista griglia',
    listView: 'Vista elenco',
    calendarView: 'Vista calendario',
    logView: 'Registro stampe',
    manageTags: 'Gestisci tag',
    showFailedPrints: 'Mostra stampe fallite',
    hideFailedPrints: 'Nascondi stampe fallite',
    hideDuplicates: 'Nascondi duplicati',
    viewOriginalPrint: 'Fai clic per visualizzare la stampa originale (#{{id}})',
    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',
      timelapseRemoved: 'Timelapse rimosso',
      failedRemoveTimelapse: 'Impossibile rimuovere il timelapse',
      timelapseUploaded: 'Timelapse caricato: {{filename}}',
      failedUploadTimelapse: 'Impossibile caricare il timelapse',
      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 nello slicer',
      slice: 'Slice',
      externalLink: 'Link esterno',
      viewOnMakerWorld: 'Vedi su MakerWorld',
      preview3d: 'Anteprima 3D',
      viewTimelapse: 'Vedi Timelapse',
      scanForTimelapse: 'Cerca Timelapse',
      uploadTimelapse: 'Carica timelapse',
      removeTimelapse: 'Rimuovi 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: 'Codice QR',
      viewPhotos: 'Vedi foto',
      viewPhotosCount: 'Vedi foto ({{count}})',
      projectPage: 'Pagina progetto',
      addToFavorites: 'Aggiungi ai preferiti',
      removeFromFavorites: 'Rimuovi dai preferiti',
      edit: 'Modifica',
      printLog: 'Registro stampe',
      goToProject: 'Vai al progetto: {{name}}',
      addToProject: 'Aggiungi al progetto',
      removeFromProject: 'Rimuovi dal progetto',
      loading: 'Caricamento...',
      noProjectsAvailable: 'Nessun progetto disponibile',
      searchProjects: 'Cerca progetti…',
      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',
    },
    platePicker: {
      title: 'Seleziona la piastra da visualizzare',
      hint: 'Questo archivio contiene più piastre. Scegline una da aprire nel visualizzatore GCode.',
      plateLabel: 'Piastra {{index}}',
      objectCount: '{{count}} oggetto',
      objectCount_plural: '{{count}} oggetti',
      noGcode: 'Questo archivio non contiene G-code generato da visualizzare. Aprilo prima in Bambu Studio per sezionarlo.',
    },
    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}}',
      runsBadge: '{{count}} stampe',
      runsBadgeTitle: '{{count}} stampe in totale — {{successful}} riuscite, {{failed}} fallite. Fai clic per vedere il registro completo.',
      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',
      noFileForReprint: 'Nessun file 3MF disponibile — il file non è stato scaricato dalla stampante durante la registrazione',
      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 nello slicer',
      openInBambuStudioToSlice: 'Apri nello slicer 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',
    },
    runLog: {
      title: 'Registro stampe',
      modalTitle: 'Registro stampe — {{name}}',
      modalTitleFallback: 'questo archivio',
      empty: 'Nessun evento di stampa ancora registrato per questo archivio.',
      col: {
        date: 'Data',
        status: 'Stato',
        duration: 'Durata',
        filament: 'Filamento',
        cost: 'Costo',
      },
      status: {
        completed: 'Completata',
        failed: 'Fallita',
        cancelled: 'Annullata',
        stopped: 'Interrotta',
        skipped: 'Saltata',
        printing: 'In stampa',
      },
    },
    modal: {
      deleteArchive: 'Elimina Archivio',
      deleteConfirm: 'Sei sicuro di eliminare "{{name}}"? Questa azione non può essere annullata.',
      deleteButton: 'Elimina',
      deletePurgeStats: 'Rimuovi anche questa stampa dalle Quick Stats (filamento, tempo, costo, energia)',
      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}}"?',
      removeTimelapse: 'Rimuovi timelapse',
      removeTimelapseConfirm: 'Sei sicuro di voler rimuovere il video timelapse 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',
    },
    log: {
      date: 'Data',
      printName: 'Nome stampa',
      printer: 'Stampante',
      user: 'Utente',
      status: 'Stato',
      duration: 'Durata',
      filament: 'Filamento',
      allPrinters: 'Tutte le stampanti',
      allUsers: 'Tutti gli utenti',
      allStatuses: 'Tutti gli stati',
      cancelled: 'Annullato',
      skipped: 'Saltato',
      dateFrom: 'Dal',
      dateTo: 'Al',
      noEntries: 'Nessuna voce di registro trovata',
      showing: '{{count}} di {{total}} voci',
      rowsPerPage: 'Righe',
      page: 'Pagina',
      prev: 'Prec.',
      next: 'Succ.',
      clearLog: 'Cancella registro',
      clearLogTitle: 'Cancella registro stampe',
      clearLogConfirm: 'Tutte le voci del registro di stampa verranno eliminate permanentemente. Gli archivi e gli elementi della coda non sono interessati. Questa azione non può essere annullata. Sei sicuro?',
      clearLogButton: 'Cancella tutto',
      cleared: '{{count}} voci di registro cancellate',
      clearFailed: 'Impossibile cancellare il registro stampe',
    },
  },

  // 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',
    queueSelectedPlates: 'Metti in coda {{count}} piastre',
    selectAllPlates: 'Seleziona tutte le {{count}} piastre',
    deselectAll: 'Deseleziona tutto',
    printQueued: 'Stampa in coda',
    itemsQueued: '{{count}} elementi in coda',
    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.',
    sjf: {
      label: 'SJF',
      tooltip: 'Lavoro più breve prima — lo scheduler dà priorità alle stampe più brevi',
    },
    addedBy: 'Aggiunto da {{name}}',
    nextInQueue: 'Prossimo in coda',
    clearPlateSuccess: 'Piatto liberato — pronto per la prossima stampa',
    plateNumber: 'Piatto {{index}}',
    // Batch / quantity
    quantity: 'Quantità',
    quantityHint: 'Crea {{count}} elementi in coda',
    activeBatches: 'Lotti attivi',
    batchProgress: '{{completed}} di {{total}} completati',
    cancelBatch: 'Annulla rimanenti',
    batchCancelled: 'Elementi rimanenti del lotto annullati',
    cancelBatchConfirmTitle: 'Annulla lotto',
    cancelBatchConfirmMessage: 'Annullare tutti gli elementi in sospeso rimanenti in questo lotto?',
    batch: 'Lotto',
    // 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',
      totalWeight: 'Peso totale della 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',
      gcodeInjection: 'G-code',
    },
    // 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',
    },
    // Timeline view
    timeline: {
      listView: 'Lista',
      timelineView: 'Cronologia',
      unassigned: 'Non assegnato',
      noData: 'Nessuna stampa programmata per questo giorno',
      allDoneBy: 'Tutte le stampe completate entro le {{time}}',
      staged: 'In attesa',
      filterAll: 'Mostra tutto',
      filterPrinting: 'In stampa',
      filterQueued: 'In coda',
      time: {
        anyMoment: 'a momenti',
        minutesLeft: '{{minutes}}m rimanenti',
        hoursLeft: '{{hours}}h rimanenti',
        hoursMinutesLeft: '{{hours}}h {{minutes}}m rimanenti',
      },
      day: {
        previous: 'Giorno precedente',
        next: 'Giorno successivo',
        today: 'Oggi',
      },
    },
    // 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',
    },
  },

  backgroundDispatch: {
    unknownFile: 'File sconosciuto',
    unknownPrinter: 'Stampante sconosciuta',
    startingPrints: 'Avvio stampe',
    progressSummary: '{{complete}}/{{total}} completati • Inviati: {{dispatched}} • In elaborazione: {{processing}}',
    expandDetails: 'Espandi dettagli dispatch',
    collapseDetails: 'Comprimi dettagli dispatch',
    dismissToast: 'Chiudi notifica dispatch',
    cancelDispatchJob: 'Annulla job dispatch',
    cancel: 'Annulla',
    cancelling: 'Annullamento…',
    awaitingPrinter: 'In attesa della stampante…',
    status: {
      dispatched: 'Inviato',
      processing: 'In elaborazione',
      completed: 'Completato',
      failed: 'Fallito',
      cancelled: 'Annullato',
    },
    toast: {
      cancellingUpload: 'Annullamento upload...',
      cancelled: 'Dispatch annullato',
      cancelFailed: 'Impossibile annullare il dispatch',
      completeWithFailures: 'Dispatch in background completato: {{completed}} riusciti, {{failed}} falliti',
      completeSuccess: 'Dispatch in background completato: {{completed}} riusciti',
      printStartedRemaining: '{{completed}} stampa/e avviata/e, {{remaining}} in invio...',
    },
  },

  // Statistics page
  stats: {
    title: 'Statistiche',
    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',
    energyWarmingUpTooltip: 'Il tracciamento energia sta ancora raccogliendo snapshot orari. I totali per intervallo diventeranno accurati quando esisterà almeno uno snapshot prima dell’intervallo selezionato. I primi valori potrebbero essere sottostimati.',
    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',
    noPrintDataInRange: 'Nessun dato nel periodo selezionato',
    periodFilament: 'Filamento utilizzato',
    periodCost: 'Costo',
    avgPerPrint: 'Media per stampa',
    usageOverTime: 'Utilizzo nel tempo',
    filamentByWeight: 'Peso',
    printDuration: 'Durata stampa',
    printerUtilization: 'Utilizzo stampante',
    filamentSuccess: 'Successo per materiale',
    printHabits: 'Abitudini di stampa',
    printTimeOfDay: 'Ora di stampa',
    colorDistribution: 'Distribuzione colori',
    noColorData: 'Nessun dato colore disponibile',
    records: 'Record',
    longestPrint: 'Stampa più lunga',
    heaviestPrint: 'Stampa più pesante',
    mostExpensivePrint: 'Più costosa',
    busiestDay: 'Giorno più attivo',
    successStreak: 'Serie di successi',
    streakPrint: 'stampa consecutiva',
    streakPrints: '{{count}} stampe consecutive',
    printerStats: 'Statistiche stampante',
    hours: 'ore',
    avgPrints: 'Media stampe',
    noArchiveData: 'Nessun dato di stampa disponibile',
    filamentByTime: 'Tempo',
    avgWeight: 'Media peso',
    avgTime: 'Media tempo',
    filamentByPrints: 'Stampe',
    timeframe: {
      today: 'Oggi',
      'this-week': 'Questa settimana',
      'this-month': 'Questo mese',
      'last-7': 'Ultimi 7 giorni',
      'last-30': 'Ultimi 30 giorni',
      'last-90': 'Ultimi 90 giorni',
      'this-year': 'Quest\'anno',
      'all-time': 'Tutto',
      custom: 'Personalizzato',
      from: 'Da',
      to: 'A',
    },
    allUsers: 'Tutti gli utenti',
    noUser: 'Nessun utente (Sistema)',
    filterByUser: 'Filtra per utente',
  },

  // 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',
    restoreDefaults: 'Ripristina attivita predefinite',
    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: {
      lubricateCarbonRods: 'Lubrifica aste in carbonio',
      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',
      lubricateSteelRods: 'Lubrifica aste in acciaio',
      cleanSteelRods: 'Pulisci aste in acciaio',
      cleanLinearRails: 'Pulisci guide lineari',
      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',
    defaultsRestored: 'Ripristinate {{count}} attivita predefinite',
    printHoursUpdated: 'Ore di stampa aggiornate',
    printerAssigned: 'Stampante assegnata',
    printerRemoved: 'Stampante rimossa',
    // Confirmation
    deleteTypeConfirm: 'Eliminare "{{name}}"?',
    deleteSystemTypeTitle: 'Eliminare attività di manutenzione predefinita?',
    deleteSystemTypeMessage: 'Sei sicuro di voler eliminare l\'attività di manutenzione predefinita "{{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',
      queue: 'Flusso',
      filament: 'Filamento',
      network: 'Rete',
      apiKeys: 'Chiavi API',
      virtualPrinter: 'Stampante virtuale',
      failureDetection: 'Rilevamento guasti',
      users: 'Utenti',
      backup: 'Backup',
      emailAuth: 'Autenticazione Email',
      ldap: 'LDAP',
      twoFa: 'Autenticazione 2FA',
      oidc: 'SSO / OIDC',
      security: 'Sicurezza',
      spoolbuddy: 'SpoolBuddy',
    },
    ldap: {
      title: 'Autenticazione LDAP',
      enabledDesc: "L'autenticazione LDAP è attiva",
      disabledDesc: "L'autenticazione LDAP è disattivata",
      disabledHint: 'Configura e salva le impostazioni LDAP qui sotto, poi attiva.',
      enabled: 'Autenticazione LDAP attivata',
      disabled: 'Autenticazione LDAP disattivata',
      feature1: 'Gli utenti possono accedere con le credenziali LDAP',
      feature2: "L'account amministratore locale rimane come fallback",
      feature3: 'I gruppi LDAP vengono mappati ai gruppi BamBuddy al login',
      serverConfig: 'Configurazione server LDAP',
      serverUrl: 'URL del server',
      serverUrlHint: 'Usa ldap:// per standard o ldaps:// per connessioni SSL',
      security: 'Sicurezza',
      securityHint: 'StartTLS aggiorna una connessione semplice a TLS. LDAPS usa TLS fin dall\'inizio.',
      bindDn: 'Bind DN (account di servizio)',
      bindPassword: 'Password Bind',
      searchBase: 'Base DN di ricerca',
      userFilter: 'Filtro di ricerca utente',
      userFilterHint: '{username} viene sostituito con il nome utente. Usa (uid={username}) per OpenLDAP.',
      advanced: 'Avanzate',
      autoProvision: 'Provisioning automatico utenti',
      autoProvisionHint: 'Crea automaticamente un account BamBuddy al primo accesso LDAP',
      defaultGroup: 'Gruppo predefinito',
      defaultGroupNone: '— Nessuno (nessun fallback) —',
      defaultGroupHint: 'Gruppo di fallback assegnato quando un utente LDAP si autentica ma non è presente in nessun gruppo LDAP mappato. Lascia vuoto per lasciare gli utenti non mappati senza autorizzazioni.',
      groupMapping: 'Mappatura gruppi (JSON)',
      groupMappingHint: 'Mappa i DN dei gruppi LDAP ai gruppi BamBuddy. Gruppi disponibili: ',
      testConnection: 'Test connessione',
      settingsSaved: 'Impostazioni LDAP salvate',
      errors: {
        serverRequired: "L'URL del server LDAP è obbligatorio",
        searchBaseRequired: 'Il Base DN di ricerca è obbligatorio',
        enableAuthFirst: "Attiva prima l'autenticazione",
        configureLdapFirst: 'Salva prima le impostazioni LDAP',
      },
    },
    // Email settings
    email: {
      smtpSettings: 'Configurazione SMTP',
      smtpHost: 'Server SMTP',
      smtpPort: 'Porta SMTP',
      security: 'Sicurezza',
      authentication: 'Autenticazione',
      username: 'Nome utente',
      password: 'Password',
      fromEmail: 'Email mittente',
      fromName: 'Nome mittente',
      testConnection: 'Testa connessione SMTP',
      testRecipient: 'Email destinatario test',
      sendTest: 'Invia email di test',
      sending: 'Invio...',
      save: 'Salva impostazioni',
      saving: 'Salvataggio...',
      advancedAuth: 'Autenticazione avanzata',
      advancedAuthEnabled: 'L\'autenticazione avanzata è abilitata',
      advancedAuthEnabledDesc: 'Le funzionalità di gestione utenti via email sono attive. I nuovi utenti riceveranno password generate automaticamente via email e potranno reimpostare la password tramite la funzione di recupero.',
      advancedAuthDisabled: 'L\'autenticazione avanzata è disabilitata',
      advancedAuthDisabledDesc: 'Abilita l\'autenticazione avanzata per attivare le funzionalità email per la gestione utenti.',
      enable: 'Abilita',
      disable: 'Disabilita',
      feature1: 'Le password vengono generate automaticamente e inviate via email ai nuovi utenti',
      feature2: 'Gli utenti possono accedere con nome utente o email',
      feature3: 'La funzione di recupero password è disponibile',
      feature4: 'Gli amministratori possono reimpostare le password utente via email',
      // Error messages
      errors: {
        requiredFields: 'Compilare tutti i campi obbligatori',
        usernameRequired: 'Il nome utente è obbligatorio quando l\'autenticazione è abilitata',
        enterTestEmail: 'Inserire un indirizzo email di test',
        smtpServerAndEmail: 'Compilare Server SMTP e Email mittente prima di testare',
        usernamePasswordRequired: 'Nome utente e password sono obbligatori quando l\'autenticazione è abilitata',
        configureSmtpFirst: 'Configurare e testare le impostazioni SMTP prima',
        enableAuthFirst: 'Per utilizzare le funzionalità basate sulla posta elettronica, è necessario prima abilitare l\'autenticazione.',
      },
      // Success messages
      success: {
        settingsSaved: 'Impostazioni SMTP salvate con successo',
      },
      // Security options
      securityOptions: {
        starttls: 'STARTTLS (Porta 587)',
        ssl: 'SSL/TLS (Porta 465)',
        none: 'Nessuna (Porta 25)',
      },
      // Authentication options
      authOptions: {
        enabled: 'Abilitata',
        disabled: 'Disabilitata',
      },
    },
    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',
    bedCooledThreshold: 'Soglia raffreddamento piatto',
    bedCooledThresholdDescription: 'Temperatura sotto la quale il piatto è considerato raffreddato dopo una stampa',
    userNotificationsEnabled: 'Notifiche utente',
    userNotificationsEnabledDescription: "Abilita il menu notifiche utente e le notifiche e-mail per gli eventi di stampa. Richiede l'autenticazione avanzata.",
    userNotificationsDisabledHint: "Abilita l'autenticazione avanzata per usare le notifiche utente.",
    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',
    },
    // Filament Tracking Mode
    filamentTracking: 'Tracciamento filamento',
    filamentTrackingDesc: 'Scegli come tracciare le bobine di filamento. Puoi usare l\'inventario integrato o collegare un server Spoolman esterno.',
    filamentChecks: 'Controlli filamento',
    disableFilamentWarnings: 'Disabilita avvisi filamento',
    disableFilamentWarningsDesc: 'Non mostrare avvisi per filamento insufficiente durante la stampa o l\'accodamento',
    preferLowestFilament: 'Preferisci il filamento con meno residuo',
    preferLowestFilamentDesc: 'Quando più bobine corrispondono, usa quella con meno filamento rimanente',
    trackingModeBuiltIn: 'Inventario integrato',
    trackingModeBuiltInDesc: 'Riconoscimento RFID automatico e tracciamento dell\'uso inclusi',
    trackingModeSpoolmanDesc: 'Server esterno per la gestione del filamento',
    builtInFeatureRfid: 'Rileva automaticamente le bobine Bambu Lab RFID nell\'AMS',
    builtInFeatureUsage: 'Traccia il consumo di filamento per stampa',
    builtInFeatureCatalog: 'Gestisci bobine, colori e profili K-factor',
    builtInFeatureThirdParty: 'Le bobine di terze parti possono essere assegnate alle bobine dell\'inventario',
    amsSyncButton: 'Sincronizza pesi dall\'AMS',
    amsSyncTitle: 'Sincronizza pesi bobine dall\'AMS',
    amsSyncMessage: 'Questo sovrascriverà tutti i pesi delle bobine dell\'inventario con i valori attuali di percentuale rimanente dell\'AMS dalle stampanti connesse. Usa questa funzione per recuperare dati di peso corrotti. Le stampanti devono essere online.',
    amsSyncing: 'Sincronizzazione...',
    amsSyncSuccess: '{{synced}} bobina/e sincronizzata/e, {{skipped}} saltata/e',
    amsSyncError: 'Impossibile sincronizzare i pesi dall\'AMS',
    spoolmanAmsSyncButton: 'Sincronizza i pesi Spoolman dall\'AMS',
    spoolmanAmsSyncTitle: 'Sincronizza i pesi delle bobine Spoolman dall\'AMS',
    spoolmanAmsSyncMessage: 'Questo aggiornerà i pesi di tutte le bobine Spoolman in base ai valori di riempimento AMS correnti delle stampanti connesse. Le stampanti devono essere online.',
    spoolmanAmsSyncing: 'Sincronizzazione...',
    spoolmanAmsSyncSuccess: '{{synced}} bobina/e sincronizzata/e, {{skipped}} saltata/e',
    spoolmanAmsSyncError: 'Impossibile sincronizzare i pesi Spoolman dall\'AMS',
    spoolmanAmsSyncErrorUnreachable: 'Sincronizzazione fallita (Spoolman non raggiungibile)',
    spoolmanAmsSyncErrorNotConfigured: 'Sincronizzazione fallita (Spoolman non configurato)',
    spoolmanNotConfigured: 'Spoolman non configurato',
    // Spoolman filament catalog section in spool catalog settings
    spoolmanFilamentCatalogTitle: 'Catalogo filamenti Spoolman',
    spoolmanFilamentCatalogDesc: 'Nomi dei filamenti e pesi tara dalla tua istanza Spoolman. Nome e peso bobina sono modificabili qui; tutte le altre proprietà sono gestite direttamente in Spoolman.',
    // Spoolman settings
    spoolmanUrl: 'URL Spoolman',
    spoolmanUrlHint: 'URL del server Spoolman (es. http://localhost:7912)',
    spoolmanConnected: 'Connesso',
    spoolmanDisconnected: 'Disconnesso',
    status: 'Stato',
    connect: 'Connetti',
    disconnect: 'Disconnetti',
    howSyncWorks: 'Come funziona la sincronizzazione',
    syncInfoRfidOnly: 'Solo le bobine ufficiali Bambu Lab con RFID vengono sincronizzate',
    syncInfoAutoCreate: 'Le nuove bobine vengono create automaticamente in Spoolman alla prima sincronizzazione',
    syncInfoThirdPartySkipped: 'Le bobine non Bambu Lab (terze parti, ricaricate) vengono saltate',
    linkingExistingSpools: 'Collegamento bobine esistenti',
    linkingExistingSpoolsDesc: 'Per collegare le bobine Spoolman esistenti all\'AMS, passa il mouse su uno slot AMS e clicca "Collega a Spoolman".',
    syncMode: 'Modalità sincronizzazione',
    syncModeAuto: 'Automatica',
    syncModeManual: 'Solo manuale',
    syncModeAutoDesc: 'I dati AMS si sincronizzano automaticamente quando vengono rilevate modifiche',
    syncModeManualDesc: 'Sincronizzazione solo quando attivata manualmente',
    syncAmsData: 'Sincronizza dati AMS',
    syncAmsDataDesc: 'Sincronizza manualmente i dati AMS della stampante su Spoolman',
    allPrinters: 'Tutte le stampanti',
    // 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',
    includeBetaUpdates: 'Includi versioni beta',
    includeBetaUpdatesDesc: 'Notifica versioni beta e prerelease durante il controllo aggiornamenti',
    // 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: 'Registro',
    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',
    cloudAccess: 'Consenti accesso cloud',
    cloudAccessDescription: 'Legge i preset e i filamenti Bambu Cloud per tuo conto. Richiede l\'accesso a Bambu Cloud.',
    cloudBadge: 'Cloud',
    updateEnergyCost: 'Aggiorna prezzo elettricità',
    updateEnergyCostDescription: 'Consenti a questa chiave di inviare in POST un nuovo prezzo elettricità per kWh a /settings/electricity-price. Utile per automazioni Home Assistant a tariffa dinamica (Tibber, Octopus, ecc.). Questo è l\'unico campo di impostazioni scrivibile via API key.',
    energyCostBadge: 'Energia',
    legacyKey: 'Legacy',
    legacyKeyTooltip: 'Creato prima della proprietà per utente; ricreare per accesso cloud',
    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)',
    fairAlsoDryingThreshold: 'Questa soglia viene usata anche per attivare l\'asciugatura automatica',
    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',
    defaultPrintOptions: 'Opzioni di stampa predefinite',
    defaultPrintOptionsDescription: 'Imposta i valori predefiniti per le opzioni di stampa. Possono essere modificati nella finestra di stampa.',
    defaultBedLevelling: 'Livellamento piatto',
    defaultBedLevellingDesc: 'Livellamento automatico del piatto prima della stampa',
    defaultFlowCali: 'Calibrazione flusso',
    defaultFlowCaliDesc: 'Calibra il flusso di estrusione',
    defaultVibrationCali: 'Calibrazione vibrazioni',
    defaultVibrationCaliDesc: 'Riduce gli artefatti di ringing',
    defaultLayerInspect: 'Ispezione primo strato',
    defaultLayerInspectDesc: 'Ispezione IA del primo strato',
    defaultTimelapse: 'Timelapse',
    defaultTimelapseDesc: 'Registra un video timelapse',
    staggeredStart: 'Avvio scaglionato',
    staggeredStartDescription: 'Dimensione gruppo e intervallo predefiniti per scaglionare avvii di batch multi-stampante. Sovrascrivibili per batch nella finestra di stampa.',
    plateClear: 'Conferma piatto libero',
    requirePlateClear: 'Richiedi conferma piatto libero',
    requirePlateClearDescription: 'Quando questa opzione è abilitata, lo scheduler attende una conferma per stampante che il piatto sia libero prima di avviare le stampe in coda su stampanti con lavori completati. Disabilitandola vengono nascosti anche il badge di stato del piatto e il pulsante "Segna il piatto come liberato" sulle schede stampante.',
    gcodeInjection: 'Iniezione G-code',
    gcodeInjectionDescription: 'Configura G-code personalizzato da iniettare all\'inizio e/o alla fine delle stampe per sistemi di stampa automatica come Farmloop, SwapMod, AutoClear e Printflow 3D. Gli snippet sono configurati per modello di stampante e applicati quando "Inietta G-code" è abilitato su un elemento della coda.',
    gcodeInjectionNoPrinters: 'Nessuna stampante trovata. Aggiungi stampanti per configurare gli snippet G-code.',
    gcodeStartLabel: 'G-code iniziale',
    gcodeEndLabel: 'G-code finale',
    gcodeStartPlaceholder: 'G-code inserito prima dell\'inizio della stampa...',
    gcodeEndPlaceholder: 'G-code aggiunto dopo la fine della stampa...',
    staggerGroupSize: 'Dimensione gruppo',
    staggerGroupSizeHelp: 'Stampanti da avviare simultaneamente per gruppo',
    staggerInterval: 'Intervallo (minuti)',
    staggerIntervalHelp: 'Ritardo tra l\'avvio di ogni gruppo',
    queueDrying: 'Asciugatura automatica',
    queueDryingDescription: 'Asciugare automaticamente il filamento AMS quando la stampante è inattiva tra le stampe in coda. Usa la soglia di umidità sopra.',
    queueDryingEnabled: 'Abilita asciugatura automatica',
    queueDryingEnabledDescription: 'Avvia l\'asciugatura AMS automaticamente quando la stampante è inattiva e l\'umidità supera la soglia',
    queueDryingBlock: 'Attendi completamento asciugatura',
    queueDryingBlockDescription: 'Blocca la coda di stampa fino al completamento dell\'asciugatura. Se disattivato, le stampe hanno priorità.',
    ambientDryingEnabled: 'Asciugatura ambientale',
    ambientDryingEnabledDescription: 'Asciuga automaticamente il filamento sulle stampanti inattive quando l\'umidità supera la soglia, anche senza stampe in coda.',
    dryingPresets: 'Preset di asciugatura',
    dryingPresetsDescription: 'Temperatura e durata per tipo di filamento. AMS 2 Pro usa temperature più basse, AMS-HT supporta temperature più alte.',
    dryingFilament: 'Filamento',
    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: 'Amministratore',
    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',
    passwordRequirements: 'Almeno 8 caratteri, con una maiuscola, una minuscola, una cifra e un carattere speciale.',
    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',
    preferredSlicer: 'Slicer preferito',
    preferredSlicerDescription: 'Scegli quale applicazione slicer usare per aprire i file',
    orcaslicerKnownIssuesWarning: 'OrcaSlicer 2.3.2 / 2.4.0-dev hanno bug CLI noti che bloccano lo slicing di molti 3MF creati da Bambu — vedi le issue upstream #12426 (segfault su file multi-estrusore dipinti) e #13386 (rifiuto della validazione rigorosa dei range di parametri). Bambu Studio è raccomandato finché non arrivano le correzioni upstream.',
    useSlicerApi: 'Usa Slicer API',
    useSlicerApiDescription: 'Se attivo, le azioni "Slice" aprono il modale slicer integrato e chiamano il sidecar slicer-API. Se disattivo (predefinito), inoltrano al slicer desktop tramite schema URI.',
    slicerCard: 'Slicer',
    orcaslicerApiUrl: 'OrcaSlicer sidecar URL',
    bambuStudioApiUrl: 'Bambu Studio sidecar URL',
    slicerApiUrlDescription: 'URL del container sidecar slicer-API. Lascia vuoto per usare le variabili d\'ambiente SLICER_API_URL / BAMBU_STUDIO_API_URL.',
    slicerBundles: {
      title: 'Bundle slicer',
      description: 'Importa un Printer Preset Bundle (.bbscfg) esportato da BambuStudio (File → Esporta → Esporta bundle preset → "Printer preset bundle"). Una volta importato, le richieste di slicing possono scegliere preset dal bundle per nome senza ricaricare il triplet di profili JSON.',
      uploadButton: 'Carica bundle',
      uploading: 'Caricamento…',
      loading: 'Caricamento bundle…',
      empty: 'Nessun bundle importato ancora.',
      summary: '{{processCount}} processo · {{filamentCount}} preset filamento',
      delete: 'Elimina',
      uploadSuccess: '{{name}} importato',
      uploadError: 'Caricamento bundle fallito: {{message}}',
      deleteSuccess: 'Bundle rimosso',
      deleteError: 'Eliminazione bundle fallita: {{message}}',
      confirmDeleteTitle: 'Rimuovere questo bundle?',
      confirmDeleteMessage: 'Le richieste di slicing che fanno riferimento a "{{name}}" falliranno fino al re-import del bundle.',
    },
    externalCameras: 'Camere esterne',
    costTracking: 'Tracciamento costi',
    printsOnly: 'Solo stampe',
    totalConsumption: 'Consumo totale',
    dataManagement: 'Gestione dati',
    storageUsage: 'Memoria utilizzata',
    storageUsageDescription: 'Ripartizione della memoria per categoria',
    storageUsageTotal: 'Totale',
    storageUsageErrors: 'Errori',
    storageUsageOtherBreakdown: 'Altro (include risorse statiche, script e file di configurazione)',
    storageUsageSystem: 'Sistema',
    storageUsageData: 'Dati',
    storageUsageUnavailable: 'Informazioni sull\'utilizzo della memoria non disponibili',
    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 8 caratteri',
      passwordNeedsUppercase: 'La password deve contenere almeno una lettera maiuscola',
      passwordNeedsLowercase: 'La password deve contenere almeno una lettera minuscola',
      passwordNeedsDigit: 'La password deve contenere almeno una cifra',
      passwordNeedsSpecial: 'La password deve contenere almeno un carattere speciale',
      enterGroupName: 'Inserisci un nome gruppo',
      settingsSaved: 'Impostazioni salvate',
      noPermissionUpdate: 'Non hai il permesso di modificare le impostazioni',
      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',
    catalog: {
      spoolCatalog: 'Catalogo bobine',
      spoolCatalogDescription: 'Pesi delle bobine vuote per marca/tipo. Utilizzato per la ricerca automatica del peso quando si aggiungono bobine.',
      searchCatalog: 'Cerca nel catalogo...',
      addNewEntry: 'Aggiungi nuova voce',
      namePlaceholder: 'Nome (es. Bambu Lab - Plastica)',
      weight: 'Peso',
      type: 'Tipo',
      default: 'Predefinito',
      custom: 'Personalizzato',
      noMatch: 'Nessuna voce corrisponde alla ricerca',
      empty: 'Nessuna voce nel catalogo',
      deleteEntry: 'Elimina voce',
      deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?',
      resetCatalog: 'Ripristina catalogo',
      resetConfirm: 'Ripristinare il catalogo ai valori predefiniti? Tutte le voci personalizzate verranno rimosse.',
      loadFailed: 'Impossibile caricare il catalogo bobine',
      nameWeightRequired: 'Nome e peso sono obbligatori',
      entryAdded: 'Voce aggiunta',
      addFailed: 'Impossibile aggiungere la voce',
      entryUpdated: 'Voce aggiornata',
      updateFailed: 'Impossibile aggiornare la voce',
      entryDeleted: 'Voce eliminata',
      deleteFailed: 'Impossibile eliminare la voce',
      resetSuccess: 'Catalogo ripristinato ai valori predefiniti',
      resetFailed: 'Impossibile ripristinare il catalogo',
      exported: '{{count}} voci esportate',
      imported: '{{added}} voci importate ({{skipped}} saltate)',
      importFailed: 'Impossibile importare: formato JSON non valido',
      exportTooltip: 'Esporta catalogo in JSON',
      importTooltip: 'Importa catalogo da JSON',
      resetTooltip: 'Ripristina valori predefiniti',
      selectedCount: '{{count}} selezionati',
      deleteSelected: 'Elimina selezionati',
      bulkDeleteConfirm: 'Eliminare {{count}} voci?',
      bulkDeleted: '{{count}} voci eliminate',
      bulkDeleteFailed: 'Impossibile eliminare le voci',
      material: 'Materiale',
      spoolWeight: 'Peso bobina',
      color: 'Colore',
      updateSpoolWeight: 'Aggiorna peso bobina',
      filamentUpdated: 'Filamento aggiornato',
      filamentUpdateFailed: 'Aggiornamento filamento non riuscito',
      filamentUpdateInvalid: 'Dati filamento non validi',
      keepExistingSpoolWeight: 'Mantieni vecchio peso per le bobine esistenti',
      keepExistingSpoolWeightDesc: 'Le bobine già create con questo tipo di filamento mantengono il vecchio peso tara. Le nuove bobine usano il valore aggiornato.',
      applyToAllSpools: 'Applica a tutte le bobine',
      applyToAllSpoolsDesc: 'Tutti i calcoli del peso per questo tipo di filamento usano immediatamente il nuovo peso tara.',
    },
    colorCatalog: {
      title: 'Catalogo colori',
      description: 'Colori del filamento per produttore/materiale. Utilizzato per la ricerca automatica del colore quando si aggiungono bobine.',
      searchColors: 'Cerca colori...',
      allManufacturers: 'Tutti i produttori',
      addNewColor: 'Aggiungi nuovo colore',
      manufacturer: 'Produttore',
      colorName: 'Nome colore',
      hex: 'Hex',
      materialOptional: 'Materiale (opzionale)',
      showing: 'Visualizzazione di {{filtered}} su {{total}} colori',
      noMatch: 'Nessun colore corrisponde alla ricerca',
      empty: 'Nessun colore nel catalogo',
      deleteColor: 'Elimina colore',
      deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?',
      resetCatalog: 'Ripristina catalogo colori',
      resetConfirm: 'Ripristinare il catalogo ai valori predefiniti? Tutti i colori personalizzati verranno rimossi.',
      sync: 'Sincronizza',
      starting: 'Avvio...',
      syncTooltip: 'Sincronizza da FilamentColors.xyz (2000+ colori, potrebbe richiedere un minuto)',
      loadFailed: 'Impossibile caricare il catalogo colori',
      fieldsRequired: 'Produttore, nome colore e colore hex sono obbligatori',
      colorAdded: 'Colore aggiunto',
      addFailed: 'Impossibile aggiungere il colore',
      colorUpdated: 'Colore aggiornato',
      updateFailed: 'Impossibile aggiornare il colore',
      colorDeleted: 'Colore eliminato',
      deleteFailed: 'Impossibile eliminare il colore',
      resetSuccess: 'Catalogo colori ripristinato ai valori predefiniti',
      resetFailed: 'Impossibile ripristinare il catalogo',
      syncUpToDate: 'Già aggiornato ({{count}} colori verificati)',
      syncComplete: '{{added}} nuovi colori aggiunti ({{skipped}} già esistenti)',
      syncError: 'Errore di sincronizzazione',
      syncFailed: 'Impossibile sincronizzare da FilamentColors.xyz',
      exported: '{{count}} colori esportati',
      imported: '{{added}} colori importati ({{skipped}} saltati)',
      importFailed: 'Impossibile importare: formato JSON non valido',
      selectedCount: '{{count}} selezionati',
      deleteSelected: 'Elimina selezionati',
      bulkDeleteConfirm: 'Eliminare {{count}} colori?',
      bulkDeleted: '{{count}} colori eliminati',
      bulkDeleteFailed: 'Impossibile eliminare i colori',
    },
    dateFormat: 'Formato data',
    dateFormatUs: 'US (MM/GG/AAAA)',
    dateFormatEu: 'EU (GG/MM/AAAA)',
    dateFormatIso: 'ISO (AAAA-MM-GG)',
    timeFormat: 'Formato ora',
    timeFormat12: '12 ore (3:30 PM)',
    timeFormat24: '24 ore (15:30)',
    defaultPrinter: 'Stampante predefinita',
    defaultPrinterDescription: 'Preseleziona questa stampante per upload, ristampe e altre operazioni.',
    slicerBambuStudio: 'Bambu Studio',
    slicerOrcaSlicer: 'OrcaSlicer',
    sidebarOrderDescription: 'Trascina gli elementi nella barra laterale per riordinare. Ripristina l\'ordine predefinito qui.',
    setDefault: 'Imposta predefinito',
    sidebarOrderSetDefaultHint: 'Imposta predefinito applica l\'ordine attuale del menu agli utenti che non hanno ancora personalizzato il proprio.',
    sidebarDefaultSet: 'L\'ordine predefinito del menu è stato impostato.',
    sidebarDefaultCleared: 'Ordine predefinito del menu cancellato.',
    sidebarDefaultFailed: 'Impossibile impostare l\'ordine predefinito del menu.',
    reset: 'Ripristina',
    darkMode: 'Modalità scura',
    lightMode: 'Modalità chiara',
    active: '(attivo)',
    background: 'Sfondo',
    accent: 'Accento',
    style: 'Stile',
    bgNeutral: 'Neutro',
    bgWarm: 'Caldo',
    bgCool: 'Freddo',
    bgOled: 'OLED Nero',
    bgSlate: 'Blu ardesia',
    bgForest: 'Verde foresta',
    accentGreen: 'Verde',
    accentTeal: 'Verde acqua',
    accentBlue: 'Blu',
    accentOrange: 'Arancione',
    accentPurple: 'Viola',
    accentRed: 'Rosso',
    styleClassic: 'Classico',
    styleGlow: 'Luminoso',
    styleVibrant: 'Vibrante',
    themeToggleHint: 'Passa tra modalità scura e chiara con l\'icona sole/luna nella barra laterale.',
    autoArchivePrints: 'Archiviazione automatica stampe',
    autoArchiveDescription: 'Salva automaticamente i file 3MF al completamento delle stampe',
    saveThumbnailsDescription: 'Estrai e salva le immagini di anteprima dai file 3MF',
    captureFinishPhotoDescription: 'Scatta una foto dalla fotocamera della stampante al completamento della stampa',
    ffmpegNotInstalled: 'ffmpeg non installato',
    ffmpegRequired: 'L\'acquisizione dalla fotocamera richiede ffmpeg. Installalo tramite <brew>brew install ffmpeg</brew> (macOS) o <apt>apt install ffmpeg</apt> (Linux).',
    camera: 'Fotocamera',
    cameraViewMode: 'Modalità visualizzazione fotocamera',
    cameraOverlayDescription: 'La fotocamera si apre in un overlay ridimensionabile sulla schermata principale',
    cameraWindowDescription: 'La fotocamera si apre in una finestra separata del browser',
    externalCamerasDescription: 'Configura fotocamere esterne per sostituire la fotocamera integrata della stampante. Supporta stream MJPEG, RTSP, snapshot HTTP e fotocamere USB (V4L2). Quando abilitata, la fotocamera esterna viene usata per la vista in diretta e le foto di completamento.',
    cameraPlaceholderUsb: 'Percorso dispositivo (/dev/video0)',
    cameraPlaceholderUrl: 'URL fotocamera (rtsp://... o http://...)',
    cameraTypeMjpeg: 'Stream MJPEG',
    cameraTypeRtsp: 'Stream RTSP',
    cameraTypeSnapshot: 'Snapshot HTTP',
    cameraTypeUsb: 'Fotocamera USB (V4L2)',
    cameraSnapshotUrl: 'URL istantanea (facoltativo)',
    cameraSnapshotUrlPlaceholder: 'http://192.168.1.61:1984/api/frame.jpeg?src=printer',
    cameraSnapshotUrlHelp: 'URL singolo frame usato per miniature di notifica, foto di fine, frame del layer timelapse e rilevamento del piano. Timelapse e rilevamento del piano richiedono ciascuno il proprio toggle per stampante — questo URL è solo la sorgente immagine che usano quando attivi. Lascia vuoto per acquisire dallo stream live sopra. Utile per go2rtc (/api/frame.jpeg) e telecamere IP con endpoint snapshot dedicato.',
    cameraRotation: 'Rotazione',
    test: 'Test',
    connected: 'Connesso',
    disconnected: 'Disconnesso',
    currency: 'Valuta',
    defaultFilamentCost: 'Costo filamento predefinito (per kg)',
    electricityCost: 'Costo elettricità per kWh',
    energyDisplayMode: 'Modalità visualizzazione energia',
    energyModePrintDescription: 'La dashboard mostra la somma dell\'energia usata durante le stampe',
    energyModeTotalDescription: 'La dashboard mostra l\'energia totale dalle prese smart',
    fileManager: 'Gestore file',
    createArchiveEntry: 'Crea voce archivio durante la stampa',
    createArchiveEntryDescription: 'Quando si stampa dal gestore file, crea opzionalmente una voce di archivio',
    lowDiskSpaceWarning: 'Avviso spazio disco insufficiente',
    lowDiskSpaceDescription: 'Mostra avviso quando lo spazio disco scende sotto questa soglia',
    printerFirmware: 'Firmware stampante',
    checkFirmwareDescription: 'Controlla aggiornamenti firmware da Bambu Lab',
    bambuddySoftware: 'Software Bambuddy',
    autoCheckDescription: 'Controlla automaticamente nuove versioni all\'avvio',
    checkNow: 'Controlla ora',
    updateAvailableVersion: 'Aggiornamento disponibile: v{{version}}',
    releaseNotes: 'Note di rilascio',
    updateViaDocker: 'Aggiorna tramite Docker Compose:',
    updateViaHomeAssistant: 'Gli aggiornamenti sono gestiti dal Supervisor di Home Assistant. Apri Impostazioni → Add-on → Bambuddy in Home Assistant per installare la nuova versione.',
    installUpdate: 'Installa aggiornamento',
    latestVersionRunning: 'Stai usando l\'ultima versione',
    failedToCheckUpdates: 'Controllo aggiornamenti fallito: {{error}}',
    backupRestore: 'Backup e ripristino',
    backupRestoreDescription: 'Esporta/importa impostazioni e configura backup GitHub',
    goToBackup: 'Vai al backup',
    externalUrl: 'URL esterno',
    externalUrlDescription: 'L\'URL esterno dove Bambuddy è accessibile. Usato per immagini di notifica e integrazioni esterne.',
    bambuddyUrl: 'URL Bambuddy',
    externalUrlHint: 'Includi protocollo e porta (es. http://192.168.1.100:8000)',
    ftpRetry: 'Riprova FTP',
    ftpRetryDescription: 'Riprova le operazioni FTP quando il WiFi della stampante è instabile. Si applica a download 3MF, upload stampe, download timelapse e aggiornamenti firmware.',
    autoRetryDescription: 'Riprova automaticamente le operazioni FTP fallite',
    retryAttempts: 'Tentativi di ripetizione',
    retryDelay: 'Ritardo ripetizione',
    connectionTimeout: 'Timeout connessione',
    time_one: '{{count}} volta',
    time_other: '{{count}} volte',
    second_one: '{{count}} secondo',
    second_other: '{{count}} secondi',
    nSeconds: '{{count}} secondi',
    increaseForWeakWifi: 'Aumenta per stampanti con WiFi debole',
    homeAssistant: 'Home Assistant',
    homeAssistantFullDescription: 'Connetti a Home Assistant per controllare le prese smart tramite l\'API REST HA. Supporta entità switch, light, input_boolean e script.',
    homeAssistantUrl: 'URL Home Assistant',
    longLivedAccessToken: 'Token di accesso a lunga durata',
    haTokenHint: 'Crea un token in HA: Profilo → Token di accesso a lunga durata → Crea token',
    connectionSuccessful: 'Connessione riuscita',
    connectionFailed: 'Connessione fallita',
    haConnectionSuccess: 'Connesso con successo a Home Assistant.',
    haConnectionFailed: 'Connessione a Home Assistant fallita.',
    mqttPublishing: 'Pubblicazione MQTT',
    mqttDescription: 'Pubblica eventi BamBuddy su un broker MQTT esterno per l\'integrazione con Node-RED, Home Assistant e altri sistemi di automazione.',
    mqttEnableDescription: 'Pubblica eventi su broker MQTT esterno',
    brokerHostname: 'Hostname broker',
    port: 'Porta',
    usernameOptional: 'Nome utente (opzionale)',
    passwordOptional: 'Password (opzionale)',
    topicPrefix: 'Prefisso topic',
    topicPrefixHint: 'I topic saranno: {{prefix}}/printers/<serial>/status, ecc.',
    prometheusMetrics: 'Metriche Prometheus',
    prometheusEndpointDescription: 'Esponi metriche stampante su <code>/api/v1/metrics</code> per monitoraggio Prometheus/Grafana.',
    bearerTokenOptional: 'Token Bearer (opzionale)',
    bearerTokenHint: 'Se impostato, le richieste devono includere <code>Authorization: Bearer <token></code>',
    metricsConnectionStatus: 'Stato connessione',
    metricsPrinterState: 'Stato stampante (idle/printing/ecc)',
    metricsPrintProgress: 'Progresso stampa 0-100%',
    metricsBedTemp: 'Temperatura piatto',
    metricsNozzleTemp: 'Temperatura ugello',
    metricsPrintsTotal: 'Stampe totali per risultato',
    metricsMore: '...e altro (strati, ventole, coda, consumo filamento)',
    smartPlugsDescription: 'Connetti prese smart (Tasmota o Home Assistant) per automatizzare il controllo dell\'alimentazione e monitorare il consumo energetico delle stampanti.',
    allOn: 'Tutte accese',
    allOff: 'Tutte spente',
    addSmartPlug: 'Aggiungi presa smart',
    energySummary: 'Riepilogo energia',
    currentPower: 'Potenza attuale',
    plugsOnline: '{{reachable}}/{{total}} prese online',
    today: 'Oggi',
    yesterday: 'Ieri',
    total: 'Totale',
    enablePlugsForSummary: 'Abilita le prese per vedere il riepilogo energia',
    addNotificationProvider: 'Aggiungi',
    systemBadge: '(Sistema)',
    creating: 'Creazione...',
    changing: 'Modifica...',
    deleteUserAndItems: 'Elimina utente E i suoi elementi',
    deleteUserKeepItems: 'Elimina utente, mantieni elementi (diventeranno senza proprietario)',
    ok: 'OK',

    // 2FA settings
    twoFa: {
      totpTitle: 'App Authenticator (TOTP)',
      totpDesc: 'Usa un\'app come Google Authenticator, Aegis o Authy.',
      emailOtpTitle: 'OTP via e-mail',
      emailOtpDesc: 'Invia un codice monouso a {{email}} al momento del login.',
      emailOtpNoEmail: 'Aggiungi un indirizzo e-mail al tuo account per abilitare questo metodo.',
      addEmailFirst: 'Il tuo account non ha un indirizzo e-mail. Chiedi a un amministratore di aggiungerne uno.',
      setupTotp: 'Configura app Authenticator',
      setupAuthApp: 'Configura app Authenticator',
      setupInstructions: 'Scansiona il codice QR con la tua app authenticator, poi conferma con un codice.',
      manualEntry: 'Impossibile scansionare? Inserisci questo segreto manualmente:',
      scannedContinue: 'Codice scansionato — continua',
      enterCodeToConfirm: 'Inserisci il codice a 6 cifre dalla tua app authenticator per confermare.',
      activate: 'Attiva',
      disableTotp: 'Disabilita Authenticator',
      disableConfirmHint: 'Inserisci un codice TOTP valido o un codice di backup per disabilitare l\'authenticator.',
      totpDisabled: 'App Authenticator disabilitata.',
      emailOtpEnabled: 'OTP via e-mail abilitato.',
      emailOtpDisabled: 'OTP via e-mail disabilitato.',
      smtpRequired: 'Configura e testa prima le impostazioni SMTP.',
      invalidCode: 'Codice non valido. Riprova.',
      enableEmailOtp: 'Abilita OTP via e-mail',
      disableEmailOtp: 'Disabilita OTP via e-mail',
      emailSetupEnterCode: 'È stato inviato un codice di verifica al tuo indirizzo e-mail. Inseriscilo qui sotto per confermare che possiedi questa casella di posta.',
      verifyAndEnable: 'Verifica e abilita',
      emailDisablePasswordHint: 'Inserisci la password del tuo account per confermare la disabilitazione dell\'OTP via e-mail.',
      passwordPlaceholder: 'Inserisci la tua password',
      backupCodesTitle: 'Salva i tuoi codici di backup',
      backupCodesWarning: 'Conserva questi codici in un posto sicuro. Ogni codice può essere usato una sola volta.',
      backupCodesRemaining: '{{count}} codici di backup rimanenti',
      savedCodes: 'Codici salvati',
      regenBackup: 'Rigenera codici di backup',
      regenBackupHint: 'Inserisci il tuo codice TOTP corrente per generare 10 nuovi codici di backup.',
      newBackupCodes: 'Nuovi codici di backup',
      linkedAccounts: 'Account SSO collegati',
      linkedAccountsDesc: 'Questi provider di identità esterni sono collegati al tuo account.',
      oidcUnlinked: 'Account scollegato.',
    },

    // OIDC provider settings
    oidc: {
      title: 'Provider SSO / OIDC',
      desc: 'Configura provider OpenID Connect per il single sign-on.',
      addProvider: 'Aggiungi provider',
      newProvider: 'Nuovo provider',
      empty: 'Nessun provider OIDC configurato.',
      created: 'Provider creato.',
      updated: 'Provider aggiornato.',
      deleted: 'Provider eliminato.',
      refreshIcon: 'Aggiorna icona',
      removeIcon: 'Rimuovi icona',
      iconRefreshed: 'Icona aggiornata.',
      iconRemoved: 'Icona rimossa.',
      iconFetchFailed: 'Impossibile recuperare l\'icona dall\'URL del provider.',
      deleteTitle: 'Elimina provider',
      deleteMessage: 'Eliminare "{{name}}"? Tutti gli account collegati verranno disconnessi.',
      form: {
        name: 'Nome visualizzato',
        issuerUrl: 'URL emittente',
        clientId: 'ID client',
        clientSecret: 'Client secret',
        scopes: 'Scope',
        iconUrl: 'URL icona (opzionale)',
        enabled: 'Abilitato',
        autoCreate: 'Crea utenti automaticamente',
        autoCreateDesc: 'Crea automaticamente un account locale al primo accesso.',
        autoLink: 'Collega automaticamente gli account esistenti',
        autoLinkDesc: 'Collega gli account locali esistenti tramite email al primo accesso.',
        secretHint: 'lascia vuoto per mantenere',
        secretPlaceholder: 'nuovo segreto',
        emailClaim: 'Claim email',
        emailClaimDesc: "Claim JWT usato come identità email. Usare 'preferred_username' o 'upn' per Azure Entra ID (che non invia email_verified). Usare solo nomi di claim affidabili.",
        emailClaimPlaceholder: 'e-mail',
        emailClaimCustomClaimAutoLinkWarning: 'I claim personalizzati sono sicuri per il collegamento automatico solo se il valore è gestito dal tenant (es. Azure Entra ID upn / preferred_username). Non abilitare il collegamento automatico se il tuo IdP consente agli utenti di auto-assegnare questo claim.',
        requireEmailVerified: 'Richiedi verifica email',
        requireEmailVerifiedDesc: "Accetta il claim email solo se il provider lo contrassegna come verificato.",
        requireEmailVerifiedWarning: 'Attenzione: l\'email sarà accettata senza verifica. Usare solo con provider affidabili.',
        requireEmailVerifiedAutoLink: 'Disabilitare prima il collegamento automatico per modificare questa impostazione.',
        defaultGroup: 'Gruppo predefinito',
        defaultGroupDesc: 'Gruppo assegnato agli utenti creati automaticamente. Ritorno a Viewers se non impostato.',
        defaultGroupViewersFallback: 'Viewers (predefinito)',
      },
    },

    // TODO: translate encryption keys
    encryption: {
      title: 'Stato crittografia MFA',
      enabledFromEnv: 'Crittografia a riposo abilitata (chiave dalla variabile d\'ambiente MFA_ENCRYPTION_KEY)',
      enabledFromFile: 'Crittografia a riposo abilitata (chiave caricata dalla directory dei dati)',
      enabledGenerated: 'Crittografia a riposo abilitata con chiave auto-generata',
      notConfigured: 'Crittografia a riposo non configurata',
      notConfiguredDesc: 'I segreti TOTP e i client_secrets OIDC sono memorizzati in chiaro. Imposta MFA_ENCRYPTION_KEY o riavvia Bambuddy con una directory dati scrivibile per generarne uno automaticamente.',
      allEncrypted: 'Tutti i segreti MFA sono crittografati a riposo.',
      legacyRowsLabel: 'Righe legacy in chiaro',
      encryptedRowsLabel: 'Righe crittografate',
      legacyRowsWarning: 'Rilevate {{count}} righe legacy in chiaro. Salva di nuovo il provider OIDC o re-iscrivi l\'app authenticator dell\'utente per migrare allo storage crittografato.',
      backupHint: 'La chiave generata automaticamente è memorizzata in DATA_DIR/.mfa_encryption_key ed è inclusa nei backup locali ZIP. Mantieni sicuri i tuoi backup o imposta MFA_ENCRYPTION_KEY esplicitamente.',
      decryptionBrokenTitle: 'Chiave di crittografia mancante',
      decryptionBrokenError: '{{count}} record crittografati non possono essere decifrati perché la chiave di crittografia non è più disponibile. Ripristina il precedente MFA_ENCRYPTION_KEY o DATA_DIR/.mfa_encryption_key per recuperare.',
      migrationErrorWarning: "{{count}} riga/righe legacy non sono state ricifrate all'avvio. Controlla i log del server e riavvia Bambuddy per riprovare.",
    },


    spoolbuddy: {
      infoTitle: 'Dispositivi SpoolBuddy',
      infoBody: 'I kiosk SpoolBuddy si registrano automaticamente tramite heartbeat. Annulla la registrazione qui se un dispositivo non è più in uso o se un duplicato obsoleto è rimasto dopo un crash del daemon.',
      duplicatesTitle: '{{count}} dispositivi registrati',
      duplicatesBody: 'Solo il primo dispositivo registrato viene utilizzato dall\'interfaccia kiosk. Se uno di questi è un duplicato obsoleto da un crash, annulla la sua registrazione — un dispositivo online si ri-registrerà al prossimo heartbeat.',
      empty: 'Nessun dispositivo SpoolBuddy registrato.',
      online: 'Online',
      offline: 'Offline',
      unregister: 'Annulla registrazione',
      unregisterSuccess: 'Dispositivo deregistrato',
      unregisterError: 'Deregistrazione non riuscita',
      confirmTitle: 'Annullare la registrazione del dispositivo SpoolBuddy?',
      confirmBody: 'Questo rimuoverà "{{hostname}}" ({{deviceId}}) dal database. Se il dispositivo è online, si ri-registrerà al prossimo heartbeat.',
      ipAddress: 'Indirizzo IP',
      firmware: 'Firmware',
      lastSeen: 'Ultimo rilevamento',
      daemonUptime: 'Uptime del daemon',
      systemUptime: 'Uptime sistema',
      never: 'mai',
      nfc: 'NFC',
      scale: 'Bilancia',
      cpuTemp: 'Temp. CPU',
      memory: 'Memoria',
      disk: 'Disco',
      update: 'Aggiorna',
      updateConfirmTitle: 'Aggiornare il daemon Spoolbuddy?',
      updateConfirmBody: 'Avviare un aggiornamento software su "{{hostname}}"? Il daemon si riavvierà al termine dell\'aggiornamento.',
      restartBrowser: 'Riavvia browser',
      restartBrowserConfirmTitle: 'Riavviare il browser del kiosk?',
      restartBrowserConfirmBody: 'Riavviare il browser del kiosk su "{{hostname}}"? Il display si oscurerà brevemente.',
      restartDaemon: 'Riavvia daemon',
      restartDaemonConfirmTitle: 'Riavviare il daemon Spoolbuddy?',
      restartDaemonConfirmBody: 'Riavviare il daemon Spoolbuddy su "{{hostname}}"? Il dispositivo sarà offline per alcuni secondi.',
      reboot: 'Riavvia',
      rebootConfirmTitle: 'Riavviare il dispositivo?',
      rebootConfirmBody: 'Riavviare "{{hostname}}"? Il dispositivo sarà offline per circa un minuto.',
      shutdown: 'Spegni',
      shutdownConfirmTitle: 'Spegnere il dispositivo?',
      shutdownConfirmBody: 'Spegnere "{{hostname}}"? Sarà necessario un accesso fisico per riaccenderlo.',
      commandConfirm: 'Conferma',
      commandQueued: 'Comando in coda',
      commandError: 'Invio comando non riuscito',
    },
  },

  // 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.',
    clearErrors: 'Cancella errori',
    clearSuccess: 'Errori HMS cancellati',
    clearFailed: 'Impossibile cancellare gli errori HMS',
  },

  // 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: 'Argomento',
    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',
    usernameOrEmail: 'Nome utente o email',
    usernameOrEmailPlaceholder: 'Nome utente o @ Email',
    password: 'Password',
    passwordPlaceholder: 'Inserisci la password',
    signIn: 'Accedi',
    signingIn: 'Accesso in corso...',
    rememberMe: 'Ricordami',
    forgotPassword: 'Hai dimenticato la password?',
    loginSuccess: 'Accesso riuscito',
    loginFailed: 'Accesso fallito',
    enterCredentials: 'Inserisci nome utente e password',
    enterEmail: 'Inserisci il tuo indirizzo e-mail',
    oidcLoginFailed: 'Accesso OIDC fallito',
    oidcErrors: {
      providerError: "Il provider di identità ha restituito un errore",
      missingParameters: 'Parametri obbligatori mancanti nel callback OIDC',
      invalidState: 'Lo stato OIDC non è valido o è già stato utilizzato',
      stateExpired: 'La sessione OIDC è scaduta — riprovare',
      providerNotFound: 'Provider OIDC non trovato',
      discoveryFailed: 'Impossibile recuperare il documento di discovery OIDC',
      invalidDiscovery: 'Il documento di discovery OIDC non è valido',
      networkError: "Errore di rete durante lo scambio di token OIDC",
      badResponse: "Risposta inattesa durante lo scambio di token OIDC",
      noIdToken: 'Il provider OIDC non ha restituito un ID token',
      validationFailed: 'La validazione del token OIDC non è riuscita',
      nonceMismatch: 'Il nonce OIDC non corrisponde — possibile attacco di replay',
      missingSubClaim: 'Il token OIDC è privo del claim sub',
      noLinkedAccount: 'Nessun account locale è collegato a questa identità OIDC',
      accountInactive: 'Il tuo account è inattivo',
      userResolutionFailed: 'Impossibile risolvere il tuo account',
      internalError: "Si è verificato un errore interno durante il login OIDC",
      tokenExchangeFailed: 'Lo scambio di token OIDC non è riuscito',
    },
    forgotPasswordTitle: 'Password dimenticata',
    forgotPasswordMessage: 'Se hai dimenticato la password, contatta il tuo amministratore di sistema per reimpostarla.',
    forgotPasswordEmailMessage: 'Inserisci il tuo indirizzo email e ti invieremo una nuova password.',
    emailAddress: 'Indirizzo email',
    emailPlaceholder: 'tua.email@esempio.com',
    cancel: 'Annulla',
    sending: 'Invio...',
    sendResetEmail: 'Invia email di reimpostazione',
    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',
    twoFA: {
      title: 'Autenticazione a due fattori',
      subtitle: 'Il tuo account è protetto da 2FA. Inserisci il codice di verifica qui sotto.',
      methodAuthenticator: 'App di autenticazione',
      methodEmail: 'Codice via e-mail',
      methodBackup: 'Codice di recupero',
      instructionsTotp: "Apri la tua app di autenticazione e inserisci il codice a 6 cifre per Bambuddy.",
      instructionsEmail: "Un codice a 6 cifre è stato inviato al tuo indirizzo e-mail. È valido per 10 minuti.",
      instructionsEmailNotSent: 'Clicca il pulsante qui sotto per ricevere un codice di verifica via e-mail.',
      instructionsBackup: 'Inserisci uno dei tuoi codici di recupero a 8 caratteri. Ogni codice può essere utilizzato una sola volta.',
      sendCodeButton: 'Invia codice via e-mail',
      sendingCode: 'Invio in corso...',
      resendCode: 'Invia nuovamente il codice',
      codeLabel: 'Codice di verifica',
      backupCodeLabel: 'Codice di recupero',
      codePlaceholder: '000000',
      backupCodePlaceholder: 'XXXXXXXX',
      verifyButton: 'Verifica',
      verifyingButton: 'Verifica in corso...',
      backToLogin: '← Torna alla pagina di accesso',
      orContinueWith: 'oppure accedi con',
      signInWith: 'Accedi con {{provider}}',
      enterCode: 'Inserisci il codice di verifica',
      sendCodeFailed: 'Invio del codice di verifica non riuscito',
      invalidCode: 'Codice non valido. Riprova.',
    },

    resetPassword: {
      title: 'Imposta nuova password',
      subtitle: 'Inserisci e conferma la nuova password qui sotto.',
      newPassword: 'Nuova password',
      newPasswordPlaceholder: 'Almeno 8 caratteri',
      confirmPassword: 'Conferma password',
      confirmPasswordPlaceholder: 'Ripeti la nuova password',
      saving: 'Salvataggio…',
      submit: 'Imposta nuova password',
      backToLogin: 'Torna al login',
      passwordsDoNotMatch: 'Le password non coincidono',
      passwordTooShort: 'La password deve avere almeno 8 caratteri',
      resetFailed: 'Reimpostazione non riuscita. Il link potrebbe essere scaduto.',
    },
  },

  // 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: 'Istantanea',
    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: 'Reimposta zoom',
    recording: 'Registrazione',
    startRecording: 'Avvia registrazione',
    stopRecording: 'Ferma registrazione',
    chamberLight: 'Accendi/Spegni luce camera',
    unavailable: 'Telecamera non disponibile',
    diagnose: {
      button: 'Diagnostica',
      modalTitle: 'Diagnostica telecamera',
      running: 'Diagnostica in corso...',
      runFailed: 'Impossibile eseguire la diagnostica: {{error}}',
      retry: 'Riesegui',
      stage: {
        tcp_reachable: 'Raggiungibilità di rete',
        first_frame: 'Acquisizione frame',
        live_stream_active: 'Stream live attivo',
      },
      summary: {
        all_ok: 'La telecamera funziona. La diagnostica ha completato tutte le fasi con successo.',
        live_stream_active_healthy: 'La telecamera sta trasmettendo con frame recenti — nessun test necessario.',
        printer_unreachable: 'La stampante non è raggiungibile. Verifica l\'indirizzo IP, la connessione di rete e che la stampante sia accesa.',
        camera_port_closed: 'La stampante risponde ma la porta della telecamera è chiusa. Assicurati che la modalità LAN e la modalità sviluppatore siano attive nelle impostazioni della stampante.',
        no_frame: 'Connessione alla telecamera riuscita ma nessun frame ricevuto. Riprova o verifica che la telecamera sia abilitata nelle impostazioni della stampante.',
        unknown_failure: 'Diagnostica della telecamera fallita per motivo sconosciuto. Controlla il log di supporto per i dettagli.',
      },
      meta: {
        protocol: 'Protocollo',
        port: 'Porta',
        profile: 'Profilo',
      },
    },
  },

  // 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',
    },
    editor: {
      title: 'Modifica gruppo',
      createTitle: 'Crea gruppo',
      search: 'Cerca permessi...',
      selectAll: 'Seleziona tutto',
      clearAll: 'Deseleziona tutto',
      permissionsSelected: '{{count}} selezionati',
      noResults: 'Nessun permesso corrisponde alla ricerca',
    },
  },

  // 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: 'Amministratore',
    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',
      ldapProvisioned: 'Utente LDAP "{{username}}" provisionato',
    },
    modal: {
      createUser: 'Crea utente',
      editUser: 'Modifica utente',
      cancel: 'Annulla',
      creating: 'Creazione...',
      saving: 'Salvataggio...',
      saveChanges: 'Salva modifiche',
      advancedAuthSubtitle: 'con autenticazione avanzata',
      // Manual LDAP provisioning (#1298) — English fallbacks
      tabsAriaLabel: 'Origine utente',
      localTab: 'Locale',
      ldapTab: 'LDAP',
      ldapSearchLabel: 'Cerca nella directory',
      ldapSearchPlaceholder: 'Digita un nome utente, nome o e-mail...',
      ldapMinChars: 'Digita almeno 2 caratteri per cercare',
      ldapTypeToSearch: 'Inizia a digitare per cercare nella directory LDAP',
      ldapSearching: 'Ricerca nella directory...',
      ldapNoResults: 'Nessun utente corrispondente nella directory',
      ldapSearchError: 'Ricerca nella directory fallita. Verifica lo stato del server LDAP.',
      ldapAlreadyProvisioned: 'Già provisionato',
      ldapSelectedLabel: 'Selezionato',
      ldapProvision: 'Provisiona utente',
      ldapProvisioning: 'Provisioning...',
      ldapErrorProvision: 'Provisioning fallito. Verifica lo stato del server LDAP e riprova.',
    },
    form: {
      username: 'Nome utente',
      usernamePlaceholder: 'Inserisci nome utente',
      email: 'E-mail',
      emailPlaceholder: 'utente@esempio.com',
      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',
      optional: 'opzionale',
      autoGeneratedPassword: 'Una password sicura verrà generata automaticamente e inviata via email all\'utente.',
      passwordManagedByAdvancedAuth: 'La password è gestita dall\'autenticazione avanzata. Usa "Reimposta password" per inviare una nuova password all\'utente via email.',
      resetPassword: 'Reimposta password',
      resettingPassword: 'Reimpostazione password...',
    },
    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',
    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',
      local: 'Profili locali',
      kprofiles: 'Profili K',
    },
    localProfiles: {
      title: 'Profili locali',
      subtitle: 'Importa e gestisci preset slicer da OrcaSlicer',
      import: 'Importa profili',
      importDesc: 'Trascina file .bbscfg, .bbsflmt, .orca_filament, .zip o .json qui',
      importing: 'Importazione...',
      search: 'Cerca preset locali...',
      noPresets: 'Nessun preset locale ancora',
      badge: 'Locale',
      edit: 'Modifica',
      delete: 'Elimina',
      cancel: 'Annulla',
      deleteConfirmTitle: 'Elimina preset',
      deleteConfirm: 'Sei sicuro di voler eliminare questo preset? Questa azione non può essere annullata.',
      source: 'Fonte',
      inheritsFrom: 'Eredita da',
      filamentType: 'Tipo',
      vendor: 'Produttore',
      compatiblePrinters: 'Stampanti',
      nozzleTemp: 'Temp. ugello',
      cost: 'Costo',
      density: 'Densità',
      pressureAdvance: 'Pressure Advance',
      filament: 'Filamento',
      process: 'Processo',
      printer: 'Stampante',
      toast: {
        importSuccess: '{{count}} preset importati',
        importSkipped: '{{count}} preset saltati (duplicati)',
        importError: '{{count}} errori durante l\'importazione',
        deleted: 'Preset eliminato',
        updated: 'Preset aggiornato',
      },
    },
    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: 'E-mail',
      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: 'Token di accesso',
      accessTokenHint: 'Incolla il tuo access token Bambu Cloud. Gli account della regione Cina devono usare questa via (vincolati al numero di telefono — login via e-mail non disponibile). Il wiki spiega come recuperare il token dai cookie di MakerWorld.',
      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: 'Caricamento fallito',
    zipFilesFailed: '{{count}} file 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',
    collapse: 'Comprimi',
    collapseFoldersByDefault: 'Comprimi le cartelle per impostazione predefinita',
    expandFoldersByDefault: 'Espandi le cartelle per impostazione predefinita',
    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',
    noPermissionSlice: 'Non hai il permesso di sezionare i file',
    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',
    // External folder
    linkExternal: 'Collega esterno',
    linkExternalFolder: 'Collega cartella esterna',
    linkExternalFolderDescription: 'Monta una directory host (NAS, USB, condivisione di rete) nel File Manager. I file non vengono copiati — vengono letti direttamente dal percorso originale.',
    externalFolderNamePlaceholder: 'es. Stampe NAS',
    externalPath: 'Percorso host',
    externalPathHelp: 'Percorso assoluto della directory sull\'host Docker. Deve essere montato come bind nel container.',
    readOnly: 'Sola lettura',
    readOnlyHelp: 'impedisce caricamenti e cancellazioni',
    showHiddenFiles: 'Mostra file nascosti (file punto)',
    externalFolder: 'Cartella esterna',
    scanFolder: 'Scansiona',
    toast: {
      folderCreated: 'Cartella creata',
      folderDeleted: 'Cartella eliminata',
      fileDeleted: 'File eliminato',
      filesDeleted: 'Eliminati {{count}} file',
      filesMoved: 'File spostati',
      folderLinked: 'Cartella collegata',
      folderUnlinked: 'Cartella scollegata',
      externalFolderLinked: 'Cartella esterna collegata e scansionata',
      folderScanned: 'Scansione completata: {{added}} aggiunti, {{removed}} rimossi',
      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...',
    urlLabel: 'URL',
    urlPlaceholder: 'https://makerworld.com/...',
    urlInvalid: "L'URL deve iniziare con http:// o https://",
    openExternalUrl: 'Apri URL del progetto',
    coverImageLabel: 'Immagine di copertina',
    coverImageAlt: 'Immagine di copertina del progetto',
    coverImageUpload: 'Carica',
    coverImageReplace: 'Sostituisci',
    coverImageRemove: 'Rimuovi',
    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',
      totalCost: 'Costo totale',
      total: 'Totale',
      includesBom: 'incl. distinta materiali',
      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.',
      noFiles: 'Nessun file in questa cartella.',
      print: 'Stampa ora',
      addToQueue: 'Aggiungi alla coda',
    },
    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: 'Fattore K',
    temperature: 'Temperatura',
    noFilaments: 'Nessun filamento in libreria',
    deleteConfirm: 'Sei sicuro di voler eliminare questo filamento?',
    importFromPrinter: 'Importa da stampante',
    exportToFile: 'Esporta su file',
  },

  // Slice (slicer-API integration via SliceModal)
  slice: {
    title: 'Slicing modello',
    action: 'Slice',
    slicing: 'Slicing…',
    printer: 'Profilo stampante',
    process: 'Profilo processo',
    filament: 'Profilo filamento',
    filamentSlot: 'Filamento {{index}} ({{type}})',
    selectPreset: '— Seleziona un preset —',
    loadingPresets: 'Caricamento preset…',
    analyzingPlateFilaments: 'Analisi filamenti del piano…',
    analyzingPlateFilamentsHint: 'Slicing di anteprima per scoprire quali slot AMS usa questo piano. In cache dopo — la riapertura è istantanea.',
    previewToast: 'Analisi di {{name}} – {{elapsed}}',
    previewWithProgress: 'Analisi di {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}',
    notUsedByPlate: '— non usato da questo piano',
    printerMismatch: 'Questo 3MF è stato sezionato per {{source}}, ma hai scelto {{target}}. La CLI del slicer non può ri-sezionare un 3MF per una stampante diversa — apri la sorgente in Bambu Studio, cambia stampante e ri-esporta.',
    noPresetsForSlot: 'Nessun preset disponibile',
    presetsLoadFailed: 'Caricamento preset fallito. Apri Impostazioni → Profili per importarli prima.',
    allPresetsRequired: 'Tutti i preset devono essere selezionati',
    enqueuing: 'Invio lavoro di slicing…',
    queued: 'In coda…',
    failed: 'Slicing fallito. Controlla i log del sidecar.',
    startedToast: 'Slicing di {{name}} in background…',
    queuedToast: 'In coda: {{name}} – {{elapsed}}',
    runningToast: 'Slicing {{name}} – {{elapsed}}',
    runningWithProgress: '{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}',
    completedToast: '{{name}} sezionato',
    failedToast: 'Slicing di {{name}} fallito: {{detail}}',
    tier: {
      local: 'Importato',
      cloud: 'Cloud',
      standard: 'Standard',
    },
    cloud: {
      notAuthenticated: 'Accedi a Bambu Cloud (Impostazioni → Profili → Cloud) per vedere i preset cloud.',
      expired: 'Sessione Bambu Cloud scaduta – accedi di nuovo per aggiornare i preset cloud.',
      unreachable: 'Bambu Cloud non è raggiungibile. I preset locali e standard funzionano ancora.',
    },
    bedType: {
      label: 'Piano di stampa',
      auto: 'Auto (usa preset di processo)',
      coolPlate: 'Cool Plate',
      coolPlateSuperTack: 'Cool Plate SuperTack',
      engineering: 'Engineering Plate',
      highTemp: 'High Temp Plate',
      texturedPEI: 'Textured PEI Plate',
      smoothPEI: 'Smooth PEI Plate',
    },
  },

  // 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',
    unlinkConfirmTitle: 'Rimuovere bobina?',
    unlinkConfirmMessage: 'Questo rimuoverà la bobina da questo slot. I dati della bobina stessa rimarranno invariati.',
    selectSpool: 'Seleziona bobina',
    noUnlinkedSpools: 'Nessuna bobina disponibile',
    linkSuccess: 'Bobina assegnata con successo',
    linkFailed: 'Impossibile assegnare la bobina',
    unlinkSuccess: 'Bobina rimossa con successo',
    unlinkFailed: 'Impossibile rimuovere la bobina',
    linkedSpool: 'Bobina assegnata',
    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.',
  },

  // Inventory
  inventory: {
    title: 'Inventario Bobine',
    subtitle: 'Gestisci le tue bobine',
    spoolmanMixedContentTitle: 'Spoolman non può essere caricato tramite HTTPS — contenuto misto bloccato dal browser',
    spoolmanMixedContentBody: 'Bambuddy viene servito tramite HTTPS (dietro il tuo reverse proxy), ma l\'URL di Spoolman è ancora HTTP. I browser bloccano il contenuto misto per motivi di sicurezza, quindi l\'interfaccia Spoolman incorporata non può essere visualizzata. Anche Spoolman deve essere raggiungibile via HTTPS.',
    spoolmanMixedContentFixReverseProxy: 'Metti Spoolman dietro lo stesso reverse proxy di Bambuddy (Traefik / Nginx / Caddy) in HTTPS, poi aggiorna l\'URL di Spoolman nelle Impostazioni con il nuovo indirizzo HTTPS.',
    spoolmanMixedContentFixOpenNewTab: 'Come alternativa, apri Spoolman in una nuova scheda via HTTP — le regole sul contenuto misto si applicano solo ai frame incorporati, una scheda autonoma funziona.',
    spoolmanOpenInNewTab: 'Apri Spoolman in una nuova scheda',
    labels: {
      title: 'Stampa etichette bobine',
      selectedCount: '{{count}} selezionato',
      pickSpools: 'Scegli per quali bobine stampare le etichette:',
      searchPlaceholder: 'Cerca per nome, marca o #ID',
      filterByMaterial: 'Materiale:',
      allMaterials: 'Tutto',
      selectVisible: 'Seleziona tutti visibili ({{count}})',
      deselectVisible: 'Deseleziona visibili',
      clearAll: 'Cancella tutto',
      noSpoolsToShow: 'Nessuna bobina da mostrare. Modifica il filtro e riprova.',
      noMatches: 'Nessuna bobina corrisponde alla ricerca o al filtro corrente.',
      printOne: 'Stampa etichetta per questa bobina',
      printLabels: 'Stampa etichette…',
      bulkTitle: 'Scegli le bobine da etichettare tra le {{count}} mostrate',
      noSpoolsTitle: 'Nessuna bobina da etichettare',
      error: 'Impossibile generare etichette: {{msg}}',
      sortBy: {
        label: 'Ordina:',
        id: 'Per ID',
        color: 'Per colore',
      },
      templates: {
        ams: {
          label: 'AMS holder (30 × 15 mm)',
          hint: 'Una etichetta per pagina; adatta al popolare portaetichette AMS.',
        },
        box40x30: {
          label: 'Etichetta scatola (40 × 30 mm)',
          hint: 'Una etichetta per pagina; misura comune DK/Brother, ideale per etichette di sacchetti filamento e contenitori.',
        },
        box: {
          label: 'Box label (62 × 29 mm)',
          hint: 'Una etichetta per pagina; dimensionata per Brother PT/QL e piccole etichette Dymo.',
        },
        averyL7160: {
          label: 'Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)',
          hint: 'Foglio formato UE; 21 etichette per pagina A4.',
        },
        avery5160: {
          label: 'Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)',
          hint: 'Foglio formato US; 30 etichette per pagina Letter.',
        },
      },
    },
    addSpool: 'Aggiungi Bobina',
    editSpool: 'Modifica Bobina',
    copySpool: 'Copia Bobina',
    material: 'Materiale',
    selectMaterial: 'Seleziona materiale...',
    subtype: 'Sottotipo',
    brand: 'Marchio',
    searchBrand: 'Cerca marchio...',
    useCustomBrand: 'Usa "{{brand}}"',
    useCustomMaterial: 'Usa materiale personalizzato: {{material}}',
    colorName: 'Nome Colore',
    colorNamePlaceholder: 'Bianco Giada, Rosso Fuoco...',
    color: 'Colore',
    hexColor: 'Colore Hex',
    pickColor: 'Scegli colore personalizzato',
    labelWeight: 'Peso da Etichetta',
    coreWeight: 'Peso Bobina Vuota',
    searchSpoolWeight: 'Cerca peso bobina...',
    weightUsed: 'Utilizzato',
    currentWeight: 'Peso Rimanente',
    measuredWeight: 'Peso Misurato',
    spoolName: 'Bobina',
    costPerKg: 'Costo per kg',
    storageLocation: 'Posizione di archiviazione',
    storageLocationPlaceholder: 'es. Scaffale A, Cassetto 1',
    openInInventory: "Apri nell'inventario",
    measuredWeightError: 'Il peso misurato deve essere compreso tra {{min}}g e {{max}}g.',
    slicerFilament: 'Filamento Slicer',
    slicerFilamentName: 'Nome Preset Slicer',
    slicerPreset: 'Preset Slicer',
    searchPresets: 'Cerca preset filamento...',
    selectedPreset: 'Selezionato',
    noPresetsFound: 'Nessun preset trovato',
    tempOverrides: 'Override Temperatura',
    note: 'Nota',
    notePlaceholder: 'Eventuali note aggiuntive su questa bobina...',
    // Per-spool category + low-stock threshold override (#729)
    category: 'Categoria',
    categoryPlaceholder: 'es. Produzione, Prototipo, Cliente A',
    categoryNone: 'Senza categoria',
    storageLocationNone: 'Nessuna posizione impostata',
    lowStockThresholdOverride: 'Soglia scorte basse (questa bobina)',
    lowStockThresholdOverrideHelp: 'Lascia vuoto per usare la soglia globale ({{global}}%).',
    clearRfid: 'Cancella tag RFID',
    rfidCleared: 'Tag RFID cancellato',
    archive: 'Archivia',
    restore: 'Ripristina',
    noSpools: 'Ancora nessuna bobina. Aggiungi la tua prima bobina per iniziare.',
    noAvailableSpools: 'Nessuna bobina disponibile. Aggiungi una bobina al tuo inventario o rimuovine l\'assegnazione da un altro slot.',
    kProfiles: 'Profili K',
    addKProfile: 'Aggiungi K-Profile',
    assignSpool: 'Assegna Bobina',
    unassignSpool: 'Scollega',
    assignSuccess: 'Bobina assegnata e slot AMS configurato',
    assignFailed: 'Assegnazione bobina fallita',
    selectSpool: 'Seleziona una bobina da assegnare a questo slot',
    assigned: 'Assegnato',
    assigning: 'Assegnazione...',
    searchSpools: 'Cerca bobine...',
    showAllSpools: 'Mostra tutte le bobine',
    spoolmanSpools: 'Bobine Spoolman',
    allMaterials: 'Tutti i Materiali',
    filterByBrand: 'Filtra per marchio...',
    showArchived: 'Mostra archiviate',
    quickAdd: 'Aggiunta rapida (Scorta)',
    quantity: 'Quantità',
    stock: 'Scorta',
    configured: 'Configurata',
    spoolsCreated: '{{count}} bobine create',
    spoolsPartiallyCreated: '{{created}} di {{total}} bobine create (alcune non riuscite)',
    spoolCreated: 'Bobina creata',
    spoolUpdated: 'Bobina aggiornata',
    spoolDeleted: 'Bobina eliminata',
    deepLinkSpoolNotFound: 'Bobina non trovata',
    deepLinkFetchFailed: 'Impossibile caricare la bobina — riprova',
    spoolArchived: 'Bobina archiviata',
    spoolRestored: 'Bobina ripristinata',
    kProfileSaveFailed: 'Impossibile salvare le impostazioni del profilo K',
    syncWeightSpoolNotFound: 'Bobina non trovata — potrebbe essere stata eliminata',
    syncWeightSpoolmanUnreachable: 'Spoolman non è raggiungibile — riprovare più tardi',
    syncWeightFailed: 'Sincronizzazione del peso non riuscita',
    spoolmanUnreachable: 'Spoolman non è raggiungibile — riprovare più tardi',
    deleteSpoolNotFound: 'Bobina non trovata — potrebbe essere già stata eliminata',
    deleteFailed: 'Impossibile eliminare la bobina',
    archiveSpoolNotFound: 'Bobina non trovata — potrebbe essere già stata eliminata',
    archiveFailed: 'Impossibile archiviare la bobina',
    restoreSpoolNotFound: 'Bobina non trovata — potrebbe essere già stata eliminata',
    restoreFailed: 'Impossibile ripristinare la bobina',
    saveFailed: 'Impossibile salvare le modifiche',
    tagClearFailed: 'Impossibile cancellare il tag',
    deleteConfirm: 'Sei sicuro di voler eliminare questa bobina? Questa azione non può essere annullata.',
    archiveConfirm: 'Sei sicuro di voler archiviare questa bobina?',
    advancedSettings: 'Impostazioni Avanzate',
    // Tabs
    filamentInfoTab: 'Info filamento',
    paProfileTab: 'Profilo PA',
    filamentInfo: 'Filamento',
    additional: 'Aggiuntivo',
    // Cloud
    loadingPresets: 'Caricamento preset cloud...',
    cloudConnected: 'Cloud connesso',
    cloudNotConnected: 'Cloud non connesso (valori predefiniti)',
    // Colors
    recentColors: 'Recenti',
    searchColors: 'Cerca colori...',
    searchResults: 'Risultati della ricerca',
    allColors: 'Tutti i colori',
    commonColors: 'Colori comuni',
    showLess: 'Mostra meno',
    showAll: 'Mostra tutto',
    noColorsFound: 'Nessun colore corrisponde alla ricerca',
    noResults: 'Nessun risultato trovato',
    // Multi-color gradient + visual effect (#1154) — English fallback.
    extraColorsLabel: 'Colori extra',
    extraColorsPlaceholder: 'EC984C,#6CD4BC,A66EB9,D87694',
    extraColorsHint: 'Incolla da 2 a 8 stop hex, separati da virgole. Visualizzato come sfumatura.',
    extraColorsInvalid: 'Hex non validi ignorati: {{tokens}}',
    colorEffectLabel: 'Effetto',
    colorEffect: {
      none: 'Nessuno',
      sparkle: 'Scintillante',
      wood: 'Legno',
      marble: 'Marmo',
      glow: 'Bagliore',
      matte: 'Opaco',
      silk: 'Silk',
      galaxy: 'Galassia',
      rainbow: 'Arcobaleno',
      metal: 'Metallo',
      translucent: 'Traslucido',
      gradient: 'Sfumatura',
      dualColor: 'Bicolore',
      triColor: 'Tricolore',
      multicolor: 'Multicolore',
    },
    // PA Profiles
    selectMaterialFirst: 'Selezionare prima un materiale nella scheda Info filamento.',
    noPrintersConfigured: 'Nessuna stampante configurata. Aggiungi stampanti per usare i profili PA.',
    matchingFilter: 'Corrispondenti',
    anyBrand: 'Qualsiasi marca',
    anyVariant: 'Qualsiasi variante',
    autoSelect: 'Selezione automatica',
    matches: 'corrispondenze',
    match: 'corrispondenza',
    noMatches: 'Nessuna corrispondenza',
    connected: 'Connessa',
    offline: 'Offline',
    printerOffline: 'La stampante è offline. Connetti per visualizzare i profili di calibrazione.',
    noKProfilesMatch: 'Nessun profilo K corrisponde al filamento selezionato.',
    leftNozzle: 'Ugello sinistro',
    rightNozzle: 'Ugello destro',
    profilesSelected: 'profili di calibrazione selezionati',
    // Stats & enhanced table
    totalInventory: 'Inventario totale',
    totalConsumed: 'Totale consumato',
    byMaterial: 'Per materiale',
    inPrinter: 'In stampante',
    lowStock: 'Scorta bassa',
    sinceTracking: 'Dall\'inizio del tracciamento',
    resetUsage: 'Azzera utilizzo',
    resetUsageTooltip: 'Azzera il contatore di grammi consumati per questa bobina',
    resetUsageConfirm: 'Azzerare il contatore di grammi consumati di questa bobina? Le stampe future ripartiranno da zero. La bobina, il calcolo del peso rimanente e le impostazioni non vengono modificati.',
    resetAllUsage: 'Azzera utilizzo di tutte le bobine',
    resetAllUsageTooltip: 'Azzera il contatore di grammi consumati su ogni bobina attiva',
    resetAllUsageConfirm: 'Azzerare il contatore di grammi consumati su tutte le {{count}} bobine attive? La statistica "Totale Consumato" verrà azzerata e le stampe future ripartiranno da zero. Bobine e pesi rimanenti restano invariati.',
    usageReset: 'Utilizzo della bobina azzerato',
    allUsageReset: '{{count}} bobina/e azzerata/e',
    resetUsageFailed: 'Impossibile azzerare l\'utilizzo della bobina',
    loadedInAms: 'Caricato in AMS/Est',
    remaining: 'Rimanente',
    weightCheck: 'Controllo Peso',
    lastWeighed: 'Ultima pesatura',
    neverWeighed: 'Mai pesato',
    search: 'Cerca bobine...',
    showing: 'Visualizzazione',
    to: 'a',
    of: 'di',
    show: 'Mostra',
    spools: 'bobine',
    spool: 'bobina',
    page: 'Pagina',
    noSpoolsMatch: 'Nessun risultato trovato',
    noSpoolsMatchDesc: 'Prova a modificare la ricerca o i filtri per trovare quello che cerchi.',
    active: 'Attive',
    archived: 'Archiviate',
    all: 'Tutte',
    used: 'Usato',
    new: 'Nuovo',
    clearFilters: 'Cancella filtri',
    table: 'Tabella',
    cards: 'Schede',
    net: 'Netto',
    // Grouping
    groupSimilar: 'Raggruppa',
    groupedSpools: '{{count}} bobine identiche',
    groupedRows: 'righe',
    // Column config
    columns: 'Colonne',
    configureColumns: 'Configura colonne',
    configureColumnsDesc: 'Trascina per riordinare le colonne o usa le frecce. Attiva/disattiva la visibilità con l\'icona dell\'occhio.',
    visible: 'visibili',
    reset: 'Ripristina',
    cancel: 'Annulla',
    applyChanges: 'Applica modifiche',
    moveUp: 'Sposta su',
    moveDown: 'Sposta giù',
    hideColumn: 'Nascondi colonna',
    showColumn: 'Mostra colonna',
    // Tag linking
    linkToSpool: 'Collega a bobina',
    tagLinked: 'Tag collegato alla bobina',
    tagLinkFailed: 'Impossibile collegare il tag',
    tagAlreadyLinked: 'Tag già collegato a un\'altra bobina',
    unknownTag: 'Tag RFID sconosciuto rilevato',
    // Usage history
    usageHistory: 'Cronologia utilizzo',
    noUsageHistory: 'Nessun utilizzo registrato',
    printName: 'Nome stampa',
    weightConsumed: 'Peso consumato',
    clearHistory: 'Cancella',
    historyCleared: 'Cronologia utilizzo cancellata',
    fillSourceLabel: '(Inv)',
    lowStockThresholdError: 'La soglia deve essere tra 0.1 e 99.9',
    assignMismatchTitle: 'Materiale non corrispondente',
    assignMismatchMessage: 'Il materiale della bobina selezionata "{{spoolMaterial}}" non corrisponde al materiale del vassoio "{{trayMaterial}}" per {{location}}. Assegnare comunque?',
    assignMismatchConfirm: 'Assegna comunque',
    assignPartialMismatchMessage: 'Il materiale della bobina "{{spoolMaterial}}" è simile ma non corrisponde esattamente a "{{trayMaterial}}" in {{location}}. Vuoi procedere?',
    assignProfileMismatchMessage: 'Il profilo della bobina "{{spoolProfile}}" non corrisponde al profilo del vassoio "{{trayProfile}}" in {{location}}. Vuoi procedere?',
    // Spoolman filament catalog picker
    spoolmanFilamentCatalog: 'Catalogo filamenti Spoolman',
    pickFromSpoolmanCatalog: 'Scegli dal catalogo Spoolman…',
    spoolmanFilamentSelected: 'Filamento selezionato dal catalogo Spoolman',
    spoolmanFilamentUnlinked: 'Collegamento al catalogo filamenti rimosso',
    noSpoolmanFilaments: 'Nessun filamento trovato nel catalogo Spoolman',
    spoolmanFilamentColorSwatch: 'Colore del filamento',
    spoolWeightManagedBySpoolman: 'Il peso della bobina vuota è gestito per tipo di filamento in Spoolman',
    spoolmanCatalogLoadFailed: 'Impossibile caricare il catalogo Spoolman',
  },

  // 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: 'Fattore K',
    fill: 'Livello',
    configure: 'Configura',
    used: 'utilizzato',
    remainingUnit: 'rimanente',
  },

  // Print modal
  printModal: {
    title: 'Avvia stampa',
    selectPrinter: 'Seleziona stampante',
    selectPlate: 'Seleziona piatto',
    filamentMapping: 'Mappatura filamento',
    totalCost: 'Costo totale:',
    slotRemainingShort: ' - {{grams}}g rim.',
    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',
    sameTypeDifferentColor: 'Stesso tipo, colore diverso',
    filamentTypeNotLoaded: 'Tipo di filamento non caricato',
    openCalendar: 'Apri calendario',
    leftNozzle: 'L',
    rightNozzle: 'R',
    leftNozzleTooltip: 'Ugello sinistro',
    rightNozzleTooltip: 'Ugello destro',
    filamentOverride: 'Sostituzione filamento',
    filamentOverrideHint: 'Sostituisci opzionalmente i filamenti per l\'assegnazione basata sul modello. Lo scheduler abbinerà i filamenti selezionati invece dei valori 3MF originali.',
    originalFilament: 'Originale',
    overrideWith: 'Sostituisci con',
    resetToOriginal: 'Ripristina originale',
    insufficientFilamentTitle: 'Filamento insufficiente',
    insufficientFilamentMessage: 'Alcune bobine assegnate hanno meno filamento rimanente di quanto necessario per questa stampa:',
    insufficientFilamentLine: '{{printer}} - {{slot}}: necessita di {{required}}g, rimanenti {{remaining}}g',
    printAnyway: 'Stampa comunque',
    forceColorMatch: 'Forza corrispondenza colore',
    staggerPrinterStarts: 'Scaglionare avvii',
    staggerGroupSize: 'Dimensione gruppo',
    staggerInterval: 'Intervallo (min)',
    staggerPreview: '{{printers}} stampanti → {{groups}} gruppi di {{size}}, avvio ogni {{interval}} min',
    staggerLastGroup: 'ultimo gruppo: {{count}}',
    staggerTotal: 'totale: {{minutes}} min',
    staggerToPrinters: 'Scagliona a {{count}} stampanti',
    gcodeInjection: 'Inietta G-code auto-stampa',
  },

  // Backup
  backup: {
    includesEncryptionKey: 'I backup locali includono il file della chiave di crittografia MFA (DATA_DIR/.mfa_encryption_key), quindi un backup ZIP è autonomo. Tratta lo ZIP come sensibile — chiunque abbia il file può decifrare i client secret OIDC e i segreti TOTP contenuti.',
    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',

    // GitHub Backup
    githubBackup: 'Backup GitHub',
    enabled: 'Abilitato',
    cloudLoginRequired: 'Accesso Bambu Cloud richiesto. Accedi in Profili → Profili Cloud per abilitare il backup GitHub.',
    cloudLoginRequiredShort: 'Accesso Cloud richiesto',
    githubDescription: 'Sincronizza automaticamente i tuoi profili con un repository GitHub privato per backup e cronologia delle versioni.',
    repoIsPrivate: 'Il repository è privato — è sicuro effettuare il backup.',
    repoIsPublicWarning: 'Il repository è PUBBLICO. I backup di Bambuddy includono credenziali MQTT, token di Home Assistant, token di Prometheus, la tua e-mail Bambu Cloud e i codici di accesso alle stampanti tramite K-profile. Il salvataggio è bloccato finché non rendi privato il repository nelle impostazioni del tuo provider.',
    repoVisibilityUnknown: 'Impossibile determinare la visibilità del repository. Bambuddy rifiuta di eseguire backup su qualsiasi target non confermato come privato; il salvataggio sarà bloccato.',
    repositoryUrl: 'URL del repository',
    repoUrlPlaceholderGitHub: 'https://github.com/username/repo-name',
	repoUrlPlaceholderGitea: 'https://gitea.example.com/username/repo-name',
    repoUrlPlaceholderForgejo: 'https://forgejo.example.com/username/repo-name',
    repoUrlPlaceholderGitLab: 'https://gitlab.com/username/repo-name',
    allowInsecureHttp: 'Consenti HTTP non sicuro',
    allowInsecureHttpHint: 'Abilita per istanze self-hosted su reti private senza TLS',
    personalAccessToken: 'Token di accesso personale',
    tokenSaved: '(salvato)',
    enterNewToken: 'Inserisci un nuovo token per aggiornare',
    tokenHint: 'Token a grana fine con permesso di lettura/scrittura dei contenuti',
    branch: 'Branch',
    provider: 'Provider Git',
    providerGitHub: 'GitHub',
	providerGitLab: 'GitLab',
	providerGitea: 'Gitea',
    providerForgejo: 'Forgejo',
    manualOnly: 'Solo manuale',
    hourly: 'Ogni ora',
    daily: 'Giornaliero',
    weekly: 'Settimanale',
    includeInBackup: 'Includi nel backup',
    kProfiles: 'K-Profili',
    kProfilesDescription: 'Calibrazione dell\'avanzamento pressione dalle stampanti connesse',
    noPrintersConnected: 'Nessuna stampante connessa',
    printersConnected: '{{connected}}/{{total}} connesse',
    cloudProfiles: 'Profili Cloud',
    cloudProfilesDescription: 'Preset di filamento, stampante e processo da Bambu Cloud',
    appSettings: 'Impostazioni App',
    appSettingsDescription: 'Configurazione Bambuddy (database completo)',
    spoolInventory: 'Inventario bobine',
    spoolInventoryDescription: 'Bobine di filamento, cronologia utilizzo e tracciamento costi',
    printArchives: 'Archivi di stampa',
    printArchivesDescription: 'Metadati della cronologia di stampa (nessun file gcode/3MF)',
    lastBackupAt: 'Ultimo backup:',
    noBackupsYet: 'Nessun backup ancora',
    next: 'Prossimo:',
    startingBackup: 'Avvio del backup...',
    test: 'Test',
    enableBackup: 'Abilita backup',
    testConnection: 'Testa connessione',
    enterRepoUrl: 'Inserisci l\'URL del repository',
    enterRepoAndToken: 'Inserisci l\'URL del repository e il token di accesso',
    repoRequired: 'L\'URL del repository è obbligatorio',
    tokenRequired: 'Il token di accesso è obbligatorio',
    githubBackupEnabled: 'Backup GitHub abilitato',
    tokenUpdated: 'Token aggiornato',
    settingsSaved: 'Impostazioni salvate',
    failedToSave: 'Salvataggio fallito: {{message}}',
    backupCompleteFiles: 'Backup completato - {{count}} file aggiornati',
    backupSkippedNoChanges: 'Backup saltato - nessuna modifica',
    backupFailed2: 'Backup fallito: {{message}}',
    clearedLogs: '{{count}} log eliminati',
    failedToClearLogs: 'Eliminazione log fallita: {{message}}',

    // History
    history: 'Cronologia',
    clear: 'Cancella',
    date: 'Data',
    status: 'Stato',
    commit: 'Commit',

    // Local Backup
    localBackup: 'Backup locale',
    localBackupDescription: 'Crea un backup completo dei tuoi dati Bambuddy includendo database, archivi, upload e tutti i file.',
    downloadBackupLabel: 'Scarica backup',
    completeBackupZip: 'Backup completo: database + tutti i file (ZIP)',
    download: 'Scarica',
    preparingBackup: 'Preparazione del backup...',
    creatingArchive: 'Creazione dell\'archivio di backup... Potrebbe richiedere del tempo per archivi di grandi dimensioni.',
    downloadingFile: 'Download del file di backup...',
    backupDownloaded: 'Backup scaricato con successo',
    failedToCreateBackup: 'Creazione del backup fallita: {{message}}',
    restore: 'Ripristina',
    restoreReplacesAll: 'Il ripristino sostituisce tutti i dati.',
    restoreReplacesAllDetail: 'Il database e i file attuali verranno completamente sostituiti. È necessario un riavvio dopo il ripristino.',
    restoreConfirmTitle: 'Ripristina backup',
    restoreConfirmMessage: 'Sei sicuro di voler ripristinare da "{{filename}}"? Questo sostituirà completamente il tuo database e tutti i file. L\'applicazione dovrà essere riavviata dopo il ripristino.',
    restoreConfirmButton: 'Ripristina backup',
    uploadingFile: 'Caricamento del file di backup...',
    backupRestoredRestart: 'Backup ripristinato. Riavvia Bambuddy.',
    failedToRestore: 'Ripristino del backup fallito. Controlla il formato del file.',
    reloadNow: 'Ricarica ora',
    creatingBackup: 'Creazione del backup',
    restoringBackup: 'Ripristino del backup',
    preparing: 'Preparazione...',
    processing: 'Elaborazione...',
    doNotClosePage: 'Non chiudere questa pagina e non navigare altrove. Questa operazione potrebbe richiedere diversi minuti per backup di grandi dimensioni.',

    // RestoreModal
    restoring: 'Ripristino in corso...',
    restoreComplete: 'Ripristino completato',
    restoreFailed2: 'Ripristino fallito',
    importSettings: 'Importa impostazioni da un file di backup',
    pleaseWaitRestoring: 'Attendere durante il ripristino dei dati',
    selectBackupFile: 'Clicca per selezionare un file di backup (.json o .zip)',
    duplicateHandling: 'Come funziona la gestione dei duplicati:',
    matchPrinters: 'Stampanti',
    matchPrintersBy: 'corrispondenza per numero di serie',
    matchSmartPlugs: 'Smart Plug',
    matchSmartPlugsBy: 'corrispondenza per indirizzo IP',
    matchNotificationProviders: 'Provider di notifica',
    matchNotificationProvidersBy: 'corrispondenza per nome',
    matchFilaments: 'Filamenti',
    matchFilamentsBy: 'corrispondenza per nome + tipo + marca',
    matchArchives: 'Archivi',
    matchArchivesBy: 'corrispondenza per hash del contenuto (sempre saltato)',
    matchPendingUploads: 'Upload in sospeso',
    matchPendingUploadsBy: 'corrispondenza per nome file',
    matchSettingsTemplates: 'Impostazioni e modelli',
    matchSettingsTemplatesBy: 'sempre sovrascritti',
    replaceExisting: 'Sostituisci dati esistenti',
    keepExisting: 'Mantieni dati esistenti',
    overwriteDescription: 'Sovrascrivi gli elementi già esistenti con i dati del backup',
    keepDescription: 'Ripristina solo gli elementi che non esistono ancora',
    overwriteCaution: 'Attenzione:',
    overwriteWarning: 'La sovrascrittura sostituirà le configurazioni attuali con i dati del backup. I codici di accesso delle stampanti non vengono mai sovrascritti per sicurezza.',
    cancel: 'Annulla',
    processingBackup: 'Elaborazione del file di backup...',
    itemsRestored: 'Elementi ripristinati',
    itemsSkipped: 'Elementi saltati',
    restored: 'Ripristinati',
    skippedAlreadyExist: 'Saltati (già esistenti)',
    filesCategory: 'File (3MF, miniature, ecc.)',
    andMore: '...e altri {{count}}',
    newApiKeysGenerated: 'Nuove chiavi API generate',
    keysShownOnce: 'Queste chiavi vengono mostrate solo una volta. Copiale ora!',
    copy: 'Copia',
    noDataFound: 'Nessun dato da ripristinare trovato nel file di backup.',
    close: 'Chiudi',

    // Scheduled local backups (#884)
    scheduledBackup: 'Backup pianificati',
    scheduledBackupDescription: 'Crea automaticamente snapshot di backup secondo una pianificazione. La directory di output può essere montata su un NAS o storage esterno.',
    frequency: 'Frequenza',
    backupTime: 'Tempo',
    retention: 'Conservazione',
    retentionDescription: 'Numero di backup da conservare',
    outputPath: 'Percorso di output',
    outputPathPlaceholder: 'Predefinito: {{path}}',
    outputPathDescription: 'Lasciare vuoto per la posizione predefinita',
    runNow: 'Esegui ora',
    backupFiles: 'File di backup',
    noScheduledBackups: 'Nessun backup ancora',
    deleteBackup: 'Elimina',
    deleteBackupConfirm: 'Eliminare questo file di backup?',
    backupRunning: 'Backup in corso...',
    scheduledBackupComplete: 'Backup completato con successo',
    scheduledBackupFailed: 'Backup fallito',
    nextBackup: 'Prossimo backup',
    backupSize: 'Dimensione',
    utc: 'UTC',
    defaultPathLabel: 'Predefinito:',

    // Category labels
    categories: {
      settings: 'Impostazioni',
      notification_providers: 'Provider di notifica',
      notification_templates: 'Modelli di notifica',
      smart_plugs: 'Smart Plug',
      printers: 'Stampanti',
      filaments: 'Filamenti',
      maintenance_types: 'Tipi di manutenzione',
      archives: 'Archivi',
      projects: 'Progetti',
      pending_uploads: 'Upload in sospeso',
      external_links: 'Link esterni',
      api_keys: 'Chiavi API',
    },
  },

  // 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
  // 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: 'Deformazione',
      stringing: 'Filamento',
      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: 'Profili K',
    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: 'Valore K',
      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: 'Alto flusso',
      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: 'Sovrascrittura interfaccia di rete',
      configured: 'Sovrascrittura interfaccia attiva',
      optional: 'Opzionale - usare se l\'IP rilevato automaticamente e sbagliato (es. piu NIC, Docker, VPN)',
      placeholder: 'Rilevamento automatico (predefinito)...',
      hint: 'Sovrascrive l\'indirizzo IP pubblicizzato via SSDP e usato nel certificato TLS. Utile quando Bambuddy ha piu interfacce di rete.',
    },
    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',
    },
    autoDispatch: {
      title: 'Avvio automatico',
      description: 'Avvia automaticamente le stampe aggiunte alla coda. Se disattivato, le stampe attendono l\'avvio manuale.',
    },
    queueForceColorMatch: {
      title: 'Forza corrispondenza colori',
      description: 'Rifiuta di inviare a una stampante che non ha esattamente il tipo di filamento e il colore caricato. Disattivato per impostazione predefinita — senza questo, la coda usa solo la corrispondenza per modello e potrebbe scegliere una stampante con il colore sbagliato.',
    },
    tailscaleDisabled: {
      title: 'Integrazione Tailscale',
      description: 'Abilita per contrassegnare questo VP come esposto tramite Tailscale. Mostra l\'indirizzo Tailscale dell\'host così sai quale IP incollare nello slicer. Il passo di importazione CA è invariato — questo toggle non ha effetto sui certificati.',
    },
    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',
      step1: 'Sulla stessa LAN, le stampanti virtuali appaiono automaticamente nel tuo slicer (Bambu Studio / OrcaSlicer). Da altre reti, aggiungile manualmente tramite indirizzo IP e codice di accesso.',
      step2: 'In modalità Archivio, Revisione e Coda, usa il pulsante "Invia" nel tuo slicer per caricare file 3MF su Bambuddy. Lo slicer mostrerà "Stampa riuscita" — il file viene salvato, non stampato.',
      step3: 'In modalità Proxy, la stampante virtuale inoltra tutto il traffico a una stampante reale — le stampe partono immediatamente come con una connessione diretta.',
    },
    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',
      copyFailed: 'Copia non riuscita — seleziona il testo manualmente',
      accessCodeRequired: 'Imposta prima un codice accesso',
      targetPrinterRequired: 'Seleziona prima una stampante target',
      bindIpRequired: 'Impostare prima un indirizzo IP',
      accessCodeEmpty: 'Il codice accesso non può essere vuoto',
      accessCodeLength: 'Il codice accesso deve essere esattamente 8 caratteri',
      created: 'Stampante virtuale creata',
      failedToCreate: 'Impossibile creare la stampante virtuale',
      deleted: 'Stampante virtuale eliminata',
      failedToDelete: 'Impossibile eliminare la stampante virtuale',
    },
    list: {
      title: 'Stampanti virtuali',
      add: 'Aggiungi',
      addFirst: 'Aggiungi stampante virtuale',
      empty: 'Nessuna stampante virtuale configurata. Aggiungine una per iniziare.',
    },
    bindIp: {
      title: 'Interfaccia di rete',
      placeholder: 'Seleziona interfaccia...',
      hint: 'Interfaccia di rete a cui questa stampante virtuale si collega. Deve essere unica per stampante.',
    },
    proxy: {
      accessCodeHint: 'In modalita proxy, usa il codice di accesso della stampante di destinazione nello slicer. La connessione viene inoltrata in modo trasparente alla stampante reale.',
    },
    addDialog: {
      title: 'Aggiungi stampante virtuale',
      name: 'Nome',
      hint: 'Potrai configurare il codice di accesso, la stampante di destinazione e altre impostazioni dopo la creazione.',
      create: 'Crea',
    },
    deleteConfirm: {
      title: 'Elimina stampante virtuale',
      message: 'Sei sicuro di voler eliminare "{{name}}"? Tutti i servizi di questa stampante verranno interrotti.',
    },
    archiveNameSource: {
      title: 'Origine nome archivio',
      description: 'Scegli come vengono nominati i nuovi archivi quando i file arrivano tramite la stampante virtuale. "Metadati" utilizza il titolo incorporato nello slicer dal 3MF (default). "Nome file" utilizza il nome che Bambu Studio ha inviato via FTP — utile se hai rinominato il job nella finestra "invia a stampante".',
      metadata: 'Metadati',
      filename: 'Nome file',
    },
  },

  // 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: {
    lubricateCarbonRods: 'Applica lubrificante alle aste in carbonio per un movimento fluido',
    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',
    lubricateSteelRods: 'Applica lubrificante alle aste in acciaio per un movimento fluido',
    cleanSteelRods: 'Pulisci le aste in acciaio per ridurre attrito',
    cleanLinearRails: 'Pulisci le guide lineari per rimuovere polvere e detriti',
    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)',
  },

  // Smart Plugs
  smartPlugs: {
    offline: 'Offline',
    admin: 'Amministrazione',
    openPlugAdminPage: 'Apri pagina amministrazione presa',
    deleteSmartPlug: 'Elimina presa smart',
    turnOnSmartPlug: 'Accendi presa smart',
    turnOffSmartPlug: 'Spegni presa smart',
    turnOn: 'Accendi',
    turnOff: 'Spegni',
    addSmartPlug: {
      scanningNetwork: 'Scansione rete...',
      chooseEntity: 'Scegli un\'entità...',
      connectionFailed: 'Connessione fallita',
      searchEntities: 'Cerca entità...',
      searchPowerSensors: 'Cerca sensori di potenza...',
      searchEnergySensors: 'Cerca sensori di energia...',
      placeholders: {
        plugName: 'Presa soggiorno',
        mqttStateOnValue: 'ON, true, 1',
        mqttSameAsPower: 'Stesso del topic potenza, o diverso',
      },
    },
    // SmartPlugCard
    linkedTo: 'Collegato a:',
    monitorOnly: 'Solo monitoraggio',
    alerts: 'Avvisi',
    scheduleOn: 'Alle {{time}}',
    scheduleOff: 'Spento {{time}}',
    on: 'On',
    off: 'Spento',
    power: 'Potenza',
    kwhToday: 'kWh Oggi',
    settings: 'Impostazioni',
    automationSettings: 'Impostazioni automazione',
    showInSwitchbar: 'Mostra nella barra interruttori',
    quickAccessSidebar: 'Accesso rapido dalla barra laterale',
    enabled: 'Abilitato',
    enableAutomation: 'Abilita automazione per questa presa',
    autoOn: 'Auto On',
    autoOnDescription: 'Accendi quando inizia la stampa',
    autoOff: 'Auto Off',
    autoOffDescription: 'Spegni quando la stampa è completata (una tantum)',
    autoOffPersistent: 'Mantieni attivo',
    autoOffPersistentDescription: 'Resta attivo tra le stampe invece di una tantum',
    autoOffAfterDrying: 'Spegni dopo asciugatura',
    autoOffAfterDryingDescription: 'Spegni al termine dell\'asciugatura AMS',
    delayAfterDryingMinutes: 'Ritardo dopo asciugatura (minuti)',
    turnOffDelayMode: 'Modalità ritardo spegnimento',
    time: 'Tempo',
    temp: 'Temp.',
    delayMinutes: 'Ritardo (minuti)',
    tempThreshold: 'Soglia temperatura (°C)',
    tempThresholdDescription: 'Si spegne quando l\'ugello si raffredda sotto questa temperatura',
    edit: 'Modifica',
    deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"? Questa azione non può essere annullata.',
    turnOnConfirm: 'Sei sicuro di voler accendere "{{name}}"?',
    turnOffConfirm: 'Sei sicuro di voler spegnere "{{name}}"? Questo interromperà l\'alimentazione del dispositivo collegato.',
    failedToTurn: 'Impossibile {{action}} "{{name}}"',
    unknown: 'Sconosciuto',
    // AddSmartPlugModal
    addTitle: 'Aggiungi presa smart',
    editTitle: 'Modifica presa smart',
    stopScanning: 'Interrompi scansione',
    discoverTasmota: 'Scopri dispositivi Tasmota',
    foundDevices: '{{count}} dispositivo/i trovato/i - clicca per selezionare:',
    noDevicesFound: 'Nessun dispositivo Tasmota trovato nella rete',
    haNotConfigured: 'Home Assistant non è configurato. Configuralo in',
    haSettingsPath: 'Impostazioni → Rete → Home Assistant',
    selectEntity: 'Seleziona entità *',
    ipAddress: 'Indirizzo IP *',
    nameLabel: 'Nome *',
    username: 'Nome utente',
    password: 'Password',
    authHint: 'Lascia vuoto se il tuo dispositivo Tasmota non richiede autenticazione',
    linkToPrinter: 'Collega alla stampante',
    noPrinter: 'Nessuna stampante (solo controllo manuale)',
    linkingDescription: 'Il collegamento abilita accensione/spegnimento automatico all\'inizio/fine stampa',
    powerAlerts: 'Avvisi potenza',
    alertAbove: 'Avviso se sopra (W)',
    alertBelow: 'Avviso se sotto (W)',
    alertDescription: 'Ricevi notifiche quando il consumo supera queste soglie. Lascia vuoto per disabilitare quella direzione.',
    dailySchedule: 'Programma giornaliero',
    turnOnAt: 'Accendi alle',
    turnOffAt: 'Spegni alle',
    scheduleDescription: 'Accendi/spegni automaticamente la presa a questi orari ogni giorno. Lascia vuoto per saltare quell\'azione.',
    showOnPrinterCard: 'Mostra sulla scheda stampante',
    displayOnPrinterCard: 'Mostra pulsante sulla scheda stampante',
    connectedResult: 'Connesso!',
    deviceLabel: 'Dispositivo: {{name}} - ',
    stateLabel: 'Stato: {{state}}',
    test: 'Test',
    delete: 'Elimina',
    save: 'Salva',
    add: 'Aggiungi',
    cancel: 'Annulla',
    failedToStartScan: 'Impossibile avviare la scansione',
    nameRequired: 'Il nome è obbligatorio',
    entityRequired: 'L\'entità è obbligatoria per le prese Home Assistant',
    mqttTopicRequired: 'Almeno un topic MQTT deve essere configurato per potenza, energia o monitoraggio stato',
    loadingEntities: 'Caricamento entità...',
    loading: 'Caricamento...',
    failedToLoadEntities: 'Impossibile caricare le entità: {{error}}',
    noEntitiesMatching: 'Nessuna entità trovata corrispondente a "{{search}}"',
    noEntitiesAvailable: 'Nessuna entità disponibile',
    searchingEntities: 'Ricerca in tutte le entità ({{count}} trovate)',
    showingEntities: 'Mostrando switch, light, input_boolean ({{count}} disponibili)',
    energyMonitoringOptional: 'Monitoraggio energia (Opzionale)',
    energyMonitoringHint: 'Cerca e seleziona i sensori che forniscono dati di potenza/energia.',
    powerSensorW: 'Sensore potenza (W)',
    energyTodayKwh: 'Energia oggi (kWh)',
    totalEnergyKwh: 'Energia totale (kWh)',
    noMatchingSensors: 'Nessun sensore corrispondente',
    none: 'Nessuno',
    mqttNotConfigured: 'Broker MQTT non configurato. Imposta l\'indirizzo del broker in',
    mqttSettingsPath: 'Impostazioni → Rete → Pubblicazione MQTT',
    mqttNotConfiguredSuffix: '(non è necessario abilitare la pubblicazione, basta inserire i dettagli del broker).',
    mqttMonitorOnlyDescription: 'Le prese MQTT ricevono dati di potenza/energia tramite sottoscrizione MQTT. Il controllo on/off non è disponibile - usa il tuo broker MQTT o sistema domotico.',
    powerMonitoring: 'Monitoraggio potenza',
    energyMonitoring: 'Monitoraggio energia',
    stateMonitoring: 'Monitoraggio stato',
    optional: 'opzionale',
    topic: 'Argomento',
    jsonPath: 'Percorso JSON',
    multiplier: 'Moltiplicatore',
    onValue: 'Valore ON',
    mqttPowerHint: 'Il percorso JSON estrae il valore dal payload JSON (es. "power_l1"). Lascia vuoto se il topic pubblica valori numerici grezzi.\nUsa moltiplicatore 0.001 per mW→W, 1000 per kW→W.',
    mqttEnergyHint: 'Il percorso JSON estrae il valore dal payload JSON. Lascia vuoto per valori grezzi.\nUsa moltiplicatore 0.001 per Wh→kWh, 1000 per MWh→kWh.',
    mqttStateHint: 'Il percorso JSON estrae il valore dal payload JSON. Lascia vuoto per valori grezzi.\nValore ON: la stringa esatta che significa "ON". Lascia vuoto per rilevamento auto (ON, true, 1).',
    // REST smart plug
    restControl: 'Controllo',
    restOnUrl: 'URL accensione',
    restOffUrl: 'URL spegnimento',
    restOnBody: 'Corpo richiesta ON',
    restOffBody: 'Corpo richiesta OFF',
    restMethod: 'Metodo HTTP',
    restHeaders: 'Custom Headers (JSON)',
    restStatusUrl: 'URL stato',
    restStatusPath: 'Percorso JSON stato',
    restStatusOnValue: 'Valore ON',
    restPowerUrl: 'URL potenza',
    restPowerPath: 'Percorso JSON potenza',
    restPowerMultiplier: 'Moltiplicatore potenza',
    restEnergyUrl: 'URL energia',
    restEnergyPath: 'Percorso JSON energia',
    restEnergyMultiplier: 'Moltiplicatore energia',
    restUrlRequired: 'È richiesto almeno un URL (ON o OFF) per le prese REST',
    restHeadersHint: 'es. {"Authorization": "Bearer your-token"}',
    restBodyHint: 'es. ON, {"state": "on"}',
    restStatusHint: 'URL per recuperare lo stato attuale',
    restPathHint: 'es. state o data.power.status',
    restPowerUrlHint: 'URL separato per i dati di potenza (usa l\'URL di stato se vuoto)',
    restEnergyUrlHint: 'URL separato per i dati di energia (usa l\'URL di stato se vuoto)',
    restEnergyHint: 'Ogni valore può usare il proprio URL o ricadere sull\'URL di stato. Usa i moltiplicatori per la conversione delle unità (es. 0.001 per convertire Wh in kWh).',
    testConnection: 'Testa connessione',
    connectionSuccess: 'Connessione riuscita',
    noSwitchesInSwitchbar: 'Nessun interruttore nella barra',
    enableSwitchbarHint: 'Abilita "Mostra nella barra interruttori" in Impostazioni > Smart Plugs',
  },

  // Notifications
  notifications: {
    // Provider types
    providerTypes: {
      callmebot: 'CallMeBot/WhatsApp',
      ntfy: 'ntfy',
      pushover: 'Pushover',
      telegram: 'Telegram',
      email: 'E-mail',
      discord: 'Discord',
      webhook: 'Webhook',
      homeassistant: 'Home Assistant',
    },
    // Provider descriptions
    providerDescriptions: {
      email: 'Notifiche email tramite SMTP',
      telegram: 'Notifiche tramite bot Telegram',
      discord: 'Invia a un canale Discord tramite webhook',
      ntfy: 'Notifiche push gratuite e self-hostabili',
      pushover: 'Notifiche push semplici e affidabili',
      callmebot: 'Notifiche WhatsApp gratuite tramite CallMeBot',
      webhook: 'POST HTTP generico verso qualsiasi URL',
      homeassistant: 'Notifiche persistenti nella dashboard di Home Assistant',
    },
    // NotificationProviderCard
    lastSuccess: 'Ultimo: {{date}}',
    error: 'Errore',
    printer: 'Stampante:',
    allPrinters: 'Tutte le stampanti',
    sendTestNotification: 'Invia notifica di prova',
    eventSettings: 'Impostazioni eventi',
    enabled: 'Abilitato',
    sendFromProvider: 'Invia notifiche da questo provider',
    // Event categories
    printEvents: 'Eventi di stampa',
    printerStatus: 'Stato stampante',
    amsAlarms: 'Allarmi AMS',
    amsHtAlarms: 'Allarmi AMS-HT',
    printQueue: 'Coda di stampa',
    // Event tags (badges)
    start: 'Avvio',
    plateCheck: 'Controllo piatto',
    complete: 'Completato',
    failed: 'Fallito',
    stopped: 'Interrotto',
    progress: 'Avanzamento',
    offline: 'Offline',
    lowFilament: 'Filamento scarso',
    maintenance: 'Manutenzione',
    amsHumidity: 'Umidità AMS',
    amsTemp: 'Temp AMS',
    amsHtHumidity: 'Umidità AMS-HT',
    amsHtTemp: 'Temp AMS-HT',
    bedCooled: 'Piatto raffreddato',
    firstLayer: 'Primo strato',
    quiet: 'Silenzioso',
    digest: 'Riepilogo {{time}}',
    // Event labels (expanded settings)
    printStarted: 'Stampa avviata',
    plateNotEmpty: 'Piatto non vuoto',
    plateNotEmptyDescription: 'Oggetti rilevati prima della stampa',
    printCompleted: 'Stampa completata',
    bedCooledLabel: 'Piatto raffreddato',
    bedCooledDescription: 'Piatto raffreddato sotto la soglia dopo la stampa',
    firstLayerCompleteLabel: 'Primo strato completato',
    firstLayerCompleteDescription: 'Notifica con foto al termine del primo strato',
    missingSpoolAssignmentLabel: 'Assegnazione bobina mancante',
    missingSpoolAssignmentDescription: 'Notifica quando una stampa parte e i vassoi richiesti non hanno una bobina assegnata',
    printFailed: 'Stampa fallita',
    printStopped: 'Stampa interrotta',
    progressMilestones: 'Traguardi di avanzamento',
    progressMilestonesDescription: 'Notifica al 25%, 50%, 75%',
    printerOffline: 'Stampante offline',
    printerError: 'Errore stampante',
    lowFilamentLabel: 'Filamento scarso',
    maintenanceDue: 'Manutenzione necessaria',
    maintenanceDueDescription: 'Notifica quando è necessaria la manutenzione',
    amsHumidityHigh: 'Umidità AMS elevata',
    amsHumidityHighDescription: 'L\'umidità dell\'AMS standard supera la soglia',
    amsTemperatureHigh: 'Temperatura AMS elevata',
    amsTemperatureHighDescription: 'La temperatura dell\'AMS standard supera la soglia',
    amsHtHumidityHigh: 'Umidità AMS-HT elevata',
    amsHtHumidityHighDescription: 'L\'umidità dell\'AMS-HT supera la soglia',
    amsHtTemperatureHigh: 'Temperatura AMS-HT elevata',
    amsHtTemperatureHighDescription: 'La temperatura dell\'AMS-HT supera la soglia',
    // Inventory stock alert events
    inventoryAlerts: 'Avvisi di inventario',
    stockReorderAlert: 'Avviso di riordino',
    stockReorderAlertDescription: 'Il SKU ha raggiunto il punto di riordino',
    stockBreakAlert: 'Avviso di esaurimento scorte',
    stockBreakAlertDescription: 'Le scorte si esauriranno prima dell\'arrivo del rifornimento',
    // Queue events
    jobAdded: 'Lavoro aggiunto',
    jobAddedDescription: 'Lavoro aggiunto alla coda',
    jobAssigned: 'Lavoro assegnato',
    jobAssignedDescription: 'Lavoro basato su modello assegnato alla stampante',
    jobStarted: 'Lavoro avviato',
    jobStartedDescription: 'Lavoro in coda avviato per la stampa',
    jobWaiting: 'Lavoro in attesa',
    jobWaitingDescription: 'Lavoro in attesa di filamento o stampante',
    jobSkipped: 'Lavoro saltato',
    jobSkippedDescription: 'Lavoro saltato (precedente fallito)',
    jobFailed: 'Lavoro fallito',
    jobFailedDescription: 'Avvio del lavoro fallito',
    queueComplete: 'Coda completata',
    queueCompleteDescription: 'Tutti i lavori in coda completati',
    // Quiet hours
    quietHours: 'Ore silenziose',
    noNotificationsDuring: 'Nessuna notifica durante queste ore',
    editProviderToChangeQuietHours: 'Modifica il provider per cambiare le ore silenziose',
    // Daily digest
    dailyDigest: 'Riepilogo giornaliero',
    batchNotifications: 'Raggruppa le notifiche in un unico riepilogo giornaliero',
    sendAt: 'Invia alle {{time}}',
    editProviderToChangeDigestTime: 'Modifica il provider per cambiare l\'orario del riepilogo',
    // Actions
    edit: 'Modifica',
    deleteProvider: 'Elimina provider di notifica',
    deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"? Questa azione non può essere annullata.',
    delete: 'Elimina',
    // AddNotificationModal
    addTitle: 'Aggiungi provider di notifica',
    editTitle: 'Modifica provider di notifica',
    nameLabel: 'Nome *',
    namePlaceholder: 'Le mie notifiche',
    providerTypeLabel: 'Tipo di provider *',
    configuration: 'Configurazione',
    testConfiguration: 'Testa configurazione',
    printerFilter: 'Filtro stampante',
    onlyFromPrinter: 'Invia notifiche solo per eventi da questa stampante',
    quietHoursDnd: 'Ore silenziose (Non disturbare)',
    quietStart: 'Inizio',
    quietEnd: 'Fine',
    dailyDigestLabel: 'Riepilogo giornaliero',
    sendDigestAt: 'Invia riepilogo alle',
    digestCollected: 'Gli eventi verranno raccolti e inviati come riepilogo unico a quest\'ora',
    notificationEvents: 'Eventi di notifica',
    progressPercent: '(25%, 50%, 75%)',
    bedCooledAfterPrint: '(dopo il completamento della stampa)',
    // Per-event ntfy priority (#990)
    eventPriority: {
      sectionTitle: 'Priorità ntfy',
      helpNtfy: 'Scegli una priorità per ogni evento abilitato. ntfy le usa per intensificare gli avvisi (suono, visibilità, comportamento push). I livelli non impostati qui usano l\'impostazione predefinita del server ntfy.',
      min: 'Min.',
      low: 'Bassa',
      default: 'Predefinita',
      high: 'Alta',
      urgent: 'Urgente',
    },
    cancel: 'Annulla',
    save: 'Salva',
    add: 'Aggiungi',
    nameRequired: 'Il nome è obbligatorio',
    fieldRequired: '{{field}} è obbligatorio',
    // Config field labels
    phoneNumber: 'Numero di telefono',
    apiKey: 'Chiave API',
    serverUrl: 'URL del server',
    topic: 'Argomento',
    authToken: 'Token di autenticazione',
    userKey: 'Chiave utente',
    appToken: 'Token applicazione',
    priority: 'Priorità',
    botToken: 'Token del bot',
    chatId: 'ID chat',
    smtpServer: 'Server SMTP',
    smtpPort: 'Porta SMTP',
    security: 'Sicurezza',
    authentication: 'Autenticazione',
    username: 'Nome utente',
    password: 'Password',
    fromEmail: 'Email mittente',
    toEmail: 'Email destinatario',
    webhookUrl: 'URL webhook',
    payloadFormat: 'Formato payload',
    authorization: 'Autorizzazione',
    titleFieldName: 'Nome campo titolo',
    messageFieldName: 'Nome campo messaggio',
    // NotificationTemplateEditor
    editTemplate: 'Modifica modello: {{name}}',
    titleLabel: 'Titolo',
    bodyLabel: 'Corpo',
    titlePlaceholder: 'Titolo della notifica...',
    bodyPlaceholder: 'Corpo della notifica...',
    availableVariables: 'Variabili disponibili',
    clickToInsert: 'Clicca per inserire alla posizione del cursore nel corpo',
    livePreview: 'Anteprima live',
    hide: 'Nascondi',
    show: 'Mostra',
    loadingPreview: 'Caricamento anteprima...',
    enterTemplateContent: 'Inserisci il contenuto del modello per vedere l\'anteprima',
    titlePreview: 'Titolo:',
    bodyPreview: 'Corpo:',
    resetToDefault: 'Ripristina predefinito',
    titleRequired: 'Il titolo è obbligatorio',
    bodyRequired: 'Il corpo è obbligatorio',
    // NotificationLogViewer
    notificationLog: 'Registro notifiche',
    showFailedOnly: 'Solo fallite',
    last24Hours: 'Ultime 24 ore',
    last7Days: 'Ultimi 7 giorni',
    last30Days: 'Ultimi 30 giorni',
    last90Days: 'Ultimi 90 giorni',
    justNow: 'Proprio ora',
    noFailedNotifications: 'Nessuna notifica fallita',
    noNotificationsLogged: 'Nessuna notifica registrata',
    unknownProvider: 'Provider sconosciuto',
    logTitle: 'Titolo',
    logMessage: 'Messaggio',
    logError: 'Errore',
    logProvider: 'Provider: {{type}}',
    logTime: 'Ora: {{time}}',
    refresh: 'Aggiorna',
    clearOld: 'Cancella vecchie',
    statsSummary: 'Ultimi {{days}} giorni:',
    statsNotifications: 'notifiche',
    statsSent: '{{count}} inviate',
    statsFailed: '{{count}} fallite',
    // Event type labels (for log viewer)
    eventTypes: {
      print_start: 'Stampa avviata',
      print_complete: 'Stampa completata',
      print_failed: 'Stampa fallita',
      print_stopped: 'Stampa interrotta',
      print_progress: 'Avanzamento',
      printer_offline: 'Stampante offline',
      printer_error: 'Errore stampante',
      filament_low: 'Filamento scarso',
      maintenance_due: 'Manutenzione necessaria',
      test: 'Prova',
    },
    // User email notification preferences
    userEmail: {
      title: 'Notifiche',
      emailNotifications: 'Notifiche via e-mail',
      emailNotificationsDesc: "Ricevi notifiche via e-mail per i tuoi lavori di stampa. Le e-mail vengono inviate tramite le impostazioni SMTP configurate nell'autenticazione avanzata.",
      sendingTo: 'Le notifiche verranno inviate a',
      noEmailWarning: "Il tuo account non ha un indirizzo e-mail. Contatta un amministratore per aggiungerne uno.",
      printJobNotifications: 'Notifiche lavori di stampa',
      printJobNotificationsDesc: 'Scegli quali eventi attivano le notifiche e-mail per i lavori di stampa che invii.',
      printJobStarts: 'Inizio lavoro di stampa',
      printJobStartsDesc: 'Ricevi una notifica quando il tuo lavoro di stampa inizia.',
      printJobFinishes: 'Fine lavoro di stampa',
      printJobFinishesDesc: 'Ricevi una notifica quando il tuo lavoro di stampa si completa correttamente.',
      printErrors: 'Errori di stampa',
      printErrorsDesc: 'Ricevi una notifica quando il tuo lavoro di stampa fallisce o incontra un errore.',
      printJobStops: 'Lavoro di stampa interrotto',
      printJobStopsDesc: 'Ricevi una notifica quando il tuo lavoro di stampa viene annullato o interrotto.',
      saveSuccess: 'Preferenze di notifica salvate.',
      saveError: 'Impossibile salvare le preferenze di notifica.',
    },
  },

  // Rich Text Editor
  richTextEditor: {
    bold: 'Grassetto',
    italic: 'Corsivo',
    underline: 'Sottolineato',
    bulletList: 'Elenco puntato',
    numberedList: 'Elenco numerato',
    alignLeft: 'Allinea a sinistra',
    alignCenter: 'Allinea al centro',
    alignRight: 'Allinea a destra',
    addLink: 'Aggiungi link',
    removeLink: 'Rimuovi link',
  },

  // External Links
  externalLinks: {
    noLinksConfigured: 'Nessun link esterno configurato',
    deleteLink: 'Elimina link',
    removeCustomIcon: 'Rimuovi icona personalizzata',
    openInNewTab: 'Apri in nuova scheda',
    placeholders: {
      linkName: 'Il mio link',
    },
  },

  // Keyboard Shortcuts Modal
  keyboardShortcuts: {
    title: 'Scorciatoie da tastiera',
    navigation: 'Navigazione',
    archivesSection: 'Archivi',
    kProfilesSection: 'Profili K',
    generalSection: 'Generale',
    shortcuts: {
      goToPrinters: 'Vai a Stampanti',
      goToArchives: 'Vai ad Archivi',
      goToQueue: 'Vai a Coda',
      goToStats: 'Vai a Statistiche',
      goToProfiles: 'Vai a Profili cloud',
      goToSettings: 'Vai a Impostazioni',
      focusSearch: 'Vai alla ricerca',
      openUploadModal: 'Apri finestra di caricamento',
      clearSelection: 'Cancella selezione / deseleziona input',
      contextMenu: 'Menu contestuale sulle schede',
      refreshProfiles: 'Aggiorna profili',
      newProfile: 'Nuovo profilo',
      exitSelectionMode: 'Esci dalla modalità selezione',
      showHelp: 'Mostra questa guida',
    },
    footer: 'Premi Esc o clicca fuori per chiudere',
  },

  // Notification Log
  notificationLog: {
    title: 'Registro notifiche',
    events: {
      printStarted: 'Stampa avviata',
      printComplete: 'Stampa completata',
      printFailed: 'Stampa fallita',
      printStopped: 'Stampa interrotta',
      progress: 'Avanzamento',
      printerOffline: 'Stampante offline',
      printerError: 'Errore stampante',
      lowFilament: 'Filamento in esaurimento',
      maintenanceDue: 'Manutenzione in scadenza',
      test: 'Test',
    },
    timeAgo: {
      justNow: 'Adesso',
      minutesAgo: '{{minutes}} min fa',
      hoursAgo: '{{hours}} ore fa',
    },
  },

  // Restore/Backup Modal
  restoreBackup: {
    title: 'Ripristina backup',
    restoring: 'Ripristino...',
    restoreComplete: 'Ripristino completato',
    restoreFailed: 'Ripristino fallito',
    importSettings: 'Importa impostazioni da un file di backup',
    pleaseWait: 'Attendere il ripristino dei dati',
    clickToSelect: 'Clicca per selezionare il file di backup (.json o .zip)',
    howDuplicateHandling: 'Come funziona la gestione dei duplicati:',
    categories: {
      printers: 'Stampanti',
      smartPlugs: 'Prese smart',
      notificationProviders: 'Provider di notifica',
      filaments: 'Filamenti',
      archives: 'Archivi',
      pendingUploads: 'Caricamenti in sospeso',
      settingsTemplates: 'Impostazioni e modelli',
    },
    matchingInfo: {
      printers: 'abbinati per numero di serie',
      smartPlugs: 'abbinati per indirizzo IP',
      notificationProviders: 'abbinati per nome',
      filaments: 'abbinati per nome + tipo + marca',
      archives: 'abbinati per hash del contenuto',
      pendingUploads: 'abbinati per nome file',
      settingsTemplates: 'sempre sovrascritti',
    },
    replaceExisting: 'Sostituisci dati esistenti',
    keepExisting: 'Mantieni dati esistenti',
    replaceDescription: 'Sovrascrivi gli elementi già esistenti con i dati del backup',
    keepDescription: 'Ripristina solo gli elementi che non esistono già',
    caution: 'Attenzione:',
    cautionText: 'La sovrascrittura sostituirà le configurazioni attuali con i dati del backup. I codici di accesso delle stampanti non vengono mai sovrascritti per sicurezza.',
    itemsRestored: 'Elementi ripristinati',
    itemsSkipped: 'Elementi saltati',
    restored: 'Ripristinati',
    skipped: 'Saltati (già esistenti)',
    filesLabel: 'File (3MF, miniature, ecc.)',
    newApiKeysGenerated: 'Nuove chiavi API generate',
    newApiKeysWarning: 'Queste chiavi vengono mostrate una sola volta. Copiale adesso!',
    processingBackup: 'Elaborazione file di backup...',
    noDataFound: 'Nessun dato trovato da ripristinare nel file di backup.',
    failedToRestore: 'Impossibile ripristinare il backup. Verificare il formato del file.',
  },

  // Backup Export Modal
  backupExport: {
    title: 'Esporta backup',
    selectData: 'Seleziona i dati da includere',
    selectAll: 'Seleziona tutto',
    selectNone: 'Deseleziona tutto',
    categoryDescriptions: {
      settings: 'Lingua, tema, preferenze di aggiornamento',
      notifications: 'ntfy, Pushover, Discord, ecc.',
      templates: 'Modelli di messaggi personalizzati',
      smartPlugs: 'Configurazioni prese Tasmota',
      externalLinks: 'Link della barra laterale a servizi esterni',
      printers: 'Info stampanti (codici di accesso esclusi)',
      plateDetection: 'Immagini di riferimento piatto vuoto',
      filaments: 'Tipi di filamento e costi',
      maintenance: 'Programmi di manutenzione personalizzati',
      archives: 'Tutti i dati di stampa + file (3MF, miniature, foto)',
      projects: 'Progetti, elementi BOM e allegati',
      pendingUploads: 'Caricamenti della stampante virtuale in attesa di revisione',
      apiKeys: 'Chiavi API webhook (nuove chiavi generate all\'importazione)',
    },
    requiresPrinters: 'Richiede la selezione di Stampanti',
    zipFileWarning: 'Verrà creato un file ZIP.',
    zipFileDescription: 'Include tutti i file 3MF, miniature, timelapse e foto. Potrebbe richiedere tempo e produrre un file di grandi dimensioni.',
    includeAccessCodes: 'Includi codici di accesso',
    includeAccessCodesDescription: 'Per il trasferimento su un\'altra macchina',
    includeAccessCodesWarning: 'I codici di accesso saranno inclusi in testo semplice. Mantieni sicuro questo file di backup!',
    categoriesSelected: '{{selectedCount}} categorie selezionate',
  },

  // Pending Uploads Panel
  pendingUploads: {
    placeholders: {
      notes: 'Aggiungi note su questa stampa...',
    },
    discardUpload: 'Scarta caricamento',
    archiveAllUploads: 'Archivia tutti i caricamenti',
    discardAllUploads: 'Scarta tutti i caricamenti',
    archive: 'Archivia',
    timeAgo: {
      justNow: 'Adesso',
      minutesAgo: '{{minutes}} min fa',
      hoursAgo: '{{hours}} ore fa',
      daysAgo: '{{days}} giorni fa',
    },
  },

  // API Browser
  apiBrowser: {
    placeholders: {
      requestBody: 'Corpo della richiesta JSON...',
      searchEndpoints: 'Cerca endpoint...',
    },
  },

  // Configure AMS Slot Modal
  configureAmsSlot: {
    title: 'Configura Slot AMS',
    slotConfigured: 'Slot configurato!',
    configuringSlot: 'Configurazione slot:',
    slotLabel: '{{ams}} – Slot {{slot}}',
    searchPresets: 'Cerca preset...',
    colorPlaceholder: 'Nome colore o hex (es. marrone, FF8800)',
    clearCustomColor: 'Cancella colore personalizzato',
    noCloudPresets: 'Nessun preset cloud. Accedi a Bambu Cloud per sincronizzare.',
    noPresetsAvailable: 'Nessun preset disponibile. Accedi a Bambu Cloud o importa profili locali.',
    noMatchingPresets: 'Nessun preset corrispondente trovato.',
    custom: 'Personalizzato',
    builtin: 'Integrato',
    settingsSentToPrinter: 'Impostazioni inviate alla stampante',
    filamentProfile: 'Profilo filamento',
    kProfileLabel: 'Profilo K (Pressure Advance)',
    filteringFor: 'Filtrando per: {{material}}',
    noKProfile: 'Nessun profilo K (usa predefinito 0.020)',
    noMatchingKProfiles: 'Nessun profilo K corrispondente. Verrà usato K=0.020 predefinito.',
    selectFilamentFirst: 'Seleziona prima un profilo filamento',
    kFromCalibration: 'K={{value}} dalla calibrazione stampante',
    customColorLabel: 'Colore personalizzato (opzionale)',
    presetColors: 'Colori {{name}}:',
    showLessColors: 'Mostra meno colori',
    showMoreColors: 'Mostra più colori',
    clear: 'Cancella',
    hexLabel: 'Hex – #{{hex}}',
    resetting: 'Ripristino...',
    resetSlot: 'Ripristina slot',
    cancel: 'Annulla',
    configuring: 'Configurazione...',
    configureSlot: 'Configura slot',
  },

  // Git Backup Settings
  githubBackup: {
    title: 'Backup Git',
    history: 'Cronologia',
    downloadBackup: 'Scarica backup',
    restoreBackup: 'Ripristina backup',
    noBackupsYet: 'Nessun backup ancora',
  },

  // Email Settings
  emailSettings: {
    placeholders: {
      fromName: 'Bambuddy',
    },
  },

  // Tag Management Modal
  tagManagement: {
    searchTags: 'Cerca tag...',
    renameTag: 'Rinomina tag',
    deleteTag: 'Elimina tag',
  },

  // Notification Template Editor
  notificationTemplates: {
    placeholders: {
      title: 'Titolo notifica...',
      body: 'Corpo notifica...',
    },
  },

  // Batch Tag Modal
  batchTag: {
    placeholders: {
      newTag: 'Inserisci nuovo tag...',
    },
  },

  // Photo Gallery Modal
  photoGallery: {
    deletePhoto: 'Elimina foto',
  },

  // Filament Hover Card
  filamentHoverCard: {
    copySpoolUuid: 'Copia UUID bobina',
  },

  // K Profiles View
  kProfilesView: {
    hasNote: 'Ha una nota',
    copyProfile: 'Copia profilo',
  },

  // Layout/Navigation
  layout: {
    openMenu: 'Apri menu',
    noPermissionSystemInfo: 'Non hai il permesso di visualizzare le informazioni di sistema',
  },

  // Dashboard
  dashboard: {
    dragToReorder: 'Trascina per riordinare',
    hideWidget: 'Nascondi widget',
  },

  // Notification Provider Card
  notificationProviderCard: {
    deleteNotificationProvider: 'Elimina provider di notifica',
  },

  // File Manager Modal
  fileManagerModal: {
    closeFileManager: 'Chiudi gestore file',
    sortFiles: 'Ordina file',
    goToParentFolder: 'Vai alla cartella superiore',
    threeView: 'Vista 3D',
  },

  // Embedded Camera Viewer
  embeddedCameraViewer: {
    refreshStream: 'Aggiorna stream',
    close: 'Chiudi',
    zoomOut: 'Rimpicciolisci',
    resetZoom: 'Reimposta zoom',
    zoomIn: 'Ingrandisci',
    dragToResize: 'Trascina per ridimensionare',
  },

  // Timelapse Viewer
  timelapseViewer: {
    skipBack5s: 'Indietro 5s',
    skipForward5s: 'Avanti 5s',
  },

  // Notification Providers
  notificationProviders: {
    descriptions: {
      email: 'Notifiche email via SMTP',
      telegram: 'Notifiche tramite bot Telegram',
      discord: 'Invia a canale Discord tramite webhook',
      ntfy: 'Notifiche push gratuite e self-hostabili',
      pushover: 'Notifiche push semplici e affidabili',
      callmebot: 'Notifiche WhatsApp gratuite tramite CallMeBot',
      webhook: 'POST HTTP generico a qualsiasi URL',
    },
  },

  // Log Viewer
  logViewer: {
    searchPlaceholder: 'Cerca messaggio o nome logger...',
    noLogEntries: 'Nessuna voce di log trovata',
  },

  // Switchbar Popover
  switchbarPopover: {
    noSwitchesInSwitchbar: 'Nessun interruttore nella barra',
  },

  // Project Page Modal
  projectPageModal: {
    placeholders: {
      title: 'Titolo',
      designer: 'Designer',
      license: 'Licenza',
      description: 'Inserisci descrizione...',
      profileTitle: 'Titolo profilo',
      profileDescription: 'Descrizione profilo...',
    },
  },

  // Spoolman Settings
  spoolmanSettings: {},

  // Time
  time: {
    unknown: '-',
    waiting: 'In attesa',
    justNow: 'Proprio ora',
    now: 'Ora',
    minsAgo: '{{count}}m fa',
    inMins: 'tra {{count}}m',
    hoursAgo: '{{count}}h fa',
    inHours: 'tra {{count}}h',
    daysAgo: '{{count}}g fa',
    inDays: 'tra {{count}}g',
  },

  // SpoolBuddy Kiosk
  spoolbuddy: {
    nav: {
      dashboard: 'Dashboard',
      ams: 'AMS',
      inventory: 'Inventario',
      writeTag: 'Scrivi',
      settings: 'Impostazioni',
    },
    status: {
      nfcReady: 'NFC pronto',
      nfcOff: 'NFC spento',
      offline: 'Offline',
      online: 'Online',
      noPrinters: 'Nessuna stampante',
      deviceOffline: 'Dispositivo offline',
      waitingConnection: 'In attesa della connessione...',
      systemReady: 'Sistema pronto',
      status: 'Stato',
    },
    dashboard: {
      readyToScan: 'Pronto per la scansione',
      idleMessage: 'Posiziona una bobina sulla bilancia per identificarla',
      nfcHint: 'Il tag NFC verrà letto automaticamente',
      device: 'Dispositivo',
      syncWeight: 'Sincronizza peso',
      weightSynced: 'Sincronizzato!',
      unknownTag: 'Tag sconosciuto',
      newTag: 'Nuovo tag rilevato',
      onScale: 'sulla bilancia',
      linkSpool: 'Collega a bobina',
      linkTagTitle: 'Collega tag a bobina',
      linkTag: 'Collega tag',
      selectSpool: 'Seleziona una bobina da collegare a questo tag:',
      noUntagged: 'Nessuna bobina senza tag trovata',
      tagDetected: 'Tag rilevato',
      noTag: 'Nessun tag',
      tagId: 'Etichetta',
      grossWeight: 'Peso lordo',
      spoolSize: 'Dimensione bobina',
      close: 'Chiudi',
      currentSpool: 'Bobina attuale',
      plateReady: 'Piatto pronto: {{name}}',
      plateReadyLabel: 'Piatti da liberare',
      plateClearAction: 'Libera',
      plateClearedToast: 'Piatto contrassegnato come liberato',
      plateClearFailed: 'Impossibile contrassegnare il piatto come liberato',
    },
    modal: {
      spoolDetected: 'Bobina rilevata',
      assignToAms: 'Assegna all\'AMS',
      syncWeight: 'Sincronizza peso',
      weightSynced: 'Sincronizzato!',
      syncing: 'Sincronizzazione...',
      newTagDetected: 'Nuovo tag rilevato',
      addToInventory: 'Aggiungi all\'inventario',
      assignToAmsTitle: 'Assegna all\'AMS',
      selectSlot: 'Seleziona uno slot',
      assign: 'Assegna',
      assigning: 'Assegnazione...',
      assignSuccess: 'Assegnato!',
      assignPendingInsert: 'Assegnato. Lo slot verrà configurato all\'inserimento della bobina.',
      assignError: 'Impossibile assegnare la bobina. Riprovare.',
      noPrinterSelected: 'Seleziona una stampante...',
      noAmsDetected: 'Nessun AMS rilevato su questa stampante',
      slot: 'Slot',
    },
    weight: {
      noReading: 'Nessuna lettura',
      stable: 'Stabile',
      measuring: 'Misurazione...',
      tare: 'Tara',
      calibrate: 'Calibra',
    },
    spool: {
      remaining: 'Rimanente',
      material: 'Materiale',
      brand: 'Marca',
      color: 'Colore',
      coreWeight: 'Nucleo',
      labelWeight: 'Etichetta',
      scaleWeight: 'Bilancia',
      netWeight: 'Netto',
      lastUsed: 'Ultimo utilizzo',
    },
    ams: {
      noData: 'Nessun AMS rilevato',
      connectAms: 'Collega un AMS per vedere gli slot',
      noPrinter: 'Nessuna stampante selezionata',
      selectPrinter: 'Seleziona una stampante dalla barra superiore',
      printerDisconnected: 'Stampante disconnessa',
      humidity: 'Umidità',
      level: 'Livello',
      active: 'Attivo',
      slot: 'Slot',
      empty: 'Vuoto',
    },
    inventory: {
      search: 'Cerca bobine...',
      empty: 'Nessuna bobina nell\'inventario',
      noResults: 'Nessuna bobina corrispondente',
      spools: 'bobine',
      addSpool: 'Aggiungi bobina',
    },
    settings: {
      // Tabs
      tabDevice: 'Dispositivo',
      tabDisplay: 'Display',
      tabScale: 'Bilancia',
      tabUpdates: 'Aggiornamenti',
      // Device tab
      nfcReader: 'Lettore NFC',
      type: 'Tipo',
      connection: 'Connessione',
      notConnected: 'N/D',
      deviceInfo: 'Info dispositivo',
      hostname: 'Host',
      uptime: 'Tempo di attività',
      // Display tab
      brightness: 'Luminosità',
      saved: 'Salvato',
      noBacklight: 'Nessuna retroilluminazione DSI rilevata. Il controllo luminosità richiede un display DSI.',
      screenBlank: 'Timeout spegnimento schermo',
      screenBlankDesc: 'Lo schermo si spegne dopo inattività. Tocca per riattivare.',
      displayNote: 'La luminosità viene applicata come filtro software.',
      // Scale tab
      scaleCalibration: 'Calibrazione bilancia',
      currentWeight: 'Peso attuale',
      tareOffset: 'Tara',
      calFactor: 'Fattore',
      knownWeight: 'Peso noto',
      calStep1: 'Rimuovere tutto dalla bilancia e premere Imposta zero.',
      calStep2: 'Posizionare il peso noto sulla bilancia.',
      setZero: 'Imposta zero',
      calibrateNow: 'Calibra',
      calibrated: 'Calibrato',
      tareSet: 'Comando tara inviato. In attesa del dispositivo...',
      tareFailed: 'Invio comando tara fallito',
      zeroSet: 'Punto zero impostato. Posizionare il peso noto sulla bilancia.',
      calibrationDone: 'Calibrazione completata!',
      calibrationFailed: 'Calibrazione fallita',
      lastCalibrated: 'Ultima calibrazione',
      stable: 'Stabile',
      settling: 'Stabilizzazione...',
      firmware: 'Firmware',
      scale: 'Bilancia',
      noDevice: 'Nessun dispositivo SpoolBuddy trovato',
      // Updates tab
      daemonVersion: 'Versione daemon',
      currentVersion: 'Attuale',
      versionPending: 'In attesa del daemon...',
      checking: 'Verifica...',
      checkUpdates: 'Verifica aggiornamenti',
      updateAvailable: 'Aggiornamento disponibile',
      updateInstructions: 'Aggiorna via SSH: esegui lo script di installazione SpoolBuddy.',
      upToDate: 'Aggiornato',
      includeBeta: 'Includi versioni beta',
      systemConfig: 'Backend & autenticazione',
      backendUrl: 'URL backend Bambuddy',
      apiToken: 'Token API',
      apiTokenPlaceholder: 'Inserisci token API',
      saveConfig: 'Salva configurazione',
      systemQueued: 'Configurazione in coda.',
      systemFieldsRequired: 'L\'URL del backend è obbligatorio.',
      nfcDiagnostic: 'Diagnostica NFC',
      scaleDiagnostic: 'Diagnostica bilancia',
      readTagDiagnostic: 'Diagnostica lettura tag',
      testNfc: 'Test lettore',
      testScale: 'Test precisione',
      testReadTag: 'Leggi tag',
    },
    writeTag: {
      tabExisting: 'Bobina esistente',
      tabNew: 'Nuova bobina',
      tabReplace: 'Sostituisci tag',
      searchPlaceholder: 'Cerca per materiale, colore, marca...',
      noUntaggedSpools: 'Nessuna bobina senza tag',
      noTaggedSpools: 'Nessuna bobina con tag',
      selectSpool: 'Seleziona una bobina, poi posiziona un NTAG sul lettore',
      placeTag: 'Posiziona un NTAG sul lettore',
      tagReady: 'Tag rilevato — pronto per la scrittura',
      writeTag: 'Scrivi tag',
      replaceTag: 'Sostituisci tag',
      writing: 'Scrittura tag...',
      waiting: 'In attesa di SpoolBuddy...',
      writeSuccess: 'Tag scritto con successo!',
      writeFailed: 'Scrittura fallita',
      queueFailed: 'Impossibile accodare il comando di scrittura',
      tryAgain: 'Riprova',
      cancel: 'Annulla',
      replaceWarning: 'Il vecchio tag verrà scollegato. Il nuovo tag lo sostituirà.',
      deviceOffline: 'SpoolBuddy è offline',
      material: 'Materiale',
      colorName: 'Nome colore',
      color: 'Colore',
      brand: 'Marca',
      weight: 'Peso (g)',
      createSpool: 'Crea bobina',
      creating: 'Creazione...',
      spoolCreated: 'Bobina creata! Pronto per la scrittura.',
      createFailed: 'Impossibile creare la bobina',
      incompleteDataWarning: 'Tag scritto con dati Spoolman incompleti',
    },
    quickMenu: {
      printerPower: 'Alimentazione stampante',
      systemControls: 'Sistema',
      restartDaemon: 'Riavvia daemon',
      restartBrowser: 'Riavvia browser',
      reboot: 'Riavvia',
      shutdown: 'Spegni',
      swipeToClose: 'Scorri verso il basso per chiudere',
      confirmTitle: 'Conferma',
      confirmShutdown: 'Sei sicuro di voler spegnere lo SpoolBuddy? Avrai bisogno di accesso fisico per riaccenderlo.',
      confirmReboot: 'Sei sicuro di voler riavviare lo SpoolBuddy?',
      confirmRestartDaemon: 'Riavviare il daemon SpoolBuddy? NFC e bilancia saranno temporaneamente non disponibili.',
      confirmRestartBrowser: 'Riavviare il browser kiosk? Lo schermo diventerà brevemente nero.',
      confirm: 'Conferma',
      confirmPlugOn: 'Accendere {{name}}?',
      confirmPlugOff: 'Spegnere {{name}}?',
      turnOn: 'Accendi',
      turnOff: 'Spegni',
    },
  },

  bugReport: {
    title: 'Segnala un bug',
    description: 'Descrizione',
    descriptionPlaceholder: 'Cosa è andato storto? Descrivi il problema...',
    email: 'Email (opzionale)',
    emailPlaceholder: 'tua@email.it',
    emailPrivacy: 'Se fornita, la tua email sarà inclusa in una sezione compressa dell\'issue GitHub per permettere al manutentore di contattarti.',
    screenshot: 'Schermata',
    uploadOrPaste: 'Carica, incolla o trascina un\'immagine',
    dataCollectedSummary: 'Quali dati sono inclusi nel report?',
    dataIncluded: 'Inclusi:',
    dataIncludedList: 'Versione app, OS, architettura, versione Python, statistiche database (solo conteggi), modelli stampante, numero ugelli, versioni firmware, stato connessione, stato integrazioni (Spoolman, MQTT, HA), impostazioni non sensibili, conteggio interfacce di rete, dettagli Docker, versioni dipendenze.',
    dataNeverIncluded: 'Mai inclusi:',
    dataNeverIncludedList: 'Nomi stampanti, numeri di serie, codici di accesso, password, indirizzi IP, indirizzi email, chiavi API, token, URL webhook, nomi host o nomi utente.',
    submit: 'Invia',
    startLogging: 'Avvia registrazione debug',
    stepEnableLogging: 'Registrazione debug attivata',
    stepReproduce: 'Riproduci il problema ora',
    stepStopLogging: 'Ferma & invia rapporto',
    stopAndSubmit: 'Ferma & Invia',
    maxDuration: 'Arresto automatico dopo {{minutes}} min',
    stoppingLogs: 'Raccolta log & invio...',
    submitting: 'Invio segnalazione bug...',
    submitSuccess: 'Segnalazione bug inviata con successo!',
    submitFailed: 'Impossibile inviare la segnalazione bug',
    thankYou: 'Grazie!',
    submitted: 'La tua segnalazione bug è stata inviata.',
    viewIssue: 'Vedi issue',
    unexpectedError: 'Si è verificato un errore imprevisto',
  },
  failureDetection: {
    title: 'Rilevamento guasti con IA',
    description: 'Monitora le stampe tramite un\'API ML Obico auto-ospitata e agisce automaticamente sui guasti rilevati.',
    mlUrl: 'URL API ML Obico',
    mlUrlHint: 'URL base del tuo container Obico ml_api auto-ospitato (es. http://192.168.1.10:3333).',
    test: 'Prova',
    testSuccess: 'API ML raggiungibile e funzionante.',
    testFailed: 'Impossibile raggiungere l\'API ML.',
    sensitivity: 'Sensibilità',
    sensitivityLow: 'Bassa (meno falsi positivi)',
    sensitivityMedium: 'Media (bilanciata)',
    sensitivityHigh: 'Alta (rilevamento precoce, più falsi positivi)',
    sensitivityHint: 'Regola le soglie di confidenza che attivano avvisi e guasti.',
    action: 'Azione al guasto rilevato',
    actionNotify: 'Solo notifica',
    actionPause: 'Metti in pausa',
    actionPauseOff: 'Pausa e stacca corrente',
    pollInterval: 'Intervallo di controllo (secondi)',
    pollIntervalHint: 'Frequenza di controllo di ogni stampante durante la stampa. Minimo 5s, massimo 120s.',
    externalUrlMissing: 'URL esterno non impostato.',
    externalUrlHint: 'L\'API ML recupera l\'istantanea della telecamera tramite URL. Imposta l\'URL esterno nelle impostazioni generali in modo che il container API ML possa raggiungere Bambuddy.',
    perPrinterTitle: 'Stampanti monitorate',
    perPrinterHint: 'Scegli quali stampanti il servizio di rilevamento deve monitorare.',
    monitorAll: 'Monitora tutte le stampanti connesse',
    statusTitle: 'Stato',
    serviceRunning: 'Servizio in esecuzione',
    thresholds: 'Soglie bassa / alta',
    activePrinters: 'Stampe attive',
    noActivePrints: 'Nessuna stampa in corso.',
    historyTitle: 'Rilevamenti recenti',
    noHistory: 'Nessun rilevamento finora.',
  },
  makerworld: {
    title: 'MakerWorld',
    description: 'Incolla un URL di un modello MakerWorld per importarlo e stamparlo direttamente da Bambuddy — senza passare dall\'app Bambu Handy.',
    pasteUrlHeader: 'Importa da MakerWorld',
    pasteUrlPlaceholder: 'https://makerworld.com/en/models/… o incolla qualsiasi link MakerWorld',
    resolveButton: 'Risolvi',
    signInRequiredTitle: 'Accesso Bambu Cloud richiesto per scaricare',
    signInRequiredBody: 'Puoi consultare i dettagli del modello in modo anonimo, ma MakerWorld richiede un account Bambu Cloud per scaricare i file 3MF.',
    openCloudSettings: 'Apri impostazioni Cloud',
    untitledModel: 'Modello senza titolo',
    byCreator: 'di {{name}}',
    downloadsCount: '{{count}} download',
    licensePrefix: 'Licenza',
    alreadyImported: 'Già nella libreria',
    openOnMakerworld: 'Apri su MakerWorld',
    alreadyInLibrary: 'Questo modello è già nella tua libreria — lo trovi in Gestione file → MakerWorld',
    importSuccess: '{{filename}} importato — salvato in Gestione file → MakerWorld',
    platesHeader: 'Piatti ({{count}})',
    plateDefaultName: 'Piatto {{n}}',
    materialCount: '{{count}} filamenti',
    amsRequired: 'AMS richiesto',
    slicedFor: 'Sezionato per {{printer}}',
    alsoCompatible: 'Anche contrassegnato come compatibile: {{printers}}',
    importToLibrary: 'Salva',
    sliceIn: 'Salva e affetta in {{slicer}}',
    disclaimer: 'L\'integrazione MakerWorld utilizza endpoint API documentati dalla community. Bambuddy non è affiliato né approvato da MakerWorld o Bambu Lab.',
    lastImportSuccess: 'Importato nella tua libreria',
    lastImportAlreadyInLibrary: 'Già nella tua libreria',
    viewInLibrary: 'Visualizza in Gestione file',
    openInBambuStudio: 'Apri in Bambu Studio',
    openInOrcaSlicer: 'Apri in OrcaSlicer',
    importTo: 'Importa in Gestione file',
    recentImportsHeader: 'Importazioni recenti',
    phaseResolving: 'Risoluzione',
    phaseDownloading: 'Download',
    folderAuto: 'MakerWorld (predefinita)',
    importAll: 'Importa tutto',
    importAllProgress: 'Importazione {{current}}/{{total}}',
    openGallery: 'Apri galleria immagini',
    galleryPrev: 'Immagine precedente',
    galleryNext: 'Immagine successiva',
    deleteImport: 'Rimuovi dalla libreria',
    importDeleting: 'Rimozione…',
    importDeleted: 'Rimosso dalla libreria',
    confirmDelete: 'Rimuovere {{filename}} dalla libreria? Il file locale verrà eliminato, ma il piatto può essere re-importato da MakerWorld.',
    errors: {
      resolveFailed: 'Impossibile risolvere questo URL MakerWorld.',
      downloadFailed: 'Download non riuscito. Riprova.',
      deleteFailed: 'Impossibile rimuovere il file dalla libreria.',
    },
  },
  gcodeViewer: {
    back: 'Indietro',
    backToArchives: 'Torna agli archivi di stampa',
    backToFiles: 'Torna al gestore file',
  },
  libraryTrash: {
    title: 'Cestino',
    headerButton: 'Cestino',
    headerTooltip: 'Visualizza i file spostati nel cestino',
    backToFiles: 'Torna al gestore file',
    subtitleAdmin: 'I file eliminati restano qui per {{days}} giorni, poi vengono rimossi automaticamente. Questa vista mostra il cestino di tutti gli utenti.',
    subtitleUser: 'I file eliminati restano qui per {{days}} giorni, poi vengono rimossi automaticamente.',
    loading: 'Caricamento del cestino…',
    loadError: 'Impossibile caricare il cestino.',
    empty: 'Il cestino è vuoto.',
    summary: '{{count}} file · {{size}}',
    emptyTrash: 'Svuota cestino',
    restore: 'Ripristina',
    purgeNow: 'Elimina ora',
    autoPurgeIn: 'Eliminazione automatica tra {{when}}',
    days: 'giorni',
    retentionLabel: 'Elimina automaticamente dopo',
    selectAll: 'Seleziona tutto',
    selectOne: 'Seleziona {{filename}}',
    selectionCount: '{{count}} selezionati',
    bulkRestore: 'Ripristina selezionati',
    bulkPurge: 'Elimina selezionati',
    col: {
      filename: 'File',
      folder: 'Cartella',
      size: 'Dimensione',
      deleted: 'Spostato nel cestino',
      autoPurge: 'Eliminazione auto.',
      owner: 'Proprietario',
      actions: 'Azioni',
    },
    confirm: {
      purgeTitle: 'Eliminare definitivamente?',
      purgeBody: '{{filename}} verrà eliminato dal disco e non potrà essere ripristinato.',
      emptyTitle: 'Svuotare il cestino?',
      emptyBody: 'Tutti i {{count}} file verranno eliminati dal disco. Azione non annullabile.',
      bulkPurgeTitle: 'Eliminare definitivamente i file selezionati?',
      bulkPurgeBody: 'I {{count}} file selezionati verranno eliminati dal disco e non potranno essere ripristinati.',
      cta: 'Elimina definitivamente',
    },
    toast: {
      restored: 'File ripristinato.',
      restoreFailed: 'Impossibile ripristinare il file.',
      purged: 'File eliminato definitivamente.',
      purgeFailed: 'Impossibile eliminare il file.',
      emptied: '{{count}} file eliminati dal cestino.',
      emptyFailed: 'Impossibile svuotare il cestino.',
      retentionSaved: 'Eliminazione automatica impostata su {{days}} giorni.',
      retentionFailed: 'Impossibile salvare l\'impostazione di conservazione.',
      bulkRestored: '{{count}} file ripristinati.',
      bulkPurged: '{{count}} file eliminati.',
    },
  },
  libraryPurge: {
    title: 'Elimina file vecchi',
    headerButton: 'Elimina vecchi',
    headerTooltip: 'Sposta in blocco i file vecchi nel cestino',
    description: 'I file più vecchi della soglia verranno spostati nel cestino. Le cartelle esterne vengono ignorate. Puoi ripristinarli dal cestino prima dell\'eliminazione automatica.',
    ageLabel: 'Sposta i file più vecchi di',
    days: 'giorni',
    includeNeverPrinted: 'Includi i file mai stampati',
    effectsTitle: 'Cosa succede quando fai clic su Pulisci',
    effect1: 'I file corrispondenti vengono spostati nel cestino — non sono ancora eliminati dal disco.',
    effect2: 'Puoi ripristinarli dal cestino in qualsiasi momento fino alla scadenza del periodo di conservazione.',
    effect3: 'Dopo il periodo di conservazione, lo spazzino del cestino li rimuove definitivamente.',
    effect4: 'I file in cartelle esterne (collegate) vengono saltati — Bambuddy non elimina mai dati che non possiede.',    previewLoading: 'Verifica quanti file corrispondono…',
    previewFailed: 'Impossibile mostrare l\'anteprima.',
    previewSummary: '{{count}} file · {{size}} verrebbero spostati nel cestino',
    andMore: '…e altri {{count}}',
    warning: 'I file vengono eliminati in modo soft — puoi ripristinarli dal cestino fino alla scadenza del periodo di conservazione.',
    confirmCta: 'Sposta {{count}} nel cestino',
    purging: 'Spostamento nel cestino…',
    toast: {
      success: '{{count}} file spostati nel cestino.',
      failed: 'Impossibile eliminare i file.',
    },
  },
  libraryAutoPurge: {
    enableLabel: 'Elimina automaticamente i file vecchi',
    enableDescription: 'Esegue l\'eliminazione amministrativa una volta al giorno. I file finiscono prima nel cestino — non vengono eliminati immediatamente.',
    ageLabel: 'Elimina automaticamente i file più vecchi di',
    ageDescription: 'Minimo 7 giorni, massimo 10 anni. Usa la stessa regola di età del pulsante Elimina manuale.',
    days: 'giorni',
    includeNeverPrinted: 'Includi i file mai stampati',
    saveFailed: 'Impossibile salvare le impostazioni di eliminazione automatica.',
  },
  archivePurge: {
    headerButton: 'Elimina vecchi',
    headerTooltip: 'Eliminazione massiva vecchi archivi',
    title: 'Elimina vecchi archivi',
    description: 'Cancella la vecchia cronologia di stampa. Ogni archivio invecchia in base alla sua ultima stampa completata — ristampare azzera l\'età, quindi il lavoro attivo non viene mai eliminato.',
    ageLabel: 'Elimina archivi non stampati negli ultimi',
    days: 'giorni',
    effectsTitle: 'Cosa succede quando fai clic su Pulisci',
    effect1: 'Ogni archivio corrispondente viene nascosto dagli elenchi e i suoi file vengono rimossi dal disco (3MF, miniatura, timelapse, 3MF sorgente, F3D, foto).',
    effect2: 'La riga dell\'archivio rimane nel database, così le Quick Stats conservano il contributo di filamento, tempo, costo ed energia — come il comportamento predefinito dell\'eliminazione singola.',
    effect3: 'Spunta «Rimuovi anche dalle statistiche» qui sotto per eliminare anche il contributo dalle Quick Stats (equivalente all\'opzione dell\'eliminazione singola). Questo percorso è irreversibile.',
    effect4: 'Ristampare un archivio azzera il suo conteggio dell\'età, quindi gli archivi attivi sono al sicuro.',
    purgeStatsLabel: 'Rimuovi anche dalle statistiche',
    purgeStatsHint: 'Rimuove gli archivi selezionati dalle Quick Stats (filamento, tempo, costo, energia). Senza questa opzione le Quick Stats conservano ogni contributo e solo i file vengono cancellati.',
    previewLoading: 'Verifica del numero di archivi corrispondenti…',
    previewFailed: 'Impossibile visualizzare l\'anteprima della pulizia.',
    previewSummary: '{{count}} archivi · {{size}} verrebbero rimossi',
    andMore: '…e altri {{count}}',
    warning: 'I file vengono rimossi dal disco e non possono essere ripristinati. Scarica o aggiungi ai preferiti tutto ciò che vuoi conservare prima di continuare.',
    confirmCta: 'Rimuovi {{count}} archivio(i)',
    purging: 'Rimozione…',
    toast: {
      success: '{{count}} archivio(i) rimosso.',
      failed: 'Impossibile eliminare gli archivi.',
    },
  },
  archiveAutoPurge: {
    enableLabel: 'Elimina auto. vecchi archivi',
    enableDescription: 'Una volta al giorno nasconde dagli elenchi gli archivi non stampati entro la soglia e rimuove i loro file dal disco. Ristampare azzera il timer.',
    ageLabel: 'Eliminazione auto. di archivi non stampati negli ultimi',
    ageDescription: 'Minimo 7 giorni, massimo 10 anni. Basato sull\'ultima stampa completata — ristampare azzera l\'età. Rimuove 3MF, miniatura, timelapse, 3MF sorgente, F3D e foto.',
    days: 'giorni',
    purgeStatsLabel: 'Rimuovi anche dalle statistiche',
    purgeStatsDescription: 'Quando abilitato, lo sweeper giornaliero elimina anche il contributo di ogni archivio purgato dalle Quick Stats (filamento, tempo, costo, energia). Disabilitato per impostazione predefinita — le Quick Stats mantengono il contributo e solo i file vengono cancellati.',
    runNow: 'Elimina archivi ora',
    saveFailed: 'Impossibile salvare le impostazioni di pulizia automatica.',
  },
  cameraTokens: {
    title: 'Token API telecamera',
    navTitle: 'Token API telecamera',
    description:
      'Token a lunga durata per incorporare lo stream della telecamera in Home Assistant, Frigate, chioschi o qualsiasi altro strumento che richieda un URL stabile. Ogni token è limitato allo stream della telecamera e può essere revocato in qualsiasi momento.',
    loading: 'Caricamento…',
    confirmRevoke: {
      title: 'Revocare questo token?',
      body: 'Qualsiasi dispositivo che usa "{{name}}" perderà l\'accesso immediatamente. Non può essere annullato.',
      cancel: 'Annulla',
      confirm: 'Revoca',
    },
    create: {
      title: 'Crea nuovo token',
      nameLabel: 'Nome token',
      namePlaceholder: 'es. Home Assistant',
      daysLabel: 'Giorni alla scadenza',
      submit: 'Crea',
      hint:
        'Durata massima 365 giorni. Il valore del token viene mostrato solo alla creazione — copialo ora.',
    },
    created: {
      title: 'Token creato – copialo ora',
      warning:
        'Questa è l\'unica volta in cui questo token sarà visibile. Dopo la chiusura di questa finestra non potrai più visualizzarlo.',
      copy: 'Copia',
      dismiss: 'L\'ho salvato',
    },
    list: {
      myTitle: 'I miei token',
      allTitle: 'Tutti gli utenti (vista admin)',
      empty: 'Nessun token ancora.',
      name: 'Nome',
      owner: 'Proprietario',
      prefix: 'Prefisso',
      created: 'Creato',
      expires: 'Scade',
      lastUsed: 'Ultimo uso',
      revoke: 'Revoca',
      expired: 'Scaduto',
    },
    toast: {
      created: 'Token creato',
      createFailed: 'Creazione token fallita',
      revoked: 'Token revocato',
      revokeFailed: 'Revoca token fallita',
      loadFailed: 'Caricamento token fallito',
      copied: 'Copiato negli appunti',
      copyFailed: 'Copia non riuscita – seleziona e copia manualmente',
    },
  },

  // Forecast & Inventory Intelligence
  forecast: {
    title: 'Previsione scorte',
    noSpools: 'Nessuna bobina attiva trovata. Aggiungi bobine al tuo inventario per vedere i dati di previsione.',
    noUsageData: 'Nessun dato di utilizzo disponibile — impossibile proiettare la timeline delle scorte.',
    sku: 'SKU',
    // Table headers
    material: 'Materiale',
    stock: 'Scorte',
    dailyRate: 'Tasso',
    daysLeft: 'Giorni rimanenti',
    emptyBy: 'Esaurimento previsto',
    reorderBy: 'Riordinare entro',
    actions: 'Azioni',
    // Rate tier badges
    trend: 'Tendenza',
    estimated: 'Stim.',
    noData: 'Nessun dato',
    // Timeframe
    timeframe: 'Periodo',
    // Chart
    chartTitle: 'Stock proiettato — Top 5 materiali',
    dashedLinesROP: 'Linee tratteggiate = punti di riordino',
    stockLevel: 'Livello scorte',
    reorderPoint: 'Punto di riordino',
    safetyMargin: 'Margine di sicurezza',
    trendLegend: 'Tendenza (basata su storico, livello servizio 95%)',
    estimatedLegend: 'Stimata (delta peso)',
    noDataLegend: 'Nessun dato',
    ropLabel: 'PR',
    ssLabel: 'SS',
    safetyStockLegend: 'Scorta di sicurezza',
    stockArrivalLegend: 'Arrivo merce',
    stockoutLegend: 'Esaurimento scorte',
    // Alerts toolbar
    alertCount_one: '{{count}} avviso',
    alertCount_other: '{{count}} avvisi',
    order: 'Ordina',
    // Settings
    globalLeadTime: 'Lead time globale',
    globalLeadTimeHint: 'Lead time globale minimo — usato nel calcolo del punto di riordino per tutti gli SKU',
    save: 'Salva',
    cancel: 'Annulla',
    settingsSaved: 'Impostazioni salvate',
    failedSaveSettings: 'Impossibile salvare le impostazioni',
    globalLeadTimeSaved: 'Lead time globale salvato',
    skuLeadTimeOverride: 'Override lead time SKU',
    skuLeadTimeHint: '0 = usa lead time globale. Imposta >0 per sovrascrivere per questo SKU.',
    safetyMarginLabel: 'Margine di sicurezza',
    effectiveLeadTime: 'Lead time effettivo',
    effectiveLeadTimeHint: 'max(globale {{global}}g, SKU {{sku}}g)',
    reorderPointHint: 'd̄ × LT + safety margin — ordina quando le scorte raggiungono questo livello',
    safetyMarginHint: 'Scorta di sicurezza statistica (z=1,65 × σ × √LT) + buffer definito dall\'utente',
    safetyMarginHintDays: 'Buffer aggiunto sulla scorta di sicurezza statistica.{{approx}}',
    safetyMarginHintDaysApprox: ' ≈ {{g}}g al tasso attuale.',
    safetyMarginHintG: 'Buffer di peso fisso aggiunto sulla scorta di sicurezza statistica.{{approx}}',
    safetyMarginHintGApprox: ' ≈ {{days}}g al tasso attuale.',
    individualSpools: 'Bobine singole',
    labelWeight: 'Etichetta',
    spoolCount_one: '{{count}} bobina',
    spoolCount_other: '{{count}} bobine',
    // Alerts
    stockBreakRisk: 'Rischio di rottura scorte',
    stockBreakBefore: 'Rottura scorte prima del rifornimento',
    stockBreakDetail: '{{days}}g rimanenti, lead time {{lt}}g.',
    reorderNow: 'Riordina ora',
    reorderTriggerPassed: 'La data di attivazione {{date}} è passata.',
    // Shopping list
    shoppingList: 'Lista della spesa',
    shoppingListItems_one: '({{count}} articolo)',
    shoppingListItems_other: '({{count}} articoli)',
    shoppingListEmpty: 'La lista della spesa è vuota. Clicca sull\'icona del carrello in qualsiasi riga per aggiungere articoli.',
    addToCart: 'Aggiungi alla lista della spesa',
    alertsSnoozed: 'Silenzia avvisi per questo SKU',
    alertsEnabled: 'Riattiva avvisi per questo SKU',
    addedToCart: 'Aggiunto alla lista della spesa',
    failedAddItem: 'Impossibile aggiungere l\'articolo',
    listView: 'Lista',
    logisticsView: 'Logistica',
    qty: 'Qtà',
    weight: 'Peso',
    leadTime: 'Lead time',
    expectedRestock: 'Rifornimento previsto',
    status: 'Stato',
    note: 'Nota',
    pending: 'In attesa',
    purchased: 'Acquistato',
    received: 'Ricevuto',
    markPurchased: 'Segna come acquistato',
    markReceived: 'Segna come ricevuto — aggiunge bobine all\'inventario',
    resetToPending: 'Ripristina in attesa',
    remove: 'Rimuovi',
    clearAll: 'Cancella tutto',
    downloadCsv: 'CSV',
    // Add to cart modal
    addToCartTitle: 'Aggiungi alla lista della spesa',
    byQuantity: 'Per quantità',
    byDuration: 'Per durata',
    numberOfSpools: 'Numero di bobine',
    lastHowManyDays: 'Per quanti giorni deve durare?',
    noUsageQty: 'Nessun dato di utilizzo — quantità impostata a 1.',
    noteOptional: 'Nota (opzionale)',
    notePlaceholder: 'es. per il progetto X, urgente…',
    addNSpools_one: 'Aggiungi {{count}} bobina',
    addNSpools_other: 'Aggiungi {{count}} bobine',
    // Cart logistics
    onArrival: 'All\'arrivo',
    stockBreakIn: 'Rottura scorte tra {{days}}g.',
    stockRunsOutBefore: 'Le scorte si esauriscono prima dello scadere del lead time di {{lt}}g.',
    atRate: 'A {{rate}}g/giorno hai bisogno di',
    moreSpools_one: '{{count}} bobina in più',
    moreSpools_other: '{{count}} bobine in più',
    bridgeGap: 'per colmare il divario.',
    // Permissions
    noReadAccess: 'Non hai il permesso di visualizzare le previsioni di inventario.',
    noWriteAccess: 'Non hai il permesso di modificare le impostazioni di previsione.',
  },
};
