SW:EaW Localization Suite

Комплекс утиліт для локалізації ігор на рушії Alamo (Star Wars: Empire at War). Автоматизує процес від екстракції бінарних даних до ШІ-перекладу та ручної коректури.

Останній реліз: v1.1.0 · 3 жовтня 2026 р. ·що нового

Утиліти

EaWLocalizationTool.GUI — WPF-редактор DAT-файлів для ручного перекладу та перевірки, призначений для моддерів, яким потрібен повний контроль над локалізацією. Завантаження оригінального DAT + джерела перекладу (TSV або інший DAT); фільтрація за статусом (Всі / Без перекладу / Перекладено / Змінено / Проблемні / Дублікати / Дубл. різні / Схожі / Технічні); автоматична валідація \n, \r, %s/%d, [тегів], <тегів> та {модифікаторів}, пробілів і переносів на краях рядка; розумне визначення технічних рядків (заглушки, роздільники crawl-тексту, фрази DO NOT DISPLAY, маркер TEXT_END_OF_DATA); контекстне меню (копіювати оригінал, вставити оригінал як переклад, очистити переклад, копіювати ключ); безпечний запис зі збереженням CRC32 та ключів — побайтова копія оригіналу; автозбереження резервної копії з налаштовуваним інтервалом; логування помилок та подій для діагностики крашів; темна/світла тема з масштабуванням шрифту; експорт у TSV для роботи в Excel/Google Sheets.

Перенесення перекладу «основна гра → доповнення» — кнопка «⇄ Перенесення» відкриває вікно із чотирма файлами (оригінал і переклад основної гри, оригінал і переклад доповнення; замість останніх двох можна взяти доповнення, уже відкрите в програмі). Зіставлення рядків: спершу за ключем, коли англійський текст збігається (без урахування регістру й пробілів), потім за самим англійським текстом — спершу точний збіг, потім нормалізований. Окремо — збіг за ключем із дрібною відмінністю тексту: якщо ключ є в основній грі, а англійські тексти відрізняються лише одруком, зайвою чи відсутньою літерою або розділовим знаком, переклад переноситься за ключем без підтвердження. Умови (усі разом): текст від 20 символів, змінений фрагмент не довший за 3 символи і не більший за 5% довжини (після відкидання спільного початку й кінця нормалізованих текстів), цифри однакові, різниця не лише в дефісі чи пробілі (інше написання назви, наприклад «Abregado-rae» / «Abregado Rae»). Відмінності у словах і числах під це не підпадають і йдуть на підтвердження. Попередній аналіз (ще до запису) показує кількість збігів за кожним типом, конфлікти, рядки без відповідника і скільки рядків піде на підтвердження.

Рядки з позначкою вичитки, відмінною від «не вичитано» (-), ніколи не перезаписуються; технічні рядки не чіпаються ніколи. Де донор має кілька різних перекладів одного англійського оригіналу — окреме вікно вибору варіанта (типово — пропустити). Спірні рядки (ключ є в основній грі, але англійський текст під ним інший) виводяться у вікно підтвердження: обидва оригінали, поточний переклад доповнення, переклад основної гри за ключем і за фразою — усе поруч; колонка “Результат” редагується так само, як переклад у головному вікні, з кнопками “зрівняти за ключем”/“за фразою” для виділених рядків і контекстним меню (копіювати, внести в результат, додати, внести всі варіанти, застосувати результат до рядків з тим самим текстом). Результат пишеться в НОВИЙ DAT з міткою часу (yyMMdd HHmm) в теці перекладу доповнення — наявні файли ніколи не перезаписуються, поруч зберігається парний TSV зі статусами вичитки, попередня версія робочого TSV лишається як .bak. Окрема кнопка «Звіт збігів» зберігає й відкриває TSV з усіма рядками, видом збігу й прапорцем розбіжності — з іменованими фільтрами (“Збіг за ключем”, “Дрібна відмінність тексту”, “Та сама фраза в основній грі”, “Лише в доповненні” тощо), лічильниками, пошуком і копіюванням без можливості редагування.

Перенесення — це одна конкретна дія над двома файлами; решта нижче — самостійні можливості самого редактора, не прив’язані до перенесення.

