# Locale-Specific Formatting

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.
