Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NADA localization skill

Write code in your own human language. This is an Agent Skill that lets Claude, Codex, OpenCode, Grok, Cursor — any agent that reads the open SKILL.md standard — render a programming language's keywords and standard-library names into 100+ human languages and scripts, deterministically and reversibly.

The renderings are compiled from a signed, human-reviewed source of truth. They are not model guesses: the same input always gives the same output, and every localization reverses cleanly back to canonical code.

# canonical                    # → Thai                      # → Tamil
def add(a, b):                 def add(a, b):                def add(a, b):
    if a > b:                      ถ้า a > b:                    எனில் a > b:
        return a                       คืนค่า a                      திருப்பு a
    else:                          มิฉะนั้น:                     இல்லையெனில்:
        return b                       คืนค่า b                      திருப்பு b

Your strings, comments, and your own identifiers are never touched. add, a, b stay exactly as you wrote them — only the language's vocabulary is localized.

Install

The repo root is the skill, so installing is a clone into your agent's skills directory:

Agent Command
Claude Code git clone https://github.com/nadalang/skill ~/.claude/skills/nada-localization
OpenCode git clone https://github.com/nadalang/skill ~/.claude/skills/nada-localization
OpenAI Codex git clone https://github.com/nadalang/skill ~/.agents/skills/nada-localization
Grok Build git clone https://github.com/nadalang/skill ~/.grok/skills/nada-localization
Cursor / Copilot git clone https://github.com/nadalang/skill ~/.claude/skills/nada-localization
Claude Desktop Download this repo as a ZIP → Settings → Features → upload the skill

For a single project instead of your whole machine, clone into .claude/skills/nada-localization (or .agents/skills/…) inside the repo you're working in.

Update: cd <that folder> && git pull

The folder name matters — it must stay nada-localization to match the skill's declared name.

Use it

Once installed, just ask your agent in the normal way — "write me a bubble sort in Python, in Thai" — and it will call the skill instead of guessing the keywords.

To drive it directly (Python 3, standard library only — nothing to install):

# Localize a snippet
python nada.py localize --lang python --locale th --code "def f():
    return 1"

# Reverse it back to canonical English
python nada.py canonicalize --lang python --locale th --code "def f():
    คืนค่า ๑"

# Look up one term, with its gloss and abbreviation ladder
python nada.py term --lang javascript --canonical function --locale de
#   → de: "Funktion"

# What's covered
python nada.py languages
python nada.py locales

Works offline

Every command runs online (against the hosted API) or fully offline with no network at all — add --db and point at a bundled pack:

python nada.py --db data/nada-sea.sqlite localize --lang python --locale th --code "def f(): return 1"

Two packs ship here:

Pack Contents
data/nada-sea.sqlite Southeast Asian locales — Thai, Vietnamese, Tamil, Khmer, Indonesian, Malay, Tagalog, Javanese, Sundanese, Lao, Cebuano, Burmese
data/nada-demo.sqlite 9 diverse locales across Latin, CJK, Arabic, and Devanagari

Is my pack still current?

A pack is a snapshot. NADA is early and the brain is re-cut often, so packs drift:

python nada.py --db data/nada-sea.sqlite check
#   → CURRENT — this pack matches the live brain exactly.
#   → STALE   — the brain moved (1.1.0-alpha.8 → 1.1.0-alpha.10). Run `git pull`.

Offline commands also print a one-line note to stderr (never stdout) once a pack is more than a couple of days old. To refresh, git pull — new packs ship with the repo. Online mode is always current.

Want a pack for a specific set of languages/locales, or the raw dataset? The full brain is published at https://brain.nada.build (/latest/index.json). The build-pack.mjs slicer in this repo is an internal tool that expects the full brain snapshot, which is not bundled here — open an issue and we'll cut you the slice you need.

Lexical vs. parse-aware

nada.py localize is lexical: it substitutes whole keyword tokens and skips strings and comments, but it cannot tell a builtin named add from your function named add. It's excellent for reading, explaining, and previewing. For production output that resolves scope and never touches user-defined names, use the NADA core engine or the NADA IDE. When in doubt, localize keywords only — the default, and always safe.

The rule

Never invent a localized keyword. If a term isn't in NADA, keep the canonical English — don't translate it yourself. The whole point is that the rendering is authoritative and identical everywhere. A token invented at inference time is non-authoritative, non-reversible, and usually subtly wrong.

About

NADA is an open standard and commons for localized programming terminology — a non-profit project stewarded by Christopher Shelley and Rev Miller (a formal entity is pending). Every legitimate programming language and every human language is in scope, including minority and heritage forms in their own scripts.

License

  • Code (nada.py, build-pack.mjs): MIT — see LICENSE.
  • Language data (data/*.sqlite): CC-BY-4.0. The language belongs to everyone; attribution is all we ask.

About

Write code in your own human language — an Agent Skill that localizes programming keywords into 100+ human languages, deterministically and reversibly. Works in Claude Code, Codex, OpenCode, Grok, Cursor.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages