Технічна локалізація мобільних ігор: повний цикл
Які проблеми вирішує локалізація мобільних ігор?
Наша команда має 5+ років досвіду та понад 50 виконаних проєктів. Текст не влізає в кнопку німецькою? Діалог ламається арабською? Це типові наслідки відсутності локалізації. За 5 років ми локалізували понад 50 проєктів — від казуалок з 500 рядками до RPG з 200 000 рядків. І знаємо, які граблі трапляються найчастіше.
Локалізація — не просто переклад, а технічна інтеграція: адаптація UI під RTL, робота з відмінками, шрифтами та аудіо. Зв'яжіться з нами для аудиту вашого проєкту — ми оцінимо обсяг і підготуємо план.
Розширення тексту та layout
Німецький текст у середньому на 30% довший за англійський. «Inventory» — «Inventar» ще ок, але «Achievement Unlocked» -> «Erfolg freigeschaltet» уже не влізає в кнопку. В Unity це вирішується через TextMeshPro з Auto Size — шрифт зменшується до Min Size, а далі текст обрізається. Потрібно задавати розумний Min Size (не менше 60% від базового) і тестувати всі UI-панелі німецькою та фінською — у фінської теж довгі слова.
В Unreal — STextBlock з WrapTextAt і AutoWrapText. В Godot — Label з autowrap і динамічним розміром контейнера.
Арабська та іврит — весь UI перевертається (RTL). Unity не підтримує RTL з коробки — потрібен пакет RTL-TMPro (безкоштовний, GitHub) або I2 Localization з RTL-підтримкою. Unreal з версії 4.23 підтримує RTL через Internationalization модуль нативно. Детальніше про RTL-верстку можна почитати на Wikipedia.
Відмінки, відмінювання та розгалужені рядки
«Ви отримали [item]» — якщо item це «меч», то «Ви отримали меч». Якщо «броня» — «Ви отримали броню». Жорстка підстановка через string.Format("Ви отримали {0}", itemName) дає «Ви отримали броня».
Рішення:
- PluralKit-підхід в Unity через I2 Localization з підтримкою CLDR plural rules і gender.
- Зберігати кілька форм іменника в даних предмета (nominative, accusative, genitive) і вибирати потрібну за контекстом рядка.
- Для складних випадків — MessageFormat (ICU) з select і plural блоками.
Японська та корейська не мають відмінків, але порядок слів зворотний — дієслово в кінці. «Attack the enemy» -> 「敵を攻撃する」. Рядки з вставленими іменами працюють тільки якщо перекладач знає, куди вставляється підстановка: {player_name} defeated {enemy_name} -> японською порядок може бути {enemy_name}を{player_name}が倒した. Рекомендації ICU (див. ICU User Guide) радять використовувати іменовані плейсхолдери.
Проблеми RTL в Unity: рішення
Для Unity використовуйте пакет RTL-TMPro або I2 Localization. Після встановлення налаштуйте шрифт, що підтримує арабські лігатури (наприклад, Noto Naskh Arabic). Перевірте всі UI-елементи: текст має бути вирівняний вправо, а елементи інтерфейсу — дзеркально відображені. 90% проблем вирішуються автоматично, якщо налаштувати RTL до початку перекладу.
Значення іменованих плейсхолдерів
Без іменованих плейсхолдерів перекладач не може змінити порядок слів. Це призводить до граматичних помилок японською, корейською, арабською та іншими мовами. Іменовані плейсхолдери (наприклад, {player_name}) дозволяють перекладачу бачити, що підставляється, і розставляти слова в правильному порядку. Ми завжди використовуємо їх у всіх проєктах — це гарантія якості перекладу. За нашими даними, використання іменованих плейсхолдерів зменшує кількість граматичних помилок перекладу на 40%.
Приклад із практики: RPG на Unity з 20 000 рядків
При локалізації арабською всі UI-елементи з'їжджали. Ми за 2 дні підключили I2 Localization з RTL-модулем, налаштували шрифт Noto Naskh Arabic і перевірили всі 50 екранів. У результаті гра вийшла на Близькому Сході зі зростанням встановлень на 60%. Використання Translation Memory дозволило заощадити 30% бюджету на переклад повторюваних рядків. Наприклад, для проєкту з бюджетом $10 000 економія завдяки повторному використанню рядків може сягати $3 000.
Як правильно налаштувати RTL в Unity?
Для Unity використовуйте I2 Localization з RTL-модулем. Встановіть пакет RTL-TMPro або вбудовану підтримку I2L. Налаштуйте шрифт, що підтримує арабські лігатури (Noto Naskh Arabic). Всі UI-елементи з текстом повинні мати вирівнювання вправо, а контейнери — дзеркальне відображення. Перевірте кожен екран на довгому арабському тексті.
| Движок | Рекомендований інструмент | RTL | ICU | Plural forms |
|---|---|---|---|---|
| Unity | I2 Localization | + (плагін) | + | + (CLDR) |
| Godot | TranslationServer + PO | + (4.0+) | - | + (limited) |
| React Native | i18next + react-i18next | + | + | + |
Порівняння інструментів локалізації
| Інструмент | Движки | RTL | ICU | Вартість |
|---|---|---|---|---|
| I2 Localization | Unity | + (плагін) | + | Платний |
| Lean Localization | Unity | - | - | Платний |
| i18next + react-i18next | React Native | + | + | Безкоштовно |
| TranslationServer | Godot | + (4.0+) | - | Вбудовано |
Unity. I2 Localization — де-факто стандарт. Google Sheets інтеграція: перекладачі працюють прямо в таблиці, зміни підтягуються через Build або runtime. Альтернатива — Lean Localization (простіше, менше можливостей). Для голосового акторства — окрема таблиця з ключами аудіо-файлів.
Godot. Вбудована система через TranslationServer + CSV або PO-файли. PO-файли зручніші для роботи з професійними перекладачами (підтримує Poedit, Crowdin).
React Native (Expo games, казуалки). i18next + react-i18next. Для серйозніших ігор на RN — той самий i18next з ICU-плагіном.
Нейтральний pipeline. Експорт рядків у XLIFF 2.0 або CSV -> Translation Memory в CAT-інструменті (MemoQ, Phrase, Crowdin) -> імпорт назад. Це важливо для узгодженості термінології: «урон» має скрізь перекладатися однаково, перекладач бачить контекст попередніх перекладів.
Приклад конфігурації I2 Localization для RTL
- Встановіть I2 Localization з Asset Store.
- Увімкніть RTL-модуль у налаштуваннях: I2L => Tools => Enable RTL.
- Для TextMeshPro додайте компонент I2BaseLocalization і виберіть мову.
- Шрифт повинен містити арабські гліфи. Імпортуйте Noto Naskh Arabic як TMP_FontAsset.
- Для UI-елементів з текстом встановіть вирівнювання вправо.
Шрифти та символи
Китайська (спрощена + традиційна), японська, корейська потребують шрифтів з відповідними гліфами. У TextMeshPro не можна використовувати один Atlas для всіх мов — CJK потребує окремого Font Asset з потрібним Character Set. Dynamic Font Asset (TMP) завантажує гліфи on-demand із системного шрифту — зручно, але додає runtime-залежність.
Арабська — шрифт повинен підтримувати лігатури (літери змінюють форму залежно від позиції в слові). Noto Naskh Arabic, Cairo — хороші безкоштовні варіанти.
Аудіо-локалізація
Голосове акторство (VO) — найдорожча частина. Синхронізація субтитрів з аудіо: в Unity через Timeline або AudioSource.clip.length — субтитри з'являються за подіями або за таймкодами. Lip-sync у 3D-персонажах — Oculus LipSync, SALSA LipSync (платний), або процедурний через Phoneme-систему.
Для казуальних ігор без VO — тільки текст + SFX. Тут локалізація займає 1-3 тижні.
Процес роботи: що входить в послугу
- Аудит рядків — екстракція всіх hardcoded рядків з коду та префабів, створення ключів. Ви отримуєте повний звіт про кількість рядків, їх типи та складність.
- Інструментування — підключення локалізаційної системи (I2L, Godot TranslationServer) з урахуванням вашого стеку.
- Передача перекладачам — XLIFF/CSV з контекстом (скріншоти екранів, опис сцени). Ми працюємо з перевіреними бюро перекладів — це гарантує якість.
- Інтеграція перекладів — імпорт, перевірка layout кожною мовою, виправлення помилок верстки.
- Тестування — проходження ключових флоу кожною мовою, перевірка RTL, перевірка edge-cases (довгі імена, числа в рядках).
- Документація та підтримка — передаємо вихідники, конфіги, інструкцію з додавання нових мов.
Терміни: від 1 тижня (казуальна гра, 2-3 мови) до 3 місяців (RPG з розгалуженими діалогами, 10+ мов, VO). Вартість розраховується індивідуально після аналізу обсягу контенту. Наприклад, локалізація казуальної гри на 2 мови коштує від $500. Замовте локалізацію та отримайте готове рішення під ключ. Зв'яжіться з нами для аудиту вашого проєкту — ми визначимо обсяг робіт і терміни.







