Andy Van Wagoner responded via twitter:
messageformat & formatjs (react-intl) already existed when I wrote format-message. I chose to use ICU’s escaping (‘) instead of \.
I also opted for moving as much work as possible to build time, and added static message extraction, borrowing ideas from i18nliner-js.
There is definitely a lot of duplication but also permutations of formats, workflows, framework compat, etc.
Intl apis are relatively new, and do not cover replacing messages/strings/text with translations.
Many libs are also poorly documented, making it non-obvious where overlaps are.
All that said, I hope a standard does emerge and the temptation to reinvent is drastically reduced.