Improve LXC updater selection, error handling and dashboard consistency

This commit is contained in:
MacRimi
2026-09-05 16:10:31 +02:00
parent 4f38d0e2e7
commit 6644b62f63
33 changed files with 5660 additions and 660 deletions
+171 -2
View File
@@ -45,7 +45,8 @@
"profile": "Profil",
"node": "Knoten",
"admin": "Admin",
"menu": "Navigationsmenü"
"menu": "Navigationsmenü",
"audit": "Audit & Report"
},
"status": {
"healthy": "Gesund",
@@ -72,6 +73,8 @@
"networkErrorWhileSaving": "Netzwerkfehler beim Speichern"
},
"overview": {
"metricsTimeout": "Die Metrikabfrage hat länger als 30 Sekunden gedauert. ProxMenux versucht es automatisch erneut.",
"metricsCachedWarning": "Die Metriken konnten nicht aktualisiert werden. Angezeigt werden die am {time} abgerufenen Daten.",
"loadingTitle": "Systemübersicht wird geladen...",
"loadingDescription": "Systemstatus und -metriken abrufen",
"topProcessesCpu": "Top-Prozesse nach CPU anzeigen",
@@ -1217,7 +1220,15 @@
"humanWeekly": "Wöchentlich ({day} {time})",
"humanMonthly": "Monatlich (Tag {day} um {time})",
"humanHourly": "Stündlich",
"weekdays": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
"weekdays": [
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag"
]
},
"cronChip": {
"detected": "Host-Cron erkannt",
@@ -1244,6 +1255,35 @@
"osStatusUnavailable": "Der Status der Betriebssystemaktualisierungen konnte nicht ermittelt werden.",
"installedByHelperPrefix": "Installiert von",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "Wenn du diesen Aufruf bearbeitest, wird er als benutzerdefinierter Befehl gespeichert.",
"customOnlineDescription": "Oder verwende ein vom Entwickler bereitgestelltes Online-Skript:",
"customOnlineExampleNote": "Ersetze die Beispiel-URL durch die URL des offiziellen Skripts deiner Anwendung.",
"customExamplesHeading": "Beispiele zum Anpassen:",
"updaterChoiceHint": "Wähle eine Aktualisierungsmethode und speichere sie.",
"updaterMethodLabel": "Aktualisierungsmethode",
"helperMethod": "Helper-Scripts",
"customMethod": "Eigener Befehl",
"helperMethodHelp": "Über Helper-Scripts",
"customMethodHelp": "Über eigene Befehle",
"helperDetectedChoice": "Helper-Scripts-Updater für diese Anwendung erkannt.",
"helperUnavailableChoice": "Der ausgewählte Helper-Scripts-Updater ist nicht mehr verfügbar.",
"disableUpdater": "Deaktivieren",
"disableUpdaterConfirm": "Aktualisierungsmethode für {name} deaktivieren? Gespeicherte Pläne und Zeitpläne behalten ihre Auswahl, führen diese Anwendung aber erst wieder aus, wenn eine Methode konfiguriert ist.",
"noUpdaterSelected": "Du hast keine Aktualisierungsmethode ausgewählt.",
"helperMethodDescription": "ProxMenux führt den erkannten Updater in diesem LXC aus und zeigt dessen Protokoll und Ergebnis. Der Updater wird von Proxmox VE Helper-Scripts gepflegt.",
"customMethodDescription": "Du kannst den Updater der Anwendung, einen Paketmanager oder eine neue Binärdatei verwenden. Der Befehl wird in diesem LXC mit Administratorrechten ausgeführt.",
"updaterInstructions": "Lies die Hinweise des Updaters.",
"helperDocumentation": "Aktualisierungsdokumentation",
"helperSource": "Anwendungsskript",
"customMethodExample": "Passe Namen, Pfade und Dienst an deine Anwendung an. Nur der gespeicherte Befehl wird ausgeführt.",
"helperCommandLabel": "Befehl innerhalb des LXC",
"helperCommandFallback": "Wenn wget nicht verfügbar ist, lädt ProxMenux dasselbe Skript mit curl -fsSL herunter.",
"customScriptTitle": "Aktualisierungsskript",
"customScriptDescription": "Führe ein bereits im LXC vorhandenes Aktualisierungsskript der Anwendung aus.",
"customPackageTitle": "Debian/Ubuntu-Paket",
"customPackageDescription": "Ersetze my-package durch das Paket, das du aktualisieren möchtest.",
"customBinaryTitle": "Binärdatei",
"customBinaryDescription": "Lade zuerst die offizielle Binärdatei für die richtige Version und Architektur nach /tmp/my-app.new herunter und überprüfe sie. Dieses Beispiel sichert die bisherige Binärdatei und startet den zugehörigen Dienst neu.",
"helperUpdatesRun": "Installiert von Proxmox Helper-Scripts.",
"installedPrefix": "installiert",
"upstreamAvailable": "Version {version} verfügbar",
@@ -4868,5 +4908,134 @@
"customLinkDelete": "Delete",
"customLinkSaveError": "Save failed",
"customLinkDeleteError": "Delete failed"
},
"audit": {
"title": "Audit & Report",
"loading": "Loading assessment…",
"run": "Run assessment",
"running": "Assessing…",
"neverRun": "This host has not been assessed yet.",
"lastRun": "Last assessed on {when}",
"stale": "{days} days ago",
"readOnlyNotice": "The assessment only reads the host. It makes no changes.",
"noFindings": "No findings match the current filter.",
"showPassing": "Show passing checks",
"hidePassing": "Hide passing checks",
"affectedCount": "{count} affected",
"acceptedNotice": "{count} accepted risk(s) recorded on this host.",
"states": {
"fail": "Failed",
"warn": "Warning",
"accepted": "Accepted risk",
"pass": "Passed",
"not_applicable": "Not applicable"
},
"areas": {
"all": "All",
"system": "System",
"storage": "Storage",
"network": "Network",
"security": "Security",
"backup": "Backup",
"guests": "Guests",
"hardware": "Hardware"
},
"detail": {
"why": "Context",
"evidence": "Evidence",
"affected": "Affected",
"acceptedRisk": "Accepted risk"
},
"errors": {
"runFailed": "The assessment could not be started."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Backup coverage",
"rationale": "Compares the guest inventory against what each backup job selects. A job selects by VMID list, by pool, or with `all 1`, minus its `exclude` list. Jobs carrying `enabled 0` are not considered.",
"summary": {
"noJobs": "No backup job is defined on this node",
"covered": "All {total} guests are covered by a backup job",
"uncovered": "{count} of {total} guests are not covered by any enabled backup job"
}
}
},
"system": {
"pending_reboot": {
"title": "Restart state",
"rationale": "Checks for `/var/run/reboot-required` and, when present, the packages listed in `/var/run/reboot-required.pkgs`. Also reports the running kernel.",
"summary": {
"none": "No restart is pending",
"pending": "The host has a pending restart"
}
},
"enterprise_repo_without_subscription": {
"title": "Enterprise repository",
"rationale": "Looks for references to `enterprise.proxmox.com` in `/etc/apt/sources.list` and `sources.list.d`, and contrasts the result with the status returned by `pvesubscription get`.",
"summary": {
"notEnabled": "The enterprise repository is not enabled",
"subscribed": "The enterprise repository is backed by a subscription",
"unsubscribed": "The enterprise repository is enabled without an active subscription"
}
}
},
"guests": {
"privileged_containers": {
"title": "Container privileges",
"rationale": "Reviews each container configuration. Proxmox marks unprivileged containers with `unprivileged: 1`; its absence indicates a privileged container, which shares the host user namespace.",
"summary": {
"allUnprivileged": "All {total} containers are unprivileged",
"privileged": "{count} of {total} containers run privileged"
}
},
"qemu_without_agent": {
"title": "Guest agent on virtual machines",
"rationale": "Reviews each virtual machine configuration for `agent: 1`. The guest agent enables ordered shutdown, filesystem quiescing for snapshots and real disk usage reporting.",
"summary": {
"allHaveAgent": "All {total} virtual machines declare the guest agent",
"missingAgent": "{count} of {total} virtual machines do not declare the guest agent"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Firewall state",
"rationale": "Checks `enable: 1` in `/etc/pve/firewall/cluster.fw` and in the node's `host.fw`. Proxmox applies node rules only while the datacenter switch is on.",
"summary": {
"bothEnabled": "The firewall is enabled at datacenter and node level",
"datacenterOff": "The firewall is disabled at datacenter level, so node rules are not applied",
"nodeOff": "The firewall is enabled at datacenter level but not on this node"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Volume assignment",
"rationale": "Compares the volumes returned by `pvesm list` against the existing guest configurations. Only non-shared storage is examined: on shared storage a volume may belong to a guest running on another node.",
"summary": {
"none": "No orphaned volumes were found",
"found": "{count} volume(s) belong to no existing guest"
}
}
}
},
"summaryFallback": "The check could not be evaluated",
"acceptRisk": {
"action": "Accept risk",
"revoke": "Return to active",
"title": "Accept this risk",
"reasonLabel": "Reason",
"reasonHelp": "Required. It is recorded together with the author and the date.",
"reasonPlaceholder": "e.g. Lab containers, not covered on purpose",
"expiryLabel": "Review after",
"expiryHelp": "When the period ends the finding becomes active again.",
"expiryNever": "Does not expire",
"expiry90": "90 days",
"expiry180": "180 days",
"expiry365": "1 year",
"cancel": "Cancel",
"confirm": "Accept risk"
}
}
}
+162 -1
View File
@@ -44,7 +44,8 @@
"profile": "Profile",
"node": "Node",
"admin": "Admin",
"menu": "Navigation Menu"
"menu": "Navigation Menu",
"audit": "Audit & Report"
},
"status": {
"healthy": "Healthy",
@@ -71,6 +72,8 @@
"networkErrorWhileSaving": "Network error while saving"
},
"overview": {
"metricsTimeout": "The metrics query exceeded 30 seconds. ProxMenux will retry automatically.",
"metricsCachedWarning": "Could not refresh metrics. Showing data retrieved at {time}.",
"loadingTitle": "Loading system overview...",
"loadingDescription": "Fetching system status and metrics",
"topProcessesCpu": "View top processes by CPU",
@@ -1273,6 +1276,35 @@
"osStatusUnavailable": "The OS update status could not be determined.",
"installedByHelperPrefix": "Installed by",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "If you edit this launcher, it will be saved as a custom command.",
"customOnlineDescription": "Or use an online script provided by the developer:",
"customOnlineExampleNote": "Replace the example URL with the official script URL for your application.",
"customExamplesHeading": "Examples to adapt:",
"updaterChoiceHint": "Choose and save an update method.",
"updaterMethodLabel": "Update method",
"helperMethod": "Helper-Scripts",
"customMethod": "Custom command",
"helperMethodHelp": "About Helper-Scripts",
"customMethodHelp": "About custom commands",
"helperDetectedChoice": "Helper-Scripts updater detected for this application.",
"helperUnavailableChoice": "The selected Helper-Scripts updater is no longer available.",
"disableUpdater": "Disable",
"disableUpdaterConfirm": "Disable the update method for {name}? Saved plans and schedules will keep their selections, but this application will not run until a method is configured again.",
"noUpdaterSelected": "You have not selected an update method.",
"helperMethodDescription": "ProxMenux runs the detected updater inside this LXC and displays its log and result. The updater is maintained by Proxmox VE Helper-Scripts.",
"customMethodDescription": "You can use the application's own updater, a package manager or a new binary. The command runs inside this LXC with administrator privileges.",
"updaterInstructions": "Review the updater's instructions.",
"helperDocumentation": "Update documentation",
"helperSource": "Application script",
"customMethodExample": "Adapt the names, paths and service to your application. Only the command you save will run.",
"helperCommandLabel": "Command inside the LXC",
"helperCommandFallback": "If wget is unavailable, ProxMenux uses curl -fsSL to download the same script.",
"customScriptTitle": "Update script",
"customScriptDescription": "Run an existing application update script inside the LXC.",
"customPackageTitle": "Debian/Ubuntu package",
"customPackageDescription": "Replace my-package with the package you want to update.",
"customBinaryTitle": "Binary",
"customBinaryDescription": "First download and verify the official binary for the correct version and architecture at /tmp/my-app.new. This example keeps a backup of the previous binary and restarts its service.",
"helperUpdatesRun": "Installed by Proxmox Helper-Scripts.",
"installedPrefix": "installed",
"upstreamAvailable": "upstream {version} available",
@@ -4942,5 +4974,134 @@
"customLinkDelete": "Delete",
"customLinkSaveError": "Save failed",
"customLinkDeleteError": "Delete failed"
},
"audit": {
"title": "Audit & Report",
"loading": "Loading assessment…",
"run": "Run assessment",
"running": "Assessing…",
"neverRun": "This host has not been assessed yet.",
"lastRun": "Last assessed on {when}",
"stale": "{days} days ago",
"readOnlyNotice": "The assessment only reads the host. It makes no changes.",
"noFindings": "No findings match the current filter.",
"showPassing": "Show passing checks",
"hidePassing": "Hide passing checks",
"affectedCount": "{count} affected",
"acceptedNotice": "{count} accepted risk(s) recorded on this host.",
"states": {
"fail": "Failed",
"warn": "Warning",
"accepted": "Accepted risk",
"pass": "Passed",
"not_applicable": "Not applicable"
},
"areas": {
"all": "All",
"system": "System",
"storage": "Storage",
"network": "Network",
"security": "Security",
"backup": "Backup",
"guests": "Guests",
"hardware": "Hardware"
},
"detail": {
"why": "Context",
"evidence": "Evidence",
"affected": "Affected",
"acceptedRisk": "Accepted risk"
},
"errors": {
"runFailed": "The assessment could not be started."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Backup coverage",
"rationale": "Compares the guest inventory against what each backup job selects. A job selects by VMID list, by pool, or with `all 1`, minus its `exclude` list. Jobs carrying `enabled 0` are not considered.",
"summary": {
"noJobs": "No backup job is defined on this node",
"covered": "All {total} guests are covered by a backup job",
"uncovered": "{count} of {total} guests are not covered by any enabled backup job"
}
}
},
"system": {
"pending_reboot": {
"title": "Restart state",
"rationale": "Checks for `/var/run/reboot-required` and, when present, the packages listed in `/var/run/reboot-required.pkgs`. Also reports the running kernel.",
"summary": {
"none": "No restart is pending",
"pending": "The host has a pending restart"
}
},
"enterprise_repo_without_subscription": {
"title": "Enterprise repository",
"rationale": "Looks for references to `enterprise.proxmox.com` in `/etc/apt/sources.list` and `sources.list.d`, and contrasts the result with the status returned by `pvesubscription get`.",
"summary": {
"notEnabled": "The enterprise repository is not enabled",
"subscribed": "The enterprise repository is backed by a subscription",
"unsubscribed": "The enterprise repository is enabled without an active subscription"
}
}
},
"guests": {
"privileged_containers": {
"title": "Container privileges",
"rationale": "Reviews each container configuration. Proxmox marks unprivileged containers with `unprivileged: 1`; its absence indicates a privileged container, which shares the host user namespace.",
"summary": {
"allUnprivileged": "All {total} containers are unprivileged",
"privileged": "{count} of {total} containers run privileged"
}
},
"qemu_without_agent": {
"title": "Guest agent on virtual machines",
"rationale": "Reviews each virtual machine configuration for `agent: 1`. The guest agent enables ordered shutdown, filesystem quiescing for snapshots and real disk usage reporting.",
"summary": {
"allHaveAgent": "All {total} virtual machines declare the guest agent",
"missingAgent": "{count} of {total} virtual machines do not declare the guest agent"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Firewall state",
"rationale": "Checks `enable: 1` in `/etc/pve/firewall/cluster.fw` and in the node's `host.fw`. Proxmox applies node rules only while the datacenter switch is on.",
"summary": {
"bothEnabled": "The firewall is enabled at datacenter and node level",
"datacenterOff": "The firewall is disabled at datacenter level, so node rules are not applied",
"nodeOff": "The firewall is enabled at datacenter level but not on this node"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Volume assignment",
"rationale": "Compares the volumes returned by `pvesm list` against the existing guest configurations. Only non-shared storage is examined: on shared storage a volume may belong to a guest running on another node.",
"summary": {
"none": "No orphaned volumes were found",
"found": "{count} volume(s) belong to no existing guest"
}
}
}
},
"summaryFallback": "The check could not be evaluated",
"acceptRisk": {
"action": "Accept risk",
"revoke": "Return to active",
"title": "Accept this risk",
"reasonLabel": "Reason",
"reasonHelp": "Required. It is recorded together with the author and the date.",
"reasonPlaceholder": "e.g. Lab containers, not covered on purpose",
"expiryLabel": "Review after",
"expiryHelp": "When the period ends the finding becomes active again.",
"expiryNever": "Does not expire",
"expiry90": "90 days",
"expiry180": "180 days",
"expiry365": "1 year",
"cancel": "Cancel",
"confirm": "Accept risk"
}
}
}
+171 -2
View File
@@ -45,7 +45,8 @@
"profile": "Perfil",
"node": "Nodo",
"admin": "Administración",
"menu": "Menú de navegación"
"menu": "Menú de navegación",
"audit": "Auditoría e informes"
},
"status": {
"healthy": "OK",
@@ -72,6 +73,8 @@
"networkErrorWhileSaving": "Error de red al guardar"
},
"overview": {
"metricsTimeout": "La consulta de métricas ha superado los 30 segundos. ProxMenux volverá a intentarlo automáticamente.",
"metricsCachedWarning": "No se han podido actualizar las métricas. Se muestran los datos obtenidos el {time}.",
"loadingTitle": "Cargando descripción general del sistema...",
"loadingDescription": "Obtener el estado y las métricas del sistema",
"topProcessesCpu": "Ver procesos principales por CPU",
@@ -1217,7 +1220,15 @@
"humanWeekly": "Semanal ({day} {time})",
"humanMonthly": "Mensual (día {day} a las {time})",
"humanHourly": "cada hora",
"weekdays": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"]
"weekdays": [
"domingo",
"lunes",
"martes",
"miércoles",
"jueves",
"viernes",
"sábado"
]
},
"cronChip": {
"detected": "cron del host detectado",
@@ -1244,6 +1255,35 @@
"osStatusUnavailable": "No se ha podido determinar el estado de las actualizaciones del SO.",
"installedByHelperPrefix": "Instalado por",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "Si modificas este lanzador, se guardará como comando personalizado.",
"customOnlineDescription": "O utiliza un script online proporcionado por el desarrollador:",
"customOnlineExampleNote": "Sustituye la URL de ejemplo por la del script oficial de tu aplicación.",
"customExamplesHeading": "Ejemplos para adaptar:",
"updaterChoiceHint": "Elige y guarda un método de actualización.",
"updaterMethodLabel": "Método de actualización",
"helperMethod": "Helper-Scripts",
"customMethod": "Comando personalizado",
"helperMethodHelp": "Acerca de Helper-Scripts",
"customMethodHelp": "Acerca del comando personalizado",
"helperDetectedChoice": "Actualizador de Helper-Scripts detectado para esta aplicación.",
"helperUnavailableChoice": "El actualizador de Helper-Scripts seleccionado ya no está disponible.",
"disableUpdater": "Desactivar",
"disableUpdaterConfirm": "¿Desactivar el método de actualización de {name}? Los planes y las programaciones conservarán sus selecciones, pero esta aplicación no se ejecutará hasta que vuelvas a configurar un método.",
"noUpdaterSelected": "No has seleccionado un método de actualización.",
"helperMethodDescription": "ProxMenux ejecuta el actualizador detectado dentro de este LXC y muestra su registro y resultado. Este lo mantiene Proxmox VE Helper-Scripts.",
"customMethodDescription": "Puedes utilizar el actualizador de la aplicación, un gestor de paquetes o un binario nuevo. El comando se ejecuta dentro de este LXC con privilegios de administrador.",
"updaterInstructions": "Revisa las indicaciones del actualizador.",
"helperDocumentation": "Documentación de actualización",
"helperSource": "Script de la aplicación",
"customMethodExample": "Adapta los nombres, las rutas y el servicio a tu aplicación. Solo se ejecutará el comando que guardes.",
"helperCommandLabel": "Comando dentro del LXC",
"helperCommandFallback": "Si wget no está disponible, ProxMenux utiliza curl -fsSL para descargar el mismo script.",
"customScriptTitle": "Script de actualización",
"customScriptDescription": "Ejecuta un script de actualización de la aplicación que ya exista en el LXC.",
"customPackageTitle": "Paquete Debian/Ubuntu",
"customPackageDescription": "Sustituye my-package por el paquete que quieras actualizar.",
"customBinaryTitle": "Binario",
"customBinaryDescription": "Primero descarga y verifica el binario oficial de la versión y arquitectura correctas en /tmp/my-app.new. Este ejemplo conserva una copia del binario anterior y reinicia su servicio.",
"helperUpdatesRun": "Instalado por Proxmox Helper-Scripts.",
"installedPrefix": "instalado",
"upstreamAvailable": "versión {version} disponible",
@@ -4868,5 +4908,134 @@
"customLinkDelete": "Eliminar",
"customLinkSaveError": "Error al guardar",
"customLinkDeleteError": "Error al eliminar"
},
"audit": {
"title": "Auditoría e informes",
"loading": "Cargando evaluación…",
"run": "Ejecutar evaluación",
"running": "Evaluando…",
"neverRun": "Este host aún no se ha evaluado.",
"lastRun": "Última evaluación el {when}",
"stale": "hace {days} días",
"readOnlyNotice": "La evaluación solo lee el host. No realiza ningún cambio.",
"noFindings": "Ningún hallazgo coincide con el filtro actual.",
"showPassing": "Mostrar comprobaciones correctas",
"hidePassing": "Ocultar comprobaciones correctas",
"affectedCount": "{count} afectados",
"acceptedNotice": "{count} riesgo(s) aceptado(s) registrados en este host.",
"states": {
"fail": "Fallo",
"warn": "Aviso",
"accepted": "Riesgo aceptado",
"pass": "Correcto",
"not_applicable": "No aplicable"
},
"areas": {
"all": "Todas",
"system": "Sistema",
"storage": "Almacenamiento",
"network": "Red",
"security": "Seguridad",
"backup": "Backups",
"guests": "Invitados",
"hardware": "Hardware"
},
"detail": {
"why": "Contexto",
"evidence": "Evidencia",
"affected": "Afectados",
"acceptedRisk": "Riesgo aceptado"
},
"errors": {
"runFailed": "No se pudo iniciar la evaluación."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Cobertura de backups",
"rationale": "Compara el inventario de invitados con la selección de cada trabajo de backup. Un trabajo selecciona por lista de VMID, por pool o con `all 1`, restando su lista `exclude`. Los trabajos con `enabled 0` no se consideran.",
"summary": {
"noJobs": "No hay ningún trabajo de backup definido en este nodo",
"covered": "Los {total} invitados están cubiertos por un trabajo de backup",
"uncovered": "{count} de {total} invitados no están cubiertos por ningún trabajo de backup activo"
}
}
},
"system": {
"pending_reboot": {
"title": "Estado de reinicio",
"rationale": "Comprueba la presencia de `/var/run/reboot-required` y, cuando existe, los paquetes listados en `/var/run/reboot-required.pkgs`. Informa también del kernel en ejecución.",
"summary": {
"none": "No hay ningún reinicio pendiente",
"pending": "El host tiene un reinicio pendiente"
}
},
"enterprise_repo_without_subscription": {
"title": "Repositorio enterprise",
"rationale": "Busca referencias a `enterprise.proxmox.com` en `/etc/apt/sources.list` y en `sources.list.d`, y contrasta el resultado con el estado que devuelve `pvesubscription get`.",
"summary": {
"notEnabled": "El repositorio enterprise no está habilitado",
"subscribed": "El repositorio enterprise cuenta con suscripción",
"unsubscribed": "El repositorio enterprise está habilitado sin suscripción activa"
}
}
},
"guests": {
"privileged_containers": {
"title": "Privilegios de los contenedores",
"rationale": "Revisa la configuración de cada contenedor. Proxmox marca los contenedores sin privilegios con `unprivileged: 1`; su ausencia indica un contenedor privilegiado, que comparte el espacio de nombres de usuario del host.",
"summary": {
"allUnprivileged": "Los {total} contenedores son sin privilegios",
"privileged": "{count} de {total} contenedores se ejecutan con privilegios"
}
},
"qemu_without_agent": {
"title": "Agente invitado en máquinas virtuales",
"rationale": "Revisa la configuración de cada máquina virtual en busca de `agent: 1`. El agente invitado habilita el apagado ordenado, la congelación del sistema de archivos para instantáneas y el informe de uso real de disco.",
"summary": {
"allHaveAgent": "Las {total} máquinas virtuales declaran el agente invitado",
"missingAgent": "{count} de {total} máquinas virtuales no declaran el agente invitado"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Estado del firewall",
"rationale": "Comprueba `enable: 1` en `/etc/pve/firewall/cluster.fw` y en el `host.fw` del nodo. Proxmox aplica las reglas del nodo solo mientras el interruptor del centro de datos está activo.",
"summary": {
"bothEnabled": "El firewall está habilitado en el centro de datos y en el nodo",
"datacenterOff": "El firewall está deshabilitado en el centro de datos, así que las reglas del nodo no se aplican",
"nodeOff": "El firewall está habilitado en el centro de datos pero no en este nodo"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Asignación de volúmenes",
"rationale": "Compara los volúmenes que devuelve `pvesm list` con las configuraciones de invitado existentes. Solo examina almacenamiento no compartido: en almacenamiento compartido un volumen puede pertenecer a un invitado que se ejecuta en otro nodo.",
"summary": {
"none": "No se han encontrado volúmenes huérfanos",
"found": "{count} volumen(es) no pertenecen a ningún invitado existente"
}
}
}
},
"summaryFallback": "No se pudo evaluar la comprobación",
"acceptRisk": {
"action": "Aceptar riesgo",
"revoke": "Volver a activo",
"title": "Aceptar este riesgo",
"reasonLabel": "Motivo",
"reasonHelp": "Obligatorio. Queda registrado junto al autor y la fecha.",
"reasonPlaceholder": "p. ej. Contenedores de laboratorio, sin cobertura a propósito",
"expiryLabel": "Revisar dentro de",
"expiryHelp": "Al cumplirse el plazo el hallazgo vuelve a estado activo.",
"expiryNever": "No caduca",
"expiry90": "90 días",
"expiry180": "180 días",
"expiry365": "1 año",
"cancel": "Cancelar",
"confirm": "Aceptar riesgo"
}
}
}
+171 -2
View File
@@ -45,7 +45,8 @@
"profile": "Profil",
"node": "Nœud",
"admin": "Administrateur",
"menu": "Menu de navigation"
"menu": "Menu de navigation",
"audit": "Audit et rapports"
},
"status": {
"healthy": "En bonne santé",
@@ -72,6 +73,8 @@
"networkErrorWhileSaving": "Erreur réseau lors de l'enregistrement"
},
"overview": {
"metricsTimeout": "La requête de métriques a dépassé 30 secondes. ProxMenux réessaiera automatiquement.",
"metricsCachedWarning": "Les métriques n’ont pas pu être actualisées. Les données récupérées le {time} sont affichées.",
"loadingTitle": "Chargement de l'aperçu du système...",
"loadingDescription": "Récupération de l'état et des métriques du système",
"topProcessesCpu": "Afficher les principaux processus par processeur",
@@ -1217,7 +1220,15 @@
"humanWeekly": "hebdomadaire ({day} {time})",
"humanMonthly": "mensuel (jour {day} à {time})",
"humanHourly": "Horaire",
"weekdays": ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"]
"weekdays": [
"Dimanche",
"Lundi",
"Mardi",
"Mercredi",
"Jeudi",
"Vendredi",
"Samedi"
]
},
"cronChip": {
"detected": "cron hôte détecté",
@@ -1244,6 +1255,35 @@
"osStatusUnavailable": "Impossible de déterminer l’état des mises à jour du système d’exploitation.",
"installedByHelperPrefix": "Installé par",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "Si vous modifiez cette commande de lancement, elle sera enregistrée comme commande personnalisée.",
"customOnlineDescription": "Ou utilisez un script en ligne fourni par le développeur :",
"customOnlineExampleNote": "Remplacez l’URL d’exemple par celle du script officiel de votre application.",
"customExamplesHeading": "Exemples à adapter:",
"updaterChoiceHint": "Choisissez une méthode de mise à jour et enregistrez-la.",
"updaterMethodLabel": "Méthode de mise à jour",
"helperMethod": "Helper-Scripts",
"customMethod": "Commande personnalisée",
"helperMethodHelp": "À propos de Helper-Scripts",
"customMethodHelp": "À propos des commandes personnalisées",
"helperDetectedChoice": "Un programme de mise à jour Helper-Scripts a été détecté pour cette application.",
"helperUnavailableChoice": "Le programme de mise à jour Helper-Scripts sélectionné n’est plus disponible.",
"disableUpdater": "Désactiver",
"disableUpdaterConfirm": "Désactiver la méthode de mise à jour de {name} ? Les plans et les programmations conserveront leurs sélections, mais cette application ne sera pas exécutée tant qu’une méthode n’aura pas été reconfigurée.",
"noUpdaterSelected": "Vous n’avez pas sélectionné de méthode de mise à jour.",
"helperMethodDescription": "ProxMenux exécute le programme de mise à jour détecté dans ce LXC et affiche son journal et son résultat. Ce programme est maintenu par Proxmox VE Helper-Scripts.",
"customMethodDescription": "Vous pouvez utiliser le programme de mise à jour de l’application, un gestionnaire de paquets ou un nouveau binaire. La commande s’exécute dans ce LXC avec les droits administrateur.",
"updaterInstructions": "Consultez les instructions du programme de mise à jour.",
"helperDocumentation": "Documentation des mises à jour",
"helperSource": "Script de l’application",
"customMethodExample": "Adaptez les noms, les chemins et le service à votre application. Seule la commande enregistrée sera exécutée.",
"helperCommandLabel": "Commande dans le LXC",
"helperCommandFallback": "Si wget n’est pas disponible, ProxMenux utilise curl -fsSL pour télécharger le même script.",
"customScriptTitle": "Script de mise à jour",
"customScriptDescription": "Exécutez un script de mise à jour de l’application déjà présent dans le LXC.",
"customPackageTitle": "Paquet Debian/Ubuntu",
"customPackageDescription": "Remplacez my-package par le paquet à mettre à jour.",
"customBinaryTitle": "Binaire",
"customBinaryDescription": "Téléchargez d’abord le binaire officiel pour la version et l’architecture appropriées dans /tmp/my-app.new, puis vérifiez-le. Cet exemple conserve une copie du binaire précédent et redémarre son service.",
"helperUpdatesRun": "Installé par Proxmox Helper-Scripts.",
"installedPrefix": "installé",
"upstreamAvailable": "version {version} disponible",
@@ -4868,5 +4908,134 @@
"customLinkDelete": "Delete",
"customLinkSaveError": "Save failed",
"customLinkDeleteError": "Delete failed"
},
"audit": {
"title": "Audit & Report",
"loading": "Loading assessment…",
"run": "Run assessment",
"running": "Assessing…",
"neverRun": "This host has not been assessed yet.",
"lastRun": "Last assessed on {when}",
"stale": "{days} days ago",
"readOnlyNotice": "The assessment only reads the host. It makes no changes.",
"noFindings": "No findings match the current filter.",
"showPassing": "Show passing checks",
"hidePassing": "Hide passing checks",
"affectedCount": "{count} affected",
"acceptedNotice": "{count} accepted risk(s) recorded on this host.",
"states": {
"fail": "Failed",
"warn": "Warning",
"accepted": "Accepted risk",
"pass": "Passed",
"not_applicable": "Not applicable"
},
"areas": {
"all": "All",
"system": "System",
"storage": "Storage",
"network": "Network",
"security": "Security",
"backup": "Backup",
"guests": "Guests",
"hardware": "Hardware"
},
"detail": {
"why": "Context",
"evidence": "Evidence",
"affected": "Affected",
"acceptedRisk": "Accepted risk"
},
"errors": {
"runFailed": "The assessment could not be started."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Backup coverage",
"rationale": "Compares the guest inventory against what each backup job selects. A job selects by VMID list, by pool, or with `all 1`, minus its `exclude` list. Jobs carrying `enabled 0` are not considered.",
"summary": {
"noJobs": "No backup job is defined on this node",
"covered": "All {total} guests are covered by a backup job",
"uncovered": "{count} of {total} guests are not covered by any enabled backup job"
}
}
},
"system": {
"pending_reboot": {
"title": "Restart state",
"rationale": "Checks for `/var/run/reboot-required` and, when present, the packages listed in `/var/run/reboot-required.pkgs`. Also reports the running kernel.",
"summary": {
"none": "No restart is pending",
"pending": "The host has a pending restart"
}
},
"enterprise_repo_without_subscription": {
"title": "Enterprise repository",
"rationale": "Looks for references to `enterprise.proxmox.com` in `/etc/apt/sources.list` and `sources.list.d`, and contrasts the result with the status returned by `pvesubscription get`.",
"summary": {
"notEnabled": "The enterprise repository is not enabled",
"subscribed": "The enterprise repository is backed by a subscription",
"unsubscribed": "The enterprise repository is enabled without an active subscription"
}
}
},
"guests": {
"privileged_containers": {
"title": "Container privileges",
"rationale": "Reviews each container configuration. Proxmox marks unprivileged containers with `unprivileged: 1`; its absence indicates a privileged container, which shares the host user namespace.",
"summary": {
"allUnprivileged": "All {total} containers are unprivileged",
"privileged": "{count} of {total} containers run privileged"
}
},
"qemu_without_agent": {
"title": "Guest agent on virtual machines",
"rationale": "Reviews each virtual machine configuration for `agent: 1`. The guest agent enables ordered shutdown, filesystem quiescing for snapshots and real disk usage reporting.",
"summary": {
"allHaveAgent": "All {total} virtual machines declare the guest agent",
"missingAgent": "{count} of {total} virtual machines do not declare the guest agent"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Firewall state",
"rationale": "Checks `enable: 1` in `/etc/pve/firewall/cluster.fw` and in the node's `host.fw`. Proxmox applies node rules only while the datacenter switch is on.",
"summary": {
"bothEnabled": "The firewall is enabled at datacenter and node level",
"datacenterOff": "The firewall is disabled at datacenter level, so node rules are not applied",
"nodeOff": "The firewall is enabled at datacenter level but not on this node"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Volume assignment",
"rationale": "Compares the volumes returned by `pvesm list` against the existing guest configurations. Only non-shared storage is examined: on shared storage a volume may belong to a guest running on another node.",
"summary": {
"none": "No orphaned volumes were found",
"found": "{count} volume(s) belong to no existing guest"
}
}
}
},
"summaryFallback": "The check could not be evaluated",
"acceptRisk": {
"action": "Accept risk",
"revoke": "Return to active",
"title": "Accept this risk",
"reasonLabel": "Reason",
"reasonHelp": "Required. It is recorded together with the author and the date.",
"reasonPlaceholder": "e.g. Lab containers, not covered on purpose",
"expiryLabel": "Review after",
"expiryHelp": "When the period ends the finding becomes active again.",
"expiryNever": "Does not expire",
"expiry90": "90 days",
"expiry180": "180 days",
"expiry365": "1 year",
"cancel": "Cancel",
"confirm": "Accept risk"
}
}
}
+171 -2
View File
@@ -45,7 +45,8 @@
"profile": "Profilo",
"node": "Nodo",
"admin": "Ammin",
"menu": "Menù di navigazione"
"menu": "Menù di navigazione",
"audit": "Audit e report"
},
"status": {
"healthy": "Salutare",
@@ -72,6 +73,8 @@
"networkErrorWhileSaving": "Errore di rete durante il salvataggio"
},
"overview": {
"metricsTimeout": "La richiesta delle metriche ha superato i 30 secondi. ProxMenux riproverà automaticamente.",
"metricsCachedWarning": "Impossibile aggiornare le metriche. Sono visualizzati i dati recuperati il {time}.",
"loadingTitle": "Caricamento panoramica del sistema...",
"loadingDescription": "Recupero dello stato e delle metriche del sistema",
"topProcessesCpu": "Visualizza i processi principali per CPU",
@@ -1217,7 +1220,15 @@
"humanWeekly": "testo tecnico dell'interfaccia utente per una dashboard di gestione Proxmox.Traduzione: settimanale ({day} {time})",
"humanMonthly": "testo tecnico dell'interfaccia utente per una dashboard di gestione Proxmox.Traduzione: mensile (giorno {day} alle {time})",
"humanHourly": "ogni ora",
"weekdays": ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]
"weekdays": [
"Domenica",
"Lunedì",
"Martedì",
"Mercoledì",
"Giovedì",
"Venerdì",
"Sabato"
]
},
"cronChip": {
"detected": "rilevato il cron dell'host",
@@ -1244,6 +1255,35 @@
"osStatusUnavailable": "Impossibile determinare lo stato degli aggiornamenti del sistema operativo.",
"installedByHelperPrefix": "Installato da",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "Se modifichi questo comando di avvio, verrà salvato come comando personalizzato.",
"customOnlineDescription": "Oppure usa uno script online fornito dallo sviluppatore:",
"customOnlineExampleNote": "Sostituisci l’URL di esempio con quello dello script ufficiale della tua applicazione.",
"customExamplesHeading": "Esempi da adattare:",
"updaterChoiceHint": "Scegli e salva un metodo di aggiornamento.",
"updaterMethodLabel": "Metodo di aggiornamento",
"helperMethod": "Helper-Scripts",
"customMethod": "Comando personalizzato",
"helperMethodHelp": "Informazioni su Helper-Scripts",
"customMethodHelp": "Informazioni sui comandi personalizzati",
"helperDetectedChoice": "Rilevato un programma di aggiornamento Helper-Scripts per questa applicazione.",
"helperUnavailableChoice": "Il programma di aggiornamento Helper-Scripts selezionato non è più disponibile.",
"disableUpdater": "Disattiva",
"disableUpdaterConfirm": "Disattivare il metodo di aggiornamento di {name}? I piani e le pianificazioni manterranno le selezioni, ma questa applicazione non verrà eseguita finché non sarà configurato nuovamente un metodo.",
"noUpdaterSelected": "Non hai selezionato un metodo di aggiornamento.",
"helperMethodDescription": "ProxMenux esegue il programma di aggiornamento rilevato in questo LXC e ne mostra il registro e il risultato. Il programma è mantenuto da Proxmox VE Helper-Scripts.",
"customMethodDescription": "Puoi usare il programma di aggiornamento dell’applicazione, un gestore di pacchetti o un nuovo binario. Il comando viene eseguito in questo LXC con privilegi di amministratore.",
"updaterInstructions": "Consulta le istruzioni del programma di aggiornamento.",
"helperDocumentation": "Documentazione degli aggiornamenti",
"helperSource": "Script dell’applicazione",
"customMethodExample": "Adatta i nomi, i percorsi e il servizio alla tua applicazione. Verrà eseguito solo il comando salvato.",
"helperCommandLabel": "Comando all’interno del LXC",
"helperCommandFallback": "Se wget non è disponibile, ProxMenux usa curl -fsSL per scaricare lo stesso script.",
"customScriptTitle": "Script di aggiornamento",
"customScriptDescription": "Esegui uno script di aggiornamento dell’applicazione già presente nel LXC.",
"customPackageTitle": "Pacchetto Debian/Ubuntu",
"customPackageDescription": "Sostituisci my-package con il pacchetto da aggiornare.",
"customBinaryTitle": "Binario",
"customBinaryDescription": "Prima scarica e verifica il binario ufficiale per la versione e l’architettura corrette in /tmp/my-app.new. Questo esempio conserva una copia del binario precedente e riavvia il relativo servizio.",
"helperUpdatesRun": "Installato da Proxmox Helper-Scripts.",
"installedPrefix": "installato",
"upstreamAvailable": "versione {version} disponibile",
@@ -4868,5 +4908,134 @@
"customLinkDelete": "Delete",
"customLinkSaveError": "Save failed",
"customLinkDeleteError": "Delete failed"
},
"audit": {
"title": "Audit & Report",
"loading": "Loading assessment…",
"run": "Run assessment",
"running": "Assessing…",
"neverRun": "This host has not been assessed yet.",
"lastRun": "Last assessed on {when}",
"stale": "{days} days ago",
"readOnlyNotice": "The assessment only reads the host. It makes no changes.",
"noFindings": "No findings match the current filter.",
"showPassing": "Show passing checks",
"hidePassing": "Hide passing checks",
"affectedCount": "{count} affected",
"acceptedNotice": "{count} accepted risk(s) recorded on this host.",
"states": {
"fail": "Failed",
"warn": "Warning",
"accepted": "Accepted risk",
"pass": "Passed",
"not_applicable": "Not applicable"
},
"areas": {
"all": "All",
"system": "System",
"storage": "Storage",
"network": "Network",
"security": "Security",
"backup": "Backup",
"guests": "Guests",
"hardware": "Hardware"
},
"detail": {
"why": "Context",
"evidence": "Evidence",
"affected": "Affected",
"acceptedRisk": "Accepted risk"
},
"errors": {
"runFailed": "The assessment could not be started."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Backup coverage",
"rationale": "Compares the guest inventory against what each backup job selects. A job selects by VMID list, by pool, or with `all 1`, minus its `exclude` list. Jobs carrying `enabled 0` are not considered.",
"summary": {
"noJobs": "No backup job is defined on this node",
"covered": "All {total} guests are covered by a backup job",
"uncovered": "{count} of {total} guests are not covered by any enabled backup job"
}
}
},
"system": {
"pending_reboot": {
"title": "Restart state",
"rationale": "Checks for `/var/run/reboot-required` and, when present, the packages listed in `/var/run/reboot-required.pkgs`. Also reports the running kernel.",
"summary": {
"none": "No restart is pending",
"pending": "The host has a pending restart"
}
},
"enterprise_repo_without_subscription": {
"title": "Enterprise repository",
"rationale": "Looks for references to `enterprise.proxmox.com` in `/etc/apt/sources.list` and `sources.list.d`, and contrasts the result with the status returned by `pvesubscription get`.",
"summary": {
"notEnabled": "The enterprise repository is not enabled",
"subscribed": "The enterprise repository is backed by a subscription",
"unsubscribed": "The enterprise repository is enabled without an active subscription"
}
}
},
"guests": {
"privileged_containers": {
"title": "Container privileges",
"rationale": "Reviews each container configuration. Proxmox marks unprivileged containers with `unprivileged: 1`; its absence indicates a privileged container, which shares the host user namespace.",
"summary": {
"allUnprivileged": "All {total} containers are unprivileged",
"privileged": "{count} of {total} containers run privileged"
}
},
"qemu_without_agent": {
"title": "Guest agent on virtual machines",
"rationale": "Reviews each virtual machine configuration for `agent: 1`. The guest agent enables ordered shutdown, filesystem quiescing for snapshots and real disk usage reporting.",
"summary": {
"allHaveAgent": "All {total} virtual machines declare the guest agent",
"missingAgent": "{count} of {total} virtual machines do not declare the guest agent"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Firewall state",
"rationale": "Checks `enable: 1` in `/etc/pve/firewall/cluster.fw` and in the node's `host.fw`. Proxmox applies node rules only while the datacenter switch is on.",
"summary": {
"bothEnabled": "The firewall is enabled at datacenter and node level",
"datacenterOff": "The firewall is disabled at datacenter level, so node rules are not applied",
"nodeOff": "The firewall is enabled at datacenter level but not on this node"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Volume assignment",
"rationale": "Compares the volumes returned by `pvesm list` against the existing guest configurations. Only non-shared storage is examined: on shared storage a volume may belong to a guest running on another node.",
"summary": {
"none": "No orphaned volumes were found",
"found": "{count} volume(s) belong to no existing guest"
}
}
}
},
"summaryFallback": "The check could not be evaluated",
"acceptRisk": {
"action": "Accept risk",
"revoke": "Return to active",
"title": "Accept this risk",
"reasonLabel": "Reason",
"reasonHelp": "Required. It is recorded together with the author and the date.",
"reasonPlaceholder": "e.g. Lab containers, not covered on purpose",
"expiryLabel": "Review after",
"expiryHelp": "When the period ends the finding becomes active again.",
"expiryNever": "Does not expire",
"expiry90": "90 days",
"expiry180": "180 days",
"expiry365": "1 year",
"cancel": "Cancel",
"confirm": "Accept risk"
}
}
}
+171 -2
View File
@@ -45,7 +45,8 @@
"profile": "Perfil",
"node": "Nó",
"admin": "Administrador",
"menu": "Menu de navegação"
"menu": "Menu de navegação",
"audit": "Auditoria e relatórios"
},
"status": {
"healthy": "Saudável",
@@ -72,6 +73,8 @@
"networkErrorWhileSaving": "Erro de rede ao salvar"
},
"overview": {
"metricsTimeout": "A consulta de métricas excedeu 30 segundos. O ProxMenux tentará novamente automaticamente.",
"metricsCachedWarning": "Não foi possível atualizar as métricas. São apresentados os dados obtidos em {time}.",
"loadingTitle": "Carregando visão geral do sistema...",
"loadingDescription": "Buscando status e métricas do sistema",
"topProcessesCpu": "Veja os principais processos por CPU",
@@ -1217,7 +1220,15 @@
"humanWeekly": "Semanal ({day} {time})",
"humanMonthly": "Mensalmente (dia {day} às {time})",
"humanHourly": "de hora em hora",
"weekdays": ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"]
"weekdays": [
"Domingo",
"Segunda-feira",
"Terça-feira",
"Quarta-feira",
"Quinta-feira",
"Sexta-feira",
"Sábado"
]
},
"cronChip": {
"detected": "cron do host detectado",
@@ -1244,6 +1255,35 @@
"osStatusUnavailable": "Não foi possível determinar o estado das atualizações do sistema operativo.",
"installedByHelperPrefix": "Instalado por",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "Se modificar este comando de arranque, será guardado como comando personalizado.",
"customOnlineDescription": "Ou utilize um script online fornecido pelo programador:",
"customOnlineExampleNote": "Substitua o URL de exemplo pelo do script oficial da sua aplicação.",
"customExamplesHeading": "Exemplos para adaptar:",
"updaterChoiceHint": "Escolha e guarde um método de atualização.",
"updaterMethodLabel": "Método de atualização",
"helperMethod": "Helper-Scripts",
"customMethod": "Comando personalizado",
"helperMethodHelp": "Sobre Helper-Scripts",
"customMethodHelp": "Sobre comandos personalizados",
"helperDetectedChoice": "Foi detetado um atualizador Helper-Scripts para esta aplicação.",
"helperUnavailableChoice": "O atualizador Helper-Scripts selecionado já não está disponível.",
"disableUpdater": "Desativar",
"disableUpdaterConfirm": "Desativar o método de atualização de {name}? Os planos e agendamentos manterão as seleções, mas esta aplicação não será executada até configurar novamente um método.",
"noUpdaterSelected": "Não selecionou um método de atualização.",
"helperMethodDescription": "O ProxMenux executa o atualizador detetado dentro deste LXC e mostra o registo e o resultado. Este é mantido pelo Proxmox VE Helper-Scripts.",
"customMethodDescription": "Pode utilizar o atualizador da aplicação, um gestor de pacotes ou um novo binário. O comando é executado dentro deste LXC com privilégios de administrador.",
"updaterInstructions": "Consulte as instruções do atualizador.",
"helperDocumentation": "Documentação de atualização",
"helperSource": "Script da aplicação",
"customMethodExample": "Adapte os nomes, os caminhos e o serviço à sua aplicação. Só será executado o comando que guardar.",
"helperCommandLabel": "Comando dentro do LXC",
"helperCommandFallback": "Se o wget não estiver disponível, o ProxMenux utiliza curl -fsSL para transferir o mesmo script.",
"customScriptTitle": "Script de atualização",
"customScriptDescription": "Execute um script de atualização da aplicação já existente no LXC.",
"customPackageTitle": "Pacote Debian/Ubuntu",
"customPackageDescription": "Substitua my-package pelo pacote que pretende atualizar.",
"customBinaryTitle": "Binário",
"customBinaryDescription": "Primeiro transfira e verifique o binário oficial da versão e arquitetura corretas em /tmp/my-app.new. Este exemplo conserva uma cópia do binário anterior e reinicia o respetivo serviço.",
"helperUpdatesRun": "Instalado pelo Proxmox Helper-Scripts.",
"installedPrefix": "instalado",
"upstreamAvailable": "versão {version} disponível",
@@ -4868,5 +4908,134 @@
"customLinkDelete": "Delete",
"customLinkSaveError": "Save failed",
"customLinkDeleteError": "Delete failed"
},
"audit": {
"title": "Audit & Report",
"loading": "Loading assessment…",
"run": "Run assessment",
"running": "Assessing…",
"neverRun": "This host has not been assessed yet.",
"lastRun": "Last assessed on {when}",
"stale": "{days} days ago",
"readOnlyNotice": "The assessment only reads the host. It makes no changes.",
"noFindings": "No findings match the current filter.",
"showPassing": "Show passing checks",
"hidePassing": "Hide passing checks",
"affectedCount": "{count} affected",
"acceptedNotice": "{count} accepted risk(s) recorded on this host.",
"states": {
"fail": "Failed",
"warn": "Warning",
"accepted": "Accepted risk",
"pass": "Passed",
"not_applicable": "Not applicable"
},
"areas": {
"all": "All",
"system": "System",
"storage": "Storage",
"network": "Network",
"security": "Security",
"backup": "Backup",
"guests": "Guests",
"hardware": "Hardware"
},
"detail": {
"why": "Context",
"evidence": "Evidence",
"affected": "Affected",
"acceptedRisk": "Accepted risk"
},
"errors": {
"runFailed": "The assessment could not be started."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Backup coverage",
"rationale": "Compares the guest inventory against what each backup job selects. A job selects by VMID list, by pool, or with `all 1`, minus its `exclude` list. Jobs carrying `enabled 0` are not considered.",
"summary": {
"noJobs": "No backup job is defined on this node",
"covered": "All {total} guests are covered by a backup job",
"uncovered": "{count} of {total} guests are not covered by any enabled backup job"
}
}
},
"system": {
"pending_reboot": {
"title": "Restart state",
"rationale": "Checks for `/var/run/reboot-required` and, when present, the packages listed in `/var/run/reboot-required.pkgs`. Also reports the running kernel.",
"summary": {
"none": "No restart is pending",
"pending": "The host has a pending restart"
}
},
"enterprise_repo_without_subscription": {
"title": "Enterprise repository",
"rationale": "Looks for references to `enterprise.proxmox.com` in `/etc/apt/sources.list` and `sources.list.d`, and contrasts the result with the status returned by `pvesubscription get`.",
"summary": {
"notEnabled": "The enterprise repository is not enabled",
"subscribed": "The enterprise repository is backed by a subscription",
"unsubscribed": "The enterprise repository is enabled without an active subscription"
}
}
},
"guests": {
"privileged_containers": {
"title": "Container privileges",
"rationale": "Reviews each container configuration. Proxmox marks unprivileged containers with `unprivileged: 1`; its absence indicates a privileged container, which shares the host user namespace.",
"summary": {
"allUnprivileged": "All {total} containers are unprivileged",
"privileged": "{count} of {total} containers run privileged"
}
},
"qemu_without_agent": {
"title": "Guest agent on virtual machines",
"rationale": "Reviews each virtual machine configuration for `agent: 1`. The guest agent enables ordered shutdown, filesystem quiescing for snapshots and real disk usage reporting.",
"summary": {
"allHaveAgent": "All {total} virtual machines declare the guest agent",
"missingAgent": "{count} of {total} virtual machines do not declare the guest agent"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Firewall state",
"rationale": "Checks `enable: 1` in `/etc/pve/firewall/cluster.fw` and in the node's `host.fw`. Proxmox applies node rules only while the datacenter switch is on.",
"summary": {
"bothEnabled": "The firewall is enabled at datacenter and node level",
"datacenterOff": "The firewall is disabled at datacenter level, so node rules are not applied",
"nodeOff": "The firewall is enabled at datacenter level but not on this node"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Volume assignment",
"rationale": "Compares the volumes returned by `pvesm list` against the existing guest configurations. Only non-shared storage is examined: on shared storage a volume may belong to a guest running on another node.",
"summary": {
"none": "No orphaned volumes were found",
"found": "{count} volume(s) belong to no existing guest"
}
}
}
},
"summaryFallback": "The check could not be evaluated",
"acceptRisk": {
"action": "Accept risk",
"revoke": "Return to active",
"title": "Accept this risk",
"reasonLabel": "Reason",
"reasonHelp": "Required. It is recorded together with the author and the date.",
"reasonPlaceholder": "e.g. Lab containers, not covered on purpose",
"expiryLabel": "Review after",
"expiryHelp": "When the period ends the finding becomes active again.",
"expiryNever": "Does not expire",
"expiry90": "90 days",
"expiry180": "180 days",
"expiry365": "1 year",
"cancel": "Cancel",
"confirm": "Accept risk"
}
}
}
+162 -1
View File
@@ -44,7 +44,8 @@
"profile": "Profil",
"node": "Server",
"admin": "Správa",
"menu": "Navigačné menu"
"menu": "Navigačné menu",
"audit": "Audit a správy"
},
"status": {
"healthy": "V poriadku",
@@ -71,6 +72,8 @@
"networkErrorWhileSaving": "Chyba siete pri ukladaní"
},
"overview": {
"metricsTimeout": "Načítanie metrík trvalo dlhšie ako 30 sekúnd. ProxMenux to automaticky skúsi znova.",
"metricsCachedWarning": "Metriky sa nepodarilo obnoviť. Zobrazujú sa údaje načítané {time}.",
"loadingTitle": "Načítava sa prehľad systému...",
"loadingDescription": "Zisťujem stav servera a základné údaje",
"topProcessesCpu": "Zobraziť procesy s najvyšším využitím CPU",
@@ -1273,6 +1276,35 @@
"osStatusUnavailable": "Stav aktualizácií operačného systému sa nepodarilo zistiť.",
"installedByHelperPrefix": "Nainštalované cez",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "Ak upravíte tento spúšťací príkaz, uloží sa ako vlastný príkaz.",
"customOnlineDescription": "Alebo použite online skript poskytnutý vývojárom:",
"customOnlineExampleNote": "Nahraďte vzorovú URL adresu adresou oficiálneho skriptu vašej aplikácie.",
"customExamplesHeading": "Príklady na prispôsobenie:",
"updaterChoiceHint": "Vyberte a uložte spôsob aktualizácie.",
"updaterMethodLabel": "Spôsob aktualizácie",
"helperMethod": "Helper-Scripts",
"customMethod": "Vlastný príkaz",
"helperMethodHelp": "O Helper-Scripts",
"customMethodHelp": "O vlastných príkazoch",
"helperDetectedChoice": "Pre túto aplikáciu bol zistený aktualizátor Helper-Scripts.",
"helperUnavailableChoice": "Vybraný aktualizátor Helper-Scripts už nie je dostupný.",
"disableUpdater": "Deaktivovať",
"disableUpdaterConfirm": "Deaktivovať spôsob aktualizácie pre {name}? Uložené plány a naplánované úlohy si zachovajú svoj výber, ale táto aplikácia sa nespustí, kým znova nenastavíte spôsob aktualizácie.",
"noUpdaterSelected": "Nevybrali ste spôsob aktualizácie.",
"helperMethodDescription": "ProxMenux spustí zistený aktualizátor v tomto LXC a zobrazí jeho protokol a výsledok. Aktualizátor spravuje Proxmox VE Helper-Scripts.",
"customMethodDescription": "Môžete použiť aktualizátor aplikácie, správcu balíkov alebo nový binárny súbor. Príkaz sa spustí v tomto LXC s oprávneniami správcu.",
"updaterInstructions": "Prečítajte si pokyny aktualizátora.",
"helperDocumentation": "Dokumentácia aktualizácií",
"helperSource": "Skript aplikácie",
"customMethodExample": "Prispôsobte názvy, cesty a službu svojej aplikácii. Spustí sa iba príkaz, ktorý uložíte.",
"helperCommandLabel": "Príkaz v LXC",
"helperCommandFallback": "Ak wget nie je dostupný, ProxMenux použije curl -fsSL na stiahnutie rovnakého skriptu.",
"customScriptTitle": "Aktualizačný skript",
"customScriptDescription": "Spustite aktualizačný skript aplikácie, ktorý už existuje v LXC.",
"customPackageTitle": "Balík Debian/Ubuntu",
"customPackageDescription": "Nahraďte my-package balíkom, ktorý chcete aktualizovať.",
"customBinaryTitle": "Binárny súbor",
"customBinaryDescription": "Najprv stiahnite a overte oficiálny binárny súbor správnej verzie a architektúry v /tmp/my-app.new. Tento príklad zachová kópiu predchádzajúceho binárneho súboru a reštartuje príslušnú službu.",
"helperUpdatesRun": "Inštalované pomocou Proxmox Helper-Scripts.",
"installedPrefix": "nainštalovaná verzia",
"upstreamAvailable": "dostupná verzia {version}",
@@ -4942,5 +4974,134 @@
"customLinkDelete": "Odstrániť",
"customLinkSaveError": "Odkaz sa nepodarilo uložiť",
"customLinkDeleteError": "Odkaz sa nepodarilo odstrániť"
},
"audit": {
"title": "Audit & Report",
"loading": "Loading assessment…",
"run": "Run assessment",
"running": "Assessing…",
"neverRun": "This host has not been assessed yet.",
"lastRun": "Last assessed on {when}",
"stale": "{days} days ago",
"readOnlyNotice": "The assessment only reads the host. It makes no changes.",
"noFindings": "No findings match the current filter.",
"showPassing": "Show passing checks",
"hidePassing": "Hide passing checks",
"affectedCount": "{count} affected",
"acceptedNotice": "{count} accepted risk(s) recorded on this host.",
"states": {
"fail": "Failed",
"warn": "Warning",
"accepted": "Accepted risk",
"pass": "Passed",
"not_applicable": "Not applicable"
},
"areas": {
"all": "All",
"system": "System",
"storage": "Storage",
"network": "Network",
"security": "Security",
"backup": "Backup",
"guests": "Guests",
"hardware": "Hardware"
},
"detail": {
"why": "Context",
"evidence": "Evidence",
"affected": "Affected",
"acceptedRisk": "Accepted risk"
},
"errors": {
"runFailed": "The assessment could not be started."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Backup coverage",
"rationale": "Compares the guest inventory against what each backup job selects. A job selects by VMID list, by pool, or with `all 1`, minus its `exclude` list. Jobs carrying `enabled 0` are not considered.",
"summary": {
"noJobs": "No backup job is defined on this node",
"covered": "All {total} guests are covered by a backup job",
"uncovered": "{count} of {total} guests are not covered by any enabled backup job"
}
}
},
"system": {
"pending_reboot": {
"title": "Restart state",
"rationale": "Checks for `/var/run/reboot-required` and, when present, the packages listed in `/var/run/reboot-required.pkgs`. Also reports the running kernel.",
"summary": {
"none": "No restart is pending",
"pending": "The host has a pending restart"
}
},
"enterprise_repo_without_subscription": {
"title": "Enterprise repository",
"rationale": "Looks for references to `enterprise.proxmox.com` in `/etc/apt/sources.list` and `sources.list.d`, and contrasts the result with the status returned by `pvesubscription get`.",
"summary": {
"notEnabled": "The enterprise repository is not enabled",
"subscribed": "The enterprise repository is backed by a subscription",
"unsubscribed": "The enterprise repository is enabled without an active subscription"
}
}
},
"guests": {
"privileged_containers": {
"title": "Container privileges",
"rationale": "Reviews each container configuration. Proxmox marks unprivileged containers with `unprivileged: 1`; its absence indicates a privileged container, which shares the host user namespace.",
"summary": {
"allUnprivileged": "All {total} containers are unprivileged",
"privileged": "{count} of {total} containers run privileged"
}
},
"qemu_without_agent": {
"title": "Guest agent on virtual machines",
"rationale": "Reviews each virtual machine configuration for `agent: 1`. The guest agent enables ordered shutdown, filesystem quiescing for snapshots and real disk usage reporting.",
"summary": {
"allHaveAgent": "All {total} virtual machines declare the guest agent",
"missingAgent": "{count} of {total} virtual machines do not declare the guest agent"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Firewall state",
"rationale": "Checks `enable: 1` in `/etc/pve/firewall/cluster.fw` and in the node's `host.fw`. Proxmox applies node rules only while the datacenter switch is on.",
"summary": {
"bothEnabled": "The firewall is enabled at datacenter and node level",
"datacenterOff": "The firewall is disabled at datacenter level, so node rules are not applied",
"nodeOff": "The firewall is enabled at datacenter level but not on this node"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Volume assignment",
"rationale": "Compares the volumes returned by `pvesm list` against the existing guest configurations. Only non-shared storage is examined: on shared storage a volume may belong to a guest running on another node.",
"summary": {
"none": "No orphaned volumes were found",
"found": "{count} volume(s) belong to no existing guest"
}
}
}
},
"summaryFallback": "The check could not be evaluated",
"acceptRisk": {
"action": "Accept risk",
"revoke": "Return to active",
"title": "Accept this risk",
"reasonLabel": "Reason",
"reasonHelp": "Required. It is recorded together with the author and the date.",
"reasonPlaceholder": "e.g. Lab containers, not covered on purpose",
"expiryLabel": "Review after",
"expiryHelp": "When the period ends the finding becomes active again.",
"expiryNever": "Does not expire",
"expiry90": "90 days",
"expiry180": "180 days",
"expiry365": "1 year",
"cancel": "Cancel",
"confirm": "Accept risk"
}
}
}
+171 -2
View File
@@ -45,7 +45,8 @@
"profile": "Profil",
"node": "Nod",
"admin": "Administration",
"menu": "Navigationsmeny"
"menu": "Navigationsmeny",
"audit": "Granskning och rapporter"
},
"status": {
"healthy": "Hälsosam",
@@ -72,6 +73,8 @@
"networkErrorWhileSaving": "Nätverksfel vid lagring"
},
"overview": {
"metricsTimeout": "Mätvärdesfrågan tog längre än 30 sekunder. ProxMenux försöker igen automatiskt.",
"metricsCachedWarning": "Mätvärdena kunde inte uppdateras. Data hämtade {time} visas.",
"loadingTitle": "Laddar systemöversikt...",
"loadingDescription": "Hämtar systemstatus och mätvärden",
"topProcessesCpu": "Visa toppprocesser efter CPU",
@@ -1217,7 +1220,15 @@
"humanWeekly": "Varje vecka ({day} {time})",
"humanMonthly": "Varje månad (dag {day} kl. {time})",
"humanHourly": "Varje timme",
"weekdays": ["söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"]
"weekdays": [
"söndag",
"måndag",
"tisdag",
"onsdag",
"torsdag",
"fredag",
"lördag"
]
},
"cronChip": {
"detected": "host cron upptäckt",
@@ -1244,6 +1255,35 @@
"osStatusUnavailable": "Statusen för operativsystemets uppdateringar kunde inte fastställas.",
"installedByHelperPrefix": "Installerad av",
"helperScriptsName": "Proxmox VE Helper-Scripts",
"helperCommandEditHint": "Om du ändrar det här startkommandot sparas det som ett eget kommando.",
"customOnlineDescription": "Eller använd ett onlineskript från utvecklaren:",
"customOnlineExampleNote": "Ersätt exempeladressen med adressen till appens officiella skript.",
"customExamplesHeading": "Exempel att anpassa:",
"updaterChoiceHint": "Välj och spara en uppdateringsmetod.",
"updaterMethodLabel": "Uppdateringsmetod",
"helperMethod": "Helper-Scripts",
"customMethod": "Eget kommando",
"helperMethodHelp": "Om Helper-Scripts",
"customMethodHelp": "Om egna kommandon",
"helperDetectedChoice": "En Helper-Scripts-uppdaterare har identifierats för den här appen.",
"helperUnavailableChoice": "Den valda Helper-Scripts-uppdateraren är inte längre tillgänglig.",
"disableUpdater": "Inaktivera",
"disableUpdaterConfirm": "Inaktivera uppdateringsmetoden för {name}? Sparade planer och scheman behåller sina val, men den här appen körs inte förrän en metod har konfigurerats igen.",
"noUpdaterSelected": "Du har inte valt någon uppdateringsmetod.",
"helperMethodDescription": "ProxMenux kör den identifierade uppdateraren i denna LXC och visar dess logg och resultat. Uppdateraren underhålls av Proxmox VE Helper-Scripts.",
"customMethodDescription": "Du kan använda appens egen uppdaterare, en pakethanterare eller en ny binärfil. Kommandot körs i denna LXC med administratörsbehörighet.",
"updaterInstructions": "Läs uppdaterarens anvisningar.",
"helperDocumentation": "Uppdateringsdokumentation",
"helperSource": "Appens skript",
"customMethodExample": "Anpassa namn, sökvägar och tjänst till din app. Endast kommandot du sparar kommer att köras.",
"helperCommandLabel": "Kommando i LXC",
"helperCommandFallback": "Om wget inte är tillgängligt använder ProxMenux curl -fsSL för att hämta samma skript.",
"customScriptTitle": "Uppdateringsskript",
"customScriptDescription": "Kör ett uppdateringsskript för appen som redan finns i LXC.",
"customPackageTitle": "Debian/Ubuntu-paket",
"customPackageDescription": "Ersätt my-package med paketet du vill uppdatera.",
"customBinaryTitle": "Binärfil",
"customBinaryDescription": "Hämta och verifiera först den officiella binärfilen för rätt version och arkitektur på /tmp/my-app.new. Det här exemplet sparar en kopia av den tidigare binärfilen och startar om dess tjänst.",
"helperUpdatesRun": "Installerad av Proxmox Helper-Scripts.",
"installedPrefix": "installerat",
"upstreamAvailable": "version {version} tillgänglig",
@@ -4869,5 +4909,134 @@
"customLinkDelete": "Delete",
"customLinkSaveError": "Save failed",
"customLinkDeleteError": "Delete failed"
},
"audit": {
"title": "Audit & Report",
"loading": "Loading assessment…",
"run": "Run assessment",
"running": "Assessing…",
"neverRun": "This host has not been assessed yet.",
"lastRun": "Last assessed on {when}",
"stale": "{days} days ago",
"readOnlyNotice": "The assessment only reads the host. It makes no changes.",
"noFindings": "No findings match the current filter.",
"showPassing": "Show passing checks",
"hidePassing": "Hide passing checks",
"affectedCount": "{count} affected",
"acceptedNotice": "{count} accepted risk(s) recorded on this host.",
"states": {
"fail": "Failed",
"warn": "Warning",
"accepted": "Accepted risk",
"pass": "Passed",
"not_applicable": "Not applicable"
},
"areas": {
"all": "All",
"system": "System",
"storage": "Storage",
"network": "Network",
"security": "Security",
"backup": "Backup",
"guests": "Guests",
"hardware": "Hardware"
},
"detail": {
"why": "Context",
"evidence": "Evidence",
"affected": "Affected",
"acceptedRisk": "Accepted risk"
},
"errors": {
"runFailed": "The assessment could not be started."
},
"checks": {
"backup": {
"guest_coverage": {
"title": "Backup coverage",
"rationale": "Compares the guest inventory against what each backup job selects. A job selects by VMID list, by pool, or with `all 1`, minus its `exclude` list. Jobs carrying `enabled 0` are not considered.",
"summary": {
"noJobs": "No backup job is defined on this node",
"covered": "All {total} guests are covered by a backup job",
"uncovered": "{count} of {total} guests are not covered by any enabled backup job"
}
}
},
"system": {
"pending_reboot": {
"title": "Restart state",
"rationale": "Checks for `/var/run/reboot-required` and, when present, the packages listed in `/var/run/reboot-required.pkgs`. Also reports the running kernel.",
"summary": {
"none": "No restart is pending",
"pending": "The host has a pending restart"
}
},
"enterprise_repo_without_subscription": {
"title": "Enterprise repository",
"rationale": "Looks for references to `enterprise.proxmox.com` in `/etc/apt/sources.list` and `sources.list.d`, and contrasts the result with the status returned by `pvesubscription get`.",
"summary": {
"notEnabled": "The enterprise repository is not enabled",
"subscribed": "The enterprise repository is backed by a subscription",
"unsubscribed": "The enterprise repository is enabled without an active subscription"
}
}
},
"guests": {
"privileged_containers": {
"title": "Container privileges",
"rationale": "Reviews each container configuration. Proxmox marks unprivileged containers with `unprivileged: 1`; its absence indicates a privileged container, which shares the host user namespace.",
"summary": {
"allUnprivileged": "All {total} containers are unprivileged",
"privileged": "{count} of {total} containers run privileged"
}
},
"qemu_without_agent": {
"title": "Guest agent on virtual machines",
"rationale": "Reviews each virtual machine configuration for `agent: 1`. The guest agent enables ordered shutdown, filesystem quiescing for snapshots and real disk usage reporting.",
"summary": {
"allHaveAgent": "All {total} virtual machines declare the guest agent",
"missingAgent": "{count} of {total} virtual machines do not declare the guest agent"
}
}
},
"security": {
"host_firewall_enabled": {
"title": "Firewall state",
"rationale": "Checks `enable: 1` in `/etc/pve/firewall/cluster.fw` and in the node's `host.fw`. Proxmox applies node rules only while the datacenter switch is on.",
"summary": {
"bothEnabled": "The firewall is enabled at datacenter and node level",
"datacenterOff": "The firewall is disabled at datacenter level, so node rules are not applied",
"nodeOff": "The firewall is enabled at datacenter level but not on this node"
}
}
},
"storage": {
"orphaned_volumes": {
"title": "Volume assignment",
"rationale": "Compares the volumes returned by `pvesm list` against the existing guest configurations. Only non-shared storage is examined: on shared storage a volume may belong to a guest running on another node.",
"summary": {
"none": "No orphaned volumes were found",
"found": "{count} volume(s) belong to no existing guest"
}
}
}
},
"summaryFallback": "The check could not be evaluated",
"acceptRisk": {
"action": "Accept risk",
"revoke": "Return to active",
"title": "Accept this risk",
"reasonLabel": "Reason",
"reasonHelp": "Required. It is recorded together with the author and the date.",
"reasonPlaceholder": "e.g. Lab containers, not covered on purpose",
"expiryLabel": "Review after",
"expiryHelp": "When the period ends the finding becomes active again.",
"expiryNever": "Does not expire",
"expiry90": "90 days",
"expiry180": "180 days",
"expiry365": "1 year",
"cancel": "Cancel",
"confirm": "Accept risk"
}
}
}