Home
Softono
extract-react-intl-messages

extract-react-intl-messages

Open source MIT TypeScript
183
Stars
40
Forks
8
Issues
2
Watchers
9 months
Last Commit

About extract-react-intl-messages

extract react intl messages

Platforms

Web Self-hosted

Languages

TypeScript

Links

extract-react-intl-messages

test tested with jest styled with prettier MIT License All Contributors

This package will generate json or yaml files from a glob. It will generate one file per locale, with the ids of each message defined by the defineMessages function of react-intl. The value of each of these keys will be an empty string, except for your defaultLocale which will be populated with the defaultMessage.

Dependencies

Babel

  • 0.x works with Babel 6

Install

$ npm install --save-dev extract-react-intl-messages

Usage

app/components/App/messages.js

import { defineMessages, useIntl } from 'react-intl'

export default defineMessages({
  hello: {
    id: 'a.hello',
    defaultMessage: 'hello'
  },
  world: {
    id: 'a.world',
    defaultMessage: 'world'
  }
})

export const SubmitButton = () => {
  const intl = useIntl()
  const label = intl.formatMessage({
    id: 'a.submit',
    defaultMessage: 'Submit Button'
  })
  return <button aria-label={label}>{label}</button>
}

Run Script

$ extract-messages -l=en,ja -o app/translations -d en --flat false './app/**/!(*.test).js'

Output

app/translations/en.json

{
  "a": {
    "hello": "hello",
    "world": "world",
    "submit": "Submit Button"
  }
}

app/translations/ja.json

{
  "a": {
    "hello": "",
    "world": "",
    "submit": ""
  }
}

Recommend

Use with babel-plugin-react-intl-auto: i18n for the component age. Auto management react-intl ID.

CLI

$ extract-messages --help

  Extract react-intl messages

  Usage
  $ extract-react-intl-messages <input>
  $ extract-messages <input>

  Options
  -o, --output            Output directory [require: true]
  -l, --locales           locales [require: true]
  -f, --format            json | yaml [default: json]
  -d, --defaultLocale     default locale
  --overwriteDefault      default: true
  --flat                  json [default: true] | yaml [default: false]
  --indent                default: 2

  Example
  $ extract-messages --locales=ja,en --output app/translations 'app/**/*.js'
  $ extract-messages -l=ja,en -o i18n 'src/**/*.js'
  $ extract-messages -l=ja,en -o app/translations -f yaml 'app/**/messages.js'

create-react-app user

create .babelrc like this.

{
  "presets": ["react-app"]
}

Run with NODE_ENV=development.

$ NODE_ENV=development extract-messages ...

TypeScript

babel required.

See example/with-typescript

npm install --save-dev @babel/core @babel/preset-typescript @babel/preset-react

babel.config.js

module.exports = function (api) {
  api.cache(true)

  return {
    presets: ['@babel/preset-react', '@babel/preset-typescript']
  }
}

API

extractReactIntlMessages(locales, input, buildDir, [options])

locales

Type: Array<string>

Example: ['en', 'ja']

input

Type: Array<string>

Target files. glob.

buildDir

Type: string

Export directory.

options

defaultLocale

Type: string
Default: en

format

Type: json | yaml
Default: json

Set extension to output.

overwriteDefault

Type: boolean
Default: true

If overwriteDefault is false, it will not overwrite messages in the default locale.

indent

Type: number
Default: 2

flat

Type: boolean
Default: true

If format is yaml, set to false.

Be careful if false. See this issue.

babel-plugin-react-intl's Options

See https://github.com/formatjs/formatjs/tree/master/packages/babel-plugin-react-intl#options

Contributors

Thanks goes to these wonderful people (emoji key):

akameco
akameco

๐Ÿ’ป โš ๏ธ ๐Ÿ“– ๐Ÿš‡
Hoan Tran
Hoan Tran

๐Ÿ’ป โš ๏ธ
giantpinkwalrus
giantpinkwalrus

๐Ÿ’ป
enrique-ramirez
enrique-ramirez

๐Ÿ“–
Stefan Gojan
Stefan Gojan

๐Ÿ› ๐Ÿ’ป โš ๏ธ
Solomon English
Solomon English

๐Ÿ’ป
Filip "Filson" Pasternak
Filip "Filson" Pasternak

๐Ÿ’ป
nodaguti
nodaguti

๐Ÿ’ป โš ๏ธ
fix-fix
fix-fix

๐Ÿ’ป
bradbarrow
bradbarrow

๐Ÿ› ๐Ÿ’ป โš ๏ธ
Gregor MacLennan
Gregor MacLennan

๐Ÿ’ป
Dmitry Zarva
Dmitry Zarva

๐Ÿ’ป
Michael Pan
Michael Pan

๐Ÿ’ก
Tom Erik Stรธwer
Tom Erik Stรธwer

๐Ÿ’ป
Bart Lens
Bart Lens

๐Ÿ’ป
Truong Hoang Dung
Truong Hoang Dung

๐Ÿ’ก
Nestoro
Nestoro

๐Ÿ’ป
Yutaro Kido
Yutaro Kido

๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind welcome!

License

MIT ยฉ akameco