Localize friendly bindings for Lua, LFE, Erlang and Gleam
Localize provides locale-aware formatting of numbers, dates, currencies, units, lists and MessageFormat 2 messages. It’s an Elixir library, but everything it does runs on the BEAM.
To be a good BEAM citizen I’ve always wanted to provide good bindings to other BEAM languages but ex_cldr had too much “magic” to make that realistic. With Localize its possible and practical.
The guiding principle: each binding follows its own language’s idioms as best I know how (will some help from my local neighbourhood LLM).
localize_lua
Targeted at Elixir Lual..
Motivated by ash_cms, which renders Lua templates and needs locale-aware formatting inside the sandbox. Every call returns a string and falls back gracefully, so an untrusted template can never crash the render.
localize_lfe
Is Localize support for LFE:
(localize:currency 1234.56 "EUR"
(list #(locale de)))
It implements charlist/binary/atom coercion and lisp-case option keys translated to Localize’s snake_case.
localize_erl
Idiomatic Erlang bindings. Per-concern modules (localize_number, localize_date, …), {ok, Binary} | {error, {Tag, Message}} returns matching Localize’s own contract, maps for options, binaries throughout.
localize_gleam
Provides bindings for Gleam. Gleam’s build tool compiles Elixir dependencies transparently, and two things line up very well: Localize’s {ok, _} / {error, _} is Gleam’s Result, and collation’s :lt/:eq/:gt is gleam/order.Order. On top sits a fully-typed surface — an Options record, a LocalizeError union, typed date inputs:
number.format(1234.56, localize.Options(..localize.default(), currency: Some("USD")))
//=> Ok("$1,234.56")
Feedback welcome - especially to help me make the interfaces as idiomatic as possible.






















