react-intl-po
Extract POT from react-intl and convert back to json.
messages.json → POT → PO → translation.json
Demo
Standalone example based on Create-React-App: https://github.com/evenchange4/react-intl-po-example
Installation
$ npm install react-intl-po --save
Requirements and Workflow
- react-intl
^2.0.0
- babel-plugin-react-intl
^2.0.0
Usage
There are two sub-commands of react-intl-po
or rip
:
- json2pot: Convert the json files extracted from babel-plugin-react-intl into one
.pot
file. - po2json: Convert translated .po files back to
.json
format.
json2pot
$ rip json2pot '_translations/src/**/*.json' \
-o ./mcs-public.pot
Arguments | Description |
---|---|
srcPatterns |
The pattern of .json files extracted from babel-plugin-react-intl |
output (-o) |
The output pathname of .pot file to be translated |
message-key (-k) |
[Optional] Translation message key (default key is defaultMessage ) |
message-context (-c) |
[Optional] Translation message context (defaults to no context) |
po2json
directory
is set
Case 1: Output one file per locale if a $ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \
-m './_translations/src/**/*.json' \
-o './translations'
.json file
is set
Case 2: Output one merged file if a $ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \`
-m './_translations/src/**/*.json' \
-o './translations.json'
Arguments | Description |
---|---|
srcPatterns |
The pattern of translated .po files |
messagesPattern (-m) |
The pattern of .json files extracted from babel-plugin-react-intl |
output (-o) |
The output pathname of a file / directory |
message-key (-k) |
[Optional] Translation message key (default key is defaultMessage ) |
message-context (-c) |
[Optional] Translation message context (defaults to no context) |
API
Property
Q&A
How to translate the same message into two different meanings?
Option 1 (Recommended):
Set the message-context (-c)
to 'id'
of message object from babel-plugin-react-intl (there is no context by default).
The advantage of this option over Option 2 (below) is that PO file editors that provide features such as translation suggestions or error-checking often expect the message key to be defaultMessage
.
$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \
-m './_translations/src/**/*.json' \
-o './translations' \
-c 'id'
$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \`
-m './_translations/src/**/*.json' \
-o './translations.json' \
-c 'id'
Option 2:
Set the message-key (-k)
to 'id'
of message object from babel-plugin-react-intl (default key is 'defaultMessage'
). (#41)
$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \
-m './_translations/src/**/*.json' \
-o './translations' \
-k 'id'
$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \`
-m './_translations/src/**/*.json' \
-o './translations.json' \
-k 'id'
Test
$ npm run lint
$ npm run test:watch
CONTRIBUTING
- ⇄ Pull requests and ★ Stars are always welcome.
- For bugs and feature requests, please create an issue.
- Pull requests must be accompanied by passing automated tests (
$ npm test
).