agentsclimarketplace

Localization

Skill ikhattab/l10n-skill/skills/localization

CLDR-based Agent Skill for formatting currency, dates, numbers, units, and addresses across 20+ locales. Works with Cursor, Claude Code, and Codex.

Install
npx -y skills add ikhattab/l10n-skill --skill localization

Assembled 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.

What its author says it does

Copied from the file, not written here

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.

SKILL.md

7.8 KB, 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

  1. 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?

  2. 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
  3. 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
  4. 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)

LocaleCountryExampleSymbolDecimalThousands
en-USUSA$1,234.56before.,
en-GBUK£1,234.56before.,
de-DEGermany1.234,56 €after,.
nl-NLNetherlands€ 1.234,56before,.
fr-FRFrance1 234,56 €after, (nb)
fr-CACanada (FR)1 234,56 $after, (nb)
es-ESSpain1.234,56 €after,.
pt-BRBrazilR$ 1.234,56before,.
ru-RURussia1 234,56 ₽after, (nb)
tr-TRTurkey₺1.234,56before,.
ja-JPJapan¥1,234before,
zh-CNChina¥1,234.56before.,
ko-KRSouth Korea₩1,234before,
hi-INIndia₹12,34,567.00before.lakh
ar-SASaudi Arabia1,234.56 ر.سafter.,

(nb) = narrow no-break space U+202F

Date format (short numeric)

LocaleFormatExampleTime
en-USM/D/YYYY6/5/202612 h
en-GBDD/MM/YYYY05/06/202624 h
de-DEDD.MM.YYYY05.06.202624 h
nl-NLDD-MM-YYYY05-06-202624 h
fr-FRDD/MM/YYYY05/06/202624 h
es-ESDD/MM/YYYY05/06/202624 h
pt-BRDD/MM/YYYY05/06/202624 h
ru-RUDD.MM.YYYY05.06.202624 h
ja-JPYYYY/MM/DD2026/06/0524 h
zh-CNYYYY/M/D2026/6/524 h
ko-KRYYYY.MM.DD2026.06.0524 h
ar-SADD/MM/YYYY05/06/202612 h

Measurement system

RegionDistanceTemperatureWeightVolume
USAmiles°Flb/ozfl oz / gal
UKmiles*°Ckg / stpints (beer), liters (fuel)
Canadakm°Ckgliters
Most of worldkm°Ckgliters
Myanmar / Liberiamixed°Cmixedmixed

*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,567 not 1,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 — not R$1.234, it's R$ 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:

DomainFileWhen to read
Currencyreferences/currency.mdFormatting prices, invoice amounts, currency input fields
Date & Timereferences/datetime.mdDisplaying or parsing dates, timestamps, durations
Numbersreferences/numbers.mdNon-currency numbers, percentages, large numbers
Unitsreferences/units.mdDistances, temperatures, weights, volumes
Addressesreferences/addresses.mdAddress 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: babel library or locale module
  • Java/Kotlin: java.text.NumberFormat, java.time.format.DateTimeFormatter
  • Swift: NumberFormatter, DateFormatter with .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.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.