Numbers - Currencies - Addresses - Phone

Ship global products with correct local formatting

A practical developer reference for number formats, currency codes, address templates, and phone formatting worldwide. Tool inputs stay in your browser; analytics measure site visits.

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

Local-processing architecture

Built on standards. Runs in your browser.

Every tool on localization.guide processes its input client-side. Tool values are not sent by the tool to our servers; separate analytics scripts measure visits and site usage.

Privacy principles

No server processing

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

Tool inputs stay local

Values entered into the tools are processed locally and are not sent by the tool to our servers. Site analytics are disclosed separately.

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
  • 140+ address templates covering 130+ countries and territories
  • 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"