Game Interface and Text Localization

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.
Showing 1 of 1 servicesAll 242 services
Game Interface and Text Localization
Simple
from 2 business days to 2 weeks
FAQ
Our competencies
What are the stages of Game Development?
Latest works
  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    663
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    859
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    533

Game Interface and Text Localization

Localization is not translating strings to table. It's systematic work with text, fonts, formatting, declension rules, and UI element sizes for each language. Game that's "translated" but not localized looks like machine translation: text overflows buttons, numbers display without locale awareness, Arabic text goes left to right.

Technical Localization Pipeline in Unity

Standard for Unity projects now—Unity Localization package (com.unity.localization). Works via StringTable and AssetTable: StringTable stores text strings with keys, AssetTable—localized assets (textures, audio, fonts). Tables export to CSV/XLIFF for translators and import back.

Key principle: code and Prefabs contain only keys, no hardcoded strings. LocalizedString on TextMeshProUGUI component with StringTable binding—mandatory architecture. Breaking this rule means adding new language requires manually finding all text strings across scene—hundreds of objects.

Plural Rules—separate pain. Russian has three number forms: "1 item," "2 items," "5 items." English—two. Arabic—six. Unity Localization supports Plural via Smart String with {count:plural:item|items|items} format, but rules for each language must be explicitly set via Plural Rule Provider or use ready rules from CLDR (Common Locale Data Repository).

Dates and numbers: 1,234.56 (EN) vs 1.234,56 (DE) vs 1 234,56 (RU). Without explicit CultureInfo use when formatting in C#, numbers display in system locale device—unpredictable. All numbers, currencies, dates must format via string.Format(CultureInfo.GetCultureInfo(currentLocale), ...) or Smart String with format {value:C} with explicit locale binding.

Fonts for Different Languages: Most Underestimated Problem

CJK (Chinese/Japanese/Korean) font for TextMeshPro—Font Asset with tens of thousands of glyphs. Full CJK Font Asset in SDF can weigh 15–30 MB just for texture atlas. For mobile project with memory budget, unacceptable.

Solution: Dynamic Font Asset with Population Mode → Dynamic. Atlas fills only with actually used glyphs. On first launch, memory holds only hundreds of used characters. Minus—possible microfreezes (0.5–2 ms) on first render of new glyph. For most games acceptable.

For Arabic and Hebrew, RTL (right-to-left) support mandatory. TextMeshPro has built-in RTL mode, activated via TMP_Text.isRightToLeftText = true. But flag alone insufficient: UI elements must mirror too (Back button moves from left edge to right, list reads right to left). Requires special logic in Layout Manager or switchable RTL-layout Prefabs.

Case Study: Cyrillic and Word Wrapping

Project supporting Russian, English, German encountered German compound words (Geschwindigkeitsbegrenzung—"speed limit") not wrapping in TextMeshPro by default, just overflowing or jumping to new line whole. Broke dialogs: fixed container size, text went below edge.

Solution: Hyphenation via TMP_Settings → Enable Word Wrapping + connecting German hyphenation dictionary via custom TMP_HyphenationDictionary. Dictionary format compatible with LibreOffice standard (TeX hyphenation patterns). After connecting, German text correctly wrapped by rules, dialog container stopped overflowing.

Tools and Translator Integration

Translators don't work in Unity. Standard workflow: Unity Localization → export StringTable to XLIFF 1.2 or CSV → send to CAT tool (Phrase, memoQ, SDL Trados) → receive translated XLIFF → import back to Unity. Cycle must be automated via Editor script, else manual import 15 languages × 20 tables = hours per string update.

Formatted strings (Smart String with placeholders {name} or {count}) must have translator instructions: placeholder meaning, phrase part where it can move. In German {count} Gegenstände gefunden—placeholder at start, normal. In Japanese word order different, placeholder end. CAT tools support placeholder protection from accidental translation.

Localization Testing

Pseudolocalization—running UI with test strings of increased length and random characters. Unity Localization has built-in Pseudo Locale with string extension option 30–40% (typical for German and Finnish vs English). Run pseudo-locale before real translations arrive—text overflow problems visible immediately.

Missing Translation check: Unity Localization logs missing keys to Console with warning, but in production must output fallback value, not empty string. Configured via Localization Settings → Missing Translation Behavior.

Scale Timeline (without translation time)
Add one language to ready pipeline 3–7 days
Build localization pipeline from scratch (1–2 languages) 1–3 weeks
Full project localization (5–10 languages, including RTL) 4–10 weeks
Integration with external CAT tools + automation 1–3 weeks

Cost calculated individually after analyzing string volume and supported languages.