Localization
Use this skill whenever a task involves locale-aware formatting, validation, or display of any of the following: currency (symbol position, decimal/thousands separators), dates and times (order, separators, 12/24h), numbers (grouping, decimal mark), units of measurement (metric/imperial/regional), or addresses and phone numbers (field order, postal code format). Trigger on any of: "format for [locale/country]", "localize this", "how is X written in Y", "is this format correct for Z", "display price/date/address for [country]", or whenever user-facing content needs adapting to a specific region or locale code (e.g. de-DE, fr-CA, ja-JP). Also trigger when validating or fixing existing formatted values, generating locale-aware code snippets, or explaining regional formatting differences.From its SKILL.md
npx -y skills add ikhattab/l10n-skill --skill localizationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.8 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
Localization Skill
Helps AI agents correctly format, validate, and explain locale-specific conventions for currency, dates, numbers, units of measurement, and addresses — based on Unicode CLDR standards and real postal/regulatory rules.
Workflow
-
Identify the locale — Use a BCP 47 locale tag when possible (e.g.
de-DE,fr-CA,pt-BR). If only a country name is given, infer the primary locale. If ambiguous (e.g. "Canada"), ask: English or French? -
Identify the domain(s) — What needs formatting/validating?
- Currency → read
references/currency.md - Date / Time → read
references/datetime.md - Numbers → read
references/numbers.md - Units of measurement → read
references/units.md - Address / Phone → read
references/addresses.md
- Currency → read
-
Apply rules — Use the locale data to:
- Format: produce a correctly formatted string from raw values
- Validate: check whether an existing formatted value matches the locale's conventions
- Fix: reformat an incorrectly formatted value
- Explain: describe the difference between two locales
-
Output — Respond with the formatted result + a brief note on the rule applied (so the human or downstream agent can understand why, not just what).
Quick-Reference: Most Common Locales
For full data including edge cases, separators, and address templates, always consult the relevant reference file.
Currency (symbol position · decimal · thousands)
| Locale | Country | Example | Symbol | Decimal | Thousands |
|---|---|---|---|---|---|
| en-US | USA | $1,234.56 | before | . | , |
| en-GB | UK | £1,234.56 | before | . | , |
| de-DE | Germany | 1.234,56 € | after | , | . |
| nl-NL | Netherlands | € 1.234,56 | before | , | . |
| fr-FR | France | 1 234,56 € | after | , | (nb) |
| fr-CA | Canada (FR) | 1 234,56 $ | after | , | (nb) |
| es-ES | Spain | 1.234,56 € | after | , | . |
| pt-BR | Brazil | R$ 1.234,56 | before | , | . |
| ru-RU | Russia | 1 234,56 ₽ | after | , | (nb) |
| tr-TR | Turkey | ₺1.234,56 | before | , | . |
| ja-JP | Japan | ¥1,234 | before | — | , |
| zh-CN | China | ¥1,234.56 | before | . | , |
| ko-KR | South Korea | ₩1,234 | before | — | , |
| hi-IN | India | ₹12,34,567.00 | before | . | lakh |
| ar-SA | Saudi Arabia | 1,234.56 ر.س | after | . | , |
(nb) = narrow no-break space U+202F
Date format (short numeric)
| Locale | Format | Example | Time |
|---|---|---|---|
| en-US | M/D/YYYY | 6/5/2026 | 12 h |
| en-GB | DD/MM/YYYY | 05/06/2026 | 24 h |
| de-DE | DD.MM.YYYY | 05.06.2026 | 24 h |
| nl-NL | DD-MM-YYYY | 05-06-2026 | 24 h |
| fr-FR | DD/MM/YYYY | 05/06/2026 | 24 h |
| es-ES | DD/MM/YYYY | 05/06/2026 | 24 h |
| pt-BR | DD/MM/YYYY | 05/06/2026 | 24 h |
| ru-RU | DD.MM.YYYY | 05.06.2026 | 24 h |
| ja-JP | YYYY/MM/DD | 2026/06/05 | 24 h |
| zh-CN | YYYY/M/D | 2026/6/5 | 24 h |
| ko-KR | YYYY.MM.DD | 2026.06.05 | 24 h |
| ar-SA | DD/MM/YYYY | 05/06/2026 | 12 h |
Measurement system
| Region | Distance | Temperature | Weight | Volume |
|---|---|---|---|---|
| USA | miles | °F | lb/oz | fl oz / gal |
| UK | miles* | °C | kg / st | pints (beer), liters (fuel) |
| Canada | km | °C | kg | liters |
| Most of world | km | °C | kg | liters |
| Myanmar / Liberia | mixed | °C | mixed | mixed |
*UK uses miles for road signs but km in most other contexts
Common Pitfalls to Catch
- Germany vs Netherlands: both use EUR but symbol position is opposite
- France/Russia: thousands separator is narrow no-break space (U+202F), not a regular space
- India: uses lakh/crore grouping —
12,34,567not1,234,567 - Japan/Korea: no decimal places for native currencies (¥, ₩)
- US date 06/05: means June 5th — in Europe it means May 6th
- UK mixed units: road distances in miles, most other distances in km; both °C and stones/pounds coexist
- Brazil currency:
R$with a space before the number — notR$1.234, it'sR$ 1.234 - Japanese address order: reversed from Western — starts with postal code → prefecture → city → ward → block → building → recipient name
Reference Files
Load these on-demand based on which domain(s) apply:
| Domain | File | When to read |
|---|---|---|
| Currency | references/currency.md | Formatting prices, invoice amounts, currency input fields |
| Date & Time | references/datetime.md | Displaying or parsing dates, timestamps, durations |
| Numbers | references/numbers.md | Non-currency numbers, percentages, large numbers |
| Units | references/units.md | Distances, temperatures, weights, volumes |
| Addresses | references/addresses.md | Address forms, mailing labels, postal validation |
Output Format Guidelines
When formatting for agents / downstream use:
Locale: de-DE
Domain: currency
Input: 1234.56 EUR
Output: 1.234,56 €
Rule: Symbol after amount with space; comma decimal separator; dot thousands separator
When explaining differences for humans:
In Germany (de-DE), the euro sign comes after the number with a space:
1.234,56 €. In the Netherlands (nl-NL), the same amount is written with the euro sign before:€ 1.234,56. Both use a comma as the decimal separator and a dot for thousands.
When generating code, prefer using the platform's built-in i18n APIs:
- JS/TS:
Intl.NumberFormat,Intl.DateTimeFormat - Python:
babellibrary orlocalemodule - Java/Kotlin:
java.text.NumberFormat,java.time.format.DateTimeFormatter - Swift:
NumberFormatter,DateFormatterwith.locale
Attribution
Inspired by @MostafaNageeb, who pointed out that trivial-looking formatting differences — like the € sign coming after the number in Germany (14 €) but before in the Netherlands (€ 14) — have a real impact on user trust. These details feel minor until a user notices them.
What ships with it: 5 files
35.2 KB alongside SKILL.md
references/
- addresses.md9.4 KB
- currency.md7.1 KB
- datetime.md7.2 KB
- numbers.md5.3 KB
- units.md6.3 KB