Локалізація інтерфейсів та текстових блоків ігор

Наша компанія з розробки відеоігор веде незалежні проекти, спільно з клієнтом створює ігри та надає додаткові операційні послуги. Досвід нашої команди дозволяє нам охопити всі ігрові платформи та розробити приголомшливий продукт, що відповідає баченню клієнта та перевагам гравців.

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Локалізація інтерфейсів та текстових блоків ігор
Проста
від 2 робочих днів до 2 тижнів
Часті питання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    491
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    533

Локалізація інтерфейсів та текстових блоків ігор

Локалізація—це не переклад рядків у таблицю. Це системна робота з текстом, шрифтами, форматуванням, правилами відмінювання та розмірами UI-елементів для кожної мови. Гра, яка «перекладена», але не локалізована, виглядає як машинний переклад: текст вилізає за кнопки, числа відображаються без урахування локалі, арабський текст йде зліва направо.

Технічний конвеєр локалізації в Unity

Стандарт для Unity-проектів зараз—пакет Unity Localization (com.unity.localization). Він працює через StringTable та AssetTable: StringTable зберігає текстові рядки з ключами, AssetTable—локалізовані ассети (текстури, аудіо, шрифти). Таблиці експортуються в CSV/XLIFF для передачі перекладачам та імпортуються назад.

Ключовий принцип: у коді та в Prefabs повинні бути тільки ключі, жодних жорстко закодованих рядків. LocalizedString на компоненті TextMeshProUGUI з прив'язкою до StringTable—обов'язкова архітектура. Порушення цього правила означає, що при додаванні нової мови доведеться вручну шукати всі текстові рядки по сцені—це сотні об'єктів.

Plural Rules—окрема біль. У російській мові три форми числівників: «1 предмет», «2 предмета», «5 предметів». В англійській—дві. В арабській—шість. Unity Localization підтримує Plural через Smart String з форматуванням {count:plural:предмет|предмета|предметов}, але правила для кожної мови потрібно прописувати явно через Plural Rule Provider або використовувати готові правила з CLDR (Common Locale Data Repository).

Дата та числа: 1,234.56 (EN) vs 1.234,56 (DE) vs 1 234,56 (RU). Без явного використання CultureInfo при форматуванні в C# числа відображаються в форматі системної локалі пристрою—непередбачувано. Всі числа, валюти та дати повинні форматуватися через string.Format(CultureInfo.GetCultureInfo(currentLocale), ...) або через Smart String з форматом {value:C} з явною прив'язкою локалі.

Шрифти під різні мови: найчастіше недооцінена проблема

CJK (китайська/японська/корейська) шрифт для TextMeshPro—це Font Asset з десятками тисяч глифів. Повний CJK Font Asset в SDF може важити 15–30 MB тільки для текстурного атласу. Для мобільного проекту з бюджетом пам'яті це неприйнятно.

Рішення: Dynamic Font Asset з Population Mode → Dynamic. Атлас заповнюється тільки глифами, які реально зустрічаються в тексті. При першому запуску в пам'яті тільки кілька сотень використаних ієрогліфів. Мінус—можлива мікрофриз (0.5–2 мс) при першому рендері нового глифу. Для більшості ігор прийнятно.

Для арабської та іврИТ обов'язкова підтримка RTL (right-to-left). У TextMeshPro є вбудований RTL режим, активується через TMP_Text.isRightToLeftText = true. Але одного прапора недостатньо: елементи UI теж повинні дзеркалитися (кнопка «Назад» переміщується з лівого краю на правий, список читається справа наліво). Це потребує спеціальної логіки в Layout Manager або переключаємих RTL-layout Prefabs для RTL-мов.

Кейс: кирилиця та перенос слів

На проекті з підтримкою російської, англійської та німецької зіткнулися з тим, що німецькі складові слова (Geschwindigkeitsbegrenzung—«ограничение скорости») не переносяться в TextMeshPro за замовчуванням, а просто вилізають за межу поля або переходять на новий рядок цілком. Це ламало діалогові вікна: фіксований розмір контейнера, текст уходить за нижній край.

Рішення: Hyphenation через TMP_Settings → Enable Word Wrapping + підключення словника переносів для німецької через користувальницький TMP_HyphenationDictionary. Формат словника сумісний зі стандартом LibreOffice (TeX hyphenation patterns). Після підключення німецький текст коректно переносився за правилами, контейнер діалогу перестав переповнюватися.

Інструменти та інтеграція з перекладачами

Перекладачі не працюють у Unity. Стандартний workflow: Unity Localization → експорт StringTable в XLIFF 1.2 або CSV → передача в CAT-інструмент (Phrase, memoQ, SDL Trados) → отримання перекладених XLIFF → імпорт назад у Unity. Цей цикл повинен бути автоматизований через Editor-скрипт, інакше ручний імпорт 15 мов × 20 таблиць = кілька годин роботи при кожному оновленні рядків.

Рядки з форматуванням (Smart String з плейсхолдерами {name} або {count}) повинні супроводжуватися інструкцією для перекладача: що означає плейсхолдер, в якій частині фрази він може бути переміщений. В німецькій {count} Gegenstände gefunden—плейсхолдер на початку, що нормально. В японській порядок слів інший, плейсхолдер може бути в кінці. CAT-інструменти підтримують захист плейсхолдерів від випадкового перекладу.

Тестування локалізації

Псевдолокалізація—запуск UI з тестовими рядками збільшеної довжини та випадковими символами. Unity Localization має вбудований Pseudo Locale з опцією розширення рядків на 30–40% (характерно для німецької та фінської порівняно з англійським оригіналом). Запускаємо псевдолокаль ще до появи реальних перекладів—проблеми з переповненням текстових полів видні одразу.

Перевірка Missing Translation: Unity Localization логує відсутні ключі в Console з попередженням, але у продакшні це повинно виводити fallback-значення, а не пустий рядок. Налаштовується через Localization Settings → Missing Translation Behavior.

Масштаб Строки (без урахування часу перекладу)
Додавання однієї мови у готовий конвеєр 3–7 днів
Побудова конвеєру локалізації з нуля (1–2 мови) 1–3 тижні
Повна локалізація проекту (5–10 мов, RTL включаючи) 4–10 тижнів
Інтеграція з зовнішніми CAT-інструментами + автоматизація 1–3 тижні

Вартість розраховується індивідуально після аналізу обсягу рядків та підтримуваних мов.