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.
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.
Languages
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
Maturity
The dataset
pl_terminology
The programming language's own terminology. No natural language appears in this config.
target,category,source_term: the keysubcategory: the finer kind, as in the table abovesource_text: the English surface, wheresource_termis not itself that surface.symbolscarry the name, soparen_openis opening parenthesis.variable_conventionscarry the identifier, soaccumulatoristotal.messagescarry the template. Null onkeywords,builtins,exceptionsandimplicit_params, wheresource_termis the English. A message with no text carries"", which is a different fact from null:AssertionErroron a bareassertgenuinely has no messageglyph: the character a symbol names, soparen_openis(. Null on every other category, and null on the symbols with no printable form: indentation, a line break, a spacepl_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 intolocales;target,category,source_term: join intopl_terminologypl_version: rows are given resolved, so each states what you would get on that version of the targettranslation: the rendering Legesher shipsdefined_at: the version whose pack file defines this rendering. A row inherits whendefined_atdiffers frompl_version. This is a fact about the rendering, not the term: Sinhala redefines terms at 3.13 to conjunct forms, so itsdefined_atdiffers 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 readingar/python/0.0.5means these are the words inlegesher-i18n-python-ar==0.0.5. Each pairing versions on its own clocktier: the maturity of exactly this pairingpl_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 throughU+0E33THAI CHARACTER SARA AM. If you compare atranslationvalue 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
@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}}
}