Створення українізатора 2.0

Цей посібник створений як розширення посібника piggsy. Він не повторює інформацію, а розширює її прикладами й новими інструментами. Рекомендується ознайомитися з обома посібниками. Усе, що описано в цьому посібнику, засноване на власному досвіді автора.

Останні зміни: 30.04.2026
Telegram: Канал
Discord: Сервер

Важливе оголошення

Даний посібник, оновлення інструментів та реліз нових, форки, публічна та приватна допомога з локалізаціями заморожується до досягнення цілі банки:
monobank

Unity

Я однозначно рекомендую переходити з UABEA на UABEANext. Перший фактично перебуває у замороженому стані: розробка припинена, нові версії Unity не підтримуються, а частина критичних багів так і не була виправлена. Натомість UABEANext активно розвивається, отримує підтримку нових версій рушія та пропонує значно ширший і зручніший інструментарій для роботи з асетами.

UABEANext

  • Робота з безліччю assets/bundle одночасно, підтримка вкладок.
  • Підтримка останніх* версій Unity асетів.
  • Підтримка пакетного експорту/імпорту асетів.
  • Підтримка експорту спрайтів як текстур.
  • Підтримка Drag & Drop.
  • Підтримка пошуку по Path ID.
  • Підтримка пошуку тексту.

UABEA

  • Робота лише з одним assets/bundle за раз.
  • Не підтримуються нові версії bundle.
  • Експорт/імпорт відбувається поштучно.
  • В одному assets підтягуються файли з інших assets, що наводить плутатину.
  • Баг при імпорті JSON.
  • Збій програми при експорті файлів, назва яких перевищує 260 символів.
  • Розробка припинена.

Типи асетів Unity, що містять текст

Імпорт

Інформація застаріла Актуалізується після закриття банки.

❗️ Увага: Якщо ви досі використовуєте UABEA для роботи з assets та bundle, майте на увазі: в програми є баг, через який json може імпортуватися некоректно з першого разу. Завжди перевіряйте файл за допомогою кнопки View Data. Якщо з’являється повідомлення Asset failed to deserialize — повторіть імпорт json.

Новий інструмент UABEANext позбавлений цієї проблеми — імпортування завжди проходить успішно.

Bundle та catalog.*

Для патчингу catalog.json чи catalog.bin використовуйте покращений мною інструмент CatalogTool, у якому виправлено роботу з бандлами, що містять символи # у назвах, та додано функцію Drag & Drop для патчингу без ручного введення шляху. Це консольна утиліта, просто перетягніть catalog.json/.bin на .exe програми.

Шрифт

Для швидкої і зручної генерації атласу шрифту використовуйте інструмент TMP Unity від MrIkso.

Якщо ви віддаєте перевагу ручній генерації атласів шрифтів через рушій Unity по посібнику від art-kandy, використовуйте авторську програму Atlas MonoBehaviour Merger для подальшого об’єднання згенерованих гліфів TMP/2D шрифтів з оригінальними MonoBehaviour.

Неофіційна українська мова

Для додавання української як окремої в MonoBehaviour файли з масивами було написано власний інструмент Array Language Tool.

Її слід використовувати в поєднанні з Unity Localization Tool:

Додатково може знадобитися додавання нового рядка з назвою нашої мови у багатомовний MonoBehaviour і/або редагування .dll гри.

Unreal Engine 4 & 5

AES захист та sig файли

Для швидкого пошуку AES-ключа зручно користуватися сайтом AES Dumpster.

Якщо у вашій грі використовується AES-захист разом із .sig файлами у теці Paks, скористайтеся інструментом Unreal Engine Signature Check Bypasser (один з авторів українець). Його потрібно розпаковувати у теку Binaries/Win64 поряд з .exe, так, обидва .dll та .asi. Якщо на вашій грі це не спрацювало, створіть issue в репозиторії авторів щодо цього.

Це дозволить завантажувати сторонні pak файли грою без необхідності ручного прописування -fileopenlog у «Параметрах запуску» властивостей гри в Steam.

❗️ Не забудьте додати .dll, .asi файли та файл із ліцензією (❗️ ОБОВ’ЯЗКОВО ❗️) у архів разом із перекладом для решти гравців, або ж додайте посилання на Unreal Engine Signature Check Bypasser для окремого завантаження. ❗️

Текст

Для перекладу та роботи з locres, uasset і umap файлами використовуйте авторський інструмент UELT.

Як дізнатись, чи для uasset/umap необхідний usmap файл:

Спробуйте відкрити uasset/umap у FModel для попереднього перегляду. Якщо з’явиться повідомлення ...mapping file is missing, вітаю, вам потрібен usmap.

Як дістати usmap:

Інформація застаріла Актуалізується після закриття банки.

Вам потрібен Dumper-7 та DLL Injector.

Як тільки побачите текст Generating SDK tools (*.*ms) можете закривати Командний рядок, при цьому гра також закриється.
Згенерований usmap знайдете на системному диску у теці Dumper-7.

Правильне розпакування uasset/umap разом з uexp і подальший переклад

