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

This project follows Keep a Changelog and adheres to Semantic Versioning.

[0.3.0] - 2026-07-18

Added

  • Intl.NumberFormat.format/2 supports notation: :scientific and notation: :engineering.

  • Intl.NumberFormat.format/2 supports :currency_display (:symbol, :narrow_symbol, :code, :name) and :currency_sign (:standard, :accounting).

  • Intl.NumberFormat.format/2 supports :use_grouping (:always, :auto, :min2, true, false), mapped to Localize :minimum_grouping_digits.

  • Intl.NumberFormat.format/2 supports :minimum_significant_digits, :maximum_significant_digits, :numbering_system, and :rounding_increment.

  • Intl.NumberFormat.format/2 supports :sign_display (:auto, :always, :except_zero, :negative, :never) mirroring the JS signDisplay option.

  • :numbering_system accepts any valid CLDR numbering system for any locale, including algorithmic systems, and -u-nu- locale extensions are honoured.

  • Intl.NumberFormat.format_range/3 supports the :currency and :percent styles in addition to :decimal.

Changed

  • Localize 1.0.0-rc.0 or later is required. Compact notation now applies the ECMA-402 default precision of at most two significant digits ("1.2K" for 1234), matching JS.

  • Negative currency amounts render the sign before the symbol ("-$1.00", previously "$-1.00"), matching JS Intl.NumberFormat.

  • Intl.DurationFormat translates its :style option to the Localize :format option, following the Localize 0.43 rename.

Fixed

[0.2.0] - 2025-05-12

Bug Fixes

  • Relax the dependency requirement for localize to be "~> 0.31 or ~> 1.0".

[0.1.0] - 2025-04-16

Highlights

Initial release of Intl, an Elixir interface modelled on the JavaScript Intl API.

This library provides a familiar API for developers who know JS Intl, adapted to idiomatic Elixir conventions. It delegates to the Localize library for all locale-aware formatting and data access.

Supported modules:

  • Intl.NumberFormat — locale-aware number, currency, percent, and unit formatting.

  • Intl.DateTimeFormat — locale-aware date and time formatting with range support.

  • Intl.ListFormat — list joining with conjunctions, disjunctions, or unit separators.

  • Intl.DisplayNames — localized names for regions, languages, currencies, scripts, calendars, and date-time fields.

  • Intl.RelativeTimeFormat — relative time strings ("3 days ago", "in 2 hours").

  • Intl.PluralRules — CLDR plural category selection (cardinal and ordinal).

  • Intl.Collator — locale-aware string comparison and sorting via the Unicode Collation Algorithm.

  • Intl.DurationFormat — locale-aware duration formatting.

  • Intl.Segmenter — text segmentation into graphemes (built-in), words, and sentences (via optional unicode_string dependency).

See the README for usage examples and the compatibility matrix for a detailed comparison with the JS Intl API.