Numbers - Currencies - Addresses - Phone

Ship global products with correct local formatting

The complete developer reference for number formats, currency codes, address templates, and phone formatting — for every country on Earth. Browser-only tools, zero data collection.

Browser-only toolsNo server-side processingBuilt from trusted standards
Common mistakes

Localization pitfalls to avoid

Assuming period as decimal separator

Most of Europe, South America, and parts of Asia use comma as the decimal separator. Germany formats 1,234.56 as 1.234,56.

See number formats

Breaking on non-breaking spaces

France, Austria, and many locales use narrow no-break space (U+202F) or no-break space (U+00A0) as thousands separator. These will break naive parsing.

View France format

Treating phone display and storage as the same

Always store phone numbers in E.164 format (+12025551234) but display in local format. Never store display formatting.

Phone formatting guide

US-centric address schemas globally

Japan writes address largest-to-smallest (postal code, prefecture, city, street). UK has no ZIP code field. Many countries have no state/province.

Address templates

Assuming postcodes are always required

Ireland historically had no postcodes. Many countries have optional or regional-only postal codes. Never hard-require this field globally.

Country address rules

Ignoring Indian-style number grouping

India uses 2-3 grouping pattern: 12,34,567.89 (lakhs and crores). Standard 3-digit grouping is incorrect for en-IN locale.

View India format

Developer Recipes

Copy-paste code for common tasks

Try interactive tools
intl.numberformat.ts
Docs
// Format number for German locale
const num = 1234567.89;
const formatted = new Intl.NumberFormat('de-DE').format(num);
// → "1.234.567,89"

// With currency
new Intl.NumberFormat('de-DE', {
  style: 'currency',
  currency: 'EUR'
}).format(num);
// → "1.234.567,89 €"

QA Test Cases

Ready-to-use test data

Copy test cases for validating your localization implementation

Input

1234567.89

Expected

de-DE → 1.234.567,89

German: dot thousands, comma decimal

Input

1234567.89

Expected

en-US → 1,234,567.89

US: comma thousands, dot decimal

Input

1234567.89

Expected

fr-FR → 1 234 567,89

French: narrow no-break space thousands (U+202F), comma decimal

Edge case

Input

1234567.89

Expected

en-IN → 12,34,567.89

India: lakh grouping (2,2,3)

Input

0.5

Expected

All locales → 0.5 or 0,5

Leading zero behavior

Edge case

Input

-1234.56

Expected

Varies by locale

Negative number placement

Interactive Tool

Address Form Builder

Generate country-specific address forms with correct field order, labels, and validation

Browser-only
Select Country

Postal Code Format

Example:12345 or 12345-6789

5 digits, optionally followed by hyphen and 4 digits (ZIP+4)

Regex:^\d{5}(-\d{4})?$

Notes for United States

  • State is required for shipping
  • ZIP+4 improves delivery accuracy
🇺🇸

United States Address Form

e.g. 10001

Full NameStreet AddressApt, Suite, UnitCityStateZIP Code

5 required fields, 1 optional

Privacy-first architecture

Built on standards. Runs in your browser.

Every tool on localization.guide processes data entirely client-side. Your input never leaves your browser, never touches our servers, and is never logged or analyzed.

Privacy principles

No server processing

All formatting, validation, and transformation happens in your browser using JavaScript APIs.

No data collection

We do not log, store, or transmit any values you enter into our tools. Zero telemetry on input content.

No hidden APIs

Our tools use Intl.NumberFormat, Intl.DateTimeFormat, and other native browser APIs. No backend calls.

Open methodology

All formatting rules come from publicly documented standards. No proprietary data processing.

Data sources & standards

Known limitations

  • Format rules may change as standards are updated
  • Some locales have regional variations not fully captured
  • Browser Intl API support varies by version

Everything you need to ship localized software

Number formatting, address templates, phone localization, and ISO 4217 currency codes — in one place, with copy-ready code for JavaScript, Python, Java, and Swift.

  • Unicode CLDR locale codes for Intl.NumberFormat
  • 250+ country address templates from Geoapify
  • libphonenumber-js integration guide and live formatter
  • ISO 4217 currency codes with Stripe payment notes
localize.ts
// Numbers
new Intl.NumberFormat('de-DE').format(1234567.89)
// → "1.234.567,89"

// Currency
new Intl.NumberFormat('fr-FR', {
  style: 'currency', currency: 'EUR'
}).format(9999.99)
// → "9 999,99 €"

// Phone (libphonenumber-js)
parsePhoneNumber('+12025551234').
  formatInternational()
// → "+1 202 555 1234"