У вас при Export Data Raw в FModel експортується uasset/umap без uexp? Вітаю, у вас Zen-контейнери.
Для роботи з ними потрібен retoc.

Шаблон команди для експорту потрібного файлу:

retoc --aes-key ВАШ_КЛЮЧ to-legacy --filter "/YourGame/Content/Some/Path/ФАЙЛ.uasset" "C:\Path\To\Game\Content\Paks" "C:\Path\To\OutputDir"

--aes-key можна не використовувати, якщо ваша гра його немає.

У моєму випадку з Life is Strange: Double Exposure команда виглядає ось так:

retoc to-legacy --filter "/Chronos/Content/Data/Localization" "E:\Games\Life is Strange - Double Exposure\Chronos\Content\Paks" "C:\Extract"

Правильний переклад uasset/umap:

Раніше ми дістали usmap з гри, тепер дістали uasset/umap+uexp. Далі використовуємо UELT, відкриваємо uasset/umap та підтягуємо usmap:

Застосування плюралізації та родів

Плюралізація

Unreal Engine підтримує плюралізацію (множину чогось/когось) через конструкцію {x}|plural(...). Важливо: замінюючи англійську локалізацію плюралізація обмежуватиметься лише one= і other= опціями, для повноцінної плюралізації з чотирма опціями потрібно створювати локалізацію окремою українською (дякую veydzh3r'у за ідею перевірити це):

{daysDelay} {daysDelay}|plural(one=day,other=days) {daysDelay} {daysDelay}|plural(one=день,few=дні,many=днів,other=дня)
<NumberText>{0}</NumberText> {0}|plural(one=Townie,other=Townies) <NumberText>{0}</NumberText> {0}|plural(one=містянин,few=містяни,many=містян,other=містянина)
and it also requires {amount} {name}{amount}|plural(one=s,other=) і також вимагає {amount} {amount}|plural(one={name},few={name}и,many={name}ів,other={name}а)
Ключ Коли спрацьовує Приклад
one= 1, 21, 31, 41... 1 день, 21 день
few= 2-4, 22-24, 32-34... 2 дні, 3 дні
many= 5-20, 25-30, 35-40... 5 днів, 11 днів
other= десяткові числа (1.5, 2.3...) та 0 1.5 дня

Роди

Для перекладу слів залежно від роду персонажа (знайшов/знайшла/знайшло) використовується конструкція {x}|gender(...).

Назва всередині дужок { } це аргумент, який задають розробники. Він може бути будь-яким: {NpcGender}, {NPC_A.Gender}, {Player.Gender} тощо. Знайти його можна двома способами:

Пишете три форми через кому: Masculine → Feminine → Neuter (чоловічий, жіночий, середній рід). Порядок не можна змінювати. Якщо в оригіналі дві форми, додаєте третю за потребою.

{NPC_A} did not sleep all night. {NPC_A} не {NPC_A.Gender}|gender(спав,спала,спало) усю ніч.
{NPC_A} is tired. {NPC_A} {NPC_A.Gender}|gender(втомлений,втомлена,втомлене).
{NPC_A} met {NPC_B.Gender}|gender(his,her,its) best friend. {NPC_A} {NPC_A.Gender}|gender(зустрів,зустріла,зустріло) {NPC_B.Gender}|gender(свого найкращого друга,свою найкращу подругу,свого найкращого друга).

Значення роду персонажа (Masculine/Feminine/Neuter) зберігається в окремих файлах (CompanionData, NPCData). Перекладач цього не бачить — він лише дає всі три форми, а рушій сам підставляє потрібну.

Приклад плюралізації та родів в одному рядку

{NPC_A} has fallen ill for {DaysAmount} {DaysAmount}|plural(one=day,other=days). {NPC_A.Gender}|gender(His,Her) condition worsens. {NPC_A} захворів на {DaysAmount} {DaysAmount}|plural(one=день,few=дні,many=днів,other=дня). {NPC_A.Gender}|gender(Його,Її,Його) стан погіршується.

Заміна шрифтів

Коли поряд з uasset немає файлу ufont, а ви впевнені, що шрифт усередині uasset+uexp — знадобиться авторська програма UAsset Font Tool. Підтримується заміна ttf/otf та swf. Перевірено на Life is Strange 2, Borderlands 3 та KINGDOM HEARTS III + Re Mind.

Приклад заміненого шрифту через програму:

Пакування Zen-контейнерів

Інформація застаріла Актуалізується після закриття банки.

Для цього нам знову потрібен retoc.

Шаблон команди:

retoc to-zen ТЕКА ФАЙЛ.utoc --version UE*_*

У моєму випадку з Life is Strange: Double Exposure команда виглядає ось так:

retoc to-zen Exports pakchunk8-Windows_P.utoc --version UE5_2

Результат виконаної роботи:

Неофіційна українська мова

Інформація застаріла Актуалізується після закриття банки.

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

Інструменти

Unity

Unreal Engine

Поради

Для перекладу тексту та порівняння з оригіналом зручно використовувати ExamDiff, саме Pro версію, яка підтримує усі compare-функції.

Для вводу символів … — – « » ’ ° зручно використовувати авторські швидкі клавіші на AutoHotkey (Тільки для Windows).