Skip to content

Added an i18n layer (tested with Chinese) — feel free to use #2256

Description

@woolkingx

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions