diff --git a/AppImage/ProxMenux-1.2.4.AppImage b/AppImage/ProxMenux-1.2.4.1-beta.AppImage
similarity index 80%
rename from AppImage/ProxMenux-1.2.4.AppImage
rename to AppImage/ProxMenux-1.2.4.1-beta.AppImage
index f817c33a..4c98060d 100755
Binary files a/AppImage/ProxMenux-1.2.4.AppImage and b/AppImage/ProxMenux-1.2.4.1-beta.AppImage differ
diff --git a/AppImage/ProxMenux-Monitor.AppImage.sha256 b/AppImage/ProxMenux-Monitor.AppImage.sha256
index 9c5df53d..11adc176 100644
--- a/AppImage/ProxMenux-Monitor.AppImage.sha256
+++ b/AppImage/ProxMenux-Monitor.AppImage.sha256
@@ -1 +1 @@
-5dcad163093e68c6d7742c6724fb7df8f3d5bdd5542462f3120d2a00ad7bf699 ProxMenux-1.2.4.AppImage
+d972e4f1fa3e68bf1937135a3cec5f07dc13a04f525b5a7c566df1a2bfbb1ba7 ProxMenux-1.2.4.1-beta.AppImage
diff --git a/AppImage/components/settings.tsx b/AppImage/components/settings.tsx
index 26eb8dc3..d4b524bc 100644
--- a/AppImage/components/settings.tsx
+++ b/AppImage/components/settings.tsx
@@ -15,7 +15,7 @@ import { Input } from "./ui/input"
import { getNetworkUnit } from "../lib/format-network"
import { fetchApi } from "../lib/api-config"
import { SUPPORTED_LANGUAGES, useI18n } from "../lib/i18n/provider"
-import type { LanguageCode, LanguageStatus } from "../lib/i18n/languages"
+import type { LanguageCode } from "../lib/i18n/languages"
// GitHub Dark color palette for bash syntax highlighting
const BASH_KEYWORDS = new Set([
@@ -917,17 +917,6 @@ export function Settings() {
k => pendingChanges[k] !== -2
)
- const getLanguageStatusLabel = (status: LanguageStatus) => {
- switch (status) {
- case "complete":
- return t("settings.interfaceLanguage.statusComplete")
- case "partial":
- return t("settings.interfaceLanguage.statusPartial")
- case "needs-translation":
- return t("settings.interfaceLanguage.statusNeedsTranslation")
- }
- }
-
return (
@@ -963,25 +952,6 @@ export function Settings() {
-
-
- {SUPPORTED_LANGUAGES.map((item) => (
-
-
- {item.nativeName}
-
- {item.code}
-
-
-
{getLanguageStatusLabel(item.status)}
-
- ))}
-
diff --git a/AppImage/lib/i18n/languages.ts b/AppImage/lib/i18n/languages.ts
index 79a4908a..6bdd638b 100644
--- a/AppImage/lib/i18n/languages.ts
+++ b/AppImage/lib/i18n/languages.ts
@@ -14,13 +14,13 @@ export interface SupportedLanguage {
export const SUPPORTED_LANGUAGES: SupportedLanguage[] = [
{ code: "en", englishName: "English", nativeName: "English", status: "complete" },
+ { code: "de", englishName: "German", nativeName: "Deutsch", status: "complete" },
+ { code: "es", englishName: "Spanish", nativeName: "Español", status: "complete" },
+ { code: "fr", englishName: "French", nativeName: "Français", status: "complete" },
+ { code: "it", englishName: "Italian", nativeName: "Italiano", status: "complete" },
+ { code: "pt", englishName: "Portuguese", nativeName: "Português", status: "complete" },
{ code: "sk", englishName: "Slovak", nativeName: "Slovenčina", status: "complete" },
- { code: "es", englishName: "Spanish", nativeName: "Español", status: "needs-translation" },
- { code: "fr", englishName: "French", nativeName: "Français", status: "needs-translation" },
- { code: "de", englishName: "German", nativeName: "Deutsch", status: "needs-translation" },
- { code: "it", englishName: "Italian", nativeName: "Italiano", status: "needs-translation" },
- { code: "pt", englishName: "Portuguese", nativeName: "Português", status: "needs-translation" },
- { code: "sv", englishName: "Swedish", nativeName: "Svenska", status: "needs-translation" },
+ { code: "sv", englishName: "Swedish", nativeName: "Svenska", status: "complete" },
]
export function isSupportedLanguage(value: string | null | undefined): value is LanguageCode {
diff --git a/AppImage/lib/i18n/provider.tsx b/AppImage/lib/i18n/provider.tsx
index 07d9ca1d..f0569608 100644
--- a/AppImage/lib/i18n/provider.tsx
+++ b/AppImage/lib/i18n/provider.tsx
@@ -2,12 +2,13 @@
import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react"
import enMessages from "../../messages/en/common.json"
-import skMessages from "../../messages/sk/common.json"
+import deMessages from "../../messages/de/common.json"
import esMessages from "../../messages/es/common.json"
import frMessages from "../../messages/fr/common.json"
-import deMessages from "../../messages/de/common.json"
import itMessages from "../../messages/it/common.json"
import ptMessages from "../../messages/pt/common.json"
+import skMessages from "../../messages/sk/common.json"
+import svMessages from "../../messages/sv/common.json"
import {
DEFAULT_LANGUAGE,
LANGUAGE_STORAGE_KEY,
@@ -22,12 +23,13 @@ type TranslationParams = Record
const MESSAGE_CATALOG: Record = {
en: enMessages as MessageTree,
- sk: skMessages as MessageTree,
+ de: deMessages as MessageTree,
es: esMessages as MessageTree,
fr: frMessages as MessageTree,
- de: deMessages as MessageTree,
it: itMessages as MessageTree,
pt: ptMessages as MessageTree,
+ sk: skMessages as MessageTree,
+ sv: svMessages as MessageTree,
}
interface I18nContextValue {
diff --git a/AppImage/messages/de/common.json b/AppImage/messages/de/common.json
index 30259da8..8d736d1b 100644
--- a/AppImage/messages/de/common.json
+++ b/AppImage/messages/de/common.json
@@ -2,7 +2,7 @@
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values.",
"app": {
"title": "ProxMenux Monitor",
- "description": "Proxmox-System-Dashboard",
+ "description": "Proxmox System Dashboard",
"loading": "Laden...",
"connecting": "Verbindung zum ProxMenux Monitor herstellen",
"unknown": "Unbekannt",
@@ -144,7 +144,7 @@
"year": "1 Jahr"
},
"stats": {
- "avg": "Durchschn",
+ "avg": "avg",
"max": "max",
"min": "min"
},
@@ -840,7 +840,7 @@
"topCount": "Top {shown} von {total} Prozessen",
"loadFailed": "Prozesse konnten nicht abgerufen werden",
"lifetimeAverageTitle": "Durchschnittlicher CPU-Prozentsatz über die gesamte Lebensdauer dieses Prozesses – nützlich, um Baselines mit langer Laufzeit im Leerlauf zu finden",
- "averageShort": "Durchschn"
+ "averageShort": "avg"
},
"processInfo": {
"titleFallback": "Verfahren",
@@ -4218,7 +4218,7 @@
"total": "Gesamt",
"healthy": "Gesund",
"info": "Info",
- "warning": "Warnen",
+ "warning": "Warnung",
"critical": "Kritisch",
"unknown": "Unbekannt"
},
diff --git a/AppImage/messages/es/common.json b/AppImage/messages/es/common.json
index dce0587d..21ef3a4e 100644
--- a/AppImage/messages/es/common.json
+++ b/AppImage/messages/es/common.json
@@ -2,7 +2,7 @@
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values.",
"app": {
"title": "ProxMenux Monitor",
- "description": "Panel de control del sistema Proxmox",
+ "description": "Proxmox System Dashboard",
"loading": "Cargando...",
"connecting": "Conexión al ProxMenux Monitor",
"unknown": "Desconocido",
@@ -21,7 +21,7 @@
"cancel": "Cancelar",
"save": "Ahorrar",
"edit": "Editar",
- "close": "Cerca",
+ "close": "Cerrar",
"resetAll": "Restablecer todo",
"undo": "Deshacer",
"copy": "Copiar",
@@ -94,10 +94,10 @@
"cached": "En caché",
"total": "Total",
"free": "Gratis",
- "activeVmLxc": "Máquina virtual activa y LXC",
+ "activeVmLxc": "VM y LXC activos",
"runningCount": "{count} en ejecución",
- "vmsCount": "{count} máquinas virtuales",
- "stoppedCount": "{count} detenido",
+ "vmsCount": "{count} VMs",
+ "stoppedCount": "{count} detenidos",
"temperature": "Temperatura",
"noSensorAvailable": "No hay sensores disponibles",
"collectingData": "Recopilando datos...",
@@ -144,9 +144,9 @@
"year": "1 año"
},
"stats": {
- "avg": "promedio",
- "max": "máximo",
- "min": "mín."
+ "avg": "avg",
+ "max": "max",
+ "min": "min"
},
"errors": {
"serverUnavailableTitle": "El servidor de monitor no está disponible",
@@ -322,7 +322,7 @@
"statusValues": {
"passed": "Aprobado",
"failed": "Fallido",
- "running": "Correr",
+ "running": "En ejecución",
"aborted": "Abortado",
"unknown": "Desconocido"
}
@@ -457,7 +457,7 @@
"recommendations": "Recomendaciones"
},
"statusValues": {
- "ok": "DE ACUERDO",
+ "ok": "OK",
"warning": "Advertencia",
"critical": "Crítico",
"failed": "Fallido",
@@ -840,7 +840,7 @@
"topCount": "Principales {shown} de {total} procesos",
"loadFailed": "No se pudieron recuperar los procesos",
"lifetimeAverageTitle": "% de CPU promedio durante la vida útil de este proceso: útil para encontrar líneas de base inactivas de larga duración",
- "averageShort": "promedio"
+ "averageShort": "avg"
},
"processInfo": {
"titleFallback": "Proceso",
@@ -880,7 +880,7 @@
"runningFor": "Corriendo por"
},
"states": {
- "running": "Correr",
+ "running": "En ejecución",
"sleeping": "Durmiendo",
"diskWait": "espera de disco",
"zombie": "Zombi",
@@ -896,7 +896,7 @@
"loadingTitle": "Cargando máquinas virtuales y LXC...",
"loadingDescription": "Obteniendo el estado del contenedor VM y LXC",
"loadingError": "Error al cargar máquinas virtuales: {error}",
- "totalVmLxc": "Total de máquinas virtuales y LXC",
+ "totalVmLxc": "Total de VM y LXC",
"totalCpuAllocated": "CPU total asignada",
"totalMemory": "Memoria Total",
"totalDisk": "Disco total",
@@ -1032,11 +1032,11 @@
},
"tabs": {
"status": "Estado",
- "mounts": "monturas",
- "backups": "Copias de seguridad",
- "updates": "Actualizaciones",
+ "mounts": "Montajes",
+ "backups": "Copias",
+ "updates": "Actualiz.",
"firewall": "Cortafuegos",
- "app": "Aplicación"
+ "app": "App"
},
"actions": {
"start": "Comenzar",
@@ -1879,7 +1879,7 @@
"recommended": "Recomendado",
"warning": "Advertencia",
"critical": "Crítico",
- "ok": "DE ACUERDO",
+ "ok": "OK",
"warn": "ADVERTIR",
"crit": "CRÍTICO",
"ram": "RAM",
@@ -1979,7 +1979,7 @@
"avatar": "Avatar",
"change": "Cambiar",
"chooseImage": "Elige imagen",
- "clear": "Claro",
+ "clear": "Limpiar",
"avatarHint": "PNG, JPEG, WebP o GIF · hasta 2 MB · cuadrado precortado para obtener mejores resultados.",
"settingUp": "Configurando...",
"setupAuthentication": "Configurar autenticación",
@@ -3486,7 +3486,7 @@
"apply": "Aplicar",
"back": "Atrás",
"change": "Cambiar",
- "clear": "Claro",
+ "clear": "Limpiar",
"delete": "Borrar",
"disable": "Desactivar",
"download": "Descargar",
@@ -3969,7 +3969,7 @@
"inProgress": "Copia de seguridad manual en progreso",
"oneShotDescription": "Las copias de seguridad únicas se mantienen como trabajos congelados para que puedas inspeccionar su registro más tarde.",
"reopenLogTitle": "Reabrir registro",
- "run": "Correr",
+ "run": "Ejecutar",
"runBackup": "Ejecutar copia de seguridad",
"runOneShotBackup": "Ejecute una copia de seguridad única",
"title": "Copia de seguridad manual",
@@ -4003,7 +4003,7 @@
"blocked": "Obstruido",
"error": "Error",
"failed": "Fallido",
- "ok": "DE ACUERDO",
+ "ok": "OK",
"unknown": "Desconocido",
"warn": "Advertencia"
},
@@ -4208,7 +4208,7 @@
"title": "Estado de salud del sistema",
"description": "Comprobaciones detalladas de todos los componentes del sistema.",
"status": {
- "ok": "DE ACUERDO",
+ "ok": "OK",
"info": "Información",
"warning": "Advertencia",
"critical": "Crítico",
@@ -4218,7 +4218,7 @@
"total": "Total",
"healthy": "Saludable",
"info": "Información",
- "warning": "Advertir",
+ "warning": "Advertencia",
"critical": "Crítico",
"unknown": "Desconocido"
},
@@ -4470,7 +4470,7 @@
},
"componentStatus": {
"installing": "instalando",
- "ok": "DE ACUERDO",
+ "ok": "OK",
"failed": "fallido"
},
"time": {
@@ -4547,7 +4547,7 @@
"gridLayout": "vista de cuadrícula 2×2",
"new": "Nuevo",
"search": "Buscar",
- "clear": "Claro",
+ "clear": "Limpiar",
"searchCommands": "Comandos de búsqueda",
"onlineSource": "En línea: utilizando la API Cheat.sh",
"offlineSource": "Sin conexión: usando comandos locales",
@@ -4594,6 +4594,6 @@
"yes": "Sí",
"yourInput": "Su entrada:",
"submit": "Entregar",
- "ok": "DE ACUERDO"
+ "ok": "OK"
}
}
diff --git a/AppImage/messages/fr/common.json b/AppImage/messages/fr/common.json
index 8098a8f1..e74ca96e 100644
--- a/AppImage/messages/fr/common.json
+++ b/AppImage/messages/fr/common.json
@@ -2,7 +2,7 @@
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values.",
"app": {
"title": "ProxMenux Monitor",
- "description": "Tableau de bord du système Proxmox",
+ "description": "Proxmox System Dashboard",
"loading": "Chargement...",
"connecting": "Connexion au ProxMenux Monitor",
"unknown": "Inconnu",
@@ -144,8 +144,8 @@
"year": "1 an"
},
"stats": {
- "avg": "moyenne",
- "max": "maximum",
+ "avg": "avg",
+ "max": "max",
"min": "min"
},
"errors": {
@@ -457,7 +457,7 @@
"recommendations": "Recommandations"
},
"statusValues": {
- "ok": "D'ACCORD",
+ "ok": "OK",
"warning": "Avertissement",
"critical": "Critique",
"failed": "Échoué",
@@ -840,7 +840,7 @@
"topCount": "{shown} principaux processus sur {total}",
"loadFailed": "Échec de la récupération des processus",
"lifetimeAverageTitle": "% CPU moyen sur la durée de vie de ce processus - utile pour trouver des lignes de base d'inactivité de longue durée",
- "averageShort": "moyenne"
+ "averageShort": "avg"
},
"processInfo": {
"titleFallback": "Processus",
@@ -1879,7 +1879,7 @@
"recommended": "Recommandé",
"warning": "Avertissement",
"critical": "Critique",
- "ok": "D'ACCORD",
+ "ok": "OK",
"warn": "AVERTIR",
"crit": "CRIT",
"ram": "RAM",
@@ -4003,7 +4003,7 @@
"blocked": "Bloqué",
"error": "Erreur",
"failed": "Échoué",
- "ok": "D'ACCORD",
+ "ok": "OK",
"unknown": "Inconnu",
"warn": "Avertissement"
},
@@ -4208,7 +4208,7 @@
"title": "État de santé du système",
"description": "Vérifications détaillées de tous les composants du système",
"status": {
- "ok": "D'ACCORD",
+ "ok": "OK",
"info": "Informations",
"warning": "Avertissement",
"critical": "Critique",
@@ -4218,7 +4218,7 @@
"total": "Total",
"healthy": "En bonne santé",
"info": "Informations",
- "warning": "Avertir",
+ "warning": "Avertissement",
"critical": "Critique",
"unknown": "Inconnu"
},
@@ -4470,7 +4470,7 @@
},
"componentStatus": {
"installing": "installation",
- "ok": "D'ACCORD",
+ "ok": "OK",
"failed": "échoué"
},
"time": {
@@ -4594,6 +4594,6 @@
"yes": "Oui",
"yourInput": "Votre contribution :",
"submit": "Soumettre",
- "ok": "D'ACCORD"
+ "ok": "OK"
}
}
diff --git a/AppImage/messages/it/common.json b/AppImage/messages/it/common.json
index c6ef41fc..56a7ba42 100644
--- a/AppImage/messages/it/common.json
+++ b/AppImage/messages/it/common.json
@@ -2,7 +2,7 @@
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values.",
"app": {
"title": "ProxMenux Monitor",
- "description": "Cruscotto del sistema Proxmox",
+ "description": "Proxmox System Dashboard",
"loading": "Caricamento...",
"connecting": "Connessione al ProxMenux Monitor",
"unknown": "Sconosciuto",
@@ -144,8 +144,8 @@
"year": "1 anno"
},
"stats": {
- "avg": "media",
- "max": "massimo",
+ "avg": "avg",
+ "max": "max",
"min": "min"
},
"errors": {
@@ -840,7 +840,7 @@
"topCount": "Principali {shown} dei {total} processi",
"loadFailed": "Impossibile recuperare i processi",
"lifetimeAverageTitle": "% CPU media durante la durata di questo processo: utile per trovare linee di base inattive di lunga durata",
- "averageShort": "media"
+ "averageShort": "avg"
},
"processInfo": {
"titleFallback": "Processo",
@@ -4218,7 +4218,7 @@
"total": "Totale",
"healthy": "Salutare",
"info": "Informazioni",
- "warning": "Avvisare",
+ "warning": "Avviso",
"critical": "Critico",
"unknown": "Sconosciuto"
},
diff --git a/AppImage/messages/pt/common.json b/AppImage/messages/pt/common.json
index c5b22a40..f64e7943 100644
--- a/AppImage/messages/pt/common.json
+++ b/AppImage/messages/pt/common.json
@@ -2,7 +2,7 @@
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values.",
"app": {
"title": "ProxMenux Monitor",
- "description": "Painel do sistema Proxmox",
+ "description": "Proxmox System Dashboard",
"loading": "Carregando...",
"connecting": "Conectando ao ProxMenux Monitor",
"unknown": "Desconhecido",
@@ -144,8 +144,8 @@
"year": "1 ano"
},
"stats": {
- "avg": "média",
- "max": "máx.",
+ "avg": "avg",
+ "max": "max",
"min": "min"
},
"errors": {
@@ -840,7 +840,7 @@
"topCount": "Principais {shown} dos {total} processos",
"loadFailed": "Falha ao buscar processos",
"lifetimeAverageTitle": "% média de CPU ao longo da vida útil deste processo - útil para encontrar linhas de base ociosas de longa duração",
- "averageShort": "média"
+ "averageShort": "avg"
},
"processInfo": {
"titleFallback": "Processo",
@@ -4218,7 +4218,7 @@
"total": "Total",
"healthy": "Saudável",
"info": "Informações",
- "warning": "Avisar",
+ "warning": "Aviso",
"critical": "Crítico",
"unknown": "Desconhecido"
},
diff --git a/AppImage/messages/sk/common.json b/AppImage/messages/sk/common.json
index 4da5c504..02378b00 100644
--- a/AppImage/messages/sk/common.json
+++ b/AppImage/messages/sk/common.json
@@ -1,7 +1,7 @@
{
"app": {
"title": "ProxMenux Monitor",
- "description": "Systémový prehľad Proxmoxu",
+ "description": "Proxmox System Dashboard",
"loading": "Načítava sa...",
"connecting": "Pripájam sa k ProxMenux Monitoru",
"unknown": "Neznáme",
@@ -143,7 +143,7 @@
"year": "1 rok"
},
"stats": {
- "avg": "priemer",
+ "avg": "avg",
"max": "max",
"min": "min"
},
@@ -839,7 +839,7 @@
"topCount": "Prvých {shown} z {total} procesov",
"loadFailed": "Nepodarilo sa načítať procesy",
"lifetimeAverageTitle": "Priemerné CPU % za celý život procesu - užitočné pri hľadaní procesov, ktoré dlho bežia potichu na pozadí",
- "averageShort": "priem."
+ "averageShort": "avg"
},
"processInfo": {
"titleFallback": "Proces",
@@ -4208,7 +4208,7 @@
"title": "Stav systému",
"description": "Podrobná kontrola všetkých častí systému",
"status": {
- "ok": "V poriadku",
+ "ok": "OK",
"info": "Info",
"warning": "Upozornenie",
"critical": "Problém",
@@ -4218,7 +4218,7 @@
"total": "Spolu",
"healthy": "V poriadku",
"info": "Info",
- "warning": "Upozornenia",
+ "warning": "Upozornenie",
"critical": "Problémy",
"unknown": "Neznáme"
},
diff --git a/AppImage/messages/sv/common.json b/AppImage/messages/sv/common.json
index b9292661..4941b611 100644
--- a/AppImage/messages/sv/common.json
+++ b/AppImage/messages/sv/common.json
@@ -144,7 +144,7 @@
"year": "1 år"
},
"stats": {
- "avg": "snitt",
+ "avg": "avg",
"max": "max",
"min": "min"
},
@@ -351,7 +351,7 @@
"date": "Datum",
"device": "Anordning",
"executiveSummary": "Sammanfattning",
- "smartStatus": "SMART-status",
+ "smartStatus": "SMART-status",
"healthAssessment": "Diskhälsobedömning",
"passedUpper": "GODKÄND",
"testAgeWarning": "Den här rapporten är baserad på ett SMART-test utfört för {days} dagar sedan ({date}). Diskens hälsa kan ha ändrats sedan dess. Vi rekommenderar att du kör ett nytt SMART-test för att få uppdaterade resultat.",
@@ -840,7 +840,7 @@
"topCount": "Topp {shown} av {total} processer",
"loadFailed": "Det gick inte att hämta processer",
"lifetimeAverageTitle": "Genomsnittlig CPU% över hela processens livstid - användbart för att hitta långvariga inaktiva baslinjer",
- "averageShort": "snitt"
+ "averageShort": "avg"
},
"processInfo": {
"titleFallback": "Behandla",
@@ -4218,7 +4218,7 @@
"total": "Total",
"healthy": "Hälsosam",
"info": "Info",
- "warning": "Varna",
+ "warning": "Varning",
"critical": "Kritisk",
"unknown": "Okänd"
},
diff --git a/scripts/menus/config_menu.sh b/scripts/menus/config_menu.sh
index dcc13f73..c3adf700 100644
--- a/scripts/menus/config_menu.sh
+++ b/scripts/menus/config_menu.sh
@@ -638,14 +638,15 @@ change_language() {
local new_language
new_language=$(dialog --clear --backtitle "$BACKTITLE" \
--title "$(translate "Change Language")" \
- --menu "$(translate "Select a new language for the menu:")" 21 60 7 \
+ --menu "$(translate "Select a new language for the menu:")" 22 60 8 \
"en" "$(translate "English")" \
+ "de" "$(translate "German")" \
"es" "$(translate "Spanish")" \
"fr" "$(translate "French")" \
- "de" "$(translate "German")" \
"it" "$(translate "Italian")" \
"pt" "$(translate "Portuguese")" \
- "sk" "Slovenčina" 3>&1 1>&2 2>&3)
+ "sk" "Slovenčina" \
+ "sv" "Svenska" 3>&1 1>&2 2>&3)
if [ -z "$new_language" ]; then
dialog --clear --backtitle "$BACKTITLE" \