The universal-props matrix flagged the Wall as a locale BYPASS: no t() anywhere. A new wall area (library/i18n/locales/<lc>/wall.json, all 11 locales, 39 keys) now carries the header, orientation and zoom controls, the loading and offline notice, each card's prayer count and "View prayers", and both dialogs (Prayer Tools, People Group Chats), with aria-labels on the close buttons, which had none. The components use the globally injected $t (createAppI18n, globalInjection). The prayer count uses vue-i18n's plural choice in English and a neutral "label: n" form elsewhere, so no language needs plural rules. Status values from the API are data and stay as they come. Headless proof: vue-i18n against the real catalogs, 8/8 (en 0/1/4 plural, ar neutral form, ar title, de label form); check:i18n-parity PASS; the bundle builds. Library catalog change: studio lands it. needs eyes: Wall of People Groups with ?lang=ar: the header, a card's prayer line, and both dialogs. |
||
|---|---|---|
| .. | ||
| api | ||
| colors | ||
| components | ||
| composables | ||
| constants | ||
| data | ||
| i18n | ||
| layouts | ||
| maps | ||
| packet | ||
| scripts | ||
| stores | ||
| styles | ||
| utils | ||
| index.js | ||
| ProfileLoader.vue | ||
| README.md | ||
library/ (@map) — the shared map template
The other half of the architecture (see ../plugin-designs/README.md):
every map in plugin-designs/<your-map>/ composes the reusable, parameterized pieces that live here.
Fix something here and every map benefits on the next build; break something here and every map
breaks — read components/WARNING.md before touching shared pieces.
| Folder | What lives there |
|---|---|
ProfileLoader.vue |
The root of every bundle: parses profile-config, loads the profile, provides the stores + config |
components/ |
Shared UI — map, legends, controls, popup (PeopleGroupDetail), tables, charts, hints (README) |
composables/ |
Shared logic — map engine (useMapInstance), provider switch, shadow-DOM styles, theming |
stores/ |
Per-instance Pinia stores (ui / map / data) — provided by ProfileLoader, injected by children |
api/ |
Data-source registry (sources.json) + fetch layer — the JAMstack runtime wiring |
colors/ |
Color sets maps opt into via profile-config.colorSet |
i18n/ |
The shared string catalogs (all maps speak the same languages) |
data/ |
Small shared datasets baked at build time (big served data lives in ../data/) |
constants/ |
Shared constants |
scripts/ |
Maintainer pipelines (posters, research) — not part of any bundle |
The rule of thumb (same as WARNING.md): custom code in your app-profile, reusable code here — and things only move from the first to the second once they've earned it.