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" \