LibLocaleOverride

Libraries

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.

WoW 12.0.7 Actively Maintained

Trend Explorer

Recent download momentum

Estimated downloads/hour over observed intervals in the last 48 hours.

Latest interval +1 /h 0.999h observed interval · ending Sep 11, 9 AM
Peak estimate +9.01 /h 0.999h observed interval · ending Sep 10, 9 AM
Average estimate +2.33 /h Time-weighted · 47.8h covered of 48h

Lines connect interval estimates, not hourly measurements. Unobserved time is not counted as zero or extrapolated to now.

About this addon

What it does

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.

What You Get

  • Per-addon language override, switchable live. No /reload, and no effect on any addon you didn't write — GAME_LOCALE is never touched.
  • Every registered locale table is kept and merged on demand (English baseline + chosen language on top), so a partial translation falls back key-by-key instead of failing over wholesale.
  • Bundled fonts for scripts WoW can't render — Thai, Hindi/Marathi, Bengali, Punjabi, Tamil, Telugu, Hebrew, Arabic, Japanese, Korean, Chinese (Simplified & Traditional), Cyrillic and Latin. Applied per string by the script that string actually uses, so a picker listing many languages at once renders all of them — and the bundled faces carry Latin too, so English names, slash-commands and brands sitting inside translated text don't turn into boxes.
  • Right-to-left support — Hebrew and Arabic/Persian/Urdu, with contextual Arabic letter shaping and bidirectional reordering, both of which the WoW font engine does not do at all.
  • Locale-native numerals, markup-aware: digits inside colour codes, textures, atlases and hyperlinks are left alone.
  • Fonting that covers real widgets — fontstrings, whole frames recursively, buttons across every state, native Blizzard dropdown lists, and AceGUI tab strips.
  • A client-locale resolver for chat and print output, so text leaving your addon stays readable in a chat window that can't render the chosen script.
  • Optional AceGUI integration — a two-column language picker showing each language in both the current language and its own native name, and an automatic tab-font handler.
  • Offline test suite at 100% line coverage, so the per-script behaviour an English-client developer cannot see by playing is checked before it ships.

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.

Then font and shape what you display:

LLO:ApplyFontToFrame("MyAddon", myWindow)   -- fontstrings + buttons, by each string's script
LLO:RegisterManagedFontString("MyAddon", fs) -- or let the library re-font it on every switch
LLO:RegisterCallback("MyAddon", RefreshUI)   -- rebuild your widgets on a switch

local line = LLO:LocalizeDigits("MyAddon", string.format(L.KILLS, n))
myText:SetText(LLO:Shape(line))              -- Shape AFTER format(), never on the template

Two guarantees worth knowing. First, fonting never resizes what it fonts: ApplyFontToFrame and ApplyFontToButton change how text renders, never a widget's size, position, anchors, parent or layout. The single exception is that a labelled button whose width isn't derived from two opposing horizontal anchors may have its width raised to fit a longer translated label — and never below the width it was built at. Give a button no label, or anchor it on both horizontal edges, to opt out entirely.

Second, Shape is safe on any string: text containing no right-to-left character comes back byte-identical, so you can wrap every display string unconditionally instead of branching on the active locale.

Version stamps: LibStub MINOR 16; the AceGUI, RTL and language-name satellites carry their own stamps (_aceguiMinor 4, _rtlMinor 2, _namesMinor 1) and upgrade independently, so the newest copy of each file wins regardless of load order.

Recent Updates

v0.3.3 (2026-08-25) — an Urdu text-shaping fix, a retail colour-code fix, plus internal test coverage

  • Urdu and Arabic script: Arabic letters change shape depending on what sits next to them, and the game does none of that work — this library does it. One Urdu letter (the dotless noon ghunna) was being treated as though nothing could join onto it, which drew the following letter in its stand-alone shape instead of its joined one. Fixed, and the letter classifications are now checked against Unicode's own published data rather than inferred.
  • Retail only: coloured text using the game's newer named colour codes could come out broken when an addon displayed numbers in a language with its own numerals (Hindi, Bengali, Arabic and so on) — the colour code itself was being rewritten. Fixed. On Classic Era, Burning Crusade and Mists of Pandaria Classic nothing changes at all: those clients do not use that colour form.
  • Everything else is behind the scenes: the library now has an automated test suite covering every line of its code, run before any future change ships. Most of what this library does — Thai, Hindi, Bengali, Tamil, Telugu, Hebrew, Arabic, Korean, Japanese and Chinese rendering — can only be seen by actually switching language, so a change that broke one of them could previously reach you before anyone noticed.
  • Housekeeping: the compatibility numbers for Wrath and Cataclysm Classic were refreshed. Those clients no longer exist, so this affects nobody — it is tidied only so the list stays in step with the rest of the addon family.

v0.3.2 (2026-07-28) — updated for the latest game clients

  • Updated for Classic Era 1.15.9, Burning Crusade / Anniversary 2.5.6, and Mists of Pandaria Classic 5.5.4 — the library no longer shows as out-of-date on any of them. Retail and the older Classic versions are unaffected.
  • No other changes: nothing about how the language override, fonts or layout behave is different from v0.3.1.

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. The locale-merging core, the font routing and the BiDi/shaping logic are an original implementation. Bundled and adapted third-party assets: the public-domain LibStub; Google Noto and Sarabun fonts under the SIL Open Font License 1.1, each shipping its own OFL.txt under fonts/<Script>/; and the Arabic/Persian/Urdu base-letter to presentation-form tables, generated from the Unicode Arabic Presentation Forms via python-arabic-reshaper (MIT, © Abdullah Diab), with the reshaping/ligature approach seeded by Arabic_Reshaper_LUA (MIT).

At-a-glance numbers

Performance highlights

  • Peaked at Hot #60 on Aug 28, 2026.
  • Peaked at Rising #290 on Aug 28, 2026.
  • Featured on the Hot list across 5 distinct weeks.
  • Shipped 2 releases in the last 30 days.
  • Averaging 64 new downloads per day over the past week.

Discover more

Keep exploring

Similar addons you might also want to check out.

More by Pmptasty

Same creator, different utilities.

Similar in Libraries

Comparable addons in the same lane.