ICU Semantics Proof: Source to Runtime
Palamedes preserves ICU MessageFormat semantics across every pipeline stage it controls:
source -> extraction -> macro transform -> PO catalog -> catalog compile -> runtime renderThat scope is deliberate. A translation management system sits outside the Palamedes boundary, so its import and export behavior depends on the chosen product, file format, and project configuration.
Re-run the claim
pnpm proof:icuThe command uses the checked fixture under
proof/icu-semantics.
It does not call a hosted service or use a mocked TMS.
The fixture contains a plural nested inside both branches of a select. The
proof asserts:
- extraction returns the exact source ICU message and context;
- the macro transform binds
roleandcountto the generated runtime call and emits the same compiled message ID as the catalog compiler; - a PO catalog update retains the exact
msgid,msgctxt, and German translation; - source and translation retain the same argument names, selector kinds,
branch keys, nesting, and
#substitutions; - catalog compilation emits the exact translated ICU message without missing entries or ICU errors;
- the transformed fixture is imported and renders six checked combinations
across both
selectbranches and the=0,one, andotherplural branches.
The script prints hashes, the normalized selector shape, and the number of runtime scenarios after all assertions pass.
The claim boundary
Safe public wording:
Palamedes keeps ICU semantics intact from source code through PO catalogs to runtime. Within the stages Palamedes controls, nested selectors are not flattened into a proprietary plural model.
Avoid claiming that every TMS preserves arbitrary ICU messages. Palamedes can provide a lossless boundary on both sides of a TMS exchange, but only the selected TMS can determine what happens during its import, editing, and export steps.
Public market snapshot
The following examples are a documentation snapshot checked on 2026-07-23, not a permanent or exhaustive ranking:
| Product | Publicly documented ICU behavior |
|---|---|
| React Intl | Uses ICU Message syntax as its native message model, including plural, select, and selectordinal. |
| i18next | Uses its own interpolation format by default. ICU is available through an i18n-format plugin; i18next documents that format plugins replace its native plural, interpolation, and context behavior. |
| Crowdin | Documents editor support for ICU arguments, nested plurals, target-language plural categories, previews, and syntax errors. |
| Phrase TMS | Parses ICU for supported formats when enabled; parsing is an all-or-nothing file/template setting, and ICU messages cannot be split or joined. |
| Weblate | Documents ICU syntax and placeholder validation as a quality check enabled by a flag and automatically enabled for ARB and FormatJS JSON. |
Direct sources, all checked 2026-07-23:
- React Intl ICU syntax
- i18next plugins and i18n formats
- Crowdin ICU Message Syntax
- Phrase ICU Message Format
- Weblate checks and fixups
The broader research notes remain under
docs/research/competitors.
Re-check their dates and primary sources before promoting another comparison
claim to the public site.