Backend keeps every guest's modal payload (details, backups, apps, schedule, mount points) warm in-memory and exposes them through a single `/api/vms/modal-cache-all` endpoint. The dashboard hydrates its entire modal cache from that one request on page load, so opening any guest — first click or after coming back later — renders instantly. Replaces ~84 per-guest fetches with 1.
## i18n
- Swedish (sv) wired end-to-end: `MESSAGE_CATALOG` in `provider.tsx` now imports `sv/common.json`; `SUPPORTED_LANGUAGES` reordered as English + alphabetical native and all eight locales marked complete.
- Settings → Interface language: the per-locale status cards grid is retired now that all eight locales are populated end-to-end; the dropdown selector is the only control.
- CLI change-language dialog (`scripts/menus/config_menu.sh`) picks up Swedish and matches the Monitor ordering.
- Spanish catalog: label polish across the dashboard — *VM y LXC activos* / *11 VMs* / *11 detenidos*, LXC modal tabs shortened to *App / Actualiz. / Montajes / Copias*, *Limpiar / Cerrar* replacing the wrong *Claro / Cerca* in terminal controls, *En ejecución / Ejecutar* replacing the literal *Correr*.
- Cross-locale normalisation across ES / DE / FR / IT / PT / SK / SV: *OK* / *Proxmox System Dashboard* / *Warn* labels stay consistent, *AVG / MAX / MIN* kept verbatim as universal abbreviations so the stats row no longer overflows.
- Tailscale brand preserved verbatim across ES / FR / IT / PT — previous machine-translated variants like *"escala trasera"* / *"à grande échelle"* restored.
## Docs
- `ROADMAP.md` rewritten as a short invitation to the [ProxMenux Roadmap project board](https://github.com/users/MacRimi/projects/1). `ROADMAP.es.md` removed — it mirrored the same outdated version-milestone plan and the docs site keeps the Spanish surface for users who need it.
- `release.md` annotated with nine pending sections for the v1.2.4.1 beta cycle.
## AppImage
- `ProxMenux-1.2.4.1-beta.AppImage` replaces the previous `ProxMenux-1.2.4.AppImage`. Sidecar `ProxMenux-Monitor.AppImage.sha256` regenerated.
The document now points to the ProxMenux Roadmap project on GitHub, where per-item status, ownership and descriptions live. The previous version-milestone plan (v1.2.2-beta / v1.2.3-beta / v1.3.0) is retired in favour of pillar-based tracking on the board.
ROADMAP.es.md removed — it mirrored the same outdated content and the public docs site keeps the Spanish surface for users who need it.
Rebuild of the 7 supported translation catalogs (ES/DE/FR/IT/PT/SK/SV) covering Monitor (`AppImage/messages/<lang>/common.json`, 3903 keys each) and CLI (`lang/<lang>.json`, 5272 keys each). Swedish (sv) is added as a new locale end-to-end.
Two related changes to the translation infrastructure:
1. Add Swedish (sv) as a supported locale in both the CLI and Monitor
translation systems. Inspired by PR #121, which arrived before the
current auto-generated cache layout existed.
2. Include Slovak (sk) in the default auto-fill target set. Guardrail #1
in build_i18n_messages.py never overwrites a key whose target value
differs from EN, so Vaso73's curated Slovak strings stay intact —
auto-translation only fills keys that are still on the English
fallback. Trade-off accepted: sk users see decent machine translation
for new keys immediately instead of raw English while human curation
catches up, and Vaso73 keeps full ownership of the wording via
follow-up PRs.
Changes:
- AppImage/lib/i18n/languages.ts: add "sv" to LanguageCode + register
in SUPPORTED_LANGUAGES.
- AppImage/messages/sv/common.json: stub — will be filled by the i18n
workflow on the local bootstrap.
- .github/scripts/build_translation_cache.py: add "sv" to
DEFAULT_LANGUAGES.
- .github/scripts/build_i18n_messages.py: add "sk" and "sv" to
DEFAULT_LANGUAGES; update comments to explain the sk decision.
- .github/workflows/build-i18n-messages.yml: default input includes
sk + sv; comments updated to match.
Adds .github/scripts/build_i18n_messages.py and its companion workflow
build-i18n-messages.yml, so keys added to AppImage/messages/en/common.json
propagate automatically to es/de/fr/it/pt on push.
Guardrails:
- Never overwrites a key whose target value differs from EN, protecting
human-curated locales (Vaso73's sk is excluded from the default set
entirely).
- {placeholder} tokens are extracted to opaque tokens before the
translator sees the text and restored afterwards, so interpolation
keys stay intact regardless of provider behavior.
Mirrors the pattern of build-translation-cache.yml (CLI translations)
and reuses its providers (googletrans / google-web / appimage), so the
CI environment stays uniform between the two workflows.
First run will bootstrap ~3800 keys × 5 locales; subsequent runs only
process new keys added to en/common.json.
Bump FUNC_VERSION from 1.1 to 1.2 in the setup_persistent_network wrapper
for both customizable and auto post_install variants.
Rationale:
The generator pmx_setup_persistent_network in utils-install-functions.sh
now emits `.link` files with Kind=!bridge (PR #280), so existing installs
need their `.link` files regenerated to pick up the fix. Bumping the
wrapper's FUNC_VERSION triggers the Monitor + CLI post-install version
tracker to surface persistent_network as a pending update, prompting
users to re-run the optimization — which regenerates the files with the
fix applied.
Not touched:
- network_menu.sh copy of setup_persistent_network: uses a simpler
register_tool() that doesn't track versions (menu-driven invocation
is on-demand, not tracked as auto-update-eligible by design).