This document defines locale-specific number/date/currency formatting for
TODOS.phase-72.72.11.2.11. The tracked samples cover the launch locale set and
prove the expected separator, date order, currency symbol/code, and minor-unit
rounding behavior before UI or store surfaces consume formatted values.
The tracked contract is
V2/ue/Content/Localization/V2/LocaleSpecificFormatting_V2_Contract.json. The
deterministic formatting rules live at
V2/ue/Content/Localization/V2/Formatting/LocaleSpecificFormattingRules_V2.json,
and the summary report lives at
V2/ue/Content/Localization/V2/Formatting/LocaleSpecificFormattingReport_V2.json.
Runtime Contract#
Runtime formatting must use Unreal's ICU-backed localization stack:
FInternationalization::SetCurrentCulture, FText::AsNumber,
FText::AsCurrency, and FText::AsDate. Gameplay, settings, commerce, and
live-ops UI should pass raw numeric/date values plus the resolved locale and
platform-store currency code into those APIs instead of assembling separators or
symbols by hand.
Sample Generation#
V2/ue/Tools/generate-v2-locale-specific-formatting.py uses Babel CLDR locale
data to generate deterministic samples for the canonical number 1234567.89,
the date 2026-06-21, and each locale's platform-store currency. The same
script carries a curated CLDR fallback table for minimal CI hosts, and the
checker compares both paths to the tracked output.
The report explicitly proves the US/Germany contrast behind the task example:
en-US formats the sample number as 1,234,567.89, while de-DE formats it as
1.234.567,89. It also records zero-minor-unit currency rounding for
JPY/KRW/VND so those rounded currency samples are treated as locale policy, not
formatting loss.
V2/ue/Tools/check-v2-locale-specific-formatting.py validates the contract,
Babel/CLDR samples, ICU runtime API requirements, number/date/currency coverage,
fallback determinism, CI and Horde wiring, and the phase-72 checklist.