mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-09-14 18:56:52 +00:00
overhaul app tracking and update orchestration
- Generate and ship a verified 389-app tracking catalog with 23 runtime overrides, fallback detectors, ports, logos, and Docker Hub tag previews. - Support modern Proxmox VE Helper-Scripts markers, historical installations, and official or manual app deployments. - Rework the LXC App and Updates tabs with cached suggestions, explicit discovery, version tracking, web links, custom updaters, and complete i18n. - Add independent OS, app, Docker Engine, Docker image, bulk, and scheduled update targets. - Add digest-based Docker inventory, Compose dependency grouping, safe standalone-container recreation with rollback, and package-scoped Docker Engine updates. - Refresh per-LXC caches after lifecycle and update tasks, then emit idempotent notifications based on the verified final state. - Harden Coral USB recovery by removing orphaned gasket DKMS registrations and validating that dpkg is healthy before reporting success.
This commit is contained in:
@@ -1163,7 +1163,15 @@
|
||||
"targetBoth": "Sistema operativo + applicazione",
|
||||
"lastRun": "Ultima esecuzione: {date}",
|
||||
"runSuccess": "✓ successo",
|
||||
"runPartial": "completato parzialmente",
|
||||
"runFailed": "✗ fallito",
|
||||
"runDeferred": "rinviato per sicurezza",
|
||||
"runSkipped": "nulla in sospeso",
|
||||
"releaseDelaySummary": "attesa di {days} giorno/i",
|
||||
"releaseDelayLabel": "Attendi dopo una nuova versione dell’app",
|
||||
"releaseDelayNone": "Nessun periodo di attesa",
|
||||
"releaseDelayDays": "Attendi {days} giorno/i",
|
||||
"releaseDelayHelp": "Si applica solo alle app selezionate con monitoraggio della versione. Le versioni in sospeso devono avere questa età; le app senza monitoraggio eseguono l’aggiornamento a ogni pianificazione.",
|
||||
"notScheduled": "Non programmato",
|
||||
"frequency": "Frequenza",
|
||||
"cronExpression": "Espressione cron",
|
||||
@@ -1172,6 +1180,11 @@
|
||||
"targetOptionOs": "Solo pacchetti del sistema operativo",
|
||||
"targetOptionApp": "Solo applicazione",
|
||||
"targetOptionBoth": "Sistema operativo + applicazione",
|
||||
"dockerComposeTarget": "Docker Compose · {project}",
|
||||
"dockerContainerTarget": "Container Docker · {container}",
|
||||
"dockerEngineTarget": "Motore Docker",
|
||||
"noTargets": "Nessun obiettivo selezionato",
|
||||
"selectAtLeastOne": "Seleziona almeno un obiettivo di aggiornamento.",
|
||||
"deleteButton": "Elimina pianificazione",
|
||||
"deleteConfirm": "Rimuovere gli aggiornamenti pianificati per questo contenitore? Le impostazioni predefinite di applicazione (backup + riavvio) vengono mantenute."
|
||||
},
|
||||
@@ -1217,7 +1230,7 @@
|
||||
"osPlusApp": "Sistema operativo + {appName} aggiornamenti",
|
||||
"osPlusApps": "Aggiornamenti del sistema operativo e delle app",
|
||||
"noUpdateMethodTitle": "Nessun metodo di aggiornamento disponibile",
|
||||
"noUpdateMethodBody": "Nessun metodo di aggiornamento disponibile. Aggiorna dall'app stessa o imposta un comando personalizzato nella scheda App.",
|
||||
"noUpdateMethodBody": "Non è stato identificato alcun metodo di aggiornamento per questa applicazione. Aggiungi un comando di aggiornamento personalizzato.",
|
||||
"ociImmutableTitle": "Contenitore di immagini OCI",
|
||||
"ociImmutableBody": "I pacchetti del sistema operativo vengono integrati in fase di creazione dell'immagine e non possono essere aggiornati sul posto. Applica gli aggiornamenti manualmente o reinstallali con un'immagine più recente.",
|
||||
"hideNoticeButton": "Nascondi questo avviso per questa app",
|
||||
@@ -1230,6 +1243,7 @@
|
||||
"applicationDefaultName": "Applicazione",
|
||||
"installedLabel": "installato",
|
||||
"upToDateAtLabel": "Aggiornato a",
|
||||
"versionLabel": "versione {version}",
|
||||
"versionTrackingPending": "Monitoraggio versioni in attesa: il prossimo controllo pianificato mostrerà la versione installata e quella disponibile.",
|
||||
"customCommandTitle": "Comando di aggiornamento personalizzato",
|
||||
"customCommandBody": "Esegui un comando shell definito dall'utente per aggiornare questa app all'interno del contenitore.",
|
||||
@@ -1238,6 +1252,7 @@
|
||||
"hideNoticeAction": "Nascondi questo avviso per {appName}",
|
||||
"detectedByPrefix": "Rilevato da",
|
||||
"editApp": "Modificare",
|
||||
"configureUpdater": "Configura",
|
||||
"alsoDetectedTitle": "Rilevato anche in questo contenitore:",
|
||||
"detectedInline": "· rilevato da {method}",
|
||||
"customCommandLabel": "Comando di aggiornamento personalizzato",
|
||||
@@ -1245,9 +1260,9 @@
|
||||
"removeButton": "Rimuovere",
|
||||
"cancelButton": "Cancellare",
|
||||
"saveButton": "Salva",
|
||||
"editCommandButton": "Modifica comando",
|
||||
"wireUpCommandButton": "Aggiungi comando di aggiornamento personalizzato",
|
||||
"versionTrackingPendingShort": "Monitoraggio della versione in sospeso.",
|
||||
"versionTrackingNotConfigured": "Il monitoraggio della versione non è configurato.",
|
||||
"managedByOsPackages": "Questa applicazione viene aggiornata tramite l’azione dei pacchetti del sistema operativo.",
|
||||
"noMethodBody": "Nessun metodo di aggiornamento disponibile. Aggiorna dall'app stessa o collega un comando personalizzato che ProxMenux eseguirà all'interno del contenitore.",
|
||||
"noMethodHideBody": "Per questa app non è registrato alcun metodo di aggiornamento. Impostane uno dalla scheda App o ignora questo avviso.",
|
||||
"hideForApp": "Nascondi avviso per {appName}",
|
||||
@@ -1266,15 +1281,59 @@
|
||||
"noManagedUpdateInfo": "Nessuna informazione di aggiornamento ancora: controlla da Sicurezza → Secure Gateway.",
|
||||
"ociTitle": "Contenitore di immagini OCI",
|
||||
"ociBody": "Questo contenitore è stato creato da un'immagine OCI (Docker). La gestione degli aggiornamenti per i contenitori OCI arriverà con la prossima funzionalità di installazione OCI: gli aggiornamenti ricostruiranno il contenitore da un tag immagine più recente anziché applicare patch ai pacchetti all'interno.",
|
||||
"helperNotUpdateable": "Il registro degli script della community contrassegna questa app come non aggiornabile.",
|
||||
"helperDetectedTitle": "Rilevato un aggiornamento degli script helper",
|
||||
"helperDetectedBody": "L'applicazione manuale è più sicura.",
|
||||
"dockerImagesTitle": "Immagini Docker",
|
||||
"dockerAppTitle": "Docker",
|
||||
"dockerImagesSubheading": "Immagini",
|
||||
"dockerImagesReadOnly": "I tag vengono confrontati tramite digest del registro. I servizi Compose possono scaricare l’immagine ed essere ricreati dal progetto dichiarato.",
|
||||
"dockerEngineManagedByOs": "Docker Engine {version} è gestito dai pacchetti e viene aggiornato dall’azione dei pacchetti del sistema operativo qui sopra.",
|
||||
"dockerEngineSubheading": "Motore",
|
||||
"dockerEngineDetected": "Docker Engine {version} rilevato",
|
||||
"dockerEngineUpdateHelp": "Aggiorna solo i pacchetti Docker installati e le dipendenze necessarie. Non aggiorna altri pacchetti del sistema operativo né ricrea i container.",
|
||||
"updateDockerEngineOnly": "Aggiorna Docker Engine",
|
||||
"adguardWebUpdateOnly": "Questa installazione di AdGuard Home si aggiorna dalla propria interfaccia web.",
|
||||
"openAdguard": "Apri AdGuard Home",
|
||||
"updateDockerImage": "Aggiorna immagine",
|
||||
"recreateStandaloneContainer": "Aggiorna {container}",
|
||||
"standaloneRecreatePending": "I container indipendenti richiedono una ricreazione protetta: {names}",
|
||||
"noDockerImages": "Docker è installato, ma non sono state trovate immagini con tag.",
|
||||
"dockerInventoryStarting": "In attesa che Docker completi l’avvio…",
|
||||
"dockerInventoryUnavailable": "Non è stato possibile leggere l’inventario Docker. Controlla di nuovo quando Docker è disponibile.",
|
||||
"usedByContainers": "Usata da: {names}",
|
||||
"imageUpdateAvailable": "Nuova immagine disponibile",
|
||||
"imageUpToDate": "Aggiornata",
|
||||
"imageInstalledTag": "tag installato",
|
||||
"imageDigestUnknown": "Digest non disponibile",
|
||||
"dockerPendingSummary": "Rilevati {count} aggiornamenti di immagini Docker. Usa il relativo flusso Docker o Compose.",
|
||||
"postApplyChecking": "Verifica del risultato dell'aggiornamento…",
|
||||
"postApplyAllOk": "pacchetto/i {count} applicato correttamente: nulla in sospeso.",
|
||||
"postApplyNothingPending": "nulla in sospeso: tutto è aggiornato.",
|
||||
"postApplyPartial": "{pending} pacchetto/i ancora in sospeso dopo l'esecuzione.",
|
||||
"postApplyPartialSubline": "{applied} applicato.Alcuni aggiornamenti non sono stati completati: esamina l'output del terminale sopra."
|
||||
},
|
||||
"bulkUpdate": {
|
||||
"title": "Aggiornamento in blocco",
|
||||
"description": "Configura una sola azione per aggiornare il sistema operativo e i metodi selezionati in questo container.",
|
||||
"loading": "Caricamento configurazione…",
|
||||
"notConfigured": "Non configurato.",
|
||||
"configure": "Configura",
|
||||
"edit": "Modifica",
|
||||
"apply": "Applica aggiornamenti",
|
||||
"osTarget": "Sistema operativo",
|
||||
"osRequired": "Obbligatorio per un aggiornamento in blocco.",
|
||||
"includesDependencies": "Include anche le dipendenze dichiarate: {names}",
|
||||
"noMethod": "Non è disponibile alcun metodo di aggiornamento eseguibile.",
|
||||
"staleTarget": "Questa selezione non è più disponibile. Rimuovila prima di salvare.",
|
||||
"dockerInventoryPending": "In attesa dell’inventario delle immagini Docker…",
|
||||
"missingDockerTarget": "Immagine Docker non disponibile",
|
||||
"selectAtLeastOne": "Seleziona almeno una destinazione di aggiornamento oltre al sistema operativo.",
|
||||
"cancel": "Annulla",
|
||||
"save": "Salva",
|
||||
"delete": "Rimuovi configurazione",
|
||||
"deleteConfirm": "Rimuovere questa configurazione di aggiornamento in blocco?",
|
||||
"saveFailed": "Impossibile salvare la configurazione di aggiornamento in blocco.",
|
||||
"deleteFailed": "Impossibile rimuovere la configurazione di aggiornamento in blocco.",
|
||||
"planFailed": "Impossibile preparare l’aggiornamento in blocco. Controlla i metodi non disponibili."
|
||||
},
|
||||
"appEditor": {
|
||||
"closePanel": "Chiudi pannello",
|
||||
"cancelButton": "Cancellare",
|
||||
@@ -1284,6 +1343,17 @@
|
||||
"hiddenBadge": "Attualmente nascosto: riapparirà nell'elenco di rilevamento",
|
||||
"registerDifferent": "Registra un'altra app",
|
||||
"detectedInContainer": "Rilevato su questo contenitore",
|
||||
"versionDetected": "Versione {version} rilevata in questo container",
|
||||
"legacyDetectorUsed": "Rilevata con un fallback di compatibilità legacy",
|
||||
"dockerImagesTitle": "Aggiornamenti immagini Docker",
|
||||
"dockerImagesHelp": "Controlla ogni immagine locale separatamente dal motore Docker confrontando i digest immutabili del registro.",
|
||||
"refreshDockerImages": "Controlla ora",
|
||||
"noDockerImages": "Nessuna immagine Docker con tag trovata",
|
||||
"usedByContainers": "Usata da: {names}",
|
||||
"imageUpdateAvailable": "Nuova immagine disponibile",
|
||||
"imageUpToDate": "Aggiornata",
|
||||
"imageDigestUnknown": "Digest non disponibile",
|
||||
"dockerReadOnlyNote": "Controllo in sola lettura: nessuna immagine viene scaricata e nessun container viene riavviato.",
|
||||
"installedManaged": "Installato e gestito da ProxMenux",
|
||||
"nameLabel": "Nome",
|
||||
"installedViaLabel": "Installato tramite",
|
||||
@@ -1340,6 +1410,17 @@
|
||||
"jsonPathPlaceholder": "ad esempio, data.version o releases[0].tag_name",
|
||||
"dockerImageLabel": "Immagine dell'hub Docker",
|
||||
"dockerImagePlaceholder": "ad esempio, linuxserver/plex o nginx",
|
||||
"dockerVersionedTagsHelp": "Usa questa opzione solo per tag con versione. Per latest, stable o lts usa gli aggiornamenti immagini Docker basati sul digest.",
|
||||
"dockerPresetSemver": "Solo SemVer",
|
||||
"dockerPresetSemverSuffix": "SemVer + suffisso",
|
||||
"dockerTagFilterHelp": "Filtra i tag reali prima che ProxMenux scelga la versione più alta.",
|
||||
"dockerTagPreviewLabel": "Anteprima tag reali",
|
||||
"dockerTagPreviewCount": "{matched} corrispondenze su {scanned}",
|
||||
"dockerTagPreviewLoading": "Controllo di Docker Hub…",
|
||||
"dockerTagPreviewFailed": "Impossibile mostrare i tag di Docker Hub",
|
||||
"dockerTagPreviewEmpty": "Nessun tag reale corrisponde a questo filtro.",
|
||||
"dockerMovingTag": "tag mobile",
|
||||
"dockerMovingTagHelp": "I tag mobili non contengono una versione. Tracciali tramite digest negli aggiornamenti immagini Docker.",
|
||||
"tagRegexLabel": "Tag regex (con gruppo di acquisizione)",
|
||||
"tagRegexPlaceholder": "ad esempio, v?(\\d+\\.\\d+\\.\\d+)",
|
||||
"tagRegexBare": "v?(\\d+\\.\\d+\\.\\d+)",
|
||||
@@ -1372,7 +1453,14 @@
|
||||
"registerCustom": "Registra un'app personalizzata",
|
||||
"noAppsTitle": "Nessuna domanda registrata",
|
||||
"noAppsBody": "Registra le applicazioni in esecuzione nel contenitore per ottenere collegamenti web e, facoltativamente, il monitoraggio delle versioni disponibili con notifiche delle nuove release.",
|
||||
"registerApplication": "Registra l'applicazione",
|
||||
"registerApplication": "Registra applicazione",
|
||||
"searchApplications": "Cerca applicazioni",
|
||||
"searchingApplications": "Ricerca applicazioni…",
|
||||
"noApplicationsDetected": "Nessuna applicazione rilevata.",
|
||||
"noNewApplicationsDetected": "Nessuna nuova applicazione rilevata.",
|
||||
"oneNewApplicationDetected": "Rilevata una nuova applicazione.",
|
||||
"newApplicationsDetected": "Rilevate {count} nuove applicazioni.",
|
||||
"detectionFailed": "Rilevamento delle applicazioni non riuscito",
|
||||
"hiddenSuffix": "{count} nascosto",
|
||||
"confirmHide": "Nascondere permanentemente il rilevamento \"{name}\" su questo contenitore?\n\nPer ripristinarlo in un secondo momento, fai clic su \"Registra un'altra app\": l'elenco nascosto viene visualizzato lì con un'opzione di ripristino.",
|
||||
"saveFailed": "Salvataggio non riuscito",
|
||||
@@ -1383,6 +1471,13 @@
|
||||
"binaryArgsHintGrafana": "Grafana ha bisogno",
|
||||
"loadFailed": "Impossibile caricare la configurazione dell'app",
|
||||
"checkFailed": "Controllo fallito",
|
||||
"testDetectorButton": "Prova rilevatore",
|
||||
"testingDetectorButton": "Prova del rilevatore…",
|
||||
"detectorTestTitle": "Risultato della prova del rilevatore",
|
||||
"detectorTestNotSaved": "Solo bozza · non salvata",
|
||||
"detectorTestNoVersion": "Nessuna versione rilevata",
|
||||
"detectorTestNoUpstream": "Nessuna fonte upstream configurata",
|
||||
"detectorTestFailed": "Prova del rilevatore non riuscita",
|
||||
"deleteFailed": "Eliminazione non riuscita",
|
||||
"dismissFailed": "Impossibile ignorare il rilevamento",
|
||||
"restoreFailed": "Impossibile ripristinare il rilevamento",
|
||||
@@ -1399,6 +1494,10 @@
|
||||
"webLinks": "Collegamenti Web",
|
||||
"addPort": "Aggiungi porto",
|
||||
"detectedPorts": "Porte rilevate nel contenitore: fai clic per aggiungere:",
|
||||
"dockerPublishedServicesTitle": "Servizi Docker con porte pubblicate",
|
||||
"dockerPublishedServicesHelp": "Seleziona solo le porte che forniscono un’interfaccia web. ProxMenux non registra questi container come applicazioni LXC indipendenti.",
|
||||
"dockerPublishedAdd": "Aggiungi link",
|
||||
"dockerPublishedPort": "porta {containerPort} del container → {hostPort} nell’LXC",
|
||||
"noWebPorts": "Nessuna porta web in ascolto. Utilizza Aggiungi porta se desideri comunque creare un collegamento manualmente.",
|
||||
"trackUpstream": "Monitora la versione disponibile (facoltativo)",
|
||||
"trackOff": "Disattivato: solo collegamento",
|
||||
@@ -1416,7 +1515,7 @@
|
||||
"checkButton": "Controllo",
|
||||
"editFieldsButton": "Modifica campi",
|
||||
"alsoDetectedContainer": "Rilevato anche su questo contenitore",
|
||||
"addAnotherApplication": "Aggiungi un'altra applicazione",
|
||||
"addAnotherApplication": "Registra un'altra applicazione",
|
||||
"doneButton": "Fatto",
|
||||
"editButton": "Modificare",
|
||||
"upstreamErrorTimeout": "timeout della rete durante il contatto a monte",
|
||||
|
||||
Reference in New Issue
Block a user