This guide covers the CMS for managing site pages and content blocks, the chat word filter, and the internationalization (i18n) system for managing languages and translations.
Pages (CMS)
Navigate to Content > Pages to manage publicly visible site pages.
Required permission: pages:read to view, pages:create to create, pages:edit to update, pages:delete to delete.
Page Properties
| Field | Description |
|---|---|
| Title | Page display title (1–200 characters) |
| Slug | URL path segment, e.g. about-us → /about-us. Lowercase letters, numbers, and hyphens only. Must be unique. Auto-generated from title if left blank. |
| Content | Full HTML or rich-text body (up to 500,000 characters) |
| Visibility | Who can see the page (see below) |
| Active | Whether the page is publicly accessible |
Visibility Options
| Value | Audience |
|---|---|
PUBLIC | Anyone, including unregistered visitors |
GUESTS | Only unregistered (guest) users |
REGISTERED | Only logged-in registered users |
Additionally, pages can be restricted to specific user groups. Open a page and go to the Groups tab to assign groups. When groups are assigned, only members of those groups (who also meet the visibility requirement) can access the page.
Creating a Page
- Click Create Page.
- Enter a title — a slug is automatically suggested.
- Set visibility and whether the page is active on creation.
- Click Create Page, then use the block editor to add content.
Content Blocks
Pages are composed of ordered content blocks. Each block has a type, optional name, content body, and type-specific settings.
Available block types (returned from the server, extensible):
- Blocks can be reordered by dragging or using the move-up / move-down controls.
- A block can be duplicated to create a copy below it.
- Individual blocks can be activated or deactivated without deleting them.
Slug Management
- Slugs must be unique across all pages.
- Certain slugs are reserved by the system (e.g., system routes like
login,register). The reserved slug list is returned by the API .
Word Filter
Navigate to Content > Word Filter to manage the chat word filter.
Required permission: settings:view to view, settings:edit to add/remove/toggle.
The word filter blocks or replaces words in player chat messages. Words are matched case-insensitively.
Adding Words
- Single word: Enter a word and click Add.
- Batch import: Use Batch Import Words to add up to 500 words at once.
Managing the List
- Each word entry has an active toggle. Inactive words are stored but not applied.
- Delete a word permanently using the trash icon.
Languages
Navigate to Settings > Languages to manage supported UI languages.
Required permission: languages:read to view, languages:write to create/update/delete.
Language Properties
| Field | Description |
|---|---|
| Name | Display name, e.g. "French" |
| Code | BCP 47 language code, e.g. fr or fr-FR |
| Flag | Optional emoji or image code for the language selector |
| Active | Whether players can select this language |
| RTL | Whether the language should render right-to-left |
Creating a Language
- Open Create New Language.
- Enter the name and language code (
en,de,fr-FR, etc.). - Click Create Language. The language starts with no translations — seed defaults or import a pack.
Default Language
The default language is English (en). It cannot be deleted. Other languages fall back to the default for any untranslated keys.
Simplified Chinese (zh-CN, display name 简体中文) is registered by the seed script inactive by default. Activate it when an operator is ready to expose it in the player-facing language selector.
Activating / Deactivating
Toggle a language active or inactive without deleting it. Inactive languages are hidden from the player-facing language selector.
Translations (Phrases)
Each language has a set of phrases — key/value pairs mapping translation keys to their localized strings.
Navigate to Settings > Languages > [Language] and open the Phrases tab.
Editing Phrases
- Search for a key using the search bar.
- Click a phrase row to edit the value inline.
- Use Save to persist the change.
Missing Translations
The Missing tab shows all keys that exist in the default language but have no value in the current language. Use this to track translation completeness.
Namespaces
Phrase keys use dot notation for namespacing (e.g., admin.tables.title, game.actions.fold). The Namespaces view groups phrases by their top-level prefix for easier navigation.
Importing and Exporting Language Packs
Export
Open a language and click Export. Choose format:
- JSON —
{ "key": "value", ... }structure. Suitable for programmatic editing. - CSV — RFC 4180 format with a
key,valueheader row. Suitable for spreadsheet editing. UTF-8 BOM included for Excel compatibility.
Both formats support filtering by namespace prefix.
Import (JSON)
Send a JSON object:
{
"code": "fr",
"name": "French",
"phrases": {
"common.submit": "Envoyer",
"game.fold": "Se coucher"
},
"overwrite": false
}
Set overwrite: true to replace existing phrases with the same key. Existing phrases not included in the import are left unchanged.
Import (CSV)
Upload a CSV file with Content-Type: text/csv and provide code and name as query parameters. The CSV must have a key,value header row. Quoted fields and multi-line values are supported.
Seeding Defaults
Click Seed Default Phrases to add any missing default phrases. Existing translations are not overwritten.
Email Templates
Navigate to Email > Email Templates to manage the HTML/text templates used for system and bulk emails. Templates can reference variables using {{variable_name}} syntax.
Sent email history is on the Email Logs tab of Logs.
Related
- System Emails — configure which events trigger automated emails
- Settings — Features Tab — enable
chatfeature for in-game chat