UNPKG

3.21 kBMarkdownView Raw
1# babel-plugin-react-intl
2
3Extracts string messages for translation from modules that use [React Intl][].
4
5## Dependencies
6
7### React Intl
8
9This Babel plugin works with React Intl v2.x
10
11### Babel
12
13- **3.x** of this plugin works with Babel 7
14- **2.x** works with Babel 6
15- **1.x** works with Babel 5
16
17## Installation
18
19```sh
20$ npm install babel-plugin-react-intl
21```
22
23## Usage
24
25**This Babel plugin only visits ES6 modules which `import` React Intl.**
26
27The default message descriptors for the app's default language will be extracted from: `defineMessages()`, `<FormattedMessage>`, and `<FormattedHTMLMessage>`; all of which are named exports of the React Intl package.
28
29If a message descriptor has a `description`, it'll be removed from the source after it's extracted to save bytes since it isn't used at runtime.
30
31### Via `.babelrc` (Recommended)
32
33**.babelrc**
34
35```json
36{
37 "plugins": [
38 [
39 "react-intl",
40 {
41 "messagesDir": "./build/messages/"
42 }
43 ]
44 ]
45}
46```
47
48#### Options
49
50- **`messagesDir`**: The target location where the plugin will output a `.json` file corresponding to each component from which React Intl messages were extracted. If not provided, the extracted message descriptors will only be accessible via Babel's API.
51
52- **`enforceDescriptions`**: Whether message declarations _must_ contain a `description` to provide context to translators. Defaults to: `false`.
53
54- **`enforceDefaultMessage`**: Whether message declarations _must_ contain a `defaultMessage` to fallback when translations are not present. Defaults to: `true`.
55
56- **`extractSourceLocation`**: Whether the metadata about the location of the message in the source file should be extracted. If `true`, then `file`, `start`, and `end` fields will exist for each extracted message descriptors. Defaults to `false`.
57
58- **`moduleSourceName`**: The ES6 module source name of the React Intl package. Defaults to: `"react-intl"`, but can be changed to another name/path to React Intl.
59
60- **`overrideIdFn`**: A function with the signature `(id: string, defaultMessage: string, description: string|object) => string` which allows you to override the ID both in the extracted javascript and messages.
61
62- **`removeDefaultMessage`**: Remove `defaultMessage` field in generated js after extraction.
63
64- **`additionalComponentNames`**: Additional component names to extract messages from, e.g: `['FormattedFooBarMessage']`. **NOTE**: By default we check for the fact that `FormattedMessage` & `FormattedHTMLMessage` are imported from `moduleSourceName` to make sure variable alias works. This option does not do that so it's less safe.
65
66- **`extractFromFormatMessageCall`**: Opt-in to extract from `intl.formatMessage` call with the same restrictions, e.g: has to be called with object literal such as `intl.formatMessage({ id: 'foo', defaultMessage: 'bar', description: 'baz'})`
67
68### Via Node API
69
70The extract message descriptors are available via the `metadata` property on the object returned from Babel's `transform()` API:
71
72```javascript
73require('@babel/core').transform('code', {
74 plugins: ['react-intl']
75}); // => { code, map, ast, metadata['react-intl'].messages };
76```
77
78[react intl]: http://formatjs.io/react/