Translating the game

Play this lesson

Players who can't read our menus

Garden Defense is in the stores, and Remy spots a pattern: lots of downloads from Brazil, Germany and Japan, plus reviews like "Lindo, mas não entendo o menu" ("Lovely, but I don't understand the menu").

Translation turns words into another language. Localization goes further: it makes the whole game feel made for that place. Developers write it as l10n (an l, 10 more letters, an n). Internationalization, or i18n, is the code work that makes localization possible.

More than words

Localization covers everything a player reads, sees or hears.

Quick check

Once every word in Garden Defense is translated into German, its localization is finished.

Show the answer

False

Words are only part of it. Dates, number formats, prices, jokes and even art must feel right for German players, and someone who knows the language checks it all in the real game.

Pick languages with data

Every language is work forever: each update, store page, support email and patch note needs it too. So we choose with data, not guesses.

Play Console and App Store Connect show installs by country, and Steam shows wishlists by country. Valve even suggests a cheap test: translate only the store page and screenshots into a language, then watch whether wishlists from those countries grow. If they do, we translate the game itself.

Read the numbers

installs_by_country.txt
Garden Defense, last 30 days Country    Installs   Reviews asking                      for a translationBrazil        4,200   31Germany       3,100    4Japan           900    9France          400    2

The studio can afford one new language this month. Which should it be?

  1. Brazilian Portuguese
  2. German
  3. Japanese
  4. French
Show the answer

Brazilian Portuguese

Brazil has the most installs and by far the most players asking. We pick Brazilian Portuguese (code pt-BR) on purpose: its spelling and everyday words differ from the Portuguese of Portugal (pt-PT).

Every string out of the code

A string is a piece of text in code. If 'Play' is typed straight into menu.js, a translator would have to edit our code. So every player-facing string moves into a string file per language, like en.json and pt-BR.json, where each text has an ID such as "play".

The code only uses IDs: t('play') looks the text up in the current language. A missing ID falls back to English, never a blank. Numbers go in as placeholders, like "Wave {n}", so translators can move them where their grammar needs.

Bug hunt

string files and menu.js
// strings/en.json{ "play": "Play", "shop": "Shop" }// strings/pt-BR.json{ "play": "Jogar", "shop": "Loja" }// menu.jsbutton1.text = t('play');button2.text = t('shop');button3.text = 'Settings';

In the Brazilian Portuguese version, one button still says "Settings". Which line is the bug?

  1. Line 4
  2. Line 6
  3. Line 8
Show the answer

Line 8

Line 8 types the English word straight into the code, so it never goes through t() and no translator ever sees it. The fix: add a "settings" ID to both files ("Configurações" in pt-BR) and use t('settings').

Room to grow, flip and draw

Quick check

Kai builds the text with count + ' pests left'. Why does a Polish translator say it can't be translated well?

  1. Polish changes the word for different numbers, so each plural form needs its own string, picked with Intl.PluralRules
  2. Polish has no word for "pest"
  3. Numbers can't appear inside Polish text
Show the answer

Polish changes the word for different numbers, so each plural form needs its own string, picked with Intl.PluralRules

CLDR lists four plural categories for Polish: one, few, many and other. Gluing an English word onto a number can't follow those rules, so the string file holds every form and the code picks one.

Who translates, and how we test

Machine translation, including AI like Claude, makes a fast first draft. But it can't see the screen: is "Play" a button or a theatre show? So we add context notes (where the text appears, how much room it has), and a native speaker checks every language in the real game. Paid translators sign a contract, which a parent handles.

First, test with a pseudo-locale: a fake language of stretched, accented text. Android has two: en-XA (long text) and ar-XB (right to left). Plain English left over means a string stuck in the code.

True story: all your base

Zero Wing was a Japanese arcade shooter from 1989. Its 1992 version for the Mega Drive, a home console, came with clumsy English text, including one line that became famous: "All your base are belong to us."

By 2000, the line had spread across online forums, into edited pictures, animations and remixes. ACMI, an Australian museum of screen culture, calls it "one of gaming's earliest memes."

One unchecked line can follow a game for decades. That is why a native speaker checks every line in the real game.

Source: ACMI: All your base are belong to us, acmi.net.au

Bolt says: Next: building release files. Google Play then sends each phone only the languages it needs.

Fact-checked 11 October 2026