Localisation
Help pages carry no text of their own. A page is addressed entirely by localisation keys, which live
in your mod’s Locales/*.json — so pages follow the player’s language with no extra work.
The two keys
For a page registered with pageKeyPrefix: "mymod:itemname_widget":
| Key | Shows as |
|---|---|
mymod:itemname_widget |
The page title, in the sidebar and page header |
help_mymod:itemname_widget_content |
The page body, rendered as Markdown |
{
"mymod:itemname_widget": "Widget",
"help_mymod:itemname_widget_content": "**Widget** does something useful."
}
If you opened your own category, its key needs an entry too.
HelpLinks.ContentKey("mymod:itemname_widget") returns the content key, which is useful when
generating locale files or checking coverage in a build step.
Missing keys are reported
A page with no content key still registers and still appears in the sidebar — it just renders empty, which is a confusing thing to debug. The library checks and tells you once per page:
[HelpApi] Page 'furniture-mymodwidget' from 'MyMod' is missing localisation for
'help_mymod:itemname_widget_content' (page body). Add the keys to your mod's
Locales/*.json or the page will render blank.
Markdown
Bodies are Markdown. What the base game’s own pages use:
**Gift Shop** businesses operate out of retail buildings.
Customers are self-serving.
The business requires the following furniture to function:
* [Stack of Shopping Baskets](furniture-stackofshoppingbaskets)
* [Point of Sales](furniture-itemgrouppointofsale)
**Customer Capacity:** 15
Supported and worth using:
**bold**for the subject of a sentence and for stat labels*bullet lists for requirements and contents##headings for longer pages- blank lines between paragraphs — write
\n\nin JSON
Links
Links use ordinary [text](target) syntax, but the target is not a URL. The renderer routes it
through the help system.
To another help page
The target is a slug — base-game or from any mod:
See also: [Commercial Tumble Dryer](furniture-laundromatdryer)
HelpLinks.Page("Commercial Tumble Dryer", "furniture-laundromatdryer")
To a building
An address: target focuses that building on the city map. The format is the street number, a
space, then the street abbreviation:
The furniture can be purchased from the following locations:
* [Essentials Appliances](address:16 11s)
* [Ika Bohag](address:50 4s)
HelpLinks.Address("Essentials Appliances", 16, "11s")
Linking to pages you do not own
A link to a slug that does not exist renders as dead text. If you are linking to another mod’s page, guard it:
if (HelpApi.PageExists(slug))
body += HelpLinks.Page(text, slug);
Base-game slugs are stable enough to link to directly — importers-contract,
businesstypes-headquarters and furniture-itemgrouppointofsale are all commonly referenced.
Writing style
Matching the base game’s voice makes pages feel native. Its pattern:
- Open with the subject in bold and what it fundamentally is.
- State mechanics plainly — capacity, footprint, prices — as
**Label:** valuelines. - List requirements or contents as bullets, each linked.
- Close with where to buy it, or a See also link.
**Commercial Washing Machine** sells a wash cycle to customers in a [Laundromat](businesstypes-laundromat).
**Customer Capacity:** 3 per hour
**Footprint:** 1.0m x 1.0m
Machines accumulate dirt as they are used. A dirty business loses customers, so plan for cleaning staff as you scale up.
The furniture can be purchased from the following locations:
* [Essentials Appliances](address:16 11s)
* [Square Appliances](address:16 4a)
See also: [Commercial Tumble Dryer](furniture-laundromatdryer)
Other languages
Add the same keys to each locale file your mod ships — en.json, nl.json, and so on. The help
window re-reads its structure on a language change, and the library re-applies your pages
automatically, so no code changes are needed.