Overview
Implement a downloadable language-pack system that allows optional locales (such as id-ID) to be installed independently from the StaffDeck application, while Chinese and English remain bundled as the base languages.
Proposed Directory Layout
language-packs/
manifest.json # Root manifest listing all available packs
<locale>/
manifest.json # Per-pack metadata
catalog.json # Translation key-value pairs
Pack Manifest Fields (language-packs/<locale>/manifest.json)
| Field |
Description |
locale |
BCP 47 locale code (e.g., id-ID) |
name |
English name (e.g., Indonesian) |
nativeName |
Native name (e.g., Bahasa Indonesia) |
version |
Pack version (semver) |
minAppVersion |
Minimum StaffDeck version this pack is compatible with |
sourceCatalogHash |
SHA-256 hash of the source en.json used to generate this pack |
sha256 |
SHA-256 checksum of the catalog.json file |
Runtime Behavior
- Application starts with
zh-CN and en-US bundled as base
-
- User selects an uninstalled locale (e.g.,
id-ID) from the LanguageSwitcher
-
- Frontend requests the pack from the backend endpoint (e.g.,
GET /api/v1/language-packs/<locale>)
-
- Backend serves the pack only if
minAppVersion matches the running version
-
- Frontend verifies the SHA-256 checksum of the downloaded catalog
-
- Pack is cached in the application data directory for offline use
-
- Fallback order: selected locale → English → Chinese source
First Language Pack: id-ID
The id-ID pack will be the first standalone language pack built from the existing translations at PR #21. Once the loader infrastructure is merged, the translations will be rebased and restructured as the first installable pack.
Out of Scope (separate follow-ups)
- Language pack update/auto-update mechanism
-
- Language pack CDN distribution
-
-
- Community-contributed pack submission process
Tasks
Overview
Implement a downloadable language-pack system that allows optional locales (such as
id-ID) to be installed independently from the StaffDeck application, while Chinese and English remain bundled as the base languages.Proposed Directory Layout
Pack Manifest Fields (
language-packs/<locale>/manifest.json)localeid-ID)nameIndonesian)nativeNameBahasa Indonesia)versionminAppVersionsourceCatalogHashsha256Runtime Behavior
zh-CNanden-USbundled as baseid-ID) from the LanguageSwitcherGET /api/v1/language-packs/<locale>)minAppVersionmatches the running versionFirst Language Pack: id-ID
The
id-IDpack will be the first standalone language pack built from the existing translations at PR #21. Once the loader infrastructure is merged, the translations will be rebased and restructured as the first installable pack.Out of Scope (separate follow-ups)
Tasks