Mobile Game Localization
Games differ from business apps: here strings are not "Save" and "Cancel" but branching dialogues, character names with case inflections, UI with limited text space, and sound tracks. Each of these components requires a separate strategy.
Text in games — not just strings
Text expansion and layout
German text averages 30-40% longer than English. "Inventory" — "Inventar" is OK, but "Achievement Unlocked" → "Erfolg freigeschaltet" won't fit the button. In Unity this is solved via TextMeshPro with Auto Size — font shrinks to Min Size, then text gets cut. Need to set reasonable Min Size (not less than 60% of base) and test all UI panels in German and Finnish (Finnish also has long words).
In Unreal — STextBlock with WrapTextAt and AutoWrapText. In Godot — Label with autowrap and dynamic container size.
Arabic and Hebrew — entire UI flips (RTL). Unity doesn't support RTL out of the box — need RTL-TMPro package (free, GitHub) or I2 Localization with RTL support. Unreal from version 4.23 supports RTL via Internationalization module natively.
Cases, inflections, and branching strings
"You received [item]" — if item is "sword" then "You received sword". If "armor" — "You received armor". Hard substitution via string.Format("You received {0}", itemName) gives "You received armor".
Solutions:
-
PluralKitapproach in Unity viaI2 Localizationwith CLDR plural rules and gender support - Store several forms of noun in item data (
nominative,accusative,genitive) and pick the right one by string context - For complex cases —
MessageFormat(ICU) withselectandpluralblocks
Japanese and Korean have no cases, but word order is reversed — verb at end. "Attack the enemy" → 「敵を攻撃する」. Strings with inserted names only work if translator knows where the substitution goes: {player_name} defeated {enemy_name} → in Japanese order might be {enemy_name}を{player_name}が倒した. For this, localization systems use named placeholders, not positional.
Tools and pipeline
Unity. I2 Localization — de facto standard. Google Sheets integration: translators work directly in spreadsheet, changes pulled via Build or runtime. Alternative — Lean Localization (simpler, fewer features). For voice acting — separate spreadsheet with audio file keys.
Godot. Built-in system via TranslationServer + CSV or PO files. PO files more convenient for professional translators (supported by Poedit, Crowdin).
React Native (Expo games, casual) — i18next + react-i18next. For more serious RN games — same i18next with ICU plugin.
Neutral pipeline. Export strings to XLIFF 2.0 or CSV → Translation Memory in CAT tool (MemoQ, Phrase, Crowdin) → import back. Important for terminology consistency: "damage" should translate the same way everywhere, translator sees context of previous translations.
Fonts and characters
Chinese (simplified + traditional), Japanese, Korean require fonts with corresponding glyphs. In TextMeshPro can't use one Atlas for all languages — CJK requires separate Font Asset with proper Character Set. Dynamic Font Asset (TMP) loads glyphs on-demand from system font — convenient, but adds runtime dependency.
Arabic — font must support ligatures (letters change form depending on position in word). Noto Naskh Arabic, Cairo — good free options.
Audio localization
Voice over (VO) — most expensive part. Syncing subtitles with audio: in Unity via Timeline or AudioSource.clip.length — subtitles appear via events or timecodes. Lip-sync in 3D characters — Oculus LipSync, SALSA LipSync (paid), or procedural via Phoneme system.
For casual games without VO — text only + SFX. Localization takes 1-3 weeks.
Work stages
- String audit — extract all hardcoded strings from code and prefabs, create keys
- Instrumentation — connect localization system (I2L, Godot TranslationServer)
- Translator handoff — XLIFF/CSV with context (screenshots)
- Translation integration — import, check layout on each language
- Testing — play through key flows in each language, check RTL, check edge cases (long names, numbers in strings)
Timeline: 1 week (casual game, 2-3 languages) to 3 months (RPG with branching dialogues, 10+ languages, VO). Cost calculated after content volume analysis.







