# Localization

> >

- **Type:** Skill
- **Install:** `agentstack add skill-ikhattab-l10n-skill-localization`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [ikhattab](https://agentstack.voostack.com/s/ikhattab)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [ikhattab](https://github.com/ikhattab)
- **Source:** https://github.com/ikhattab/l10n-skill/tree/main/skills/localization

## Install

```sh
agentstack add skill-ikhattab-l10n-skill-localization
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 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)

| 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,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:

| 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: `babel` library or `locale` module
- Java/Kotlin: `java.text.NumberFormat`, `java.time.format.DateTimeFormatter`
- Swift: `NumberFormatter`, `DateFormatter` with `.locale`

---

## Attribution

Inspired by [@MostafaNageeb](https://x.com/MostafaNageeb/status/2063332754679337285), 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.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [ikhattab](https://github.com/ikhattab)
- **Source:** [ikhattab/l10n-skill](https://github.com/ikhattab/l10n-skill)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-ikhattab-l10n-skill-localization
- Seller: https://agentstack.voostack.com/s/ikhattab
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
