DockerLinux is a free game for learning Linux and Docker: a simulated terminal in the browser, 10 levels of missions, on-call "boss levels" where a pretend production server is broken and you have to fix it.
A lot of players are Brazilian, so this week it got its first second language: Brazilian Portuguese. The interesting part wasn't what we translated. It was what we didn't.
The rule: translate everything around the terminal, never the terminal
Missions, hints, the lesson after each task, quizzes, buttons, dialogs, the achievements window: all in Portuguese.
The commands and everything they print: still English, word for word.
root@docker-lab:~/app# docker run -d --name web ngnix
Unable to find image 'ngnix:latest' locally
That error is the same on a real machine, in São Paulo or in London. If the game translated it, a learner would meet an unfamiliar message the first time something breaks for real, which is exactly when they need it to be familiar. So the terminal stays a real terminal, and the game explains it in your language around it. The welcome text even says so, in Portuguese: commands and terminal output stay in English, like on a real server.
How it's wired
A tiny i18n layer, no library:
- Keys with an English fallback. Every text has a key; a missing Portuguese text falls back to English, so nothing is ever blank.
-
Lazy-loaded languages. English ships with the app; other languages load only when someone picks them (a dynamic
import()), so English players never download Portuguese text. -
Detection, then choice. A saved choice wins; otherwise the browser's languages (
pt,pt-PT→pt-BR); otherwise English.?lang=pt-BRworks in links. -
Plurals done properly. Values like
{ one, other }use the browser's plural rules instead ofcount === 1 ? … : …. - A test that lists missing keys. Adding a language is: copy the English folder, translate, run the tests. A language only appears in the menu once it's marked ready.
- Switching language re-translates what's already on screen. The lessons already printed in the terminal are re-rendered in the new language, because they're stored as keys, not as text.
What was harder than expected?
- Tone. The game has a character, Prof. Kernel-Panic, with jokes. Jokes don't translate; they get rewritten.
- Missions that mention output. "Find the line that says Up 2 seconds" must keep the English output inside a Portuguese sentence.
- Length. Portuguese is longer. Buttons and the top bar had to cope with ~30% more text.
Your turn
Português is the first. Which language should come next? And if you've localised a developer tool: did you translate the CLI output, or leave it alone?
👉 Try it in Portuguese (or English): free, in your browser, no install.

Top comments (0)