FormatJS logo
FormatJS BetaFree

Localize FormatJS & react-intl messages — no custom formatter required.

Get

Requires Crowdin account

FormatJS translation with Crowdin

Copy link

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.

How It Works

Copy link

Step 1: Upload extracted messages

Copy link

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.

Step 2: Extract translatable content

Copy link

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.

Step 3: Translate in Crowdin

Copy link

Translators work with the extracted strings, with the message id and description for context.

Step 4: Export translated files

Copy link

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.

File Format Details

Copy link
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

Sample File

Copy link
{
  "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

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 More
Categories
Works with
  • Crowdin Enterprise
  • crowdin.com
Details

Released 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.

FormatJS for Crowdin — Localize react-intl Messages