top of page

How our game learned fourteen languages in a week 🌍

Writer: Marcel Dütscher
Marcel Dütscher
Aug 10
3 min read

August 10, 2026


When we started, Blocks Beyond the Stars spoke exactly two languages: German, because that's where we live, and English, because the internet speaks English. Today it speaks fourteen. Here's how that happened — and everything that broke along the way. 🌍


It started with Francesco. A few weeks ago a pull request arrived from Italy: Francesco Quirino had started translating the game into Italian. By hand. Group by group, beginning with all 290 block names and their descriptions. That was the moment we realised we had to take languages seriously — because until then half the game text wasn't even translatable. Over 300 server messages were hardwired to English. So first we cleaned up, just so Francesco's work had somewhere to land.


Then came the uncomfortable question. Translating a language by hand takes weeks. We're a family, not a localization studio. So: machine — but done properly. We built a small tool that splits the language file into chunks, has a language model translate them, and then checks: is a string missing? Did a placeholder like {0} disappear? Did it invent a key that doesn't exist? If so, it gets thrown out. Only once the tool ran reliably did we start adding languages: Dutch, Brazilian Portuguese, Polish, Turkish — and then Russian, Ukrainian, Chinese, Japanese and Korean.


Tone was harder than words. A language model translates politely and formally by default. But a kids' game that addresses you like a bank letter is just creepy. So every language got its own rule: Dutch "je/jij", Polish "ty", Turkish "sen", Brazilian "você", Russian "ты", Japanese です/ます, Korean 해요체. Dutch cost us an extra pass, because a word-initial IJ capitalizes both letters — "IJzererts", not "Ijzererts". No machine finds that on its own; you find it by reading the result.


And then there were the empty boxes. We had Russian fully translated, launched the game — and the menu showed nothing but rectangles. Our house typeface, Rajdhani, simply has no Cyrillic. With Chinese, Japanese and Korean it got genuinely awkward: a complete CJK font weighs about 16 megabytes. Times three, that's nearly 50 MB — unthinkable for a game that's also meant to run in a browser. The fix: build a tailored subset font per language containing exactly the characters that appear in our texts. 16 MB becomes 800 KB. Instead of 50 MB, the game grows by two. 🔤


What it taught us. Translation is 20% translation and 80% everything else: getting the strings out of the code in the first place, finding fonts, checking whether the sentences still fit the buttons (German is long, but Russian is longer), and making sure even the error dialog is translated — the one that appears before the language files have loaded. We had to hardcode that last message fourteen times. It feels wrong — but it's the one message you absolutely have to be able to read.


Staying honest: the first pass is machine-translated. It's good, it's complete, it's validated — but it hasn't been read by a native speaker. We say so on purpose, rather than pretending we have fourteen translators. That's exactly why Francesco's Italian work is still preserved character for character: our tool only fills gaps, it never overwrites a human translation. Where a person has been, the person wins.


If you speak one of these languages: we'd love your corrections, even a single one. The repo has a translation guide that walks you through contributing step by step — and if GitHub isn't your thing, just tell us which sentence sounds odd. A native speaker spots more in five minutes than we do in five hours. 🌍✨

Recent Posts

See All
First One Kind, Then Five: How This Game Grows 🪨

Anyone looking at our version list will find 29 releases in a good five weeks — from 0.1.0 on 20 June to 0.9.0 yesterday. How does that work? Certainly not by sitting down and building a finished feat

 
 
 

Comments


bottom of page