Title: Localization script (locale-file layer) — Korean included, would you try it?

---

Hi, and thanks for EllesmereUI (I use it daily on 7.9.5)!

I built a non-invasive localization layer and wanted to share it in case you'd like to
try it / take it upstream.

- Every UI string becomes a translatable key via a tiny EUI_L table — unknown keys
  return themselves, so a missing translation can never break a SetText. English stays
  the untouched master.
- Language-agnostic: I completed Korean (koKR) as the first locale and generated
  ready-to-fill templates for the other languages you ship.
- Applied by a script that finds your Interface/AddOns/EllesmereUI folder and patches it
  (wraps strings, installs the Locale files, updates the .toc). Idempotent, opt-in per
  locale, enUS is never affected.
- Bonus fix: Upgrade Calculator crest totals showed 0 on Korean clients (English tooltip
  parsing) — added a locale-aware fallback.

One small thing: a few windows use the bundled Expressway.ttf (no CJK glyphs), so Korean
shows as boxes there. It's a single line — EllesmereUI.lua ~464 sets the correct
per-locale fallback, but ~2643 overwrites it back to EXPRESSWAY. Changing ~2643 to use
"LOCALE_FONT_FALLBACK or EXPRESSWAY" (same as line 464) fixes every CJK/Cyrillic locale
with no effect on enUS. I didn't touch your font logic.

The script and full details (how it works, the exact list of affected windows, the font
root-cause) are in the linked files below, so you can try applying it yourself. Thanks
either way!

(link)

---

— Update (I've pushed a newer version — please re-download the linked files) —

Main addition: context-sensitive keys. A few strings need a different translation per
module — e.g. "Armor" is the item category in the bags but the defense stat on the
character sheet (Korean needs two different words while English stays one). The locale
registers these as EUI_L_CTX["Armor"] = { ["*"] = default, ["EllesmereUIBags"] = override },
and LocalCore's __index resolves them by detecting which addon is calling (debugstack).
Your source and the English text are untouched — only the locale layer differs; normal
keys keep the fast direct-table path and only these few context keys do the stack lookup.

Also in this update: filled in more missing strings (FPS-optimization popup, Damage Meter
Settings/View, Mythic+ panel, color picker, border styles), the apply script now prints its
progress in Korean on Korean clients (English elsewhere), and on Korean clients it can
optionally drop a free CJK font (Wanted Sans, OFL) into media/fonts so the boxes-in-some-
windows issue is gone out of the box — still without touching your font logic.

Thanks again!
