{"slug": "messageformat", "name": "MessageFormat", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 3, "commenters": 4, "warners": 1, "score": 1.7, "rising": -0.98, "first": "2026-02-16", "latest": "2026-02-16", "why": "One practical thing I appreciated about MessageFormat is how it eliminates a bunch of conditional UI logic.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 0, "compare": 0, "warn": 1}, "spark": [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "One practical thing I appreciated about MessageFormat is how it eliminates a bunch of conditional UI logic.", "kind": "", "icon": true, "domain": "unicode.org", "github_repo": null, "official_url": "https://messageformat.unicode.org", "pricing": "", "aliases": ["MessageFormat"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 752620336, "item_id": 47038771, "url": "https://news.ycombinator.com/item?id=47038771", "by": "zbraniecki", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "https://messageformat.unicode.org/", "excerpt": "https://messageformat.unicode.org/ Lmk if you have further questions!", "context": "", "use_case": "", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}, {"id": 752576865, "item_id": 47036054, "url": "https://news.ycombinator.com/item?id=47036054", "by": "moltonel", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "very easy to understand and fully in the translator's hands", "excerpt": "It's not hard to make a case against gettext, despite its maturity and large ecosystem. IMHO pluralization is a prime example, with an API that only cleanly handles the English case, requires the developer to be aware of translation gotchas, and honnestly confusing documentation and format. Compare that to MessageFormat's pluralization example (https://github.com/unicode-org/message-format-wg/blob/main/spec/README.md", "context": "", "use_case": "", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}, {"id": 752540624, "item_id": 47033789, "url": "https://news.ycombinator.com/item?id=47033789", "by": "jp1016", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "One practical thing I appreciated about MessageFormat is how it eliminates a bunch of conditional UI logic.", "excerpt": "One practical thing I appreciated about MessageFormat is how it eliminates a bunch of conditional UI logic. I used to write switch/if blocks for: \u2022 0 rows \u2192 \u201cNo results\u201d \u2022 1 row \u2192 \u201c1 result\u201d \u2022 n rows \u2192 \u201c{n} results\u201d Which seems trivial in English, but gets messy once you support languages with multiple plural categories. I wasn\u2019t really aware of how nuanced plural rules are until I dug into ICU. The syntax looked int", "context": "", "use_case": "localizable plural strings", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 752540672, "item_id": 47033792, "url": "https://news.ycombinator.com/item?id=47033792", "by": "silvestrov", "date": "2026-02-16", "version": null, "stance": "warn", "quote": "Personally I think the syntax is too brittle.", "excerpt": "English has just singular and plural: one car, two cars, three cars (and zero cars). Some languages have more variations. E.g. Czech, Slovene and Russian has 1, 2-4 and 5 as different cases. Personally I think the syntax is too brittle. It looks too much like TeX code and it has the lisp like deal with lines ending with too many } braces. I would separate it into two cases: simple strings with just simple interpolati", "context": "", "use_case": "", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}]}], "who": [], "tags": [], "use_cases": ["localizable plural strings"], "compared": [], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47033328", "title": "MessageFormat: Unicode standard for localizable message strings", "mentions": 4}], "sentiment_by_month": {"2025-11": {}, "2025-12": {}, "2026-01": {}, "2026-02": {"recommend": 3, "warn": 1}, "2026-03": {}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 752620336, "item_id": 47038771, "url": "https://news.ycombinator.com/item?id=47038771", "by": "zbraniecki", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "https://messageformat.unicode.org/", "excerpt": "https://messageformat.unicode.org/ Lmk if you have further questions!", "context": "", "use_case": "", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}, {"id": 752576865, "item_id": 47036054, "url": "https://news.ycombinator.com/item?id=47036054", "by": "moltonel", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "very easy to understand and fully in the translator's hands", "excerpt": "It's not hard to make a case against gettext, despite its maturity and large ecosystem. IMHO pluralization is a prime example, with an API that only cleanly handles the English case, requires the developer to be aware of translation gotchas, and honnestly confusing documentation and format. Compare that to MessageFormat's pluralization example (https://github.com/unicode-org/message-format-wg/blob/main/spec/README.md", "context": "", "use_case": "", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}, {"id": 752540672, "item_id": 47033792, "url": "https://news.ycombinator.com/item?id=47033792", "by": "silvestrov", "date": "2026-02-16", "version": null, "stance": "warn", "quote": "Personally I think the syntax is too brittle.", "excerpt": "English has just singular and plural: one car, two cars, three cars (and zero cars). Some languages have more variations. E.g. Czech, Slovene and Russian has 1, 2-4 and 5 as different cases. Personally I think the syntax is too brittle. It looks too much like TeX code and it has the lisp like deal with lines ending with too many } braces. I would separate it into two cases: simple strings with just simple interpolati", "context": "", "use_case": "", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}, {"id": 752540624, "item_id": 47033789, "url": "https://news.ycombinator.com/item?id=47033789", "by": "jp1016", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "One practical thing I appreciated about MessageFormat is how it eliminates a bunch of conditional UI logic.", "excerpt": "One practical thing I appreciated about MessageFormat is how it eliminates a bunch of conditional UI logic. I used to write switch/if blocks for: \u2022 0 rows \u2192 \u201cNo results\u201d \u2022 1 row \u2192 \u201c1 result\u201d \u2022 n rows \u2192 \u201c{n} results\u201d Which seems trivial in English, but gets messy once you support languages with multiple plural categories. I wasn\u2019t really aware of how nuanced plural rules are until I dug into ICU. The syntax looked int", "context": "", "use_case": "localizable plural strings", "switched_from": "", "story": "MessageFormat: Unicode standard for localizable message strings"}]}