|
@@ -49,7 +49,7 @@ export default {
|
|
|
yes: 'Si',
|
|
yes: 'Si',
|
|
|
no: 'No',
|
|
no: 'No',
|
|
|
on: 'On',
|
|
on: 'On',
|
|
|
- off: 'Off',
|
|
|
|
|
|
|
+ off: 'Spento',
|
|
|
all: 'Tutti',
|
|
all: 'Tutti',
|
|
|
none: 'Nessuno',
|
|
none: 'Nessuno',
|
|
|
search: 'Cerca',
|
|
search: 'Cerca',
|
|
@@ -232,7 +232,7 @@ export default {
|
|
|
resume: 'Riprendi',
|
|
resume: 'Riprendi',
|
|
|
pause: 'Pausa',
|
|
pause: 'Pausa',
|
|
|
stop: 'Ferma',
|
|
stop: 'Ferma',
|
|
|
- camera: 'Camera',
|
|
|
|
|
|
|
+ camera: 'Telecamera',
|
|
|
skipObject: 'Salta Oggetto',
|
|
skipObject: 'Salta Oggetto',
|
|
|
reconnect: 'Riconnetti',
|
|
reconnect: 'Riconnetti',
|
|
|
forceRefresh: 'Forza aggiornamento',
|
|
forceRefresh: 'Forza aggiornamento',
|
|
@@ -318,10 +318,10 @@ export default {
|
|
|
calibrationSaved: 'Calibrazione salvata!',
|
|
calibrationSaved: 'Calibrazione salvata!',
|
|
|
calibrationFailed: 'Calibrazione non riuscita',
|
|
calibrationFailed: 'Calibrazione non riuscita',
|
|
|
rfidRereadInitiated: 'Rilettura RFID avviata',
|
|
rfidRereadInitiated: 'Rilettura RFID avviata',
|
|
|
- loadInitiated: 'Loading filament…',
|
|
|
|
|
- unloadInitiated: 'Unloading filament…',
|
|
|
|
|
- failedToLoad: 'Failed to load filament',
|
|
|
|
|
- failedToUnload: 'Failed to unload filament',
|
|
|
|
|
|
|
+ loadInitiated: 'Caricamento filamento…',
|
|
|
|
|
+ unloadInitiated: 'Scaricamento filamento…',
|
|
|
|
|
+ failedToLoad: 'Caricamento filamento fallito',
|
|
|
|
|
+ failedToUnload: 'Scaricamento filamento fallito',
|
|
|
},
|
|
},
|
|
|
// Connection status
|
|
// Connection status
|
|
|
connection: {
|
|
connection: {
|
|
@@ -347,8 +347,8 @@ export default {
|
|
|
},
|
|
},
|
|
|
// AMS load/unload (#891)
|
|
// AMS load/unload (#891)
|
|
|
ams: {
|
|
ams: {
|
|
|
- load: 'Load',
|
|
|
|
|
- unload: 'Unload',
|
|
|
|
|
|
|
+ load: 'Carica',
|
|
|
|
|
+ unload: 'Scarica',
|
|
|
},
|
|
},
|
|
|
bedJog: {
|
|
bedJog: {
|
|
|
title: 'Muovi il piano di stampa',
|
|
title: 'Muovi il piano di stampa',
|
|
@@ -729,7 +729,7 @@ export default {
|
|
|
removeF3d: 'Rimuovi F3D',
|
|
removeF3d: 'Rimuovi F3D',
|
|
|
download: 'Scarica',
|
|
download: 'Scarica',
|
|
|
copyDownloadLink: 'Copia link download',
|
|
copyDownloadLink: 'Copia link download',
|
|
|
- qrCode: 'QR Code',
|
|
|
|
|
|
|
+ qrCode: 'Codice QR',
|
|
|
viewPhotos: 'Vedi foto',
|
|
viewPhotos: 'Vedi foto',
|
|
|
viewPhotosCount: 'Vedi foto ({{count}})',
|
|
viewPhotosCount: 'Vedi foto ({{count}})',
|
|
|
projectPage: 'Pagina progetto',
|
|
projectPage: 'Pagina progetto',
|
|
@@ -742,7 +742,7 @@ export default {
|
|
|
removeFromProject: 'Rimuovi dal progetto',
|
|
removeFromProject: 'Rimuovi dal progetto',
|
|
|
loading: 'Caricamento...',
|
|
loading: 'Caricamento...',
|
|
|
noProjectsAvailable: 'Nessun progetto disponibile',
|
|
noProjectsAvailable: 'Nessun progetto disponibile',
|
|
|
- searchProjects: 'Search projects…',
|
|
|
|
|
|
|
+ searchProjects: 'Cerca progetti…',
|
|
|
select: 'Seleziona',
|
|
select: 'Seleziona',
|
|
|
deselect: 'Deseleziona',
|
|
deselect: 'Deseleziona',
|
|
|
delete: 'Elimina',
|
|
delete: 'Elimina',
|
|
@@ -792,7 +792,7 @@ export default {
|
|
|
estimated: 'Stimato: {{time}}',
|
|
estimated: 'Stimato: {{time}}',
|
|
|
actual: 'Reale: {{time}}',
|
|
actual: 'Reale: {{time}}',
|
|
|
accuracy: 'Accuratezza: {{percent}}%',
|
|
accuracy: 'Accuratezza: {{percent}}%',
|
|
|
- filament: '{{weight}}g',
|
|
|
|
|
|
|
+ filament: '{{weight}} g',
|
|
|
layer: '{{count}} strato',
|
|
layer: '{{count}} strato',
|
|
|
layers: '{{count}} strati',
|
|
layers: '{{count}} strati',
|
|
|
object: '{{count}} oggetto',
|
|
object: '{{count}} oggetto',
|
|
@@ -810,7 +810,7 @@ export default {
|
|
|
openInBambuStudioToSlice: 'Apri nello slicer per slicing',
|
|
openInBambuStudioToSlice: 'Apri nello slicer per slicing',
|
|
|
slice: 'Slice',
|
|
slice: 'Slice',
|
|
|
externalLink: 'Link esterno',
|
|
externalLink: 'Link esterno',
|
|
|
- makerWorld: 'MakerWorld: {{designer}}',
|
|
|
|
|
|
|
+ makerWorld: 'MakerWorld – {{designer}}',
|
|
|
viewProject: 'Vedi progetto',
|
|
viewProject: 'Vedi progetto',
|
|
|
noExternalLink: 'Nessun link esterno',
|
|
noExternalLink: 'Nessun link esterno',
|
|
|
preview3d: 'Anteprima 3D',
|
|
preview3d: 'Anteprima 3D',
|
|
@@ -843,7 +843,7 @@ export default {
|
|
|
deleteArchive: 'Elimina Archivio',
|
|
deleteArchive: 'Elimina Archivio',
|
|
|
deleteConfirm: 'Sei sicuro di eliminare "{{name}}"? Questa azione non può essere annullata.',
|
|
deleteConfirm: 'Sei sicuro di eliminare "{{name}}"? Questa azione non può essere annullata.',
|
|
|
deleteButton: 'Elimina',
|
|
deleteButton: 'Elimina',
|
|
|
- deletePurgeStats: 'Also remove this print from Quick Stats (filament, time, cost, energy)',
|
|
|
|
|
|
|
+ deletePurgeStats: 'Rimuovi anche questa stampa dalle Quick Stats (filamento, tempo, costo, energia)',
|
|
|
removeSource3mf: 'Rimuovi Sorgente 3MF',
|
|
removeSource3mf: 'Rimuovi Sorgente 3MF',
|
|
|
removeSource3mfConfirm: 'Sei sicuro di rimuovere il file sorgente 3MF da "{{name}}"? Questo eliminerà il progetto slicer originale.',
|
|
removeSource3mfConfirm: 'Sei sicuro di rimuovere il file sorgente 3MF da "{{name}}"? Questo eliminerà il progetto slicer originale.',
|
|
|
removeButton: 'Rimuovi',
|
|
removeButton: 'Rimuovi',
|
|
@@ -851,7 +851,7 @@ export default {
|
|
|
removeF3dConfirm: 'Sei sicuro di rimuovere il file Fusion 360 da "{{name}}"?',
|
|
removeF3dConfirm: 'Sei sicuro di rimuovere il file Fusion 360 da "{{name}}"?',
|
|
|
removeTimelapse: 'Rimuovi timelapse',
|
|
removeTimelapse: 'Rimuovi timelapse',
|
|
|
removeTimelapseConfirm: 'Sei sicuro di voler rimuovere il video timelapse da "{{name}}"?',
|
|
removeTimelapseConfirm: 'Sei sicuro di voler rimuovere il video timelapse da "{{name}}"?',
|
|
|
- timelapse: '{{name}} - Timelapse',
|
|
|
|
|
|
|
+ timelapse: '{{name}} – Timelapse',
|
|
|
selectTimelapse: 'Seleziona Timelapse',
|
|
selectTimelapse: 'Seleziona Timelapse',
|
|
|
selectTimelapseDesc: 'Nessun abbinamento automatico trovato. Seleziona il timelapse per questa stampa:',
|
|
selectTimelapseDesc: 'Nessun abbinamento automatico trovato. Seleziona il timelapse per questa stampa:',
|
|
|
deleteArchives: 'Elimina Archivi',
|
|
deleteArchives: 'Elimina Archivi',
|
|
@@ -1397,7 +1397,7 @@ export default {
|
|
|
general: 'Generale',
|
|
general: 'Generale',
|
|
|
smartPlugs: 'Prese smart',
|
|
smartPlugs: 'Prese smart',
|
|
|
notifications: 'Notifiche',
|
|
notifications: 'Notifiche',
|
|
|
- queue: 'Workflow',
|
|
|
|
|
|
|
+ queue: 'Flusso',
|
|
|
filament: 'Filamento',
|
|
filament: 'Filamento',
|
|
|
network: 'Rete',
|
|
network: 'Rete',
|
|
|
apiKeys: 'Chiavi API',
|
|
apiKeys: 'Chiavi API',
|
|
@@ -1409,7 +1409,7 @@ export default {
|
|
|
ldap: 'LDAP',
|
|
ldap: 'LDAP',
|
|
|
twoFa: 'Autenticazione 2FA',
|
|
twoFa: 'Autenticazione 2FA',
|
|
|
oidc: 'SSO / OIDC',
|
|
oidc: 'SSO / OIDC',
|
|
|
- security: 'Security',
|
|
|
|
|
|
|
+ security: 'Sicurezza',
|
|
|
spoolbuddy: 'SpoolBuddy',
|
|
spoolbuddy: 'SpoolBuddy',
|
|
|
},
|
|
},
|
|
|
ldap: {
|
|
ldap: {
|
|
@@ -1693,7 +1693,7 @@ export default {
|
|
|
addFirstSmartPlug: 'Aggiungi la tua prima presa smart',
|
|
addFirstSmartPlug: 'Aggiungi la tua prima presa smart',
|
|
|
// Notifications
|
|
// Notifications
|
|
|
providers: 'Provider',
|
|
providers: 'Provider',
|
|
|
- log: 'Log',
|
|
|
|
|
|
|
+ log: 'Registro',
|
|
|
testAll: 'Testa tutto',
|
|
testAll: 'Testa tutto',
|
|
|
testResults: 'Risultati test',
|
|
testResults: 'Risultati test',
|
|
|
testPassedCount: '{{count}} riusciti',
|
|
testPassedCount: '{{count}} riusciti',
|
|
@@ -1716,14 +1716,14 @@ export default {
|
|
|
manageQueueDescription: 'Aggiungi e rimuovi elementi dalla coda di stampa',
|
|
manageQueueDescription: 'Aggiungi e rimuovi elementi dalla coda di stampa',
|
|
|
controlPrinter: 'Controlla stampante',
|
|
controlPrinter: 'Controlla stampante',
|
|
|
controlPrinterDescription: 'Metti in pausa, riprendi e ferma stampe',
|
|
controlPrinterDescription: 'Metti in pausa, riprendi e ferma stampe',
|
|
|
- cloudAccess: 'Allow cloud access',
|
|
|
|
|
- cloudAccessDescription: 'Read Bambu Cloud presets and filaments on your behalf. Requires you to be signed into Bambu Cloud.',
|
|
|
|
|
|
|
+ cloudAccess: 'Consenti accesso cloud',
|
|
|
|
|
+ cloudAccessDescription: 'Legge i preset e i filamenti Bambu Cloud per tuo conto. Richiede l\'accesso a Bambu Cloud.',
|
|
|
cloudBadge: 'Cloud',
|
|
cloudBadge: 'Cloud',
|
|
|
- updateEnergyCost: 'Update electricity price',
|
|
|
|
|
- updateEnergyCostDescription: 'Allow this key to POST a new per-kWh electricity price to /settings/electricity-price. Useful for Home Assistant dynamic-tariff automations (Tibber, Octopus, etc.). This is the only settings field writable via API key.',
|
|
|
|
|
- energyCostBadge: 'Energy',
|
|
|
|
|
|
|
+ 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',
|
|
legacyKey: 'Legacy',
|
|
|
- legacyKeyTooltip: 'Created before per-user ownership; recreate to use cloud access',
|
|
|
|
|
|
|
+ legacyKeyTooltip: 'Creato prima della proprietà per utente; ricreare per accesso cloud',
|
|
|
unnamedKey: 'Chiave senza nome',
|
|
unnamedKey: 'Chiave senza nome',
|
|
|
lastUsed: 'Ultimo uso',
|
|
lastUsed: 'Ultimo uso',
|
|
|
read: 'Lettura',
|
|
read: 'Lettura',
|
|
@@ -1773,8 +1773,8 @@ export default {
|
|
|
defaultLayerInspectDesc: 'Ispezione IA del primo strato',
|
|
defaultLayerInspectDesc: 'Ispezione IA del primo strato',
|
|
|
defaultTimelapse: 'Timelapse',
|
|
defaultTimelapse: 'Timelapse',
|
|
|
defaultTimelapseDesc: 'Registra un video timelapse',
|
|
defaultTimelapseDesc: 'Registra un video timelapse',
|
|
|
- staggeredStart: 'Staggered Start',
|
|
|
|
|
- staggeredStartDescription: 'Default group size and interval when staggering multi-printer batch starts. Can be overridden per batch in the print modal.',
|
|
|
|
|
|
|
+ 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',
|
|
plateClear: 'Conferma piatto libero',
|
|
|
requirePlateClear: 'Richiedi 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.',
|
|
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.',
|
|
@@ -1785,10 +1785,10 @@ export default {
|
|
|
gcodeEndLabel: 'G-code finale',
|
|
gcodeEndLabel: 'G-code finale',
|
|
|
gcodeStartPlaceholder: 'G-code inserito prima dell\'inizio della stampa...',
|
|
gcodeStartPlaceholder: 'G-code inserito prima dell\'inizio della stampa...',
|
|
|
gcodeEndPlaceholder: 'G-code aggiunto dopo la fine della stampa...',
|
|
gcodeEndPlaceholder: 'G-code aggiunto dopo la fine della stampa...',
|
|
|
- staggerGroupSize: 'Group size',
|
|
|
|
|
- staggerGroupSizeHelp: 'Printers to start simultaneously per group',
|
|
|
|
|
- staggerInterval: 'Interval (minutes)',
|
|
|
|
|
- staggerIntervalHelp: 'Delay between each group starting',
|
|
|
|
|
|
|
+ staggerGroupSize: 'Dimensione gruppo',
|
|
|
|
|
+ staggerGroupSizeHelp: 'Stampanti da avviare simultaneamente per gruppo',
|
|
|
|
|
+ staggerInterval: 'Intervallo (minuti)',
|
|
|
|
|
+ staggerIntervalHelp: 'Ritardo tra l\'avvio di ogni gruppo',
|
|
|
queueDrying: 'Asciugatura automatica',
|
|
queueDrying: 'Asciugatura automatica',
|
|
|
queueDryingDescription: 'Asciugare automaticamente il filamento AMS quando la stampante è inattiva tra le stampe in coda. Usa la soglia di umidità sopra.',
|
|
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',
|
|
queueDryingEnabled: 'Abilita asciugatura automatica',
|
|
@@ -1811,7 +1811,7 @@ export default {
|
|
|
enableAuthentication: 'Abilita autenticazione',
|
|
enableAuthentication: 'Abilita autenticazione',
|
|
|
currentUser: 'Utente corrente',
|
|
currentUser: 'Utente corrente',
|
|
|
changePassword: 'Cambia password',
|
|
changePassword: 'Cambia password',
|
|
|
- admin: 'Admin',
|
|
|
|
|
|
|
+ admin: 'Amministratore',
|
|
|
users: 'Utenti',
|
|
users: 'Utenti',
|
|
|
addUser: 'Aggiungi utente',
|
|
addUser: 'Aggiungi utente',
|
|
|
groups: 'Gruppi',
|
|
groups: 'Gruppi',
|
|
@@ -1856,28 +1856,28 @@ export default {
|
|
|
embeddedOverlay: 'Overlay incorporato',
|
|
embeddedOverlay: 'Overlay incorporato',
|
|
|
preferredSlicer: 'Slicer preferito',
|
|
preferredSlicer: 'Slicer preferito',
|
|
|
preferredSlicerDescription: 'Scegli quale applicazione slicer usare per aprire i file',
|
|
preferredSlicerDescription: 'Scegli quale applicazione slicer usare per aprire i file',
|
|
|
- orcaslicerKnownIssuesWarning: 'OrcaSlicer 2.3.2 / 2.4.0-dev have known CLI bugs that block slicing many Bambu-authored 3MFs — see upstream issues #12426 (segfault on painted multi-extruder files) and #13386 (parameter-range strict-validation reject). Bambu Studio is recommended until the upstream fixes land.',
|
|
|
|
|
- useSlicerApi: 'Use Slicer API',
|
|
|
|
|
- useSlicerApiDescription: 'When on, "Slice" actions open the in-app slicer modal and call the slicer-API sidecar. When off (default), they hand off to the desktop slicer via URI scheme.',
|
|
|
|
|
|
|
+ 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',
|
|
slicerCard: 'Slicer',
|
|
|
orcaslicerApiUrl: 'OrcaSlicer sidecar URL',
|
|
orcaslicerApiUrl: 'OrcaSlicer sidecar URL',
|
|
|
bambuStudioApiUrl: 'Bambu Studio sidecar URL',
|
|
bambuStudioApiUrl: 'Bambu Studio sidecar URL',
|
|
|
- slicerApiUrlDescription: 'URL of the slicer-API sidecar container. Leave blank to use the SLICER_API_URL / BAMBU_STUDIO_API_URL env var defaults.',
|
|
|
|
|
|
|
+ slicerApiUrlDescription: 'URL del container sidecar slicer-API. Lascia vuoto per usare le variabili d\'ambiente SLICER_API_URL / BAMBU_STUDIO_API_URL.',
|
|
|
slicerBundles: {
|
|
slicerBundles: {
|
|
|
- title: 'Slicer Bundles',
|
|
|
|
|
- description: 'Import a Printer Preset Bundle (.bbscfg) exported from BambuStudio (File → Export → Export Preset Bundle → "Printer preset bundle"). Once imported, slice requests can pick presets from the bundle by name without re-uploading the JSON profile triplet.',
|
|
|
|
|
- uploadButton: 'Upload bundle',
|
|
|
|
|
- uploading: 'Uploading…',
|
|
|
|
|
- loading: 'Loading bundles…',
|
|
|
|
|
- empty: 'No bundles imported yet.',
|
|
|
|
|
- summary: '{{processCount}} process · {{filamentCount}} filament presets',
|
|
|
|
|
- delete: 'Delete',
|
|
|
|
|
- uploadSuccess: 'Imported {{name}}',
|
|
|
|
|
- uploadError: 'Bundle upload failed: {{message}}',
|
|
|
|
|
- deleteSuccess: 'Bundle removed',
|
|
|
|
|
- deleteError: 'Bundle delete failed: {{message}}',
|
|
|
|
|
- confirmDeleteTitle: 'Remove this bundle?',
|
|
|
|
|
- confirmDeleteMessage: 'Slice requests that reference "{{name}}" will fail until the bundle is re-imported.',
|
|
|
|
|
|
|
+ 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',
|
|
externalCameras: 'Camere esterne',
|
|
|
costTracking: 'Tracciamento costi',
|
|
costTracking: 'Tracciamento costi',
|
|
@@ -2094,9 +2094,9 @@ export default {
|
|
|
cameraTypeRtsp: 'Stream RTSP',
|
|
cameraTypeRtsp: 'Stream RTSP',
|
|
|
cameraTypeSnapshot: 'Snapshot HTTP',
|
|
cameraTypeSnapshot: 'Snapshot HTTP',
|
|
|
cameraTypeUsb: 'Fotocamera USB (V4L2)',
|
|
cameraTypeUsb: 'Fotocamera USB (V4L2)',
|
|
|
- cameraSnapshotUrl: 'Snapshot URL (optional)',
|
|
|
|
|
|
|
+ cameraSnapshotUrl: 'URL istantanea (facoltativo)',
|
|
|
cameraSnapshotUrlPlaceholder: 'http://192.168.1.61:1984/api/frame.jpeg?src=printer',
|
|
cameraSnapshotUrlPlaceholder: 'http://192.168.1.61:1984/api/frame.jpeg?src=printer',
|
|
|
- cameraSnapshotUrlHelp: 'Single-frame URL used for notification thumbnails, finish photos, layer-timelapse frames, and plate detection. Timelapse and plate detection each require their own per-printer toggle — this URL is just the image source they pull from when active. Leave blank to capture from the live stream above. Useful for go2rtc (/api/frame.jpeg) and IP cameras with a dedicated snapshot endpoint.',
|
|
|
|
|
|
|
+ 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',
|
|
cameraRotation: 'Rotazione',
|
|
|
test: 'Test',
|
|
test: 'Test',
|
|
|
connected: 'Connesso',
|
|
connected: 'Connesso',
|
|
@@ -2251,7 +2251,7 @@ export default {
|
|
|
form: {
|
|
form: {
|
|
|
name: 'Nome visualizzato',
|
|
name: 'Nome visualizzato',
|
|
|
issuerUrl: 'URL emittente',
|
|
issuerUrl: 'URL emittente',
|
|
|
- clientId: 'Client ID',
|
|
|
|
|
|
|
+ clientId: 'ID client',
|
|
|
clientSecret: 'Client secret',
|
|
clientSecret: 'Client secret',
|
|
|
scopes: 'Scope',
|
|
scopes: 'Scope',
|
|
|
iconUrl: 'URL icona (opzionale)',
|
|
iconUrl: 'URL icona (opzionale)',
|
|
@@ -2264,8 +2264,8 @@ export default {
|
|
|
secretPlaceholder: 'nuovo segreto',
|
|
secretPlaceholder: 'nuovo segreto',
|
|
|
emailClaim: 'Claim email',
|
|
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.",
|
|
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: 'email',
|
|
|
|
|
- emailClaimCustomClaimAutoLinkWarning: "Custom claims are safe for auto-link only when the value is tenant-administered (e.g. Azure Entra ID upn / preferred_username). Do not enable auto-link if your IdP allows users to self-assert this claim.",
|
|
|
|
|
|
|
+ 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',
|
|
requireEmailVerified: 'Richiedi verifica email',
|
|
|
requireEmailVerifiedDesc: "Accetta il claim email solo se il provider lo contrassegna come verificato.",
|
|
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.',
|
|
requireEmailVerifiedWarning: 'Attenzione: l\'email sarà accettata senza verifica. Usare solo con provider affidabili.',
|
|
@@ -2278,19 +2278,19 @@ export default {
|
|
|
|
|
|
|
|
// TODO: translate encryption keys
|
|
// TODO: translate encryption keys
|
|
|
encryption: {
|
|
encryption: {
|
|
|
- title: 'MFA Encryption Status',
|
|
|
|
|
- enabledFromEnv: 'At-rest encryption enabled (key from MFA_ENCRYPTION_KEY environment variable)',
|
|
|
|
|
- enabledFromFile: 'At-rest encryption enabled (key loaded from data directory)',
|
|
|
|
|
- enabledGenerated: 'At-rest encryption enabled with auto-generated key',
|
|
|
|
|
- notConfigured: 'At-rest encryption not configured',
|
|
|
|
|
- notConfiguredDesc: 'TOTP secrets and OIDC client_secrets are stored in plaintext. Set MFA_ENCRYPTION_KEY or restart Bambuddy with a writable data directory to auto-generate one.',
|
|
|
|
|
- allEncrypted: 'All MFA secrets are encrypted at rest.',
|
|
|
|
|
- legacyRowsLabel: 'Legacy plaintext rows',
|
|
|
|
|
- encryptedRowsLabel: 'Encrypted rows',
|
|
|
|
|
- legacyRowsWarning: '{{count}} legacy plaintext row(s) detected. Re-save the OIDC provider or re-enroll the user’s authenticator app to migrate to encrypted storage.',
|
|
|
|
|
- backupHint: 'The auto-generated key is stored at DATA_DIR/.mfa_encryption_key and is included in local backup ZIPs. Keep your backups secure or set MFA_ENCRYPTION_KEY explicitly.',
|
|
|
|
|
- decryptionBrokenTitle: 'Encryption key missing',
|
|
|
|
|
- decryptionBrokenError: '{{count}} encrypted record(s) cannot be decrypted because the encryption key is no longer available. Restore the previous MFA_ENCRYPTION_KEY or DATA_DIR/.mfa_encryption_key to recover.',
|
|
|
|
|
|
|
+ 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.",
|
|
migrationErrorWarning: "{{count}} riga/righe legacy non sono state ricifrate all'avvio. Controlla i log del server e riavvia Bambuddy per riprovare.",
|
|
|
},
|
|
},
|
|
|
|
|
|
|
@@ -2368,7 +2368,7 @@ export default {
|
|
|
},
|
|
},
|
|
|
printerError: {
|
|
printerError: {
|
|
|
title: 'Errore stampante',
|
|
title: 'Errore stampante',
|
|
|
- body: '{{printer}}: {{error}}',
|
|
|
|
|
|
|
+ body: '{{printer}} – {{error}}',
|
|
|
},
|
|
},
|
|
|
filamentLow: {
|
|
filamentLow: {
|
|
|
title: 'Filamento in esaurimento',
|
|
title: 'Filamento in esaurimento',
|
|
@@ -2420,7 +2420,7 @@ export default {
|
|
|
startLogging: 'Avvia logging',
|
|
startLogging: 'Avvia logging',
|
|
|
stopLogging: 'Ferma logging',
|
|
stopLogging: 'Ferma logging',
|
|
|
clearLog: 'Pulisci log',
|
|
clearLog: 'Pulisci log',
|
|
|
- topic: 'Topic',
|
|
|
|
|
|
|
+ topic: 'Argomento',
|
|
|
timestamp: 'Timestamp',
|
|
timestamp: 'Timestamp',
|
|
|
direction: 'Direzione',
|
|
direction: 'Direzione',
|
|
|
all: 'Tutti',
|
|
all: 'Tutti',
|
|
@@ -2602,7 +2602,7 @@ export default {
|
|
|
title: 'Vista camera',
|
|
title: 'Vista camera',
|
|
|
invalidPrinterId: 'ID stampante non valido',
|
|
invalidPrinterId: 'ID stampante non valido',
|
|
|
live: 'Live',
|
|
live: 'Live',
|
|
|
- snapshot: 'Snapshot',
|
|
|
|
|
|
|
+ snapshot: 'Istantanea',
|
|
|
restartStream: 'Riavvia stream',
|
|
restartStream: 'Riavvia stream',
|
|
|
refreshSnapshot: 'Aggiorna snapshot',
|
|
refreshSnapshot: 'Aggiorna snapshot',
|
|
|
fullscreen: 'Schermo intero',
|
|
fullscreen: 'Schermo intero',
|
|
@@ -2620,7 +2620,7 @@ export default {
|
|
|
cameraStream: 'Stream camera',
|
|
cameraStream: 'Stream camera',
|
|
|
zoomOut: 'Zoom indietro',
|
|
zoomOut: 'Zoom indietro',
|
|
|
zoomIn: 'Zoom avanti',
|
|
zoomIn: 'Zoom avanti',
|
|
|
- resetZoom: 'Reset zoom',
|
|
|
|
|
|
|
+ resetZoom: 'Reimposta zoom',
|
|
|
recording: 'Registrazione',
|
|
recording: 'Registrazione',
|
|
|
startRecording: 'Avvia registrazione',
|
|
startRecording: 'Avvia registrazione',
|
|
|
stopRecording: 'Ferma registrazione',
|
|
stopRecording: 'Ferma registrazione',
|
|
@@ -2685,7 +2685,7 @@ export default {
|
|
|
backToSettings: 'Torna a Impostazioni',
|
|
backToSettings: 'Torna a Impostazioni',
|
|
|
createUser: 'Crea utente',
|
|
createUser: 'Crea utente',
|
|
|
noPermission: 'Non hai il permesso di accedere a questa pagina.',
|
|
noPermission: 'Non hai il permesso di accedere a questa pagina.',
|
|
|
- admin: 'Admin',
|
|
|
|
|
|
|
+ admin: 'Amministratore',
|
|
|
noGroups: 'Nessun gruppo',
|
|
noGroups: 'Nessun gruppo',
|
|
|
active: 'Attivo',
|
|
active: 'Attivo',
|
|
|
inactive: 'Inattivo',
|
|
inactive: 'Inattivo',
|
|
@@ -2706,7 +2706,7 @@ export default {
|
|
|
fillRequired: 'Compila tutti i campi obbligatori',
|
|
fillRequired: 'Compila tutti i campi obbligatori',
|
|
|
passwordsDoNotMatch: 'Le password non coincidono',
|
|
passwordsDoNotMatch: 'Le password non coincidono',
|
|
|
passwordTooShort: 'La password deve essere di almeno 6 caratteri',
|
|
passwordTooShort: 'La password deve essere di almeno 6 caratteri',
|
|
|
- ldapProvisioned: 'Provisioned LDAP user "{{username}}"',
|
|
|
|
|
|
|
+ ldapProvisioned: 'Utente LDAP "{{username}}" provisionato',
|
|
|
},
|
|
},
|
|
|
modal: {
|
|
modal: {
|
|
|
createUser: 'Crea utente',
|
|
createUser: 'Crea utente',
|
|
@@ -2717,26 +2717,26 @@ export default {
|
|
|
saveChanges: 'Salva modifiche',
|
|
saveChanges: 'Salva modifiche',
|
|
|
advancedAuthSubtitle: 'con autenticazione avanzata',
|
|
advancedAuthSubtitle: 'con autenticazione avanzata',
|
|
|
// Manual LDAP provisioning (#1298) — English fallbacks
|
|
// Manual LDAP provisioning (#1298) — English fallbacks
|
|
|
- tabsAriaLabel: 'User source',
|
|
|
|
|
- localTab: 'Local',
|
|
|
|
|
|
|
+ tabsAriaLabel: 'Origine utente',
|
|
|
|
|
+ localTab: 'Locale',
|
|
|
ldapTab: 'LDAP',
|
|
ldapTab: 'LDAP',
|
|
|
- ldapSearchLabel: 'Search directory',
|
|
|
|
|
- ldapSearchPlaceholder: 'Type a username, name, or email...',
|
|
|
|
|
- ldapMinChars: 'Type at least 2 characters to search',
|
|
|
|
|
- ldapTypeToSearch: 'Start typing to search the LDAP directory',
|
|
|
|
|
- ldapSearching: 'Searching directory...',
|
|
|
|
|
- ldapNoResults: 'No matching users in the directory',
|
|
|
|
|
- ldapSearchError: 'Directory search failed. Check the LDAP server status.',
|
|
|
|
|
- ldapAlreadyProvisioned: 'Already provisioned',
|
|
|
|
|
- ldapSelectedLabel: 'Selected',
|
|
|
|
|
- ldapProvision: 'Provision user',
|
|
|
|
|
|
|
+ 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...',
|
|
ldapProvisioning: 'Provisioning...',
|
|
|
- ldapErrorProvision: 'Provisioning failed. Check the LDAP server status and try again.',
|
|
|
|
|
|
|
+ ldapErrorProvision: 'Provisioning fallito. Verifica lo stato del server LDAP e riprova.',
|
|
|
},
|
|
},
|
|
|
form: {
|
|
form: {
|
|
|
username: 'Nome utente',
|
|
username: 'Nome utente',
|
|
|
usernamePlaceholder: 'Inserisci nome utente',
|
|
usernamePlaceholder: 'Inserisci nome utente',
|
|
|
- email: 'Email',
|
|
|
|
|
|
|
+ email: 'E-mail',
|
|
|
emailPlaceholder: 'utente@esempio.com',
|
|
emailPlaceholder: 'utente@esempio.com',
|
|
|
password: 'Password',
|
|
password: 'Password',
|
|
|
passwordPlaceholder: 'Inserisci password',
|
|
passwordPlaceholder: 'Inserisci password',
|
|
@@ -2785,7 +2785,7 @@ export default {
|
|
|
tabs: {
|
|
tabs: {
|
|
|
cloud: 'Profili cloud',
|
|
cloud: 'Profili cloud',
|
|
|
local: 'Profili locali',
|
|
local: 'Profili locali',
|
|
|
- kprofiles: 'K-Profiles',
|
|
|
|
|
|
|
+ kprofiles: 'Profili K',
|
|
|
},
|
|
},
|
|
|
localProfiles: {
|
|
localProfiles: {
|
|
|
title: 'Profili locali',
|
|
title: 'Profili locali',
|
|
@@ -2838,7 +2838,7 @@ export default {
|
|
|
login: {
|
|
login: {
|
|
|
title: 'Connetti a Bambu Cloud',
|
|
title: 'Connetti a Bambu Cloud',
|
|
|
subtitle: 'Sincronizza i preset del slicer tra dispositivi',
|
|
subtitle: 'Sincronizza i preset del slicer tra dispositivi',
|
|
|
- email: 'Email',
|
|
|
|
|
|
|
+ email: 'E-mail',
|
|
|
password: 'Password',
|
|
password: 'Password',
|
|
|
region: 'Regione',
|
|
region: 'Regione',
|
|
|
regionGlobal: 'Globale',
|
|
regionGlobal: 'Globale',
|
|
@@ -2847,7 +2847,7 @@ export default {
|
|
|
totpCode: 'Codice autenticatore',
|
|
totpCode: 'Codice autenticatore',
|
|
|
checkEmail: 'Controlla la tua email ({{email}}) per un codice a 6 cifre',
|
|
checkEmail: 'Controlla la tua email ({{email}}) per un codice a 6 cifre',
|
|
|
enterTotpHint: 'Inserisci il codice a 6 cifre dalla tua app autenticatore',
|
|
enterTotpHint: 'Inserisci il codice a 6 cifre dalla tua app autenticatore',
|
|
|
- accessToken: 'Access Token',
|
|
|
|
|
|
|
+ accessToken: 'Token di accesso',
|
|
|
accessTokenHint: 'Incolla il tuo access token Bambu Lab (da Bambu Studio)',
|
|
accessTokenHint: 'Incolla il tuo access token Bambu Lab (da Bambu Studio)',
|
|
|
back: 'Indietro',
|
|
back: 'Indietro',
|
|
|
loginButton: 'Accedi',
|
|
loginButton: 'Accedi',
|
|
@@ -3094,7 +3094,7 @@ export default {
|
|
|
noPermissionLinkFolder: 'Non hai il permesso di collegare cartelle',
|
|
noPermissionLinkFolder: 'Non hai il permesso di collegare cartelle',
|
|
|
noPermissionDeleteFolder: 'Non hai il permesso di eliminare cartelle',
|
|
noPermissionDeleteFolder: 'Non hai il permesso di eliminare cartelle',
|
|
|
noPermissionPrint: 'Non hai il permesso di stampare',
|
|
noPermissionPrint: 'Non hai il permesso di stampare',
|
|
|
- noPermissionSlice: 'You do not have permission to slice files',
|
|
|
|
|
|
|
+ noPermissionSlice: 'Non hai il permesso di sezionare i file',
|
|
|
noPermissionAddToQueue: 'Non hai il permesso di aggiungere alla coda',
|
|
noPermissionAddToQueue: 'Non hai il permesso di aggiungere alla coda',
|
|
|
noPermissionDownload: 'Non hai il permesso di scaricare file',
|
|
noPermissionDownload: 'Non hai il permesso di scaricare file',
|
|
|
noPermissionRenameFile: 'Non hai il permesso di rinominare questo file',
|
|
noPermissionRenameFile: 'Non hai il permesso di rinominare questo file',
|
|
@@ -3379,7 +3379,7 @@ export default {
|
|
|
vendor: 'Produttore',
|
|
vendor: 'Produttore',
|
|
|
material: 'Materiale',
|
|
material: 'Materiale',
|
|
|
color: 'Colore',
|
|
color: 'Colore',
|
|
|
- kFactor: 'K Factor',
|
|
|
|
|
|
|
+ kFactor: 'Fattore K',
|
|
|
temperature: 'Temperatura',
|
|
temperature: 'Temperatura',
|
|
|
noFilaments: 'Nessun filamento in libreria',
|
|
noFilaments: 'Nessun filamento in libreria',
|
|
|
deleteConfirm: 'Sei sicuro di voler eliminare questo filamento?',
|
|
deleteConfirm: 'Sei sicuro di voler eliminare questo filamento?',
|
|
@@ -3389,46 +3389,46 @@ export default {
|
|
|
|
|
|
|
|
// Slice (slicer-API integration via SliceModal)
|
|
// Slice (slicer-API integration via SliceModal)
|
|
|
slice: {
|
|
slice: {
|
|
|
- title: 'Slice model',
|
|
|
|
|
|
|
+ title: 'Slicing modello',
|
|
|
action: 'Slice',
|
|
action: 'Slice',
|
|
|
slicing: 'Slicing…',
|
|
slicing: 'Slicing…',
|
|
|
- printer: 'Printer profile',
|
|
|
|
|
- process: 'Process profile',
|
|
|
|
|
- filament: 'Filament profile',
|
|
|
|
|
- filamentSlot: 'Filament {{index}} ({{type}})',
|
|
|
|
|
- selectPreset: '— Select a preset —',
|
|
|
|
|
- loadingPresets: 'Loading presets…',
|
|
|
|
|
- analyzingPlateFilaments: 'Analyzing plate filaments…',
|
|
|
|
|
- analyzingPlateFilamentsHint: 'Running a preview slice to discover which AMS slots this plate uses. Cached after — re-opening is instant.',
|
|
|
|
|
- previewToast: 'Analyzing {{name}} — {{elapsed}}',
|
|
|
|
|
- previewWithProgress: 'Analyzing {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}',
|
|
|
|
|
- notUsedByPlate: '— not used by this plate',
|
|
|
|
|
- printerMismatch: 'This 3MF was sliced for {{source}}, but you picked {{target}}. The slicer CLI cannot re-slice a 3MF for a different printer — open the source in Bambu Studio, change the printer, and re-export.',
|
|
|
|
|
- noPresetsForSlot: 'No presets available',
|
|
|
|
|
- presetsLoadFailed: 'Failed to load presets. Open Settings → Profiles to import them first.',
|
|
|
|
|
- allPresetsRequired: 'All presets must be selected',
|
|
|
|
|
- enqueuing: 'Submitting slice job…',
|
|
|
|
|
- queued: 'Queued…',
|
|
|
|
|
- failed: 'Slicing failed. Check the slicer sidecar logs.',
|
|
|
|
|
- startedToast: 'Slicing {{name}} in the background…',
|
|
|
|
|
- queuedToast: 'Queued: {{name}} — {{elapsed}}',
|
|
|
|
|
- runningToast: 'Slicing {{name}} — {{elapsed}}',
|
|
|
|
|
- runningWithProgress: '{{name}} — {{stage}} ({{percent}}%) — {{elapsed}}',
|
|
|
|
|
- completedToast: 'Sliced {{name}}',
|
|
|
|
|
- failedToast: 'Slicing {{name}} failed: {{detail}}',
|
|
|
|
|
|
|
+ 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: {
|
|
tier: {
|
|
|
- local: 'Imported',
|
|
|
|
|
|
|
+ local: 'Importato',
|
|
|
cloud: 'Cloud',
|
|
cloud: 'Cloud',
|
|
|
standard: 'Standard',
|
|
standard: 'Standard',
|
|
|
},
|
|
},
|
|
|
cloud: {
|
|
cloud: {
|
|
|
- notAuthenticated: 'Sign in to Bambu Cloud (Settings → Profiles → Cloud) to see your cloud presets.',
|
|
|
|
|
- expired: 'Bambu Cloud session expired — sign in again to refresh your cloud presets.',
|
|
|
|
|
- unreachable: 'Bambu Cloud is unreachable right now. Local and standard presets still work.',
|
|
|
|
|
|
|
+ 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: {
|
|
bedType: {
|
|
|
- label: 'Build plate',
|
|
|
|
|
- auto: 'Auto (use process preset)',
|
|
|
|
|
|
|
+ label: 'Piano di stampa',
|
|
|
|
|
+ auto: 'Auto (usa preset di processo)',
|
|
|
coolPlate: 'Cool Plate',
|
|
coolPlate: 'Cool Plate',
|
|
|
coolPlateSuperTack: 'Cool Plate SuperTack',
|
|
coolPlateSuperTack: 'Cool Plate SuperTack',
|
|
|
engineering: 'Engineering Plate',
|
|
engineering: 'Engineering Plate',
|
|
@@ -3481,26 +3481,26 @@ export default {
|
|
|
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.',
|
|
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',
|
|
spoolmanOpenInNewTab: 'Apri Spoolman in una nuova scheda',
|
|
|
labels: {
|
|
labels: {
|
|
|
- title: 'Print spool labels',
|
|
|
|
|
- selectedCount: '{{count}} selected',
|
|
|
|
|
- pickSpools: 'Pick which spools to print labels for:',
|
|
|
|
|
- searchPlaceholder: 'Search name, brand, or #ID',
|
|
|
|
|
- filterByMaterial: 'Material:',
|
|
|
|
|
- allMaterials: 'All',
|
|
|
|
|
- selectVisible: 'Select all visible ({{count}})',
|
|
|
|
|
- deselectVisible: 'Deselect visible',
|
|
|
|
|
- clearAll: 'Clear all',
|
|
|
|
|
- noSpoolsToShow: 'No spools to show. Adjust your filter and try again.',
|
|
|
|
|
- noMatches: 'No spools match the current search or filter.',
|
|
|
|
|
- printOne: 'Print label for this spool',
|
|
|
|
|
- printLabels: 'Print labels…',
|
|
|
|
|
- bulkTitle: 'Pick spools to print labels for from the {{count}} currently shown',
|
|
|
|
|
- noSpoolsTitle: 'No spools to label',
|
|
|
|
|
- error: 'Could not generate labels: {{msg}}',
|
|
|
|
|
|
|
+ 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}}',
|
|
|
templates: {
|
|
templates: {
|
|
|
ams: {
|
|
ams: {
|
|
|
label: 'AMS holder (30 × 15 mm)',
|
|
label: 'AMS holder (30 × 15 mm)',
|
|
|
- hint: 'Single label per page; fits the popular AMS filament label holder.',
|
|
|
|
|
|
|
+ hint: 'Una etichetta per pagina; adatta al popolare portaetichette AMS.',
|
|
|
},
|
|
},
|
|
|
box40x30: {
|
|
box40x30: {
|
|
|
label: 'Etichetta scatola (40 × 30 mm)',
|
|
label: 'Etichetta scatola (40 × 30 mm)',
|
|
@@ -3508,15 +3508,15 @@ export default {
|
|
|
},
|
|
},
|
|
|
box: {
|
|
box: {
|
|
|
label: 'Box label (62 × 29 mm)',
|
|
label: 'Box label (62 × 29 mm)',
|
|
|
- hint: 'Single label per page; sized for Brother PT/QL and Dymo small labels.',
|
|
|
|
|
|
|
+ hint: 'Una etichetta per pagina; dimensionata per Brother PT/QL e piccole etichette Dymo.',
|
|
|
},
|
|
},
|
|
|
averyL7160: {
|
|
averyL7160: {
|
|
|
label: 'Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)',
|
|
label: 'Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)',
|
|
|
- hint: 'EU sheet stock; 21 labels per A4 page.',
|
|
|
|
|
|
|
+ hint: 'Foglio formato UE; 21 etichette per pagina A4.',
|
|
|
},
|
|
},
|
|
|
avery5160: {
|
|
avery5160: {
|
|
|
label: 'Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)',
|
|
label: 'Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)',
|
|
|
- hint: 'US sheet stock; 30 labels per Letter page.',
|
|
|
|
|
|
|
+ hint: 'Foglio formato US; 30 etichette per pagina Letter.',
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
@@ -3531,7 +3531,7 @@ export default {
|
|
|
useCustomBrand: 'Usa "{{brand}}"',
|
|
useCustomBrand: 'Usa "{{brand}}"',
|
|
|
useCustomMaterial: 'Usa materiale personalizzato: {{material}}',
|
|
useCustomMaterial: 'Usa materiale personalizzato: {{material}}',
|
|
|
colorName: 'Nome Colore',
|
|
colorName: 'Nome Colore',
|
|
|
- colorNamePlaceholder: 'Jade White, Fire Red...',
|
|
|
|
|
|
|
+ colorNamePlaceholder: 'Bianco Giada, Rosso Fuoco...',
|
|
|
color: 'Colore',
|
|
color: 'Colore',
|
|
|
hexColor: 'Colore Hex',
|
|
hexColor: 'Colore Hex',
|
|
|
pickColor: 'Scegli colore personalizzato',
|
|
pickColor: 'Scegli colore personalizzato',
|
|
@@ -3568,7 +3568,7 @@ export default {
|
|
|
restore: 'Ripristina',
|
|
restore: 'Ripristina',
|
|
|
noSpools: 'Ancora nessuna bobina. Aggiungi la tua prima bobina per iniziare.',
|
|
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.',
|
|
noAvailableSpools: 'Nessuna bobina disponibile. Aggiungi una bobina al tuo inventario o rimuovine l\'assegnazione da un altro slot.',
|
|
|
- kProfiles: 'K-Profiles',
|
|
|
|
|
|
|
+ kProfiles: 'Profili K',
|
|
|
addKProfile: 'Aggiungi K-Profile',
|
|
addKProfile: 'Aggiungi K-Profile',
|
|
|
assignSpool: 'Assegna Bobina',
|
|
assignSpool: 'Assegna Bobina',
|
|
|
unassignSpool: 'Scollega',
|
|
unassignSpool: 'Scollega',
|
|
@@ -3632,27 +3632,27 @@ export default {
|
|
|
noColorsFound: 'Nessun colore corrisponde alla ricerca',
|
|
noColorsFound: 'Nessun colore corrisponde alla ricerca',
|
|
|
noResults: 'Nessun risultato trovato',
|
|
noResults: 'Nessun risultato trovato',
|
|
|
// Multi-color gradient + visual effect (#1154) — English fallback.
|
|
// Multi-color gradient + visual effect (#1154) — English fallback.
|
|
|
- extraColorsLabel: 'Extra colors',
|
|
|
|
|
|
|
+ extraColorsLabel: 'Colori extra',
|
|
|
extraColorsPlaceholder: 'EC984C,#6CD4BC,A66EB9,D87694',
|
|
extraColorsPlaceholder: 'EC984C,#6CD4BC,A66EB9,D87694',
|
|
|
- extraColorsHint: 'Paste 2 to 8 hex stops, separated by commas. Renders as a gradient.',
|
|
|
|
|
- extraColorsInvalid: 'Ignored invalid hex: {{tokens}}',
|
|
|
|
|
- colorEffectLabel: 'Effect',
|
|
|
|
|
|
|
+ extraColorsHint: 'Incolla da 2 a 8 stop hex, separati da virgole. Visualizzato come sfumatura.',
|
|
|
|
|
+ extraColorsInvalid: 'Hex non validi ignorati: {{tokens}}',
|
|
|
|
|
+ colorEffectLabel: 'Effetto',
|
|
|
colorEffect: {
|
|
colorEffect: {
|
|
|
- none: 'None',
|
|
|
|
|
- sparkle: 'Sparkle',
|
|
|
|
|
- wood: 'Wood',
|
|
|
|
|
- marble: 'Marble',
|
|
|
|
|
- glow: 'Glow',
|
|
|
|
|
- matte: 'Matte',
|
|
|
|
|
|
|
+ none: 'Nessuno',
|
|
|
|
|
+ sparkle: 'Scintillante',
|
|
|
|
|
+ wood: 'Legno',
|
|
|
|
|
+ marble: 'Marmo',
|
|
|
|
|
+ glow: 'Bagliore',
|
|
|
|
|
+ matte: 'Opaco',
|
|
|
silk: 'Silk',
|
|
silk: 'Silk',
|
|
|
- galaxy: 'Galaxy',
|
|
|
|
|
- rainbow: 'Rainbow',
|
|
|
|
|
- metal: 'Metal',
|
|
|
|
|
- translucent: 'Translucent',
|
|
|
|
|
- gradient: 'Gradient',
|
|
|
|
|
- dualColor: 'Dual Color',
|
|
|
|
|
- triColor: 'Tri Color',
|
|
|
|
|
- multicolor: 'Multicolor',
|
|
|
|
|
|
|
+ galaxy: 'Galassia',
|
|
|
|
|
+ rainbow: 'Arcobaleno',
|
|
|
|
|
+ metal: 'Metallo',
|
|
|
|
|
+ translucent: 'Traslucido',
|
|
|
|
|
+ gradient: 'Sfumatura',
|
|
|
|
|
+ dualColor: 'Bicolore',
|
|
|
|
|
+ triColor: 'Tricolore',
|
|
|
|
|
+ multicolor: 'Multicolore',
|
|
|
},
|
|
},
|
|
|
// PA Profiles
|
|
// PA Profiles
|
|
|
selectMaterialFirst: 'Selezionare prima un materiale nella scheda Info filamento.',
|
|
selectMaterialFirst: 'Selezionare prima un materiale nella scheda Info filamento.',
|
|
@@ -3779,7 +3779,7 @@ export default {
|
|
|
configureSlot: 'Configura slot',
|
|
configureSlot: 'Configura slot',
|
|
|
externalSpool: 'Bobina esterna',
|
|
externalSpool: 'Bobina esterna',
|
|
|
profile: 'Profilo',
|
|
profile: 'Profilo',
|
|
|
- kFactor: 'K Factor',
|
|
|
|
|
|
|
+ kFactor: 'Fattore K',
|
|
|
fill: 'Livello',
|
|
fill: 'Livello',
|
|
|
configure: 'Configura',
|
|
configure: 'Configura',
|
|
|
used: 'utilizzato',
|
|
used: 'utilizzato',
|
|
@@ -3823,19 +3823,19 @@ export default {
|
|
|
insufficientFilamentLine: '{{printer}} - {{slot}}: necessita di {{required}}g, rimanenti {{remaining}}g',
|
|
insufficientFilamentLine: '{{printer}} - {{slot}}: necessita di {{required}}g, rimanenti {{remaining}}g',
|
|
|
printAnyway: 'Stampa comunque',
|
|
printAnyway: 'Stampa comunque',
|
|
|
forceColorMatch: 'Forza corrispondenza colore',
|
|
forceColorMatch: 'Forza corrispondenza colore',
|
|
|
- staggerPrinterStarts: 'Stagger printer starts',
|
|
|
|
|
- staggerGroupSize: 'Group size',
|
|
|
|
|
- staggerInterval: 'Interval (min)',
|
|
|
|
|
- staggerPreview: '{{printers}} printers → {{groups}} groups of {{size}}, starting every {{interval}} min',
|
|
|
|
|
- staggerLastGroup: 'last group: {{count}}',
|
|
|
|
|
- staggerTotal: 'total: {{minutes}} min',
|
|
|
|
|
|
|
+ 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',
|
|
staggerToPrinters: 'Scagliona a {{count}} stampanti',
|
|
|
gcodeInjection: 'Inietta G-code auto-stampa',
|
|
gcodeInjection: 'Inietta G-code auto-stampa',
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
// Backup
|
|
// Backup
|
|
|
backup: {
|
|
backup: {
|
|
|
- includesEncryptionKey: 'Local backups include the MFA encryption key file (DATA_DIR/.mfa_encryption_key) so a backup ZIP is self-contained. Treat the ZIP as sensitive — anyone with the file can decrypt the OIDC client secrets and TOTP secrets stored inside.',
|
|
|
|
|
|
|
+ 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',
|
|
title: 'Backup e ripristino',
|
|
|
createBackup: 'Crea backup',
|
|
createBackup: 'Crea backup',
|
|
|
restoreBackup: 'Ripristina backup',
|
|
restoreBackup: 'Ripristina backup',
|
|
@@ -3873,7 +3873,7 @@ export default {
|
|
|
enterNewToken: 'Inserisci un nuovo token per aggiornare',
|
|
enterNewToken: 'Inserisci un nuovo token per aggiornare',
|
|
|
tokenHint: 'Token a grana fine con permesso di lettura/scrittura dei contenuti',
|
|
tokenHint: 'Token a grana fine con permesso di lettura/scrittura dei contenuti',
|
|
|
branch: 'Branch',
|
|
branch: 'Branch',
|
|
|
- provider: 'Git Provider',
|
|
|
|
|
|
|
+ provider: 'Provider Git',
|
|
|
providerGitHub: 'GitHub',
|
|
providerGitHub: 'GitHub',
|
|
|
providerGitLab: 'GitLab',
|
|
providerGitLab: 'GitLab',
|
|
|
providerGitea: 'Gitea',
|
|
providerGitea: 'Gitea',
|
|
@@ -3993,27 +3993,27 @@ export default {
|
|
|
close: 'Chiudi',
|
|
close: 'Chiudi',
|
|
|
|
|
|
|
|
// Scheduled local backups (#884)
|
|
// Scheduled local backups (#884)
|
|
|
- scheduledBackup: 'Scheduled Backups',
|
|
|
|
|
- scheduledBackupDescription: 'Automatically create backup snapshots on a schedule. Output directory can be mounted to a NAS or external storage.',
|
|
|
|
|
- frequency: 'Frequency',
|
|
|
|
|
- backupTime: 'Time',
|
|
|
|
|
- retention: 'Retention',
|
|
|
|
|
- retentionDescription: 'Number of backups to keep',
|
|
|
|
|
- outputPath: 'Output Path',
|
|
|
|
|
- outputPathPlaceholder: 'Default: {{path}}',
|
|
|
|
|
- outputPathDescription: 'Leave empty for default location',
|
|
|
|
|
- runNow: 'Run Now',
|
|
|
|
|
- backupFiles: 'Backup Files',
|
|
|
|
|
- noScheduledBackups: 'No backups yet',
|
|
|
|
|
- deleteBackup: 'Delete',
|
|
|
|
|
- deleteBackupConfirm: 'Delete this backup file?',
|
|
|
|
|
- backupRunning: 'Backup in progress...',
|
|
|
|
|
- scheduledBackupComplete: 'Backup completed successfully',
|
|
|
|
|
- scheduledBackupFailed: 'Backup failed',
|
|
|
|
|
- nextBackup: 'Next backup',
|
|
|
|
|
- backupSize: 'Size',
|
|
|
|
|
|
|
+ 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',
|
|
utc: 'UTC',
|
|
|
- defaultPathLabel: 'Default:',
|
|
|
|
|
|
|
+ defaultPathLabel: 'Predefinito:',
|
|
|
|
|
|
|
|
// Category labels
|
|
// Category labels
|
|
|
categories: {
|
|
categories: {
|
|
@@ -4096,8 +4096,8 @@ export default {
|
|
|
layerShift: 'Spostamento layer',
|
|
layerShift: 'Spostamento layer',
|
|
|
cloggedNozzle: 'Ugello intasato',
|
|
cloggedNozzle: 'Ugello intasato',
|
|
|
filamentRunout: 'Filamento esaurito',
|
|
filamentRunout: 'Filamento esaurito',
|
|
|
- warping: 'Warping',
|
|
|
|
|
- stringing: 'Stringing',
|
|
|
|
|
|
|
+ warping: 'Deformazione',
|
|
|
|
|
+ stringing: 'Filamento',
|
|
|
underExtrusion: 'Sotto-estrusione',
|
|
underExtrusion: 'Sotto-estrusione',
|
|
|
powerFailure: 'Mancanza corrente',
|
|
powerFailure: 'Mancanza corrente',
|
|
|
userCancelled: 'Annullato dall\'utente',
|
|
userCancelled: 'Annullato dall\'utente',
|
|
@@ -4114,7 +4114,7 @@ export default {
|
|
|
|
|
|
|
|
// K-Profiles
|
|
// K-Profiles
|
|
|
kProfiles: {
|
|
kProfiles: {
|
|
|
- title: 'K-Profiles',
|
|
|
|
|
|
|
+ title: 'Profili K',
|
|
|
noPrintersConfigured: 'Nessuna stampante configurata',
|
|
noPrintersConfigured: 'Nessuna stampante configurata',
|
|
|
addPrinterInSettings: 'Aggiungi una stampante in Impostazioni per gestire i K-profiles',
|
|
addPrinterInSettings: 'Aggiungi una stampante in Impostazioni per gestire i K-profiles',
|
|
|
noActivePrinters: 'Nessuna stampante attiva',
|
|
noActivePrinters: 'Nessuna stampante attiva',
|
|
@@ -4157,14 +4157,14 @@ export default {
|
|
|
editTitle: 'Modifica K-Profile',
|
|
editTitle: 'Modifica K-Profile',
|
|
|
profileName: 'Nome profilo',
|
|
profileName: 'Nome profilo',
|
|
|
profileNamePlaceholder: 'Il mio profilo PLA',
|
|
profileNamePlaceholder: 'Il mio profilo PLA',
|
|
|
- kValue: 'K-Value',
|
|
|
|
|
|
|
+ kValue: 'Valore K',
|
|
|
kValuePlaceholder: '0.020',
|
|
kValuePlaceholder: '0.020',
|
|
|
kValueHelp: 'Intervallo tipico: 0.01 - 0.06 per PLA, 0.02 - 0.10 per PETG',
|
|
kValueHelp: 'Intervallo tipico: 0.01 - 0.06 per PLA, 0.02 - 0.10 per PETG',
|
|
|
filament: 'Filamento',
|
|
filament: 'Filamento',
|
|
|
selectFilament: 'Seleziona filamento...',
|
|
selectFilament: 'Seleziona filamento...',
|
|
|
noFilamentsHelp: 'Nessun filamento trovato. Crea prima un K-profile in Bambu Studio.',
|
|
noFilamentsHelp: 'Nessun filamento trovato. Crea prima un K-profile in Bambu Studio.',
|
|
|
flowType: 'Tipo flow',
|
|
flowType: 'Tipo flow',
|
|
|
- highFlow: 'High Flow',
|
|
|
|
|
|
|
+ highFlow: 'Alto flusso',
|
|
|
standard: 'Standard',
|
|
standard: 'Standard',
|
|
|
nozzleSize: 'Dimensione ugello',
|
|
nozzleSize: 'Dimensione ugello',
|
|
|
extruder: 'Estrusore',
|
|
extruder: 'Estrusore',
|
|
@@ -4277,12 +4277,12 @@ export default {
|
|
|
description: 'Avvia automaticamente le stampe aggiunte alla coda. Se disattivato, le stampe attendono l\'avvio manuale.',
|
|
description: 'Avvia automaticamente le stampe aggiunte alla coda. Se disattivato, le stampe attendono l\'avvio manuale.',
|
|
|
},
|
|
},
|
|
|
queueForceColorMatch: {
|
|
queueForceColorMatch: {
|
|
|
- title: 'Force color match',
|
|
|
|
|
- description: 'Refuse to dispatch onto a printer that does not have the exact filament type and color loaded. Off by default — without this, the queue uses model-only matching and may pick a printer with the wrong color loaded.',
|
|
|
|
|
|
|
+ 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: {
|
|
tailscaleDisabled: {
|
|
|
title: 'Integrazione Tailscale',
|
|
title: 'Integrazione Tailscale',
|
|
|
- description: 'Enable to mark this VP as exposed over Tailscale. Shows the host\'s Tailscale address so you know which IP to paste into the slicer. The CA-import step is unchanged — this toggle has no effect on certificates.',
|
|
|
|
|
|
|
+ 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: {
|
|
setupRequired: {
|
|
|
title: 'Configurazione necessaria',
|
|
title: 'Configurazione necessaria',
|
|
@@ -4433,10 +4433,10 @@ export default {
|
|
|
linkedTo: 'Collegato a:',
|
|
linkedTo: 'Collegato a:',
|
|
|
monitorOnly: 'Solo monitoraggio',
|
|
monitorOnly: 'Solo monitoraggio',
|
|
|
alerts: 'Avvisi',
|
|
alerts: 'Avvisi',
|
|
|
- scheduleOn: 'On {{time}}',
|
|
|
|
|
- scheduleOff: 'Off {{time}}',
|
|
|
|
|
|
|
+ scheduleOn: 'Alle {{time}}',
|
|
|
|
|
+ scheduleOff: 'Spento {{time}}',
|
|
|
on: 'On',
|
|
on: 'On',
|
|
|
- off: 'Off',
|
|
|
|
|
|
|
+ off: 'Spento',
|
|
|
power: 'Potenza',
|
|
power: 'Potenza',
|
|
|
kwhToday: 'kWh Oggi',
|
|
kwhToday: 'kWh Oggi',
|
|
|
settings: 'Impostazioni',
|
|
settings: 'Impostazioni',
|
|
@@ -4453,7 +4453,7 @@ export default {
|
|
|
autoOffPersistentDescription: 'Resta attivo tra le stampe invece di una tantum',
|
|
autoOffPersistentDescription: 'Resta attivo tra le stampe invece di una tantum',
|
|
|
turnOffDelayMode: 'Modalità ritardo spegnimento',
|
|
turnOffDelayMode: 'Modalità ritardo spegnimento',
|
|
|
time: 'Tempo',
|
|
time: 'Tempo',
|
|
|
- temp: 'Temp',
|
|
|
|
|
|
|
+ temp: 'Temp.',
|
|
|
delayMinutes: 'Ritardo (minuti)',
|
|
delayMinutes: 'Ritardo (minuti)',
|
|
|
tempThreshold: 'Soglia temperatura (°C)',
|
|
tempThreshold: 'Soglia temperatura (°C)',
|
|
|
tempThresholdDescription: 'Si spegne quando l\'ugello si raffredda sotto questa temperatura',
|
|
tempThresholdDescription: 'Si spegne quando l\'ugello si raffredda sotto questa temperatura',
|
|
@@ -4525,7 +4525,7 @@ export default {
|
|
|
energyMonitoring: 'Monitoraggio energia',
|
|
energyMonitoring: 'Monitoraggio energia',
|
|
|
stateMonitoring: 'Monitoraggio stato',
|
|
stateMonitoring: 'Monitoraggio stato',
|
|
|
optional: 'opzionale',
|
|
optional: 'opzionale',
|
|
|
- topic: 'Topic',
|
|
|
|
|
|
|
+ topic: 'Argomento',
|
|
|
jsonPath: 'Percorso JSON',
|
|
jsonPath: 'Percorso JSON',
|
|
|
multiplier: 'Moltiplicatore',
|
|
multiplier: 'Moltiplicatore',
|
|
|
onValue: 'Valore ON',
|
|
onValue: 'Valore ON',
|
|
@@ -4533,32 +4533,32 @@ export default {
|
|
|
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.',
|
|
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).',
|
|
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
|
|
// REST smart plug
|
|
|
- restControl: 'Control',
|
|
|
|
|
- restOnUrl: 'Turn ON URL',
|
|
|
|
|
- restOffUrl: 'Turn OFF URL',
|
|
|
|
|
- restOnBody: 'ON Request Body',
|
|
|
|
|
- restOffBody: 'OFF Request Body',
|
|
|
|
|
- restMethod: 'HTTP Method',
|
|
|
|
|
|
|
+ restControl: 'Controllo',
|
|
|
|
|
+ restOnUrl: 'URL accensione',
|
|
|
|
|
+ restOffUrl: 'URL spegnimento',
|
|
|
|
|
+ restOnBody: 'Corpo richiesta ON',
|
|
|
|
|
+ restOffBody: 'Corpo richiesta OFF',
|
|
|
|
|
+ restMethod: 'Metodo HTTP',
|
|
|
restHeaders: 'Custom Headers (JSON)',
|
|
restHeaders: 'Custom Headers (JSON)',
|
|
|
- restStatusUrl: 'Status URL',
|
|
|
|
|
- restStatusPath: 'State JSON Path',
|
|
|
|
|
- restStatusOnValue: 'ON Value',
|
|
|
|
|
|
|
+ restStatusUrl: 'URL stato',
|
|
|
|
|
+ restStatusPath: 'Percorso JSON stato',
|
|
|
|
|
+ restStatusOnValue: 'Valore ON',
|
|
|
restPowerUrl: 'URL potenza',
|
|
restPowerUrl: 'URL potenza',
|
|
|
- restPowerPath: 'Power JSON Path',
|
|
|
|
|
|
|
+ restPowerPath: 'Percorso JSON potenza',
|
|
|
restPowerMultiplier: 'Moltiplicatore potenza',
|
|
restPowerMultiplier: 'Moltiplicatore potenza',
|
|
|
restEnergyUrl: 'URL energia',
|
|
restEnergyUrl: 'URL energia',
|
|
|
- restEnergyPath: 'Energy JSON Path',
|
|
|
|
|
|
|
+ restEnergyPath: 'Percorso JSON energia',
|
|
|
restEnergyMultiplier: 'Moltiplicatore energia',
|
|
restEnergyMultiplier: 'Moltiplicatore energia',
|
|
|
- restUrlRequired: 'At least one URL (ON or OFF) is required for REST plugs',
|
|
|
|
|
- restHeadersHint: 'e.g. {"Authorization": "Bearer your-token"}',
|
|
|
|
|
- restBodyHint: 'e.g. ON, {"state": "on"}',
|
|
|
|
|
- restStatusHint: 'URL to poll for current state',
|
|
|
|
|
- restPathHint: 'e.g. state or data.power.status',
|
|
|
|
|
|
|
+ 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)',
|
|
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)',
|
|
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).',
|
|
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: 'Test Connection',
|
|
|
|
|
- connectionSuccess: 'Connection successful',
|
|
|
|
|
|
|
+ testConnection: 'Testa connessione',
|
|
|
|
|
+ connectionSuccess: 'Connessione riuscita',
|
|
|
noSwitchesInSwitchbar: 'Nessun interruttore nella barra',
|
|
noSwitchesInSwitchbar: 'Nessun interruttore nella barra',
|
|
|
enableSwitchbarHint: 'Abilita "Mostra nella barra interruttori" in Impostazioni > Smart Plugs',
|
|
enableSwitchbarHint: 'Abilita "Mostra nella barra interruttori" in Impostazioni > Smart Plugs',
|
|
|
},
|
|
},
|
|
@@ -4571,7 +4571,7 @@ export default {
|
|
|
ntfy: 'ntfy',
|
|
ntfy: 'ntfy',
|
|
|
pushover: 'Pushover',
|
|
pushover: 'Pushover',
|
|
|
telegram: 'Telegram',
|
|
telegram: 'Telegram',
|
|
|
- email: 'Email',
|
|
|
|
|
|
|
+ email: 'E-mail',
|
|
|
discord: 'Discord',
|
|
discord: 'Discord',
|
|
|
webhook: 'Webhook',
|
|
webhook: 'Webhook',
|
|
|
homeassistant: 'Home Assistant',
|
|
homeassistant: 'Home Assistant',
|
|
@@ -4706,7 +4706,7 @@ export default {
|
|
|
eventPriority: {
|
|
eventPriority: {
|
|
|
sectionTitle: 'Priorità ntfy',
|
|
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.',
|
|
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',
|
|
|
|
|
|
|
+ min: 'Min.',
|
|
|
low: 'Bassa',
|
|
low: 'Bassa',
|
|
|
default: 'Predefinita',
|
|
default: 'Predefinita',
|
|
|
high: 'Alta',
|
|
high: 'Alta',
|
|
@@ -4995,7 +4995,7 @@ export default {
|
|
|
title: 'Configura Slot AMS',
|
|
title: 'Configura Slot AMS',
|
|
|
slotConfigured: 'Slot configurato!',
|
|
slotConfigured: 'Slot configurato!',
|
|
|
configuringSlot: 'Configurazione slot:',
|
|
configuringSlot: 'Configurazione slot:',
|
|
|
- slotLabel: '{{ams}} Slot {{slot}}',
|
|
|
|
|
|
|
+ slotLabel: '{{ams}} – Slot {{slot}}',
|
|
|
searchPresets: 'Cerca preset...',
|
|
searchPresets: 'Cerca preset...',
|
|
|
colorPlaceholder: 'Nome colore o hex (es. marrone, FF8800)',
|
|
colorPlaceholder: 'Nome colore o hex (es. marrone, FF8800)',
|
|
|
clearCustomColor: 'Cancella colore personalizzato',
|
|
clearCustomColor: 'Cancella colore personalizzato',
|
|
@@ -5017,7 +5017,7 @@ export default {
|
|
|
showLessColors: 'Mostra meno colori',
|
|
showLessColors: 'Mostra meno colori',
|
|
|
showMoreColors: 'Mostra più colori',
|
|
showMoreColors: 'Mostra più colori',
|
|
|
clear: 'Cancella',
|
|
clear: 'Cancella',
|
|
|
- hexLabel: 'Hex: #{{hex}}',
|
|
|
|
|
|
|
+ hexLabel: 'Hex – #{{hex}}',
|
|
|
resetting: 'Ripristino...',
|
|
resetting: 'Ripristino...',
|
|
|
resetSlot: 'Ripristina slot',
|
|
resetSlot: 'Ripristina slot',
|
|
|
cancel: 'Annulla',
|
|
cancel: 'Annulla',
|
|
@@ -5037,7 +5037,7 @@ export default {
|
|
|
// Email Settings
|
|
// Email Settings
|
|
|
emailSettings: {
|
|
emailSettings: {
|
|
|
placeholders: {
|
|
placeholders: {
|
|
|
- fromName: 'BamBuddy',
|
|
|
|
|
|
|
+ fromName: 'Bambuddy',
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
|
|
|
|
@@ -5210,7 +5210,7 @@ export default {
|
|
|
noUntagged: 'Nessuna bobina senza tag trovata',
|
|
noUntagged: 'Nessuna bobina senza tag trovata',
|
|
|
tagDetected: 'Tag rilevato',
|
|
tagDetected: 'Tag rilevato',
|
|
|
noTag: 'Nessun tag',
|
|
noTag: 'Nessun tag',
|
|
|
- tagId: 'Tag',
|
|
|
|
|
|
|
+ tagId: 'Etichetta',
|
|
|
grossWeight: 'Peso lordo',
|
|
grossWeight: 'Peso lordo',
|
|
|
spoolSize: 'Dimensione bobina',
|
|
spoolSize: 'Dimensione bobina',
|
|
|
close: 'Chiudi',
|
|
close: 'Chiudi',
|
|
@@ -5287,7 +5287,7 @@ export default {
|
|
|
nfcReader: 'Lettore NFC',
|
|
nfcReader: 'Lettore NFC',
|
|
|
type: 'Tipo',
|
|
type: 'Tipo',
|
|
|
connection: 'Connessione',
|
|
connection: 'Connessione',
|
|
|
- notConnected: 'N/A',
|
|
|
|
|
|
|
+ notConnected: 'N/D',
|
|
|
deviceInfo: 'Info dispositivo',
|
|
deviceInfo: 'Info dispositivo',
|
|
|
hostname: 'Host',
|
|
hostname: 'Host',
|
|
|
uptime: 'Tempo di attività',
|
|
uptime: 'Tempo di attività',
|
|
@@ -5404,7 +5404,7 @@ export default {
|
|
|
email: 'Email (opzionale)',
|
|
email: 'Email (opzionale)',
|
|
|
emailPlaceholder: 'tua@email.it',
|
|
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.',
|
|
emailPrivacy: 'Se fornita, la tua email sarà inclusa in una sezione compressa dell\'issue GitHub per permettere al manutentore di contattarti.',
|
|
|
- screenshot: 'Screenshot',
|
|
|
|
|
|
|
+ screenshot: 'Schermata',
|
|
|
uploadOrPaste: 'Carica, incolla o trascina un\'immagine',
|
|
uploadOrPaste: 'Carica, incolla o trascina un\'immagine',
|
|
|
dataCollectedSummary: 'Quali dati sono inclusi nel report?',
|
|
dataCollectedSummary: 'Quali dati sono inclusi nel report?',
|
|
|
dataIncluded: 'Inclusi:',
|
|
dataIncluded: 'Inclusi:',
|
|
@@ -5446,8 +5446,8 @@ export default {
|
|
|
actionPauseOff: 'Pausa e stacca corrente',
|
|
actionPauseOff: 'Pausa e stacca corrente',
|
|
|
pollInterval: 'Intervallo di controllo (secondi)',
|
|
pollInterval: 'Intervallo di controllo (secondi)',
|
|
|
pollIntervalHint: 'Frequenza di controllo di ogni stampante durante la stampa. Minimo 5s, massimo 120s.',
|
|
pollIntervalHint: 'Frequenza di controllo di ogni stampante durante la stampa. Minimo 5s, massimo 120s.',
|
|
|
- externalUrlMissing: 'External URL is not set.',
|
|
|
|
|
- externalUrlHint: 'The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.',
|
|
|
|
|
|
|
+ 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',
|
|
perPrinterTitle: 'Stampanti monitorate',
|
|
|
perPrinterHint: 'Scegli quali stampanti il servizio di rilevamento deve monitorare.',
|
|
perPrinterHint: 'Scegli quali stampanti il servizio di rilevamento deve monitorare.',
|
|
|
monitorAll: 'Monitora tutte le stampanti connesse',
|
|
monitorAll: 'Monitora tutte le stampanti connesse',
|
|
@@ -5480,8 +5480,8 @@ export default {
|
|
|
plateDefaultName: 'Piatto {{n}}',
|
|
plateDefaultName: 'Piatto {{n}}',
|
|
|
materialCount: '{{count}} filamenti',
|
|
materialCount: '{{count}} filamenti',
|
|
|
amsRequired: 'AMS richiesto',
|
|
amsRequired: 'AMS richiesto',
|
|
|
- slicedFor: 'Sliced for {{printer}}',
|
|
|
|
|
- alsoCompatible: 'Also marked compatible: {{printers}}',
|
|
|
|
|
|
|
+ slicedFor: 'Sezionato per {{printer}}',
|
|
|
|
|
+ alsoCompatible: 'Anche contrassegnato come compatibile: {{printers}}',
|
|
|
importToLibrary: 'Salva',
|
|
importToLibrary: 'Salva',
|
|
|
sliceIn: 'Salva e affetta in {{slicer}}',
|
|
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.',
|
|
disclaimer: 'L\'integrazione MakerWorld utilizza endpoint API documentati dalla community. Bambuddy non è affiliato né approvato da MakerWorld o Bambu Lab.',
|
|
@@ -5576,11 +5576,11 @@ export default {
|
|
|
ageLabel: 'Sposta i file più vecchi di',
|
|
ageLabel: 'Sposta i file più vecchi di',
|
|
|
days: 'giorni',
|
|
days: 'giorni',
|
|
|
includeNeverPrinted: 'Includi i file mai stampati',
|
|
includeNeverPrinted: 'Includi i file mai stampati',
|
|
|
- effectsTitle: 'What happens when you click Purge',
|
|
|
|
|
- effect1: 'Matching files are moved to Trash — they are not deleted from disk yet.',
|
|
|
|
|
- effect2: 'You can restore them from Trash at any time until the retention window expires.',
|
|
|
|
|
- effect3: 'After retention, the trash sweeper permanently removes them from disk.',
|
|
|
|
|
- effect4: 'Files in external (linked) folders are skipped — Bambuddy never deletes bytes it does not own.', previewLoading: 'Verifica quanti file corrispondono…',
|
|
|
|
|
|
|
+ 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.',
|
|
previewFailed: 'Impossibile mostrare l\'anteprima.',
|
|
|
previewSummary: '{{count}} file · {{size}} verrebbero spostati nel cestino',
|
|
previewSummary: '{{count}} file · {{size}} verrebbero spostati nel cestino',
|
|
|
andMore: '…e altri {{count}}',
|
|
andMore: '…e altri {{count}}',
|
|
@@ -5602,87 +5602,87 @@ export default {
|
|
|
saveFailed: 'Impossibile salvare le impostazioni di eliminazione automatica.',
|
|
saveFailed: 'Impossibile salvare le impostazioni di eliminazione automatica.',
|
|
|
},
|
|
},
|
|
|
archivePurge: {
|
|
archivePurge: {
|
|
|
- headerButton: 'Purge old',
|
|
|
|
|
- headerTooltip: 'Bulk-delete old archives',
|
|
|
|
|
- title: 'Purge old archives',
|
|
|
|
|
- description: 'Clear out old print history. Each archive is aged by its most recent print completion — reprinting an archive refreshes its age, so active work is never purged.',
|
|
|
|
|
- ageLabel: 'Delete archives not printed in the last',
|
|
|
|
|
- days: 'days',
|
|
|
|
|
- effectsTitle: 'What happens when you click Purge',
|
|
|
|
|
- effect1: 'Each matching archive is permanently removed from the database.',
|
|
|
|
|
- effect2: 'The 3MF, thumbnail, timelapse, source 3MF, F3D design file, and photo folder are all deleted from disk.',
|
|
|
|
|
- effect3: 'There is no trash bin for archives — deletion is immediate and cannot be undone.',
|
|
|
|
|
- effect4: 'Reprinting an archive refreshes its age clock, so archives you still use are safe.',
|
|
|
|
|
- previewLoading: 'Checking how many archives match…',
|
|
|
|
|
- previewFailed: 'Could not preview the purge.',
|
|
|
|
|
- previewSummary: '{{count}} archives · {{size}} would be deleted',
|
|
|
|
|
- andMore: '…and {{count}} more',
|
|
|
|
|
- warning: 'This is permanent. Download or favourite anything you want to keep before continuing.',
|
|
|
|
|
- confirmCta: 'Delete {{count}} archive(s)',
|
|
|
|
|
- purging: 'Deleting…',
|
|
|
|
|
|
|
+ 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 rimosso permanentemente dal database.',
|
|
|
|
|
+ effect2: 'Il 3MF, la miniatura, il timelapse, il 3MF sorgente, il file di progettazione F3D e la cartella foto vengono tutti eliminati dal disco.',
|
|
|
|
|
+ effect3: 'Non c\'è un cestino per gli archivi — l\'eliminazione è immediata e non può essere annullata.',
|
|
|
|
|
+ effect4: 'Ristampare un archivio azzera il suo conteggio dell\'età, quindi gli archivi attivi sono al sicuro.',
|
|
|
|
|
+ previewLoading: 'Verifica del numero di archivi corrispondenti…',
|
|
|
|
|
+ previewFailed: 'Impossibile visualizzare l\'anteprima della pulizia.',
|
|
|
|
|
+ previewSummary: '{{count}} archivi · {{size}} verrebbero eliminati',
|
|
|
|
|
+ andMore: '…e altri {{count}}',
|
|
|
|
|
+ warning: 'Questo è permanente. Scarica o aggiungi ai preferiti tutto ciò che vuoi conservare prima di continuare.',
|
|
|
|
|
+ confirmCta: 'Elimina {{count}} archivio(i)',
|
|
|
|
|
+ purging: 'Eliminazione…',
|
|
|
toast: {
|
|
toast: {
|
|
|
- success: 'Deleted {{count}} archive(s).',
|
|
|
|
|
- failed: 'Could not purge archives.',
|
|
|
|
|
|
|
+ success: '{{count}} archivio(i) eliminato.',
|
|
|
|
|
+ failed: 'Impossibile eliminare gli archivi.',
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
archiveAutoPurge: {
|
|
archiveAutoPurge: {
|
|
|
- enableLabel: 'Auto-purge old archives',
|
|
|
|
|
- enableDescription: 'Once per day, permanently deletes archives that have not been printed within the threshold. Reprinting an archive resets the clock. No trash bin — deletion is immediate.',
|
|
|
|
|
- ageLabel: 'Auto-delete archives not printed in the last',
|
|
|
|
|
- ageDescription: 'Minimum 7 days, maximum 10 years. Based on the most recent print completion — reprinting an archive refreshes its age. Deletes the archive, 3MF, thumbnail, timelapse, and photos.',
|
|
|
|
|
- days: 'days',
|
|
|
|
|
- runNow: 'Purge archives now',
|
|
|
|
|
- saveFailed: 'Could not save auto-purge settings.',
|
|
|
|
|
|
|
+ enableLabel: 'Elimina auto. vecchi archivi',
|
|
|
|
|
+ enableDescription: 'Una volta al giorno, elimina permanentemente gli archivi non stampati entro la soglia. Ristampare azzera il timer. Nessun cestino — eliminazione immediata.',
|
|
|
|
|
+ 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à. Elimina archivio, 3MF, miniatura, timelapse e foto.',
|
|
|
|
|
+ days: 'giorni',
|
|
|
|
|
+ runNow: 'Elimina archivi ora',
|
|
|
|
|
+ saveFailed: 'Impossibile salvare le impostazioni di pulizia automatica.',
|
|
|
},
|
|
},
|
|
|
cameraTokens: {
|
|
cameraTokens: {
|
|
|
- title: 'Camera API Tokens',
|
|
|
|
|
- navTitle: 'Camera API tokens',
|
|
|
|
|
|
|
+ title: 'Token API telecamera',
|
|
|
|
|
+ navTitle: 'Token API telecamera',
|
|
|
description:
|
|
description:
|
|
|
- 'Long-lived tokens for embedding the camera stream into Home Assistant, Frigate, kiosks, or any other tool that needs a stable URL. Each token is camera-stream-only and can be revoked at any time.',
|
|
|
|
|
- loading: 'Loading…',
|
|
|
|
|
|
|
+ '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: {
|
|
confirmRevoke: {
|
|
|
- title: 'Revoke this token?',
|
|
|
|
|
- body: 'Any device using "{{name}}" will lose access immediately. This cannot be undone.',
|
|
|
|
|
- cancel: 'Cancel',
|
|
|
|
|
- confirm: 'Revoke',
|
|
|
|
|
|
|
+ title: 'Revocare questo token?',
|
|
|
|
|
+ body: 'Qualsiasi dispositivo che usa "{{name}}" perderà l\'accesso immediatamente. Non può essere annullato.',
|
|
|
|
|
+ cancel: 'Annulla',
|
|
|
|
|
+ confirm: 'Revoca',
|
|
|
},
|
|
},
|
|
|
create: {
|
|
create: {
|
|
|
- title: 'Create new token',
|
|
|
|
|
- nameLabel: 'Token name',
|
|
|
|
|
- namePlaceholder: 'e.g. Home Assistant',
|
|
|
|
|
- daysLabel: 'Days until expiry',
|
|
|
|
|
- submit: 'Create',
|
|
|
|
|
|
|
+ title: 'Crea nuovo token',
|
|
|
|
|
+ nameLabel: 'Nome token',
|
|
|
|
|
+ namePlaceholder: 'es. Home Assistant',
|
|
|
|
|
+ daysLabel: 'Giorni alla scadenza',
|
|
|
|
|
+ submit: 'Crea',
|
|
|
hint:
|
|
hint:
|
|
|
- 'Maximum lifetime is 365 days. The token value is shown only once on creation — copy it now.',
|
|
|
|
|
|
|
+ 'Durata massima 365 giorni. Il valore del token viene mostrato solo alla creazione — copialo ora.',
|
|
|
},
|
|
},
|
|
|
created: {
|
|
created: {
|
|
|
- title: 'Token created — copy it now',
|
|
|
|
|
|
|
+ title: 'Token creato – copialo ora',
|
|
|
warning:
|
|
warning:
|
|
|
- 'This is the only time this token will be visible. After you close this dialog you can never view it again.',
|
|
|
|
|
- copy: 'Copy',
|
|
|
|
|
- dismiss: "I've saved it",
|
|
|
|
|
|
|
+ '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: {
|
|
list: {
|
|
|
- myTitle: 'My tokens',
|
|
|
|
|
- allTitle: 'All users (admin view)',
|
|
|
|
|
- empty: 'No tokens yet.',
|
|
|
|
|
- name: 'Name',
|
|
|
|
|
- owner: 'Owner',
|
|
|
|
|
- prefix: 'Prefix',
|
|
|
|
|
- created: 'Created',
|
|
|
|
|
- expires: 'Expires',
|
|
|
|
|
- lastUsed: 'Last used',
|
|
|
|
|
- revoke: 'Revoke',
|
|
|
|
|
- expired: 'Expired',
|
|
|
|
|
|
|
+ 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: {
|
|
toast: {
|
|
|
- created: 'Token created',
|
|
|
|
|
- createFailed: 'Failed to create token',
|
|
|
|
|
- revoked: 'Token revoked',
|
|
|
|
|
- revokeFailed: 'Failed to revoke token',
|
|
|
|
|
- loadFailed: 'Failed to load tokens',
|
|
|
|
|
- copied: 'Copied to clipboard',
|
|
|
|
|
- copyFailed: 'Copy failed — select and copy manually',
|
|
|
|
|
|
|
+ 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',
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
|
|
|