Файлова структура та неперервність сесії — теки original\, translated\, work\, transfer\ створюються при запуску й повторюють структуру гри, тож файли копіюються з гри й у гру без зміни шляхів; вікно перенесення само бере з них найновіші DAT. Поруч із програмою для кожного відкритого перекладу ведеться робочий TSV work\{гра}\{ім'я} [{хеш ключів}].tsv: створюється при відкритті (попередня версія лишається як .bak), оновлюється при збереженні DAT і автозбереженні — хеш відрізняє основну гру від доповнення, щоб файли не плутались. При повторному відкритті перекладу статуси вичитки підхоплюються з парного TSV (або з робочого файлу, якщо парного немає), тож прогрес вичитки не губиться між сесіями; колонка ReviewStatus присутня і в експорті, і при імпорті TSV як джерела перекладу.

Вичитка та масове редагування (загальна можливість редактора, діє незалежно від перенесення) — редагована колонка «Вичитка» (+ / +/- / - або довільний коментар) з лічильником і прогрес-смугою в шапці; множинне виділення рядків (Ctrl/Shift+клік) і контекстне меню «Вичитка для виділених» проставляють позначку одразу для групи. Кнопка «↔ Вирівняти краї» приводить пробіли й переноси на початку/кінці перекладу у відповідність з оригіналом для всіх перекладених нетехнічних рядків, не чіпаючи текст між ними.

Дублікати та схожі рядки (теж окрема, незалежна від перенесення можливість) — фільтри «Дублікати» (точно однаковий англійський текст) і «Дубл. різні» (переклади в групі розійшлися); «Схожі» — рядки, що відрізняються лише регістром чи пробілами, з підказкою, що саме відрізняється. Контекстне меню «Застосувати до всіх дублікатів» копіює переклад у всю групу (вичитані рядки за замовчуванням пропускаються); «Застосувати до схожих з урахуванням регістру» підлаштовує регістр перекладу під кожну ціль окремо (нижній/ВЕРХНІЙ/Як Речення/Кожне Слово).

EaWLocalizationTool (консоль) — екстракція XML/DAT/TXT у TSV, зіставлення з перекладом, пакування назад зі збереженням CRC32.

StarWarsLocalizer — ШІ-перекладач на базі Gemini API (3.1 Flash Lite / 2.5 Flash) з дворівневою перевіркою галюцинацій і контролем технічних токенів.

EaWTextureConverter — WPF-інструмент для пакетної конвертації DDS-текстур між PNG і DDS без зовнішніх exe, сумісний з будь-яким модом EaW/FoC. Рекурсивне сканування папки моду або ручне додавання файлів; конвертація DDS → PNG зі збереженням альфа-каналу (Magick.NET, DXT1/DXT3/DXT5) і PNG → DDS власним бінарним writer (uncompressed BGRA 32bpp, формат сумісний з DirectX 9/рушієм Alamo); автоматичне визначення кореня моду по структурі Data\Art без хардкоду назв; підтримка обох структур EaW (Data\Art\Textures і Data\patch2\DATA\ART\TEXTURES) зі збереженням повної відносної структури папок у виводі; сортування по колонках, вибір/зняття всіх файлів, двомовний інтерфейс, темна і світла тема.

MEGExtractor — інструмент для роботи з .meg архівами гри.

Вимоги

Windows 10/11 x64, .NET 10 Desktop Runtime

Збірка та поширення

З релізу v1.1.0 збірка автоматизована через GitHub Actions (попередні релізи збирались і завантажувались вручну): за тегом vX.Y.Z (або вручну для наявного тега) workflow збирає EaWLocalizationTool.GUI та EaWTextureConverter одразу у трьох варіантах — win-x64, win-x86 (самодостатні, без потреби встановлювати .NET) і generic (менший розмір, потребує .NET 10 Desktop Runtime) — і публікує GitHub Release з описом, узятим прямо з цього changelog, та файлом контрольних сум SHA256SUMS.txt. До кожного релізу додається підтвердження походження збірки (GitHub build provenance attestation) — перевірити його може будь-хто командою gh attestation verify <архів> --repo EMP-UA/SW_EaW-Localization-Suite-UA_EN. За налаштованими секретами той самий workflow також завантажує варіант generic на Nexus Mods як нову версію наявних файлів.

Завантаження

Актуальні релізи доступні на GitHub Releases.

Безпека та прозорість

Вихідний код усіх утиліт та скрипт інсталятора Inno Setup повністю відкриті. Основні інструменти портативні й працюють без спеціальних прав: скрипт SetupFonts.bat автоматично визначає версію ОС — на сучасних Windows (10 версії 1809+ та 11) дозволяє встановлення шрифтів локально без прав адміністратора, а для старіших систем або глобального встановлення безпечно запитує підвищення прав через UAC.

Інсталятор використовує HKEY_CURRENT_USER виключно для роботи деінсталятора та відстеження версії (запобігання дублюванню); SetupFonts.bat вносить зміни до гілки Fonts (у HKEY_CURRENT_USER або HKEY_LOCAL_MACHINE залежно від вибору) для офіційної реєстрації шрифтів, необхідної рушію гри. API-ключі Gemini вводяться користувачем вручну й не зберігаються в репозиторії.

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

Файли перевірені модерацією Nexus Mods та VirusTotal. Відсутність цифрового підпису є нормою для некомерційних фанатських проєктів.

Пов’язаний проєкт

Розроблено для Star Wars: Empire at War — Українська локалізація.

Подяки

  • Gemini API — основний лінгвістичний рушій
  • CsvHelper — обробка TSV таблиць
  • Magick.NET — декодування DDS
  • ImageSharp — обробка PNG
  • BCnEncoder.NET — BCn кодування
  • Inno Setup — інсталятор
  • Exo 2 — база для українських шрифтів гри