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.
Start by task
Format numbers by locale
Convert numbers to locale-specific formats with correct separators and grouping.
Build international address forms
Get field order, labels, and validation rules for address forms by country.
Validate and display phone numbers
Parse, validate, and format phone numbers using libphonenumber-js patterns.
Compare country conventions
Side-by-side comparison of number, currency, and address formats.
Reference Guides
Number Formats
Decimal separators, thousands separators, grouping patterns, and Intl.NumberFormat locale codes for 90+ countries.
Germany
1.234.567,89
Currency Codes
ISO 4217 currency codes, symbols, decimal precision, and Intl.NumberFormat currency style examples.
Euro
1,234.00
Address Formats
140+ local address templates and a conversion tool covering 130+ countries and territories.
Japan
100-0001 Tokyo Chiyoda...
Phone Numbers
Calling codes, E.164 formatting, national vs international display, and libphonenumber-js integration guide.
US
+1 (555) 123-4567
Start by role
Developers
Implement correct locale-aware formatting in code
Recommended:
Avoid: Hardcoding decimal separators or phone formats
Product & Design
Design forms and displays that work globally
Recommended:
Avoid: Assuming all countries use the same address structure
QA & Ops
Test edge cases and validate international inputs
Recommended:
Avoid: Only testing with US/UK data
Localization Teams
Ensure consistent formatting across all markets
Recommended:
Avoid: Mixing display and storage formats
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 formatsBreaking 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 formatTreating 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 guideUS-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 templatesAssuming 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 rulesIgnoring 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 formatDeveloper Recipes
Copy-paste code for common tasks
// 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
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
Input
-1234.56
Expected
Varies by locale
Negative number placement
Address Form Builder
Generate country-specific address forms with correct field order, labels, and validation
Postal Code Format
12345 or 12345-67895 digits, optionally followed by hyphen and 4 digits (ZIP+4)
^\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
5 required fields, 1 optional
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
Unicode CLDR
The standard for locale-specific formatting. Number formats, currency symbols, and grouping rules.
Geoapify
The site implements 140+ address templates covering 130+ countries and territories.
libphonenumber-js
Phone number parsing and formatting based on Google's libphonenumber.
ISO 4217
International currency codes, symbols, and decimal precision 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
Related Resources
Developer reference docs and tools
Libraries, APIs, and specifications to help you implement localization in your applications
Unicode CLDR
Data SourceThe source for locale data including number formats, date formats, and currency information.
libphonenumber-js
LibraryBrowser-compatible phone number parsing, validation, and formatting library based on Google's libphonenumber.
MDN Intl.NumberFormat
DocumentationComplete documentation for JavaScript's built-in number formatting API.
ISO 4217 Currency Codes
StandardOfficial list of currency codes, decimal places, and minor units.
Geoapify Address Data
Data SourceAddress format templates and postal-code guidance for countries and territories worldwide.
E.164 Phone Standard
StandardITU-T recommendation for international telephone numbering.
Continue your localization implementation
Connect this reference to the format, validation, and testing guidance used elsewhere on the site.
Locale-aware numbers
Separators, grouping, currency precision, and Intl.NumberFormat patterns.
Localization testing
Pseudolocalization, test matrices, native review, and regional release gates.
Address and phone standards
UPU S42, E.164, adaptive forms, storage, parsing, and validation.
I18n architecture
Messages, Unicode, RTL, locale services, fallbacks, and delivery workflow.
Currency reference
ISO 4217 codes, symbols, minor units, and implementation examples.
Address formats
Country templates, field order, and accessible international forms.
Phone formats
E.164 storage, regional display, parsing, and validation.
Compare locales
Inspect the same numeric value across several country formats.
Interactive tools
Try number, address, and phone formatting in your browser.
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
// 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"