EllesmereUI's options panel, unlock mode, and popups can be translated into any
of the languages World of Warcraft supports. Translations are community-driven
and live in plain Lua files inside the EllesmereUILocales addon (a
LoadOnDemand sibling of the main addon). Missing translations fall back to
English automatically, so a partial translation is completely fine and ships
without breaking anything.
- English is the key. There are no symbolic IDs: you translate
L["Enable"] = "...", notL["OPTIONS_ENABLE"]. - English clients never load the
EllesmereUILocalesaddon at all. On a non-English client it loads at startup, and only the file whose language matches builds entries; every other file returns immediately. - Any key you leave out (or any string not yet wrapped) renders in English.
-
Find your locale code (what
GetLocale()returns):deDEGerman,frFRFrench,esESSpanish (EU),esMXSpanish (LatAm),itITItalian,ptBRPortuguese (Brazil),ruRURussian,koKRKorean,zhCNChinese (Simplified),zhTWChinese (Traditional). -
Create
EllesmereUILocales/<code>.lua(copyEllesmereUILocales/deDE.luaas a starting point), beginning with:local L = EllesmereUI.RegisterLocale("frFR") -- your code if not L then return end
-
Add a line in
EllesmereUILocales/EllesmereUILocales.tocnext to the other locales:frFR.lua -
Translate the right-hand side only. Keep the English key exactly as it is:
L["Enable"] = "Activer"
-
Open a pull request.
- Encoding: UTF-8 without a BOM. Use real accented / CJK / Cyrillic
characters (
Größe, notGroesse)..gitattributespins this; do not edit locale files with a tool that rewrites them as UTF-16. - Keep
%1$s/%2$dplaceholders. You may reorder them for grammar:L["Reset %1$s"] = "%1$s zurücksetzen". Never split a sentence into concatenated fragments. - Keep English on purpose with the
truesentinel when a term shouldn't change:L["Mythic+"] = true. - Don't translate numbers, color codes, or proper nouns Blizzard already localizes (class/spec names come from the game directly).
You don't have to find every string by hand. In-game:
/reload
/euiloc on -- start recording (before opening the options)
... open every options page, cog popup, and tooltip ...
/euiloc dump frFR -- writes a paste-ready L["..."] = "" block
/euiloc off
The block is saved to EllesmereUIDB._localeDump in
WTF\Account\<account>\SavedVariables\EllesmereUI.lua (after a /reload or
logout). Paste it into your locale file and fill in the translations.
EllesmereUILocales/_keys.txt is a committed, static list of the literal keys (regenerated
by .tools/extract-locale-keys.sh; CI keeps it current). It is a quick offline
reference, but the in-game /euiloc harvester above is the complete source of
truth because it also captures strings passed to L() as variables.