messageformat-convert
Converts hiearachical objects into messageformat-compatible JSON. More specifically, it:
- Detects two-letter locale keys and parses their contents according to that locale's pluralisation rules
- Converts
#{var}
and%{var}
variable replacements into their messageformat equivalents, while properly escaping other{}
characters. - Detects objects encoding pluralisation choices (using the locale-specific set
of CLDR categories, i.e.
zero|one|two|few|many|aother
) and converts them to their messageformat equivalents.
With these conversions, messages stored according to the Rails i18n spec may be used together with messageformat.
Installation
npm install messageformat-convert
If using in an environment that does not natively support ES6 features such as object destructuring and arrow functions, you'll want to use a transpiler for this.
Usage
const convert = ;const locales translations = ; const MessageFormat = ;const mf = locales;const messages = mf; messagesenerrors;// 'must be accepted' messagesen;// 'Problem doesn\'t match your style' messagesenerrors;// 'is the wrong length (should be 42 characters)'
convert(data, options)
API: data
should be a hierarchical object of strings; options
is an optional set
of configuration:
-
defaultLocale
(string, default'en'
) – Sets the initial locale. -
includeLocales
(array of strings, defaultnull
) – By default any key in the input data that matches the two-letter code of a CLDR pluralisation language switches the language used for determining the pluralisation rules. Set this to some limited set of languages (or even an empty array) to limit that. -
verbose
(boolean, defaultfalse
) – If set totrue
, some logging and warnings will be printed to the console.
For more options, take a look at the source.
The object returned by the function contains the following fields:
-
locales
(array of strings) – The actual locales encountered in the data -
translations
(object) – An object containing the MessageFormat strings, matching the shape of the input data
Messageformat is an OpenJS Foundation project, and we follow its Code of Conduct.