CoolFace
Datasetpublic

legesher/language-packs

Legesher Language Packs Legesher's language packs 📦 are the localization layer for code; the fixed vocabulary of a programming language in other natural languages. Every reserved word within a programming language's grammar (keywords, builtins, exceptions, error messages) is compiled into a language pack that, when utilized by Legesher, allows code to be in any language and it compiles all the same. Release Languages supported Target Versions License legesher-i18n Commit… See the full description on the dataset page: https://huggingface.co/datasets/legesher/language-packs.

sourceHugging Faceapache-2.0updated 27d agoView on Hugging Face
0likes162downloads
Dataset Card

Legesher Language Packs

[image]

Legesher's language packs 📦 are the localization layer for code; the fixed vocabulary of a programming language in other natural languages.

Every reserved word within a programming language's grammar (keywords, builtins, exceptions, error messages) is compiled into a language pack that, when utilized by Legesher, allows code to be in any language and it compiles all the same.

ReleaseLanguages supportedTargetVersionsLicense`legesher-i18n`Commit
0.4.151python3.10-3.14Apache-2.00.23.005ec1a05413d

Languages

PackLanguageNative nameStatusPackage
amAmharicአማርኛexperimental0.0.3
arArabicالعربيةexperimental0.0.5
bnBengaliবাংলাexperimental0.0.3
bsBosnianBosanskiexperimental0.0.3
caCatalanCatalàexperimental0.0.3
csCzechČeštinaexperimental0.0.3
cyWelshCymraegexperimental0.0.3
daDanishDanskexperimental0.0.4
deGermanDeutschexperimental0.0.4
elGreekΕλληνικάexperimental0.0.5
enEnglishEnglishexperimental0.0.4
esSpanishEspañolexperimental0.0.5
faPersianفارسیexperimental0.0.3
fiFinnishSuomiexperimental0.0.5
frFrenchFrançaisexperimental0.0.4
gaIrishGaeilgeexperimental0.0.3
gdScottish GaelicGàidhligexperimental0.0.3
glGalicianGalegoexperimental0.0.3
guGujaratiગુજરાતીexperimental0.0.3
heHebrewעבריתexperimental0.0.5
hiHindiहिन्दीexperimental0.0.5
hrCroatianHrvatskiexperimental0.0.3
huHungarianMagyarexperimental0.0.5
idIndonesianBahasa Indonesiaexperimental0.0.4
itItalianItalianoexperimental0.0.5
jaJapanese日本語experimental0.0.4
knKannadaಕನ್ನಡexperimental0.0.3
koKorean한국어experimental0.0.5
lvLatvianLatviešuexperimental0.0.3
mkMacedonianМакедонскиexperimental0.0.3
mlMalayalamമലയാളംexperimental0.0.3
mnMongolianМонголexperimental0.0.3
msMalayBahasa Melayuexperimental0.0.4
myBurmeseမြန်မာexperimental0.0.3
nlDutchNederlandsexperimental0.0.4
noNorwegianNorskexperimental0.0.5
plPolishPolskiexperimental0.0.5
ptPortuguesePortuguêsexperimental0.0.5
roRomanianRomânăexperimental0.0.3
ruRussianРусскийexperimental0.0.5
siSinhalaසිංහලexperimental0.0.3
srSerbianСрпскиexperimental0.0.3
suSundaneseBasa Sundaexperimental0.0.4
svSwedishSvenskaexperimental0.0.5
teTeluguతెలుగుexperimental0.0.3
thThaiไทยexperimental0.0.5
trTurkishTürkçeexperimental0.0.5
urUrduاردوexperimental0.0.4
uzUzbekO'zbekexperimental0.0.3
viVietnameseTiếng Việtexperimental0.0.5
zhChinese中文experimental0.0.6

What a pack is made of

Target

Each language pack is created based on the requirements of a programming language, its target, which sets the categories it carries, the reserved words in each, and the forms a rendering is allowed to take. The specific versions of a programming language a particular reserved word belongs to are noted as well, so the language pack grows with the progression of a programming language.

Categories

CategorySubcategoriesTermsWhat it holds
keywordskeyword39The words the grammar reserves. A rendering cannot collide with anything else in the vocabulary. All are legal identifiers except except*, whose renderings carry the marker through.
builtinsbuiltin_func, builtin_type, special_constant73Functions, types and constants available without importing anything: print, dict, Ellipsis.
exceptionsexception70The error hierarchy, from BaseException down.
implicit_paramsimplicit_param2self and cls. Conventional parameter names that Legesher treats deterministically, not words the grammar reserves.
symbols--33What a symbol is called: _ is underscore in English. Prose names, not identifiers.
variable_conventions--15The idiomatic short name for a variable role: the loop counter, the throwaway, the accumulator.
messages20 message families54Error-message templates with named {placeholders}, and the traceback scaffolding that frames them.

