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

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

Останні зміни: 08.09.2026
Telegram: канал
Discord: сервер

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 позбавлений цієї проблеми — імпортування завжди проходить успішно. Також можна використовувати авторський консольний інструмент UnityCLI. Його можливості:

bundle, unity3d та catalog.*

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

Увага: UABEANext поки не підтримує компресію bundle і unity3d контейнерів, тому використовуйте старий UABEA або UnityCLI:

Вибирайте завжди LZ4 компресію, якщо не хочете просидіти 10-15 хв з LZMA.

Шрифти

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

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

Відеогайд від MrIkso як за допомогою BepInEx та UnityExplorer знайти шрифт, згенерувати новий через TMP Unity та замінити все через UABEANext:

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

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

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

Додатково може знадобитися додавання нового рядка з ID з назвою нашої мови у багатомовний 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 файлів використовуйте UnrealLocresEditor або його консольний варіант UnrealLocres. Для перекладу uasset і umap файлів використовуйте UassetLocalize або авторський інструмент UELT (видається обмеженому колу осіб) або мій старий форк UE Localization Tool 2.8.6 (не рекомендую, з перелічених у спойлерах причин).

Також текст із певних структур uasset та umap файлів можна перенести в locres для зручності і збереження сумісності перекладу з оновленнями гри, що й було зроблено з українізатором Fatekeeper від Sent_Dez. Детальніше розписано в документації UELT.

Usmap/jmap/jmap.gz для uasset/umap файлів

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

Що це таке: Цей файл містить усі структури гри для правильного відкриття та редагування uasset/umap, usmap є старою бінарною версією, коли jmap є новою альтернативою у вигляді JSON файлу, jmap.gz є його стисненим варіантом в архіві. Практично обов’язковий у Unreal Engine 5, іноді потрібен у 4-х версіях, тому й важливо перевіряти шляхом передогляду випадкового uasset у FModel'і.

Варіанти отримання usmap/jmap/jmap.gz

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

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

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

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

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

--version версію рушія гри можете дізнатись із заголовку вікна FModel, з Властивостей виконуваного файлу гри, чи переглянувши перші рядки згенерованого jmap.

У моєму випадку з Samson команда виглядає ось так:

retoc to-legacy --filter "/CJ/Content/CJ/Core/Systems/Dialogue/DT_SayLines.uasset" "E:\Games\Samson\CJ\Content\Paks" "E:\Exports" --version UE5_7

Увага: Для ігор на 5.7 версії Unreal Engine потрібно розпаковувати з обов’язковим аргументом --version UE5_7, інакше асети конвертуватимуться як з 5.6 версії і не відкриватимуться коректно.

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

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

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

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

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(Його,Її,Його) стан погіршується.

Особливості перекладу

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

Для їх перекладу потрібно дістати uk.res з кожної теки у Engine/Content/Internationalization/icudt64l (включно з нею) і перейменувати їх у en.res (або ту, яку ви заміняєте):

Результат:

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

uasset

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

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

ufont (UE 5.6+)

Починаючи з Unreal Engine 5.6 було додано розмір шрифту у заголовок ufont файлів як метадані для швидшого зчитування рушієм. Для видалення розміру і подальшого його правильного обрахування для пакування було написано інструмент uFontTool. Підтримується перетягування ufont/ttf/otf файлів та тек з підтеками.

Заміна текстур

Для UE 4.0 по 5.4 варто використовувати UE4 DDS Tools по посібнику piggsy. Для версій 5.2 по 5.7 потрібен новий інструмент UTextureTools від hypermodule. Для 5.8 поки що тільки через створення текстури в самому рушії.

Пакування

pak контейнери

Замість старого unrealpak варто використовувати новий інструмент repak, який дозволяє пакувати різними версіями контейнерів під потрібну версію Unreal Engine, а також є швидшим.

Важливо: Починаючи з Unreal Engine 5.6 з’явилася вимога обов’язкових utoc/ucas контейнерів для pak файлів, інакше гра просто не завантажить запакований переклад у контейнері pak. Так як у нових pak зберігаються лише locres, ufont, ini та інші звичайні формати — uasset та umap із Zen-контейнерів потрібно запаковувати в utoc.
Увага: У випадках, коли немає потреби у перекладі uasset чи umap, і при цьому utoc/ucas обов’язкові — можна взяти global.utoc і global.ucas з гри і використовувати їх як заглушки, перейменувавши під назву pak файлу.

Zen-контейнери utoc/ucas

Для цього нам знову потрібен retoc. Користуйтеся або консольним варіантом, або GUI-обгорткою від NooB.

Шаблон консольної команди:

retoc to-zen ТЕКА ЯК_БУДЕ_НАЗИВАТИСЬ_ФАЙЛ.utoc --version UE*_*

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

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

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

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

Так як LocRes Builder зі статті є вкрай незручним, я написав власний інструмент LocMetaTool для роботи з locmeta файлами. Підтримує перетягування locmeta/json та конвертацію між версіями locmeta. Перевірено на The Midnight Walk і Aphelion.

Godot 4.x

Спершу прочитайте інформацію щодо цього рушія з посібникa piggsy, і вже тоді повертайтеся сюди.

Текст і шрифти

Потрібні інструменти Godot RE Tools і GodotTresEditor. Відеогайд по редагуванню translation файлів від MrIkso:

За таким самим принципом можна замінювати й шрифти — вони, як і інші ресурси, завжди зберігаються в .godot/imported.

Інструменти

Загальні

Unity

Unreal Engine

Поради

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

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