Game add-on · World of Warcraft

Matreshka: a Russian localization for World of Warcraft that translates the game on the fly

A client-side add-on for WoW: The Burning Crusade. It translates quests, items, NPC dialogue and chat lines while the game is running, without touching the server. The project is open: the sources are on GitHub and releases go out on CurseForge.

RoleDevelopment + data
PlatformWoW TBC · Anniversary
StackLua · WoW API · Python
PublishingGitHub + CurseForge
The problem

An English client that cannot be switched to Russian

The official European servers are locked to English: the Russian locale cannot be enabled through Battle.net, because with it the realm simply refuses to let you in. So Russian text can only be added on the client side, with an add-on.

Existing solutions did not fit: some were built for old game versions and long abandoned, others translate word by word and produce nonsense. What was needed was an add-on that translates in coherent text and, above all, does not break the game. Add-ons in WoW run in a strict sandbox, and careless string replacement breaks the protected interface elements.

How it was

English quests and dialogue; the existing localisations were outdated or translated word by word. Replacing system strings directly broke the action bar and the exit menu.

+ What was needed

Coherent translation of quests, items, dialogue and chat in real time, without a single crash of the game's protected interface.

Solution

What Matreshka translates

Translation through hooks rather than system string replacement

The add-on does not blindly rewrite the game's global strings, because that is exactly what broke the protected interface. Instead it hooks the drawing of windows (hooksecurefunc, chat filters, tooltip hooks) and places the Russian text over the already rendered frame. The action bar, the menus and the combat elements are left untouched.

Whole quests

The title, objectives, description, progress and completion are translated, along with the labels of the quest window itself ("Quest objectives", "Reward"). The text is looked up by quest identifier, so it is substituted exactly rather than by a name match.

Item and spell tooltips

The name and the description are translated line by line inside the native tooltip, keeping the original colours. Numbers that the game computes from character stats (damage, healing) are substituted live, because matching is done both on exact text and on a fuzzy pattern.

NPC dialogue and chat lines

Character and boss lines in chat come from Blizzard's official Russian translation, recovered from an open game server dump. NPC dialogue, letters and system events that are absent from the official translation are machine translated with mandatory manual proofreading.

Interface

How it looks in the game

Quest window · with the Matreshka add-on
Угроза из Тёмного портала
Цели задания
Разведать лагерь Пылающего Легиона (0/1)
Собрать печати скверны (0/8)
Описание
Демоны снова стягиваются к порталу. Отправляйся в Адское Пламя, разузнай их планы и принеси доказательства: печати, которые они носят на поясе.
Принять Отказаться
The title, objectives, description and buttons of the window are shown in Russian. Before the add-on is installed, all of this text is in English.
Data

Where the translation comes from

The core of the add-on is data rather than code. Blizzard's official Russian text is extracted from an open game server dump (tens of thousands of "original → translation" pairs), assembled by Python scripts into compact Lua tables and checked by a validator before the build. Whatever is missing from the official translation is added by machine translation with manual proofreading.

SourceBlizzard dump
Python buildgenerator + validator
Add-on databaseLua tables
Gametranslation on the fly
Result

What came out of it

2.3.0public release on GitHub and CurseForge
53 770chat lines, official translation
1 078translated NPC dialogues
0crashes of the protected interface
The project is open and still maintained. New releases build automatically: pushing a version to the repository triggers GitHub Actions, which publishes the build to GitHub Releases and to CurseForge.
Stack

Technologies

LuaWoW Addon APIhooksecurefunc PythonDB2 / SQL dataminingGoogle Translate GitHub ActionsCI/CDCurseForge API