kip
Localize bindings for Lua, LFE, Erlang and Gleam
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.
Library links
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









