Customize a Module's Words
Rename what staff and customers read in a Module, and add a language, without editing the Module.
Every word a Module shows comes from its message catalog, one key per string, in English and Thai. You change those words in files your app owns. The Module's catalog keeps getting updates, and your changes are laid over it each time the app builds.
Pick the right place
| You want to | Use |
|---|---|
| Name pages for a kind of business ("Fleet", "Members") | A business type, picked by the owner |
| Reword any string for your app | A per-language override file |
| Rename, move or hide an admin sidebar area or page | The admin overrides file (see Extend a Module) |
| Show the app in another language | An override file for that language, plus the app's own strings in it |
A business type needs no code. Try it before you override anything: it may already have the words you want.
Override a string
Your coding agent puts the same key the Module uses in the app's override file for that language,
apps/web/src/lib/i18n/overrides/<locale>.json, with your text. The app applies overrides last, so they win over the Module's text on every screen and
in every email that uses the key.
An override can only replace a key that exists. One for a key no Module defines fails the build
and names the key, so a typo or a key an update removed can't sit there unnoticed. Strings
for your own features are new keys and go in the app's own catalog,
apps/web/src/lib/i18n/substrate/<locale>.json, not in an override.
Module tests look strings up by key, not by their English text, so your rewording changes what the tests expect along with the screen. You don't need to touch the Module's tests.
Add a language
The Modules ship English and Thai. For another language, your agent adds:
- an override file for that language, translating the Modules' keys;
- a translation of every key in the app's own catalog. A partial one marks the language incomplete, and the owner can't switch it on;
- the language code to
INSTALLED_LOCALE_CODESinapps/web/src/lib/i18n/locales.ts. Until it's there, typecheck and the build fail and name the missing code.
A key the override file doesn't translate shows in English.
After an update
The update can change what a Module's English text means. Check each key you override against the Module's new English and reword yours where the meaning moved. See Updates.
The rules your agent follows are in your app's AGENTS.md § "Modules (reusable capabilities)".