Developer tools

Locale format tester.

Enter a number, a date and up to six locales, and see how the browser's Intl API formats them side by side: decimals, currency, percent, compact and unit styles, dates, plural categories and relative time. Copy the matching code snippet when the output is what you want.

Source: ECMA-402 (Intl), CLDR dataReviewed 2026-09-30

Advertisement

Values and locales

Checking your browser's Intl support…

Side-by-side output

Loading…

Code snippets (first locale)

Worked example and notes

Worked example. With the defaults (1234567.891, EUR, 2026-09-30 14:05 UTC), ICU 78.2 with CLDR 48.0 (as shipped in Node.js) prints 1,234,567.891 in en-US, 1.234.567,891 in de-DE, 12,34,567.891 in en-IN (lakh grouping) and Arabic-Indic digits ١٬٢٣٤٬٥٦٧٫٨٩١ in ar-EG. The currency cell shows €1,234,567.89 in en-US but 1.234.567,89 € in de-DE: symbol position, spacing, separators and digits all come from the locale, not from the currency. Your browser may print slightly different strings.

How it works. Each cell is one standard constructor call: Intl.NumberFormat (decimal, style: "currency", "percent", "unit", notation: "compact"), Intl.DateTimeFormat with dateStyle and timeStyle, Intl.PluralRules (cardinal and ordinal) and Intl.RelativeTimeFormat with numeric: "auto". The percent column divides your number by 100 first, so 50 shows as 50%. Nothing is computed by this tool beyond calling those APIs.

Browser ICU caveat. ECMA-402 defines the API but leaves the exact output to the implementation. Browsers ship their own ICU/CLDR data, which pages cannot read directly, so identical code can print different strings across browsers and versions, and an unsupported locale silently falls back to a default. Treat on-screen output as a check of your own browser only, and test your target browsers before hard-coding expected strings in tests.

Sources (reviewed 2026-09-30): ECMA-402, ECMAScript Internationalization API Specification; MDN Intl reference; Unicode CLDR for plural categories and locale patterns; RFC 5646 (BCP 47) for locale tags. Valid unit identifiers are the sanctioned units listed in ECMA-402. Nothing is sent from your browser.

Frequently asked questions

Why does the same code print different text in two browsers?

Intl delegates to the ICU and CLDR data bundled with each browser or runtime. When CLDR changes a pattern or a short month name, browsers pick it up on their own release schedule, so output can differ between Chrome, Safari and Firefox and between versions of each. Test the browsers you support.

What are the dots shown inside some results?

Many locales put a no-break space or narrow no-break space between a number and its currency or percent sign, and between thousands groups in French. They look like ordinary spaces, so the tool marks them with a dotted character. Copy the snippet, not the on-screen text, if you need the exact characters.

Why is the date interpreted in UTC by default?

A date-time picker has no zone, so the tool treats your entry as UTC and then formats it in the zone you choose. That keeps results reproducible across machines. Pick a zone to see the shifted wall-clock time.

What does the Plural column mean?

It is the CLDR plural category (zero, one, two, few, many, other) that Intl.PluralRules returns for the count in the plural field. English only uses one and other. Arabic, Russian and Polish use more categories, which is why message catalogs need per-language plural forms. The ordinal column is the same for 1st, 2nd, 3rd style rules.

Is anything sent to a server?

No. Everything runs through the Intl object in your browser and nothing is uploaded.

Advertisement
Advertisement
Listening…