Maturity

StageWhat it means
experimentalMachine-drafted, then curated by maintainers and passed through the mechanical gates: identifier validity, cross-section collision checks, Unicode normalization, and a regeneration check proving the packs match their source of truth. No native speaker has signed off.
reviewedA native speaker of the language has reviewed the pack and signed off on it.
officialCertified review plus term screening.

The dataset

ConfigOne row perAnswers
localesnatural languagewho is this language?
pl_terminology(target, category, source term)what vocabulary does the target carry, and on which versions?
vocabulary(locale, target, version, category, source term)what is it called in this language?
packs(locale, target)how far along is this pairing?

pl_terminology

The programming language's own terminology. No natural language appears in this config.

  • —target, category, source_term: the key
  • —subcategory: the finer kind, as in the table above
  • —source_text: the English surface, where source_term is not itself that surface. symbols carry the name, so paren_open is opening parenthesis. variable_conventions carry the identifier, so accumulator is total. messages carry the template. Null on keywords, builtins, exceptions and implicit_params, where source_term is the English. A message with no text carries "", which is a different fact from null: AssertionError on a bare assert genuinely has no message
  • —glyph: the character a symbol names, so paren_open is (. Null on every other category, and null on the symbols with no printable form: indentation, a line break, a space
  • —pl_versions: the target versions the entry is valid for

Availability lives here, once: except* carries ["3.11", ...], and a term in two categories carries two rows with their own sets, so type is a builtin on every version and a keyword only from 3.12.

This config is also the coverage checklist. A pl_terminology entry with no matching vocabulary rows for a locale is a gap in that pack, stated by the data rather than discovered downstream: the symbols, variable_conventions and messages categories ship their source-side inventory ahead of any locale's renderings for exactly that reason.

vocabulary

The renderings, one row per (locale, target, version, category, source term).

  • —locale: join into locales; target, category, source_term: join into pl_terminology
  • —pl_version: rows are given resolved, so each states what you would get on that version of the target
  • —translation: the rendering Legesher ships
  • —defined_at: the version whose pack file defines this rendering. A row inherits when defined_at differs from pl_version. This is a fact about the rendering, not the term: Sinhala redefines terms at 3.13 to conjunct forms, so its defined_at differs from every other language's on the same term

category is part of the key on purpose: type is rendered once as a keyword and once as a builtin, and those renderings may differ.

locales

Natural-language identity: names (language_name, native_name), identity tags (iso639_2, bcp47), script properties (rtl, has_case_distinction).

locale is a pack id, not a language tag. Where the two differ, locale is the shorter form: no is BCP 47 nb, zh is zh-Hans, sr is sr-Cyrl. Join to anything keyed by language tag on bcp47, or you drop exactly the rows that differ.

packs

The shipping unit, one row per (locale, target) pairing.

  • —package_version: the semver of this pairing's own distributable. A row reading ar / python / 0.0.5 means these are the words in legesher-i18n-python-ar==0.0.5. Each pairing versions on its own clock
  • —tier: the maturity of exactly this pairing
  • —pl_versions: the target versions this pack covers

JSON

json/<locale>/<target>.json is the loadable form: the translations alone, with the pack's package_version and a pl_version_range string naming the versions it covers. Values are the latest version's resolved rendering over the union of terms across the range; the parquet configs carry the full per-version structure the JSON leaves out.

Normalization

Python normalizes identifiers to NFKC when it parses them (PEP 3131), so a rendering whose own NFKC form differs from it is typed one way and resolved another.

[!NOTE] 23 renderings in this release are NFKC-unstable, all in Thai (th), all through U+0E33 THAI CHARACTER SARA AM. If you compare a translation value against a name taken from a running interpreter, normalize both to NFKC first.

Packages

Legesher uses this dataset as the language packs for coding in other natural languages. Each language ships as its own distribution, legesher-i18n-python-<locale>, so Arabic is legesher-i18n-python-ar, and they are loaded by legesher-i18n, which resolves a pack against the interpreter you are running.

Citation

bibtex
@misc{legesher_language_packs,
  title        = {Legesher Language Packs: programming vocabulary rendered in natural languages},
  version      = {0.4.1},
  author       = {Legesher},
  year         = {2026},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/datasets/legesher/language-packs}}
}