Localize version 0.12.0
[0.12.0] — April 15th, 2026
Bug Fixes
-
Chinese collation tailorings (
zh-u-co-pinyin,zh-u-co-stroke,zh-u-co-zhuyin) now produce correct locale-specific ordering for Han characters. . -
Han radical-stroke ordering (UAX #38) under
-u-co-unihannow applies correctly. TheLocalize.Collation.Hanmodule was previously orphaned — its data was never loaded in consumer apps and the sort path never consulted it. Radical data is now pre-generated in the build pipeline and shipped inpriv/localize/collation_table.etf; the sort path invokesHan.collation_elements/1for CJK codepoints when the:han_orderingoption is:radical_stroke(set automatically for the-u-co-unihancollation type).
Added
-
Localize.Collation.Options.han_orderingoption —:implicit(default, UCA codepoint-based) or:radical_stroke(UAX #38). Automatically set to:radical_strokefor-u-co-unihanlocales. -
Persistent-term cache for parsed tailorings. First call to
Tailoring.get_tailoring/2parses the rule string (~70 ms for zh-pinyin); subsequent calls read from persistent_term in microseconds. -
Differential tests for
zh-u-co-pinyin,zh-u-co-stroke,zh-u-co-zhuyin, andja-u-co-unihanthat assert output differs from root codepoint order for specific character pairs — guards against silent regressions.
Changed
Localize.Collation.Hanis no longer a GenServer. Radical data is loaded alongside the main collation table byLocalize.Collation.Table(one ETF, one load step).