Русский · English
Локализация Guild Wars 2 на любой язык: игра начинает рисовать буквы, которые штатно показывает пустыми квадратами (кириллица, корейский/хангыль и др.), плюс перевод игрового текста — без изменения
Gw2.dat. Guild Wars 2 localization (Russian / Korean / …).
Прокси-DLL ранней загрузки, которая заставляет Guild Wars 2 рисовать буквы,
которые штатный клиент показывает пустыми квадратами (кириллица, корейский и др.),
и переводит игровой текст на ваш язык. Подстановка языко-нейтральна — в
словарь можно положить перевод на любой язык. Это проект для доступности /
локализации: он учит живой движок шрифтов рисовать нужные глифы и подменяет текст
в памяти, без изменения файла Gw2.dat на диске, поэтому проверки
целостности архива ArenaNet проходят и игра не запускает «починку».
Статус: ✅ Нелатинский текст (кириллица, корейский хангыль) рендерится без краша. ✅ Перевод текста, включая ранее нечитаемые зашифрованные (RC4) строки (~70 % текста). ✅ Внутриигровой оверлей (клавиша Insert): редактор словаря, сбор строк и настройки прямо в игре — с переключателем языка интерфейса (Русский / English).
⬇️ Готовые файлы — на странице Releases. Собирать из исходников не нужно — просто скачайте и положите в папку игры.
⚠️ Готовый перевод в комплект не входит. Релиз содержитversion.dll(рендеринг кириллицы + оверлей),gw2-cyrillic-gui.exe(редактор словаря) иcyrillic-string-dump-tool.exe(дамп текста). Словарьcyrillic_strings.csvвы наполняете сами — извлеките английский текст dump-tool'ом и переведите (или копите строки прямо в игре). Без заполненного словаря кириллица рисуется, но текст остаётся английским.
- Скачайте
version.dllиз последнего релиза. - Положите его в папку Guild Wars 2 — рядом с
Gw2-64.exe. - Запустите игру. Кириллица отрисуется. Готово.
Guild Wars 2\
├─ Gw2-64.exe
└─ version.dll ← скачанный файл
Настоящие экспорты
version.dllфорвардятся в подлинную системнуюversion.dllизSystem32автоматически — отдельная копияversion_orig.dllне нужна.
🔄 Автообновление. При запуске
version.dllпроверяет GitHub-релизы и, если есть новее, тихо обновляет себя к следующему запуску (фоном, при наличии сети).Откатить: удалить
version.dllиз папки игры.
version.dll встраивает в игру полноценный оверлей — открывается клавишей
Insert. Это основной способ работать с локализацией, не выходя из игры.
Вертикальные вкладки, тёмная тема, язык интерфейса переключается (Русский /
English) во вкладке «Интерфейс»:
- Перевод — статус и общее управление.
- Найденные слова — строки, собранные по ходу игры, с разбивкой по файлам.
- Редактор словарей — правка любых
dict_*.csv/pn_*.csv, основногоcyrillic_strings.csvи собранных строк прямо в игре: редактирование по клику, фильтры (все / переведённые / непереведённые), поиск, индикатор прогресса, быстрый переход «К непереведённой». Изменения применяются вживую сразу после сохранения — без перезапуска и переоткрытия панелей. - Интерфейс — язык интерфейса оверлея (Русский / English), позиция и размер HUD-иконки, масштаб шрифта оверлея, выбор шрифта игровых глифов и его размера (применяется на лету).
- Журнал — диагностический лог.
В редакторе работают вставка/копирование (Ctrl+V / Ctrl+C), а корейский ввод/текст отображается глифами (через системный шрифт), а не «квадратами».
Сбор строк (
autocollect/seed_decode) можно включать и выключать прямо в оверлее — без перезапуска игры.
Помимо отрисовки недостающих букв, version.dll переводит игровой текст.
Перевод берётся из словаря cyrillic\cyrillic_strings.csv (колонки
english,translate — перевод на любой язык; редактируется в любой таблице, в GUI
или в оверлее). Английская строка заменяется переводом в памяти, после проверок
целостности — .dat не трогается. Длина перевода не ограничена. Переводятся в
том числе зашифрованные (RC4) строки — это ~70 % всего текста игры.
Подстановка языко-нейтральна: в колонку
translateможно положить русский, корейский или любой другой язык. По умолчанию игра остаётся на оригинальном английском, если язык системы не русский (translateвключается автоматически только на русских системах; в остальных — включите его в оверлее или вconfig.ini).
Guild Wars 2\
├─ version.dll
├─ cyrillic-string-dump-tool.exe ← инструмент дампа словаря (из релиза)
└─ cyrillic\
├─ cyrillic_strings.csv ← основной словарь (english,translate) — заполняете перевод
├─ dict_*.csv ← словари по источникам (вики/API) — тоже подхватываются
├─ discovered_strings.csv ← авто-собираемые новые строки (временный)
├─ cyrillic.ttf ← свой шрифт (опционально)
├─ config.ini ← настройки
└─ version_proxy_log.txt ← лог
Незашифрованные строки (имена предметов и часть UI — это меньшая часть текста)
можно извлечь из Gw2.dat офлайн инструментом cyrillic-string-dump-tool.exe
(скачивается из того же
релиза):
- Полностью закройте игру (и лаунчер — ему нужен эксклюзивный доступ к архиву).
- Положите
cyrillic-string-dump-tool.exeв папку Guild Wars 2 (рядом сGw2.dat) и запустите (двойной клик). - Он сканирует архив (несколько минут) и дописывает найденные английские строки
в
cyrillic\cyrillic_strings.csv(merge — существующие строки и ваши переводы сохраняются).
Затем заполняйте колонку translate (перевод на ваш язык).
ℹ️ Зашифрованные (RC4) строки — ~70 % текста — этим инструментом офлайн НЕ извлекаются (для них нужны рантайм-ключи игры). Они попадают в словарь по мере игры через сбор строк (см. ниже):
version.dllдекодирует их на лету и записывает. Итог: полный словарь = базовый офлайн-дамп (raw) + сбор RC4 в игре.
cyrillic-string-dump-tool.exe извлекает английский текст не только из Gw2.dat,
но и из официальной вики и GW2 API — это то, что в .dat лежит
зашифрованным или приходит с сервера (диалоги, реплики). Запустите инструмент без
аргументов — откроется меню (стрелки / пробел / Enter) с выбором источников:
- Вики: сюжетные диалоги (по дополнениям), реплики сердец возрождения, события, зонные (ambient) диалоги, реплики боссов, NPC-диалоги (окно разговора).
- GW2 API: достижения, предметы, умения, черты, скины, названия на карте мира (зоны / точки интереса / вейпоинты) и пакет коротких списков (звания, валюты, краски, маунты, миниатюры, гильдия, WvW и др.).
Каждый источник пишется в свой файл dict_<источник>.csv (формат
english,translate, merge — ваши переводы сохраняются). version.dll сама
подхватывает все dict_*.csv из папки cyrillic\ вместе с
cyrillic_strings.csv, так что держать переводы в отдельных файлах удобно и
ничего не ломает (ручной перевод в cyrillic_strings.csv имеет приоритет).
Долгие выгрузки (события, диалоги, NPC — тысячи страниц) пишутся по ходу и поддерживают возобновление: если прервать, повторный запуск продолжит с того места, а не качает всё заново.
version.dll декодирует строки, которые показывает игра (включая зашифрованные), и
дописывает их в cyrillic\discovered_strings.csv. При следующем запуске новые
строки автоматически сворачиваются в cyrillic_strings.csv. Так словарь
дополняется тем, что вы реально видите в игре. Два режима (включаются в оверлее или
в config.ini):
autocollect— собирает строки по мере их появления на экране.seed_decode— расшифровывает все строки, присланные сервером (намного больше показанных на экране, ~18× охвата).
Русские существительные склоняются по количеству (1 снежинка, 3 снежинки,
5 снежинок), а английское [s] это выразить не может. Поэтому в переводе
поставьте три формы через | в квадратных скобках — version.dll сама выберет
нужную по числу, которое подставляет игра:
[форма_для_1 | форма_для_2-4 | форма_для_5+]
| Когда | Какое число | Берётся форма |
|---|---|---|
| одна | 1, 21, 31, 101 … (но не 11) | [форма1` |
| две | 2–4, 22–24 … (но не 12–14) | `[… |
| пять | 5–20, 0, 25–30 … | `[… |
Пример. Английская строка-счётчик %num1% Snowflake[s] → в колонке russian.
Общую основу слова удобно вынести за скобки, а в скобках оставить только
различающиеся окончания:
english,translate
%num1% Snowflake[s],%num1% снежин[ка|ки|ок]В игре отрисуется: 1 снежинка, 3 снежинки, 7 снежинок.
(Можно и полными словами — [снежинка|снежинки|снежинок], обе записи равнозначны.)
Ещё пара отметок:
- две формы
[ый|ые]— прилагательное/суффикс: форма для 1, иначе — вторая (напр.золот[ой|ые] [ключ|ключа|ключей]);- одиночная
[ы]/[и]без|отдаёт только единственное число (движок не умеет менять основу слова) — для счётчиков всегда используйте три формы.
Склонения применяются и при загрузке словаря, и вживую при сохранении правки в редакторе оверлея.
По умолчанию игровые глифы рисуются зашитым шрифтом Tahoma (содержит латиницу и
кириллицу). Для корейского (хангыль) version.dll дополнительно использует глифы
хангыля, уже вшитые в саму игру, поэтому корейский рисуется во всём интерфейсе без
подключения отдельного шрифта. Чтобы рисовать кириллицу своим шрифтом — два пути:
- В оверлее: вкладка Интерфейс → выбрать
.ttfи размер. Применяется на лету (при следующей загрузке шрифтового ассета — смене зоны/карты), без перезапуска. - Drop-in: положить файл
cyrillic.ttfв подпапкуcyrillic\рядом сversion.dll.
Guild Wars 2\
├─ Gw2-64.exe
├─ version.dll
└─ cyrillic\
└─ cyrillic.ttf ← ваш шрифт
Если положить
cyrillic.ttf/cyrillic_strings.csvпрямо в папку игры, при следующем запускеversion.dllсама перенесёт их вcyrillic\.
Important
Шрифт обязан содержать кириллические глифы. Если в .ttf нет кириллицы,
version.dll отклонит его и откатится на встроенный шрифт — без вылета.
Проверить можно в логе cyrillic\version_proxy_log.txt.
Warning
Не доверяйте окну предпросмотра шрифта в Windows — оно показывает русский даже у шрифтов без кириллицы (системный font fallback), а в самом файле букв нет. Берите шрифты с реальным покрытием кириллицы: Roboto, Open Sans, PT Sans, Noto Sans.
Настройки можно менять в оверлее (вкладка Интерфейс) или вручную в
cyrillic\config.ini (создаётся при первом запуске). Основные параметры:
# Автообновление version.dll с GitHub-релизов.
autoupdate=true
# Применять перевод из cyrillic_strings.csv (показывать перевод в игре).
# По умолчанию on только на русской системе, иначе оригинальный английский.
translate=true
# Язык интерфейса оверлея: ru | en (по умолчанию en, если система не русская).
ui_lang=ru
# Автосбор показанных строк в discovered_strings.csv.
autocollect=false
# Полный сбор: расшифровывать ВСЕ присланные сервером строки (~18× охвата).
seed_decode=false
# Переводить имена персонажей и названия локаций (слой pn_*.csv).
translate_proper_nouns=false| Параметр | По умолчанию | Что делает |
|---|---|---|
autoupdate |
true |
проверяет и ставит обновления version.dll с GitHub |
translate |
по локали | подтягивает словарь и показывает перевод в игре (on на русской системе, иначе off) |
ui_lang |
по локали | язык интерфейса оверлея: ru / en (en, если система не русская) |
autocollect |
false |
собирает показанные строки в discovered_strings.csv |
seed_decode |
false |
расшифровывает все серверные строки (полный сбор) |
translate_proper_nouns |
false |
переводит имена/локации из слоя pn_*.csv |
Сбор строк (
autocollect/seed_decode) и большинство настроек применяются на лету при изменении в оверлее — перезапуск не нужен.
Кроме внутриигрового оверлея, в релизе есть gw2-cyrillic-gui.exe — отдельная
графическая программа для работы со словарём вне игры. Положите её рядом с
version.dll (в папке игры) или запустите откуда угодно и укажите папку GW2 — она
найдёт cyrillic\ автоматически (в т.ч. через поиск по Steam-библиотекам).
Guild Wars 2\
├─ version.dll
├─ gw2-cyrillic-gui.exe ← графический редактор (из релиза)
└─ cyrillic\
└─ cyrillic_strings.csv
Вкладки:
- Словарь — таблица
English / Русскийповерхcyrillic_strings.csv: поиск, фильтры (все / переведённые / непереведённые / со сломанной разметкой), подсветка непереведённых и строк с битыми плейсхолдерами, выделение строк чекбоксами и массовые операции, отмена правок (Ctrl+Z), прогресс перевода и переход к следующей непереведённой строке. Изменения сохраняются в тот же CSV. - Настройки — правка
cyrillic\config.iniв пару кликов, плюс тема оформления (тёмная/светлая, акцент). - Статус — разбор
cyrillic\version_proxy_log.txt: что загрузилось, нашлись ли сигнатуры, виден ли словарь — удобно для диагностики.
GUI ничего не ломает в игре: он лишь редактирует словарь и
config.iniи читает лог. Перевод по-прежнему применяетversion.dll.
В репозитории есть CLI gw2-dat-tool/ для работы со своим
Gw2.dat: экспорт словаря строк, просмотр AFNT-чанков шрифтов, генерация
кириллических атласов. Большинству он не нужен — хватает version.dll +
cyrillic-string-dump-tool.exe. Подробности — в
gw2-dat-tool/README.md.
# экспорт всего словаря строк в CSV (игра закрыта):
cargo run --release -- --dat "C:\путь\к\Guild Wars 2\Gw2.dat" strs-export-all --out dict.csvGuild Wars 2 хранит шрифты и текст внутри архива Gw2.dat. Прямые подходы не
работают: править Gw2.dat нельзя (клиент проверяет CRC и удаляет изменённые
файлы → перекачка), а обычный аддон грузится уже после того, как игра
прочитала данные.
version.dll обходит оба ограничения: GW2 импортирует её статически, поэтому она
грузится до движка; игра читает и проверяет подлинные данные, а затем DLL
подменяет распакованные байты шрифта и строк в ОЗУ — после всех проверок
целостности, но до парсера. Файл Gw2.dat на диске при этом не изменяется.
Оверлей рисуется поверх игры через хук Direct3D.
Исходный код инжектируемой version.dll закрыт; в релизах публикуется готовый
бинарь.
Репозиторий содержит инструмент gw2-dat-tool и кириллические данные. В нём
нет данных, извлечённых из Gw2.dat — это собственность ArenaNet; готовые
файлы вы получаете из своей легально установленной копии игры (через dump-tool)
либо из релизов.
Guild Wars 2 — торговая марка ArenaNet, LLC. Это неофициальный некоммерческий фанатский проект, не связанный с ArenaNet и не одобренный ей.
MIT для кода в этом репозитории.