@colisweb/bs-react-intl-extractor v0.10.0
bs-react-intl-extractor
Extracts messages for localization from ReScript or Reason source files. This assumes that you are using the bs-react-intl 2.x bindings for react-intl.
Installation
Binaries for macOS, Linux and Windows can be installed via npm or yarn. For global installation, run
npm install -g bs-react-intl-extractor-binAlternatively, the binaries are also available for download on the releases page.
Usage
bs-react-intl-extractor [--allow-duplicates] [path...]where path is a ReScript (*.res) or Reason (*.re) source file or a directory containing such source files. Multiple files/directories may be specified.
The --allow-duplicates option allows messages with identical id props if the defaultMessage props are identical as well.
Output
The output (a JSON array of all extracted messages sorted by id) is written to stdout. It will look like this:
[
{
"id": "message.hello",
"defaultMessage": "Hello"
},
{
"id": "message.world",
"defaultMessage": "World"
},
{
"id": "some.message.id",
"defaultMessage": "Some message"
}
]Message Definition (ReScript Syntax)
Formatted messages may be defined in your source files in one of the following ways:
- inline in
FormattedMessage:
<ReactIntl.FormattedMessage id="some.message.id" defaultMessage="Some message" />or
open ReactIntl;
...
<FormattedMessage id="some.message.id" defaultMessage="Some message" />- within a module with the
[@intl.messages]attribute:
open ReactIntl
module Msg = {
@@intl.messages
let hello = {id: "message.hello", defaultMessage: "Hello"}
let world = {id: "message.world", defaultMessage: "World"}
}You also can pass descriptions to the records with:
let foo = @intl.description("Hello description") {id: "message.hello", defaultMessage: "Hello"}Message Definition (Reason Syntax)
Formatted messages may be defined in your source files in one of the following ways:
- inline in
FormattedMessage:
<ReactIntl.FormattedMessage id="some.message.id" defaultMessage="Some message" />or
open ReactIntl;
...
<FormattedMessage id="some.message.id" defaultMessage="Some message" />- within a module with the
[@intl.messages]attribute:
open ReactIntl;
module Msg = {
[@intl.messages];
let hello = {id: "message.hello", defaultMessage: "Hello"};
let world = {id: "message.world", defaultMessage: "World"};
};You also can pass descriptions to the records with:
let foo = [@intl.description "Hello description"] {id: "message.hello", defaultMessage: "Hello"};Building and Testing
The ReScript parser is included as a git submodule. Therefore, after checking out the sources, first run
git submodule update --init --recursiveInstall esy as follows:
% npm install -g esyThen you can install the project dependencies using:
% esy installThen build the project dependencies along with the project itself:
% esy buildRun the compiled executable:
% esy x Extract.exeRun the tests:
% esy test5 years ago
