Driver request, 2026-09-25: "add a spot on the studio for placing a Mapbox token, or setting the URL for where the Mapbox token API is from, like doxa.life has an API token". A 🔑 Map token button in the studio header opens a small panel: - paste a Mapbox PUBLIC token (pk.…) — a secret sk.… token is refused, the page is public; - or a token-service URL: the studio fetches it (JSON {token|tk|accessToken} or a bare string, the leaf pages' contract) and uses the pk.… it returns. The maps never read a token URL themselves, so the studio resolves it and hands them the token; - Clear returns to the token built into the page. A dot and a status line say which is in use. Precedence: your token > a token from your URL > the host's tk > the page's built-in token. Kept in this browser's localStorage only; applying re-mounts the open map and publishes window.MAP_TOKEN for maps nested inside composites. Labels in all 11 locales (i18n parity PASS). Tested in a browser on the built studio: shows the built-in source; sk.… refused and not stored; a pasted pk.… reaches the pane's profile-config and window.MAP_TOKEN and survives a reload; Clear restores the built-in token; a token URL is fetched and applied. https://doxa.life/api/maps/token is refused cross-origin from another site — the panel says so and keeps the current token. |
||
|---|---|---|
| .. | ||
| locales | ||
| index.js | ||
| README.md | ||
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;
arrenders right-to-left (RTL_LOCALES). - Add a language by copying
locales/en/tolocales/<code>/— never by editingindex.js(except adding the code toSUPPORTED_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.