Translate a fork
Offer your fork in other languages with a translation file, translated by a person or an AI assistant.
A fork is written in one language, its source language, chosen when you create it. Everything is edited in that language: the title and the texts of the game, in place as well as in the panel. The other languages are translations: you download a file that holds every text of the fork, have it translated outside Maketools (by a translator, an agency or your own AI assistant), then import it.
Players only see a language once its translation is complete: never a half-translated game.
The Languages tab
Each fork has a Languages tab, next to Edit, Releases and Access. It lists one row per language:
| Row | What it shows |
|---|---|
| Source language | The language you edit the fork in. It cannot be removed. |
| Complete Translation | Every text is translated: the language will be offered to players in the next release. |
| Incomplete Translation | The number of texts "to translate". The language is not offered to players while any remain. |
Each translation offers Download the file, Import a file and Remove. Add a language downloads the file of a new language, to translate entirely; the language appears in the list as soon as you import that file.
Owners, admins and editors manage the languages of a fork. The source language is chosen at creation and never changes: to write the game in another language, create a new fork in that language.
Available languages
A fork can be offered in English, French, Spanish, Portuguese and German. Its source language is one of the languages the game ships in (shown on its catalogue card); any other of these five languages can be added as a translation. The game's own texts (pause menu, end screen, skills) follow the language of the game. The Maketools interface, emails and reports stay in English or French.
Translate in three steps
- Download the file of the language you want (or Add a language). It holds every text
of the fork in the source language, and the translation already done when it is up to date.
It is saved as
<fork>.<source>-<target>.json, for exampleonboarding-2026.fr-en.json. - Have it translated: fill in every empty
target, by hand or with a tool. The file carries its own instructions: a translator or an AI assistant can handle it with no other explanation. - Import the file on the row of the same language. Maketools checks each translation and shows a report (see below). Importing replaces the translation of that language with the file's: always start from the latest downloaded file, which already holds the up-to-date translations.
Do it again whenever you like: after a content change, the next file only has what changed left to translate.
The translation file
A readable JSON file, designed to be translated without the app. Example for a Prompt Quest fork written in French and translated into English:
{
"format": "maketools.translation",
"version": 1,
"instructions": "Translate every entry from `sourceLocale` into `targetLocale`: write the translation in `target`, keeping `source` unchanged. Fill every empty `target`; keep an existing `target` unless it is wrong. Never change `id`. `context` tells where the text appears in the game. Respect `maxLength` (characters). Keep line breaks, numbers, names and {placeholders}; do not add HTML. Return the whole file as valid JSON.",
"gameId": "prompt-quest",
"major": 1,
"forkId": "0192a4f0-7c1e-7b3a-9d2e-5f6a7b8c9d0e",
"title": "Parcours prompt 2026",
"sourceLocale": "fr",
"targetLocale": "en",
"exportedAt": "2026-09-24T09:30:00.000Z",
"entries": [
{
"id": "/fork/title",
"context": "Titre du fork",
"maxLength": 80,
"source": "Parcours prompt 2026",
"target": "Prompt path 2026"
},
{
"id": "/content/rounds/0/title",
"context": "Manches › Manche 1 › Titre de manche",
"maxLength": 60,
"source": "Le village",
"target": ""
}
]
}
| Field | Role | What to do |
|---|---|---|
target |
The translation of the text. Empty = "to translate". | Fill it in. |
source |
The text in the source language, at the time of the export. | Do not change it: it identifies the text on import. |
id |
Where the text sits in the game (/fork/title = title of the fork). |
Do not change it. |
context |
Where the text appears, in the editor's words (in the source language). | Helps translating; ignored on import. |
maxLength |
Maximum number of characters of the translation. | Respect it: a longer translation is refused. |
instructions |
The instructions for the translator. | Helps translating; ignored on import. |
format, version, gameId, major, forkId, title, sourceLocale, targetLocale, exportedAt |
Identify the file, the fork and the languages. | Do not change them: a file from another fork or for another language is refused. |
The text rules are the editor's: plain text, no HTML (a < followed by a letter, /, ! or
? is refused, see Edit your draft). Keep line breaks, numbers, names and
{placeholders}. A file is 1 MB at most.
Have it translated by an AI assistant
Maketools calls no AI: you choose the tool and remain in control of what it produces. A chat assistant translates this file very well. Give it the whole file (attached or pasted) with an instruction like this one, to adapt:
Here is a Maketools JSON translation file. Translate every text of the "source" field
(French) into English, in the "target" field of the same entry, following the file's
"instructions" field.
- Do not change any other field: not "id", "source", "context" or "maxLength", nor the
file header. Do not remove, add or reorder any entry.
- Fill in every empty "target". Keep a "target" already filled in, unless it is wrong.
- Never exceed "maxLength" characters; shorten the translation when needed.
- Keep line breaks, numbers, proper names and {placeholders}. Do not add HTML.
- Audience: professionals in training; clear, direct tone. Terms to keep as they are:
"prompt", our company name.
Return the complete file, as valid JSON, with no text before or after it.
A few precautions:
- A long file may be cut short by the assistant. The import report lists the texts still to translate: ask for the rest, or split the work by asking for "entries 1 to 100", then "101 to 200", and paste the results back into a single file.
- Review before publishing: test the fork in the translated language. An AI can mistranslate a business term or an expected answer.
- Your data: the file holds the content of your game (no player data). Sending it to an external AI service is subject to your organisation's rules.
The import report
After each import, Maketools shows:
- the imported translations;
- the refused translations, with the reason: too long (over
maxLength), text refused (HTML or forbidden characters), or an identifier repeated in the file. Fix them in the file and import it again; - the outdated texts: their source text changed since the export. They are "to translate" again;
- the unknown identifiers, ignored: the text was removed from the fork since the export;
- the remaining texts to translate, with where they appear in the game.
The whole file is refused, without changing anything, if it is not a valid Maketools translation file (malformed JSON, a header field changed), if it comes from another fork, or if it does not match the source language of the fork or the language of the row you import it on. Download a fresh file from the right row.
Translated texts also go through the checks specific to the game, as when editing: for example, a passage to highlight must appear word for word in the text that holds it, in every language.
When you change a source text
Changing a text in the source language makes it "to translate" in every translation: its
translation no longer matches. The editor shows the number of texts to translate, and the
Languages tab details them. The next downloaded file holds them with an empty target.
- Reordering or duplicating elements loses no translation: an identical text keeps its translation, wherever it is.
- If you put a text back to its previous value, its translation comes back.
- The deployed release does not change: its languages stay offered to players until you deploy a new one.
What players see
A release freezes the draft and its translations. It offers players the source language and the translations that are complete when it is created. An incomplete translation is left out: the studio warns you before you create the release, so that you can finish it first.
Players play in the language of the site if the release offers it, otherwise in the source language. When the release offers several languages, they change it with the Game language selector before playing. The fork title is translated like the rest of the content.
Check a translation in the editor
In the editor, the language selector of the preview shows the game in the source language or in a translation. A translation is shown read-only: the texts still to translate appear in the source language, and Update the translation leads to the Languages tab. To play a translation from start to end, test the fork in that language.
Remove a language
Remove deletes the translation from the draft, after confirmation. Releases already created keep it: the deployed release keeps offering it until you deploy a release without it. To bring it back, download its file again from Add a language.
Languages taken from the game
Catalogue games exist in several languages. When you fork a game, its other languages are taken over as complete translations of your fork: a Prompt Quest fork written in French is translated into English from the start. Each text you change afterwards becomes "to translate" in these languages. A custom fork title is also to translate.
Next: test your fork in each language, then create a release.