doxa-maps/library/i18n
Doxa Maps 807c78cc64 Every Experimental map carries its own hosted ?, where its controls already are
Map controls: prayer-walk-planner (under fullscreen), gospel-internet (the map and the language
tree, the board's default view), country-posters (the country map, its entry profile) and
all-people-groups get the library HelpButton with hosted. Own bars, where there is no control
column: the Wall (after the Bless/Social toggle), the PPLR hub (the end of its view bar) and the
vision card (its top corner, at the end of the reading direction so Arabic mirrors it) use
useHostedHelp. The vision card's label is the library's own "About this map" in each of the
eleven locales, copied into vision.json rather than translated again. UPG Neighbor is left as it
is: its bar already has an About button that opens the full explainer.

Each "?" stays hidden until a host marks its pane, so nothing changes until the app answers.
2026-09-29 02:35:35 +00:00
..
locales Every Experimental map carries its own hosted ?, where its controls already are 2026-09-29 02:35:35 +00:00
index.js CLDR plural selection, and the "N countries / N regions" keys it was blocking 2026-09-28 23:23:56 +00:00
README.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
useRegionsI18n.js A country map you can drop on one page, without the dashboard around it 2026-09-29 01:38:07 +00:00

library/i18n/ — the map's translations

One of the three customization seams (colors/, api/, i18n/). This one owns every user-facing string. Translations are one folder per locale, one JSON file per area, inlined at build time into a Vue I18n instance (one per <doxa-map>, so embeds don't bleed state).

  i18n/
  ┌───────────────────────────────┐
  │ index.js   ← engine, don't edit │
  │ locales/                        │
  │   en/  buttons.json legend.json …│  ← en is the source of truth + fallback
  │   es/ ar/ zh/ …  (same keys)     │  ← 11 shipped locales, drop in your own
  └───────────────────────────────┘
     filename → namespace:  buttons.json → $t('buttons.prayForThem')
  • 11 shipped locales; ar renders right-to-left (RTL_LOCALES).
  • Add a language by copying locales/en/ to locales/<code>/ — never by editing index.js (except adding the code to SUPPORTED_LOCALES).
  • Missing keys fall back to English silently.

Adding or overriding a locale? The full contract (locale matrix, checklist, integration) is in ../../documentation/architecture/i18n.md.