DEV Community

Cover image for We translated our terminal game into Portuguese. Except the terminal.
Dockerlinux
Dockerlinux

Posted on

We translated our terminal game into Portuguese. Except the terminal.

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.

DockerLinux in Portuguese

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
Enter fullscreen mode Exit fullscreen mode

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-BR works in links.
  • Plurals done properly. Values like { one, other } use the browser's plural rules instead of count === 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)