Platform admin
Translation manager (edit any language)
The Translation manager at /admin/translations
(super-admin only) lets you edit the value of any string in any
shipped language and fill in missing strings — entirely from the UI,
with changes live on the next request. No redeploy, no editing JSON
files.
How it works — files stay the baseline, the DB wins
The app ships ~2,500 strings across 130+ languages as
lang/{locale}.json files. Those files remain the
canonical set of keys (the English source string is
the key) and the shipped defaults. Your edits are stored as
overrides in the translation_overrides
table and layered on top at runtime — an override wins for its
(locale, key). The original files are never modified, so
a deploy can ship new baseline translations without clobbering your
customisations, and resetting a string simply removes the override.
Overrides apply everywhere the app reads a string: the admin + customer
SPA, the visitor widget, and the marketing pages all resolve through
the same override-aware loader. The bare __() helper
(validation messages, emails) is override-aware too.
Editing a language
- Open
/admin/translations— each language shows a progress bar (translated / total), a missing count, and an edited (override) count. Click a language to open its editor. - Use the search box to find a string by its English source or current value, and the All / Missing / Edited tabs to narrow the list. Missing = a key with no translation in this language yet; Edited = a key you've overridden.
- Type the translation into the field and click Save. The change is live immediately.
- Reset (the ↺ button, shown on edited rows) removes your override and restores the shipped file value.
Notes
- You edit the values for the existing key set; you can't invent brand-new keys here, because only keys the app actually renders (the English source strings) are ever looked up. New keys appear when developers add new English strings to the source.
- English (
en) is the source language. You can still override English wording if you want to reword the product copy. - Octane note: the SPA, widget, and marketing surfaces reflect an
edit on the very next request (a shared-cache version bump
invalidates every worker). Server-side
__()in long-lived workers (validation/emails) picks the change up on the next worker that loads the locale.