Categories
Localize FormatJS & react-intl messages — no custom formatter required.
Requires Crowdin account
FormatJS's formatjs extract command outputs messages in a standard JSON shape ({ "id": { "defaultMessage", "description" } }) that Crowdin doesn't handle natively — so today you have to run formatjs extract --format crowdin to convert it first. This app reads the standard output directly, removing that extra step.
Upload the JSON produced by formatjs extract. The app detects FormatJS-shaped catalogs (any .json containing defaultMessage) and leaves other JSON to Crowdin's native parser.
Each message becomes a Crowdin string: defaultMessage is the source text and description is the translator context. ICU placeholders, plurals, and react-intl rich-text tags are kept verbatim.
Translators work with the extracted strings, with the message id and description for context.
Exports mirror the original structure, replacing only each defaultMessage with the translation while preserving description, key order, and any other fields — so the file is ready for formatjs compile.
Untranslated messages keep their source text.
The app also supports Crowdin bundles, generating a translated catalog for any target language.
| Attribute | Value |
|---|---|
| File Extension | .json |
| API Type | formatjs-messages |
| Source can be edited in Crowdin | No |
| Generating translated files via Bundles | Search Crowdin Store |
| Supports pluralization | Yes |
| WYSIWYG Preview in the editor | No |
| Supported types of contextual information | Text comments, Screenshots |
| Custom attributes | Yes |
| Existing translations import possibility | Key-value mapping |
{
"with.description": {
"defaultMessage": "Save changes",
"description": "primary action button"
},
"no.description": {
"defaultMessage": "Cancel"
},
"empty.message": {
"defaultMessage": "",
"description": "intentionally empty, should be skipped"
},
"bare.string": "Logged compiled value still translatable",
"object.description": {
"defaultMessage": "Notifications",
"description": { "context": "nav label", "component": "Sidebar" }
}
}
Crowdin is a platform that helps you manage and translate content into different languages. Integrate Crowdin with your repo, CMS, or other systems. Source content is always up to date for your translators, and translated content is returned automatically.
Learn MoreReleased on May 30, 2026
Updated on Jun 17, 2026
Published by Awesome Crowdin
Identifier:formatjs
All product and company names are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.