What
Add an internationalization (i18n) mechanism to PoB2 — a generic framework so the program can be displayed, typed, and searched in any language, driven by plain-text PO catalogs. Not a specific language; the mechanism itself.
Why
Localizing PoB2 was never hard technically — the blocker is volume: tens of thousands of strings no single maintainer can translate. That's understandable, and it's why upstream never shipped translations. But that volume is exactly the part that doesn't need a developer. The one-time developer job is adding the i18n layer; after that, translating is ordinary text-editing the community can crowdsource, in any language.
The mechanism (three sides)
A real localization needs more than display, so the mechanism covers all three:
- Display — UI, items, skills, passives, stat lines render in the chosen language at display boundaries.
- Input — input fields patched so non-ASCII (CJK) text can be typed directly; the base engine couldn't accept this before.
- Search — search matches translated text too, so entries are findable by their localized name.
Plus Unicode font fallback for CJK glyph rendering. Data boundaries stay raw: builds, import/export codes, trade values, and calculation internals remain English, so everything stays upstream-compatible.
Reference / proof
I built a working fork and used Chinese (zh_TW) as the test case to prove the mechanism end-to-end (display + input + search), including a portable build people can run:
https://github.com/woolkingx/PathOfBuilding-PoE2-i18n
Chinese is just the test vehicle — the same layer works for any language.
- Lua display/search layer + engine-level CJK input patch (SimpleGraphic).
- Source-only patch against upstream
b8048682; the i18n change is isolated in its own commits for easy review.
Feel free to use any of it if it's useful.
What
Add an internationalization (i18n) mechanism to PoB2 — a generic framework so the program can be displayed, typed, and searched in any language, driven by plain-text PO catalogs. Not a specific language; the mechanism itself.
Why
Localizing PoB2 was never hard technically — the blocker is volume: tens of thousands of strings no single maintainer can translate. That's understandable, and it's why upstream never shipped translations. But that volume is exactly the part that doesn't need a developer. The one-time developer job is adding the i18n layer; after that, translating is ordinary text-editing the community can crowdsource, in any language.
The mechanism (three sides)
A real localization needs more than display, so the mechanism covers all three:
Plus Unicode font fallback for CJK glyph rendering. Data boundaries stay raw: builds, import/export codes, trade values, and calculation internals remain English, so everything stays upstream-compatible.
Reference / proof
I built a working fork and used Chinese (zh_TW) as the test case to prove the mechanism end-to-end (display + input + search), including a portable build people can run:
https://github.com/woolkingx/PathOfBuilding-PoE2-i18n
Chinese is just the test vehicle — the same layer works for any language.
b8048682; the i18n change is isolated in its own commits for easy review.Feel free to use any of it if it's useful.