Changelog

View Source

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.1.0 - 2026-05-07

Initial release.

Added

  • BeamlabLanguages.Language struct with six fields: code, name, native_name, direction, has_gender, genders.
  • Public API on BeamlabLanguages (10 functions, all with @spec and doctests):
    • get/1 — fetch a Language struct by code, or nil
    • list/0 — every known language, sorted by code
    • list_codes/0 — every known 2-letter base code, sorted
    • has_gender?/1 — predicate, false for unknown / nil
    • genders/1 — gender list, [] for unknown / non-gendered languages
    • direction/1:ltr or :rtl, :ltr for unknown
    • name/1 — canonical English name, or nil
    • native_name/1 — endonym, or nil
    • normalize/1 — collapse BCP 47 / sloppy casing to a 2-letter base
    • known?/1 — sugar over get/1
  • BCP 47 normalization runs internally on every code-taking function — "en-US", "FR", " fr " all just work. Underscore separator ("en_US") is also accepted, and "nb" / "nn" (Bokmål / Nynorsk, as emitted by POSIX locales and browsers) collapse to "no".
  • 54 curated languages in priv/data/languages.json, covering the top-spoken languages plus all CEFR / JLPT / HSK targets.
  • Compile-time data loading — no runtime file I/O, no GenServer, no ETS, zero runtime dependencies.