Parent: #475 Related: #567, #568
Problem
The #567 BigInt oracle exposed a distinct locale-data gap: new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR", currencyDisplay: "name" }).format(2n) emits 2,00 EUR in zig-js, while the locale result is 2,00 Euro. The shared NumberFormat emitter currently resolves long currency names only through the English DisplayNames subset and falls back to the ISO code for other locales. This affects Number and BigInt equally; it is not a BigInt structural defect.
Scope
- Generate owned locale currency display names and plural forms from the repository-pinned CLDR inputs.
- Resolve the display name from the formatter locale and rounded plural operands for Number and exact BigInt mathematical values.
- Share generated immutable data across realms and preserve exact placement/source attribution in text, parts, and ranges.
No-workaround rules
No locale switch expansion by hand, system ICU/JSC dependency, copied output fixtures, English name presented as another locale, ISO fallback for data that exists in owned CLDR, or mutable process-global cache. Edit the generator and regenerate tables; never hand-edit generated data.
Acceptance
- CLDR-derived singular/plural controls cover every supported locale/currency fallback family.
- Exact Number and BigInt text/part/range oracles cover prefix/suffix placement and shared range sources.
- Relevant Intl402 cases gain with no regressions.
- Generator determinism, construction/steady allocation, OOM, bounded heap, moving GC, no-GIL, TSan, and full units pass.