Note

29 languages, none translated.

If the string catalogue arrives after the screens, every screen gets rewritten. Kickgeist built the catalogue first and shipped 29 languages on one set of rails.

Most products get their second language after they have their first ten screens, and the bill arrives as a rewrite of all ten. You can avoid that bill. It costs one rule, applied from the first commit: no string is ever written directly into a view.

Kickgeist ships 29 languages across 35 locale files. The app carries 1,313 translatable strings and the landing page 896 more. The store presence moves with them: 41 App Store locales, 34 Play Store locales, 33 of them with automated screenshots. We counted all of that from the repository on 5 August 2026.

The catalogue comes first

The rule is boring, and it’s the whole trick. A string lives in the catalogue and a screen references it. A review that finds a literal in a widget sends the change back.

Retrofit that order later and you edit every screen that exists. Establish it first and the cost is paid once, in the first week, by nobody in particular. What you get isn’t the ability to add a language. It’s the ability to add one without opening the view layer, which turns a locale into a data change instead of a release risk.

Local, not translated

A translation reads like English wearing another language’s clothes, and players notice within one screen. So we wrote the standard down as a rule rather than an aspiration: every string reads as if a local fan wrote it. In practice that’s four separate disciplines, and none of them is machine translation.

  • Terminology. A prediction is a Tipp in German, a pronóstico in Spanish, a prono in French, a palpite in Portuguese, a typ in Polish, a prediksi in Indonesian. Each language gets its own table, and the table is a contract.
  • Register. Every language that separates formal from informal uses the informal one, everywhere: du, tu, kamu, never the polite form. A prediction game that talks to a player the way a bank does has already lost the room.
  • Regional voice, not regional spelling. Brazilian Portuguese isn’t European Portuguese with different vocabulary. The pt-BR file rewrites pronouns and verb forms, country-name spellings and the tone together. The same goes for Spanish across Spain and Mexico, and for English across Britain and the United States.
  • Legal, where taste gets no vote. The product is a prediction game. The vocabulary that would make it something else is forbidden in every language, in all 35 files, and checked in review. That’s the product’s legal position, so it’s enforced by the same pipeline that enforces placeholder integrity.

Right-to-left is more than a text direction

Arabic and Hebrew aren’t a mirrored stylesheet. They’re a mirrored stylesheet, plus store screenshots generated with per-locale frame files, plus a font that actually covers the script. The app and the landing page both use Noto Sans for that last reason. Arabic, Hebrew, Devanagari, Thai, CJK, Cyrillic and Greek all render from one family, so a new script isn’t a font procurement exercise.

Which language, and when, was a business call

Twenty-nine languages didn’t arrive at once, and we modelled the order rather than guessing it. In March 2026 we scored candidate locales on a composite index: smartphone reach, football engagement and regional advertising benchmarks. The inputs were published ad network, analytics and qualification data.

Indonesian scored highest, with Brazilian Portuguese behind it. Both shipped first, on the same day. Neither was picked because it was easy, and one of them wouldn’t have been picked at all by a team ranking locales on familiarity.

Those are two different arguments, and we keep them apart. Local voice is a quality position. Locale order is a commercial one. Mixing them is how a localisation programme ends up with five European languages and a plan.

What holds it together

Translation isn’t a hand-edit task on this project. The voice, the per-language terminology tables, the regional style guide, the placeholder rules and the validator sequence are encoded as a repository skill. So the same constraints apply on every locale and every pass, not only on the ones somebody remembered.

Two automated gates then check the result. One validates completeness and placeholder integrity across all 35 files; another does the same for the landing page. Both run before a change can reach review.

The concession

This is the largest single investment in the product, and it isn’t free to carry. Every new user-facing string is a change in 35 files. Every new screen is 33 screenshot locales.

The next tournament added twelve more languages, and the ones the pipeline couldn’t yet assure at native quality didn’t ship at all. They went to a backlog. A sub-native string is worse than an English one, because a player can at least recognise English as a fallback.

We’d make the same trade again for a consumer product with a global audience. We wouldn’t make it for an internal tool serving three markets. The reason to write the rule down is so the choice gets made on purpose, instead of discovered in month nine.

One mail. No form.

Tell us what is in the way.

Say what you're building and where it stopped.

hello@beevelop.com

Copy it into your mail client if that is easier.

The draft opens with

  1. What you are building
  2. What is in the way
  3. The stack
  4. When you want to start

The contact page says who answers, and what the reply contains.

What procurement will ask.