The experience and subtlety of your program’s text can be important. Messageformat is a mechanism for handling both pluralization and gender in your applications. It can also lead to much better translations, as it’s designed to support all the languages included in the Unicode CLDR.

The ICU has an official guide for the format. Messageformat supports and extends all parts of the standard, with the exception of the deprecated ChoiceFormat.

There is a good slide-deck on Plural and Gender in Translated Messages by Markus Scherer and Mark Davis. But, again, remember that many of these problems apply even if you’re only outputting english.

What problems does it solve?

Using messageformat, you can separate your code from your text formatting, while enabling much more humane expressions. In other words, you won’t need to see this anymore in your output:

There are 1 results.
There are 1 result(s).
Number of results: 5.

What does it look like?

With this message:

const msgSrc = `{GENDER, select,
  male {He}
  female {She}
  other {They}
} found {RES, plural,
  =0 {no results}
  one {1 result}
  other {# results}

You’ll get these results:

const msg = new MessageFormat('en').compile(msgSrc)

msg({ GENDER: 'male', RES: 1 })
// 'He found 1 result.'

msg({ GENDER: 'female', RES: 1 })
// 'She found 1 result.'

msg({ GENDER: 'male', RES: 2 })
// 'He found 2 results.'

msg({ RES: 2 })
// 'They found 2 results.'




npm install messageformat
import MessageFormat from 'messageformat'
const mf = new MessageFormat('en')


bower install messageformat
<script src="path/to/bower_components/messageformat/messageformat.js"></script>
  var mf = new MessageFormat('en');