feat(monitor): add dashboard i18n infrastructure

Add the Monitor dashboard i18n provider, supported language metadata, message catalogs, fallback behavior, and the initial language selector/wiring for the AppImage UI.
This commit is contained in:
Codex
2026-08-04 17:01:02 +02:00
parent 04a028245b
commit 2109cf2508
23 changed files with 686 additions and 136 deletions
+12
View File
@@ -0,0 +1,12 @@
# Monitor dashboard translations
The ProxMenux Monitor dashboard uses a small client-side i18n layer.
- English (`en`) is the source language and the fallback.
- Slovak (`sk`) is partially translated.
- Spanish, French, German, Italian and Portuguese are registered as
community translation targets and currently fall back to English.
To add or improve a translation, copy the matching keys from
`messages/en/common.json` into your locale's `common.json` file and
translate only the values. Keep placeholders such as `{uptime}` unchanged.
+3
View File
@@ -0,0 +1,3 @@
{
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values."
}
+132
View File
@@ -0,0 +1,132 @@
{
"app": {
"title": "ProxMenux Monitor",
"description": "Proxmox System Dashboard",
"loading": "Loading...",
"connecting": "Connecting to ProxMenux Monitor",
"unknown": "Unknown",
"notAvailable": "N/A",
"serverOffline": "Server Offline",
"supportProject": "Support and contribute to the project"
},
"actions": {
"refresh": "Refresh",
"toggleTheme": "Toggle theme",
"openUserMenu": "Open user menu",
"cancel": "Cancel",
"save": "Save",
"edit": "Edit",
"close": "Close"
},
"navigation": {
"overview": "Overview",
"storage": "Storage",
"network": "Network",
"virtualMachines": "VMs & LXCs",
"hardware": "Hardware",
"backup": "Backup",
"terminal": "Terminal",
"systemLogs": "System Logs",
"security": "Security",
"settings": "Settings",
"about": "About",
"profile": "Profile",
"node": "Node",
"admin": "Admin",
"menu": "Navigation Menu"
},
"status": {
"healthy": "Healthy",
"warning": "Warning",
"critical": "Critical",
"uptime": "Uptime: {uptime}",
"node": "Node: {node}",
"connectionFailed": "ProxMenux Server Connection Failed",
"checkService": "Check that the monitor.service is running correctly.",
"serverPort": "The ProxMenux server should start automatically on port 8008",
"tryAccessing": "Try accessing:"
},
"settings": {
"title": "Settings",
"description": "Manage your dashboard preferences",
"interfaceLanguage": {
"title": "Interface language",
"description": "Choose the language used by the Monitor dashboard. Missing translations fall back to English.",
"label": "Dashboard language",
"fallbackNote": "Untranslated text is shown in English until the community fills it in.",
"statusComplete": "complete",
"statusPartial": "partial",
"statusNeedsTranslation": "community translation needed"
},
"networkUnits": {
"title": "Network Units",
"description": "Change how network traffic is displayed",
"label": "Network Unit Display"
}
},
"login": {
"subtitle": "Sign in to access your dashboard",
"username": "Username",
"password": "Password",
"usernamePlaceholder": "Enter your username",
"passwordPlaceholder": "Enter your password",
"rememberMe": "Remember me",
"missingCredentials": "Please enter username and password",
"missingTotp": "Please enter your 2FA code",
"loginFailed": "Login failed",
"signingIn": "Signing in...",
"signIn": "Sign In",
"twoFactorTitle": "Two-Factor Authentication",
"twoFactorDescription": "Enter the 6-digit code from your authentication app",
"authenticationCode": "Authentication Code",
"backupCodeHint": "You can also use a backup code (format: XXXX-XXXX)",
"backToLogin": "Back to login",
"verifyCode": "Verify Code",
"version": "ProxMenux Monitor v1.2.4.1-beta"
},
"account": {
"signedIn": "Signed in",
"viewProfile": "View profile",
"security": "Security",
"signOut": "Sign out"
},
"authSetup": {
"choiceTitle": "Setup Dashboard Protection",
"passwordTitle": "Create Password",
"protectTitle": "Protect Your Dashboard?",
"protectDescription": "Add an extra layer of security to protect your Proxmox data when accessing from non-private networks.",
"setupPassword": "Yes, Setup Password",
"skipProtection": "No, Continue Without Protection",
"enableLater": "You can always enable this later in Settings",
"setupTitle": "Setup Authentication",
"setupDescription": "Create a username and password to protect your dashboard",
"fillFields": "Please fill in all fields",
"passwordMismatch": "Passwords do not match",
"passwordTooShort": "Password must be at least 6 characters",
"skipFailed": "Failed to skip authentication",
"savePreferenceFailed": "Failed to save preference",
"setupFailed": "Failed to setup authentication",
"username": "Username",
"usernamePlaceholder": "Enter username",
"password": "Password",
"passwordPlaceholder": "Enter password",
"confirmPassword": "Confirm Password",
"confirmPasswordPlaceholder": "Confirm password",
"profileOptional": "Profile · optional",
"displayName": "Display name",
"displayNamePlaceholder": "Shown above the username in the menu",
"displayNameHint": "Leave empty to render the username itself. Up to 64 characters.",
"avatar": "Avatar",
"change": "Change",
"chooseImage": "Choose image",
"clear": "Clear",
"avatarHint": "PNG, JPEG, WebP or GIF · up to 2 MB · pre-crop square for best results.",
"settingUp": "Setting up...",
"setupAuthentication": "Setup Authentication",
"back": "Back"
},
"about": {
"releaseNotes": "Release notes",
"changelog": "Changelog"
}
}
+3
View File
@@ -0,0 +1,3 @@
{
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values."
}
+3
View File
@@ -0,0 +1,3 @@
{
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values."
}
+3
View File
@@ -0,0 +1,3 @@
{
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values."
}
+3
View File
@@ -0,0 +1,3 @@
{
"_meta": "Community translation target. Copy keys from ../en/common.json and translate the values."
}
+132
View File
@@ -0,0 +1,132 @@
{
"app": {
"title": "ProxMenux Monitor",
"description": "Systémový prehľad Proxmoxu",
"loading": "Načítava sa...",
"connecting": "Pripájam sa k ProxMenux Monitoru",
"unknown": "Neznáme",
"notAvailable": "Nedostupné",
"serverOffline": "Server je offline",
"supportProject": "Podporte projekt alebo prispejte vlastnými úpravami"
},
"actions": {
"refresh": "Obnoviť",
"toggleTheme": "Prepnúť vzhľad",
"openUserMenu": "Otvoriť používateľské menu",
"cancel": "Zrušiť",
"save": "Uložiť",
"edit": "Upraviť",
"close": "Zavrieť"
},
"navigation": {
"overview": "Prehľad",
"storage": "Úložiská",
"network": "Sieť",
"virtualMachines": "VM a LXC",
"hardware": "Hardvér",
"backup": "Záloha",
"terminal": "Terminál",
"systemLogs": "Systémové logy",
"security": "Bezpečnosť",
"settings": "Nastavenia",
"about": "O projekte",
"profile": "Profil",
"node": "Server",
"admin": "Správa",
"menu": "Navigačné menu"
},
"status": {
"healthy": "V poriadku",
"warning": "Upozornenie",
"critical": "Problém",
"uptime": "Beží: {uptime}",
"node": "Server: {node}",
"connectionFailed": "Nepodarilo sa pripojiť k ProxMenux serveru",
"checkService": "Skontrolujte, či služba monitor.service beží správne.",
"serverPort": "ProxMenux server by sa mal spustiť automaticky na porte 8008",
"tryAccessing": "Skúste otvoriť:"
},
"settings": {
"title": "Nastavenia",
"description": "Spravujte správanie dashboardu",
"interfaceLanguage": {
"title": "Jazyk rozhrania",
"description": "Vyberte jazyk, ktorý bude používať Monitor dashboard. Texty bez prekladu sa zobrazia po anglicky.",
"label": "Jazyk dashboardu",
"fallbackNote": "Nepreložené texty zostanú po anglicky, kým ich komunita nedoplní.",
"statusComplete": "hotové",
"statusPartial": "čiastočne preložené",
"statusNeedsTranslation": "čaká na komunitný preklad"
},
"networkUnits": {
"title": "Jednotky siete",
"description": "Zmeňte, ako sa zobrazuje sieťová prevádzka",
"label": "Zobrazovanie sieťových jednotiek"
}
},
"login": {
"subtitle": "Prihláste sa do dashboardu",
"username": "Používateľské meno",
"password": "Heslo",
"usernamePlaceholder": "Zadajte používateľské meno",
"passwordPlaceholder": "Zadajte heslo",
"rememberMe": "Zapamätať si ma",
"missingCredentials": "Zadajte používateľské meno aj heslo",
"missingTotp": "Zadajte 2FA kód",
"loginFailed": "Prihlásenie zlyhalo",
"signingIn": "Prihlasujem...",
"signIn": "Prihlásiť sa",
"twoFactorTitle": "Dvojfaktorové overenie",
"twoFactorDescription": "Zadajte 6-miestny kód z overovacej aplikácie",
"authenticationCode": "Overovací kód",
"backupCodeHint": "Môžete použiť aj záložný kód vo formáte XXXX-XXXX",
"backToLogin": "Späť na prihlásenie",
"verifyCode": "Overiť kód",
"version": "ProxMenux Monitor v1.2.4.1-beta"
},
"account": {
"signedIn": "Prihlásený",
"viewProfile": "Zobraziť profil",
"security": "Bezpečnosť",
"signOut": "Odhlásiť sa"
},
"authSetup": {
"choiceTitle": "Nastavenie ochrany dashboardu",
"passwordTitle": "Vytvoriť heslo",
"protectTitle": "Chcete chrániť dashboard?",
"protectDescription": "Pridajte ďalšiu vrstvu ochrany pre svoje Proxmox dáta, hlavne pri prístupe mimo súkromnej siete.",
"setupPassword": "Áno, nastaviť heslo",
"skipProtection": "Nie, pokračovať bez ochrany",
"enableLater": "Ochranu môžete zapnúť aj neskôr v Nastaveniach",
"setupTitle": "Nastavenie prihlásenia",
"setupDescription": "Vytvorte používateľské meno a heslo na ochranu dashboardu",
"fillFields": "Vyplňte všetky polia",
"passwordMismatch": "Heslá sa nezhodujú",
"passwordTooShort": "Heslo musí mať aspoň 6 znakov",
"skipFailed": "Nepodarilo sa preskočiť prihlásenie",
"savePreferenceFailed": "Nepodarilo sa uložiť nastavenie",
"setupFailed": "Nepodarilo sa nastaviť prihlásenie",
"username": "Používateľské meno",
"usernamePlaceholder": "Zadajte používateľské meno",
"password": "Heslo",
"passwordPlaceholder": "Zadajte heslo",
"confirmPassword": "Potvrdiť heslo",
"confirmPasswordPlaceholder": "Zadajte heslo znova",
"profileOptional": "Profil · voliteľné",
"displayName": "Zobrazované meno",
"displayNamePlaceholder": "Zobrazí sa nad používateľským menom v menu",
"displayNameHint": "Ak pole necháte prázdne, zobrazí sa samotné používateľské meno. Najviac 64 znakov.",
"avatar": "Avatar",
"change": "Zmeniť",
"chooseImage": "Vybrať obrázok",
"clear": "Vymazať",
"avatarHint": "PNG, JPEG, WebP alebo GIF · najviac 2 MB · najlepšie funguje štvorcový obrázok.",
"settingUp": "Nastavujem...",
"setupAuthentication": "Nastaviť prihlásenie",
"back": "Späť"
},
"about": {
"releaseNotes": "Poznámky k vydaniu",
"changelog": "Zoznam zmien"
}
}