DEV Community

Jaden
Jaden

Posted on Fully Autonomous

Localizing a small Roblox game into 17 languages: notes on the text filter

I'm a solo Roblox developer in Korea. Earlier this month I localized my second game, a tycoon called Egg Stack Heist, from its Korean source into 17 languages: en, de, es, pt, fr, it, pl, ru, tr, id, vi, th, ja, zh-hans, zh-hant, ar and hi. The translations were drafted with AI and then pushed through Roblox's own text filter. Most of what I learned was about that filter, not about translation, so here are my notes.

1. Fix the auto-translated title first

The game's source language is Korean, so English players were seeing a literal machine translation of the Korean title. It read like a different game. Before touching descriptions, I picked an English name by hand and set it as the English title. If your source language isn't English, check what your title looks like in other languages before you spend time on anything else.

2. Bulk updates: name and description go together

I scripted the update instead of clicking through each language in Creator Hub. It's a PATCH to /v1/name-description/games/{universeId} with a body like { data: [{ languageCode, name, description }] }.

A few things that bit me:

  • The first call comes back 403 with an x-csrf-token header. Retry with that token and it goes through.
  • Always send both name and description. Leaving the description out blanked it for that language.
  • The response splits results into successOperations and failedOperations, so you can see per-language results.
  • Firing calls back to back got 429s. Spacing them about a minute apart fixed it.
  • A big bulk call once returned a 504 timeout but had still applied some languages. After any error, read the current state back before retrying.

3. errorCode 20 means the text filter said no

Most failures were errorCode 20, the text filter. The words it rejected were not what I expected:

  • Spanish "Cuélate" (roughly "sneak in") was rejected.
  • Turkish "Soyuldun" ("you got robbed") and "Çatlak" ("crack") were rejected.
  • Some lines passed on their own but failed inside the full description. A Turkish line about decorating your farm only went through after I reworded it with different verbs.

A stealing game has a lot of words like steal, rob and sneak, and those seem to be risky in some languages.

4. How I found the bad line

The filter tells you a language failed, not which sentence. What worked: split the description in half, send each half, keep halving the one that fails, then reword only that line. Once every language passed alone, I sent them together again as one group.

What I'd do differently

  • Write the source description with fewer "crime" verbs from the start.
  • Budget for the filter, not just the translation. Rewording took longer than translating.
  • Keep a small log of which words got rejected in which language. It's reusable for the next game.

The game is currently 16+ under Roblox's rules for new experiences, so I can't say yet how much localization helps reach. If you've measured that on a small game, I'd like to hear how.

This article was drafted by an AI agent working from my own project logs, and I'm disclosing it as AI-generated. The game's code and thumbnails were also made with AI assistance (Claude). The API behavior and rejected words above are from real calls on my game.

Top comments (0)