Translating
How language versions mirror each other, what the site shows without a translation and how to keep every language complete
Mirrored paths
Every page exists at the same path, with the same file name, in every language folder:
en/docs/2_editor/4_craft/3_difficulty-curve.md
ru/docs/2_editor/4_craft/3_difficulty-curve.md
To translate a missing page, copy the English file to the same path under your language folder and translate the text
What stays unchanged:
- the file name and every folder name, prefixes included
dateandtagsin the frontmatter (titleis translated)[[wiki-links]]: their targets are file names, identical in every language- external links, image names, code blocks and inline code: files, fields, keys, values, commands
- the structure: the same headings in the same order, the same lists, tables and callouts
Callout titles are translated into the page's language. More - Style guide
English is the fallback
When a page is missing in a language, the site shows the English page with a notice.
The reverse does not work: a page that exists only in ru/ gives an English reader a 404
Never add a page to another language before it exists in en/. Readers of every other language will get a broken link
Every language carries every fact
English leads only for addresses, not for content. A fact may be added in any language first, and then it is carried to all the others. After a change, every version holds everything all versions know
- Add, never remove. Missing information is written into every language that lacks it
- Contradictions are not resolved by guessing. Two versions give different numbers or opposite claims? Check the source (the game, the SDK) and raise it in the pull request
- Nothing is deleted without asking, including text that looks outdated
A difference in wording is not a problem. A difference in what the reader learns is
Comparing versions
The repository ships a skill for Claude Code, compare-translations (in .claude/skills/). It does this comparison. Without it, go through the same two passes by hand
The structural pass compares the versions element by element: frontmatter, the H1, the first paragraph, the headings, the number of paragraphs, list items, table rows and callouts, the link targets, images, code
The meaning pass reads each section side by side and looks for facts one version has and another lacks: numbers and units, names of fields, buttons and keys, conditions and exceptions, warnings, the steps of a procedure and their order, examples
Adding a new language
A new language is added entirely in this repository, the site's code does not change:
- Copy
frontend/en.yamltofrontend/<code>.yaml, for examplefrontend/de.yaml, and translate the values. These are the site's own strings: the menu, buttons, search, the cookie banner. Keep the keys and every{name}as they are - Create the
<code>/folder next toen/andru/and translate pages into it. A page you have not translated yet is shown in English with a notice
A key with one / few / many / other forms depends on a count. Give it every form your language needs, the build names the missing ones.
A key you have not translated yet is shown in English. The build lists such keys as warnings
Before a large translation, open an issue in bullet-hero/docs, so two people do not translate the same thing