Working with Modules

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 toUse
Name pages for a kind of business ("Fleet", "Members")A business type, picked by the owner
Reword any string for your appA per-language override file
Rename, move or hide an admin sidebar area or pageThe admin overrides file (see Extend a Module)
Show the app in another languageAn 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:

  1. an override file for that language, translating the Modules' keys;
  2. 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;
  3. the language code to INSTALLED_LOCALE_CODES in apps/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)".