Glossary, notes & memory
Dragoman keeps its own data as plain text files in the project’s Localization/Dragoman folder (the Data Directory setting; it is next to Content, not inside it). Commit the folder: the glossary, the notes, the translation memory and the review marks then travel with the project, and everybody on the team works with the same data.
| File | Contents |
|---|---|
Glossary.csv |
Terms and how to translate them, for all targets. |
Notes_<Target>.csv |
A note and a maximum length per text, for translators and the length check. |
Memory_<Target>.json |
The translation memory: every translation Dragoman has seen. |
Review_<Target>.json |
Machine translations nobody has reviewed yet, and the review pass’s verdicts. |
<Target> is the name of the localization target, for example Notes_Game.csv. With source control enabled in the editor, Dragoman checks the files out before it writes them and marks new files for add.
In Saved/Dragoman (the Output Directory, not committed) are the reports, the translator packages, the gather logs (Logs/) and the ids of the DeepL glossaries Dragoman made (DeepLGlossaries.json).
The CSV files are UTF-8 and open in Excel, LibreOffice and Google Sheets. Quotes, commas and line breaks inside a field work as usual in CSV.
Glossary
Section titled “Glossary”The glossary says how a term must be translated in each language, or that it must not be translated at all. Open it with Tools > Open glossary, or Open on the panel’s Glossary & memory page. If the file doesn’t exist yet, Dragoman creates it with a header for your languages and the example row Dragoman,yes,Product name: keep it as it is. Replace that row with your own terms: as long as it is there, it counts as a real do-not-translate term.
The Glossary & memory page previews the first 40 terms with their translations. Scan again after editing the file.
Term,DoNotTranslate,Note,de,fr,trHealth,,Hit points of the player,Lebenspunkte,Points de vie,CanMana,,,Mana,Mana,ManaAshfall,yes,Name of the world,,,# Rows that start with # are comments| Column | Meaning |
|---|---|
Term |
The term as it appears in the source text. Required. |
DoNotTranslate |
yes (or x, true, 1) for names and brands that stay as they are in every language. |
Note |
An explanation for translators. |
| One column per language | The required translation in that language, by culture code (de, fr, pt-BR…). Leave a cell empty when the term needs no fixed translation there. |
How terms are matched:
- In the source, a term is found as a whole word, ignoring case:
Healthmatches “health” and “Health”, but not “Healthy”. - In the translation, the required translation must appear as a word, ignoring case, but may be followed by more letters. That way inflected forms count: German “Lebenspunkten”, Turkish “Canı”.
- A do-not-translate term must appear in the translation exactly as written, with the same case.
- Terms in Chinese or Japanese script, which has no spaces between words, are found anywhere in the text:
ドアcounts in “ドアを開ける”.
The glossary is used by:
- the Glossary term and Do-not-translate term checks,
- translator packages, whose
Glossarycolumn (or XLIFF note) lists the terms each text uses with their required translation, - machine translation, which sends the terms the texts use with every request; with Use DeepL glossary, DeepL also gets a glossary made from them,
- the review pass, which checks machine translations against them.
Notes give translators context for one text and set the longest translation that fits its widget.
Namespace,Key,MaxLength,NoteUI,Btn_Start,14,Main menu button. Keep it short.,7D3E1B2A4C9F4E1B8A6D2C3B1A0F9E8D,,"Shown when the player dies. {Cause} is a monster name, for example ""the wolf""."| Column | Meaning |
|---|---|
Namespace |
The text’s namespace. Leave it empty for texts without one. |
Key |
The text’s key. Required. |
MaxLength |
The longest allowed translation in visible characters (format arguments and tags are not counted). Empty or 0 for no limit. |
Note |
A note for translators. |
The panel shows each text’s namespace and key; packages and Unreal’s PO files write them as Namespace,Key. Open the notes file with Tools > Open notes or on the Glossary & memory page; Dragoman creates it with the header if it doesn’t exist.
Notes are used by:
- the Too long check: a text with a MaxLength is checked against it instead of Max Expansion,
- translator packages (
NoteandMaxLengthcolumns, or the notes and size restriction of an XLIFF unit), - machine translation, which sends each text’s note and maximum length as context,
- the review queue: a text close to its maximum length, or a short text without a note, gets a higher risk.
Translation memory
Section titled “Translation memory”The memory remembers every translation it has seen, per language, as pairs of source text and translation. It is updated:
- on every scan and before every gather, with the translations in the target’s archives,
- on every import, edit and reviewed machine translation,
- with Tools > Remember translations now or Remember now on the Glossary & memory page.
It keeps pairs even after the source text changed or a gather dropped the text. When a source changes, the old pair stays in the memory, so the translation comes back if the text changes back or the same text appears somewhere else.
Machine translations are added only after somebody reviews them. The pseudo language is never added.
Suggestions
Section titled “Suggestions”For every missing and changed text, Dragoman looks for a suggestion in the memory:
- a translation of the same source text (shown as 100 %), or
- the translation of the most similar source text, at least 75 % similar (an edit distance that ignores case).
The panel shows the suggestion next to the text, and translator packages have it in the Suggestion column.
Fill from memory
Section titled “Fill from memory”Tools > From memory: same texts and From memory: similar texts (to review) write suggestions into the missing texts of the selected language in one go:
- Translations of the same source text go in as normal translations. That fills texts that appear more than once, for example “Cancel” on twenty buttons.
- Translations of a similar source text go in as changed translations, made for the similar source, so somebody reviews them before they count as translated.
- Suggestions with broken format arguments, tags or patterns for the text are skipped.
From Python: fill_from_memory("de", 1.0) fills only same-source matches; a lower score such as 0.8 also fills similar ones. See Python.
The memory file
Section titled “The memory file”Memory_<Target>.json holds one list per culture:
{ "de": [ { "s": "Start Game", "t": "Spiel starten", "u": "2026-10-12T10:00:00.000Z" } ]}s is the source text, t the translation and u the time it was last updated (UTC). The commandlet’s -ReadOnly switch scans without updating the file.
Review marks
Section titled “Review marks”Review_<Target>.json lists the machine translations nobody has reviewed yet, per culture, with the source text they were made for. A mark only counts while that source is unchanged. Accept on the Review page, Mark reviewed, editing and saving the translation, or importing one for the text removes its mark.
The same file keeps the review pass’s verdicts per culture and text: the verdict, the score, the issue and the suggestion, with the source and translation they were given. A verdict only counts while both are unchanged.
Don’t edit this file by hand; use the panel or accept_machine().