LibLocaleOverride — Per-Addon Language Override for WoW Addons
A small embeddable library that lets an addon offer its own in-game language picker — so a player can read your addon in Dutch while their WoW client runs in English, without touching any other addon. It bundles fonts for scripts WoW can't render (Thai, Indic, CJK, Hebrew, Arabic and more), supports right-to-left languages, and refreshes the UI on a switch without a /reload.
The Problem
WoW addons normally lock their language to the game client via GetLocale(). A player whose client is English can't read a supported addon in their native language, and addons can't offer languages WoW doesn't ship at all. The one existing override — the global GAME_LOCALE (and the AddonLocale addon that wraps it) — is all-or-nothing: it retargets every AceLocale addon at once, and it can't switch at runtime.
The Solution
LibLocaleOverride keeps every registered locale table and merges them on demand (an English baseline + the chosen language on top, so a partial translation still falls back cleanly) — per addon and switchable live. Picking a language for one addon never affects another. A bundled-font manager covers non-Latin scripts, and a change callback lets widgets refresh in place.
For Developers
Embed via LibStub and register your locale tables:
local LLO = LibStub("LibLocaleOverride-1.0")
LLO:RegisterLocale("MyAddon", "enUS", enUSTable, true) -- baseline
LLO:RegisterLocale("MyAddon", "nlNL", nlNLTable)
LLO:SetStore("MyAddon", getOverrideFn, setOverrideFn) -- your SavedVariable
LLO:ApplyStored("MyAddon") -- at login
local L = LLO:GetLocale("MyAddon") -- read L[key] at BUILD time
Add it to your addon as an external dependency — one canonical copy across your whole addon family. Read L[key] when you build a widget, never frozen at load, so a live language switch takes effect.
Recent Updates
v0.3.1 (2026-07-01) — non-Latin buttons & tabs size to the width they're drawn at; chat messages stay readable in every language
- Buttons now grow to the width a translated label is actually painted at. For scripts like Tamil, Hindi or Thai the game reports a much smaller width than it draws, so labels were overflowing their buttons; the width is now measured against the client font and the button fits the real label.
- This also covers plain text buttons that use a separate label, so those size to their translation too.
- Tab strips no longer run off the edge of the window in a non-Latin language — the tabs are measured at their true painted width, so the row wraps neatly inside the window instead of overflowing.
- New helper lets an addon print chat messages in your actual WoW client language instead of a chosen override language. The game's shared chat box can only draw the languages WoW ships, so a message in (say) Bengali or Dutch would otherwise show as boxes; addons can now keep their in-window text in your chosen language while chat lines stay in a language the chat box can render.
v0.3.0 (2026-06-25) — native numbers, buttons & dropdowns, no more boxed Latin
- Numbers can display in a language's own digits (Bengali ০-৯, Hindi, Arabic, and more) — and it leaves colour codes, icons and links untouched.
- Buttons now font correctly in every state (including while hovered) and automatically grow to fit a longer translated word, so labels never overflow or turn into boxes.
- The open list of a native Blizzard dropdown menu now fonts correctly for the chosen language — previously only the selected value did.
- Fonting a whole window now covers its buttons automatically, in one call.
- Tab strips keep their selected/unselected colours correctly even when using a bundled font.
- Fixed Bengali and Punjabi text being mistaken for Hindi (a shared punctuation mark) and rendering as boxes.
- Bundled fonts now include the Latin alphabet, so English names, slash-commands or brands sitting inside translated text show up instead of empty boxes.
v0.2.0 (2026-06-14) — right-to-left, full language coverage, drop-in pickers
- Right-to-left languages now supported — Hebrew and Arabic/Persian/Urdu, including proper Arabic letter shaping and right-to-left layout.
- Bundled fonts for nearly every script: added Vietnamese/Turkish/Hausa, Russian, Hebrew, Arabic, Punjabi, Japanese, Korean, and Chinese (Simplified & Traditional), on top of Thai and the Indian languages.
- A ready-made two-column language picker for AceGUI: each language shown both in the current language and in its own native name and script, sorted A-Z.
- Tab strips stay in the correct font automatically — including while you hover or select a tab — and never leak a font into another addon.
- Many reliability fixes for use as a shared library across lots of addons.
v0.1.0 (2026-06-12) — first release
- Per-addon, runtime language override: an addon offers its own language picker, switchable live with no
/reload, and untranslated text falls back to English. - Bundled fonts for scripts WoW can't render — Thai, Hindi/Marathi, Bengali, Tamil, Telugu — applied only where that script actually appears, so a language list mixing many scripts never shows blank boxes.
- Optional AceGUI dropdown that renders non-Latin languages in both the selected value and the open list.
- Reference consumer: FastGuildInvite.
Community
Bug reports, feature requests, or questions: Join the Discord.
License
MIT. Original implementation — contains no third-party code beyond the public-domain LibStub.

