Convert gettext input (po/pot/mo files) into messageformat-compatible JSON
npm install gettext-to-messageformatConverts gettext input (po/pot/mo files) into [messageformat]-compatible JSON,
using [gettext-parser].
``sh`
npm install --save gettext-to-messageformat`
orsh`
yarn add gettext-to-messageformat
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.
`js
const { parsePo, parseMo } = require('gettext-to-messageformat')
const { headers, pluralFunction, translations } = parsePo(
msgid "Time: %1 second"
msgid_plural "Time: %1 seconds"
msgstr[0] "Czas: %1 sekunda"
msgstr[1] "Czas: %1 sekundy"
msgstr[2] "Czas: %1 sekund"
msgid "%1 took %2 ms to complete."
msgstr "Trebalo je %2 ms da se %1 završi."
msgid "%s took %d ms to complete."
msgstr "Trebalo je %2$d ms da se %1$s završi."
msgid "No star named %(starname)s found."
msgstr "Nema zvezde po imenu %(starname)s.")
const MessageFormat = require('messageformat')
const mf = new MessageFormat({ [headers.Language]: pluralFunction })
const messages = mf.compile(translations)
messages'Time: %1 second'
// 'Czas: 1 sekunda'
messages'%s took %d ms to complete.'
// 'Trebalo je 42 ms da se TASK završi.'
messages'No star named %(starname)s found.'
// 'Nema zvezde po imenu Chi Draconis.'
`
For more examples, [gettext-parser] includes a selection of .po and .mo files
in its test fixtures.
The two functions differ only in their expectation of the input's format. inputoptions
may be a string or a Buffer; is an optional set of configuration for
the parser, including the following fields:
- defaultCharset (string, default null) – For Buffer input only, sets the
default charset -- otherwise UTF-8 is assumed
- forceContext (boolean, default false) – If any of the gettext messagesmsgctxt
define a , that is used as a top-level key in the output, and all''
messages without a context are included under the empty string context.forceContext
If no context is set, by default this top-level key is not included unless
is set to true.
- pluralFunction (function) – If your input file does not include a Plural-Formscardinal
header, or if for whatever reason you'd prefer to use your own, set this to be
a stringifiable function that takes in a single variable, and returns the
appropriate pluralisation category. Following the model used internally in
[messageformat], the function variable should also include as anew Function
member array of its possible categories, in the order corresponding to the
gettext pluralisation categories. This is relevant if you'd like to avoid the
constructor otherwise used to generate pluralFunction, or to'1.0'
allow for more fine-tuned categories than gettext allows, e.g. differentiating
between the categories of and '1'.
- verbose (boolean, default false) – If set to true, missing translations
will cause warnings.
For more options, take a look at the source.
Both functions return an object containing the following fields:
- headers (object) – The raw contents of the input file's headers, with keyspluralFunction
using canonical casing.
- (function) – An appropriate pluralisation function to use fornull
the output translations, suitable to be used directly by [messageformat]. May
be if none was set in options and if the input did not include atranslations
Plural-Forms header.
- (object) – An object containing the MessageFormat strings keyedmsgid
by their and if used, msgctxt`.
[messageformat]: https://messageformat.github.io/
[gettext-parser]: https://github.com/smhg/gettext-parser