{"id":13452566,"url":"https://github.com/formatjs/formatjs","last_synced_at":"2026-04-01T20:33:01.417Z","repository":{"id":16367269,"uuid":"19117456","full_name":"formatjs/formatjs","owner":"formatjs","description":"The monorepo home to all of the FormatJS related libraries, most notably react-intl.","archived":false,"fork":false,"pushed_at":"2026-03-26T09:58:05.000Z","size":76417,"stargazers_count":14689,"open_issues_count":22,"forks_count":1379,"subscribers_count":125,"default_branch":"main","last_synced_at":"2026-03-26T20:50:34.385Z","etag":null,"topics":["formatjs","globalization","i18n","internationalization","intl","javascript","localization","react","translation","ui","web"],"latest_commit_sha":null,"homepage":"https://formatjs.github.io/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/formatjs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-04-24T17:28:36.000Z","updated_at":"2026-03-26T16:43:51.000Z","dependencies_parsed_at":"2026-03-19T03:08:44.794Z","dependency_job_id":null,"html_url":"https://github.com/formatjs/formatjs","commit_stats":{"total_commits":4916,"total_committers":336,"mean_commits":"14.630952380952381","dds":0.5941822620016273,"last_synced_commit":"c3a3637defdad3a0dac68c3d2a04276c4d062899"},"previous_names":["yahoo/react-intl","caridy/react-intl","formatjs/react-intl"],"tags_count":3984,"template":false,"template_full_name":null,"purl":"pkg:github/formatjs/formatjs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formatjs%2Fformatjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formatjs%2Fformatjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formatjs%2Fformatjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formatjs%2Fformatjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/formatjs","download_url":"https://codeload.github.com/formatjs/formatjs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formatjs%2Fformatjs/sbom","scorecard":{"id":265790,"data":{"date":"2025-08-11","repo":{"name":"github.com/formatjs/formatjs","commit":"541aa464dc5290279cfa22f8b94f75b5f142f515"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/stale.yml:7","Warn: no topLevel permission defined: .github/workflows/website.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":1,"reason":"Found 3/24 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stale.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/formatjs/formatjs/stale.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/website.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/formatjs/formatjs/website.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/website.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/formatjs/formatjs/website.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/website.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/formatjs/formatjs/website.yml/main?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"60 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-6h5x-7c5m-7cr7","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-5q6m-3h65-w53x","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-9m6j-fcg5-2442","Warn: Project is vulnerable to: GHSA-hh27-ffr2-f2jc","Warn: Project is vulnerable to: GHSA-rqff-837h-mm52","Warn: Project is vulnerable to: GHSA-8v38-pw62-9cw2","Warn: Project is vulnerable to: GHSA-hgjh-723h-mx2j","Warn: Project is vulnerable to: GHSA-jf5r-8hm2-f872","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-xq7p-g2vc-g82p","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-6fx8-h7jm-663j","Warn: Project is vulnerable to: GHSA-44c6-4v22-4mhx","Warn: Project is vulnerable to: GHSA-4x5v-gmq8-25ch","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T11:59:09.989Z","repository_id":16367269,"created_at":"2025-08-17T11:59:09.989Z","updated_at":"2025-08-17T11:59:09.989Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291678,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["formatjs","globalization","i18n","internationalization","intl","javascript","localization","react","translation","ui","web"],"created_at":"2024-07-31T07:01:27.709Z","updated_at":"2026-04-01T20:33:01.317Z","avatar_url":"https://github.com/formatjs.png","language":"TypeScript","readme":"# FormatJS\n\n[![Unit Tests](https://github.com/formatjs/formatjs/actions/workflows/tests.yml/badge.svg)](https://github.com/formatjs/formatjs/actions/workflows/tests.yml)\n[![Slack FormatJS](https://img.shields.io/badge/slack-@formatjs-green.svg?logo=slack)](https://join.slack.com/t/formatjs/shared_invite/enQtNjM2MjM4NjE4ODIxLTMyMWE0YTNhMTlmMzZlNzJlNjEzMWY0YjM2ODUxYjlmNDE2YzQyMDIxZDg3Y2Q5YWNlMzhhYzRiNDk0OGQwNGI)\n[![Sauce Browser Matrix Status](https://app.saucelabs.com/browser-matrix/formatjsproject.svg)](https://app.saucelabs.com/u/formatjsproject)\n\nThis repository is the home of [FormatJS](http://formatjs.github.io/) and related libraries.\n\n**Slack:** Join us on Slack at [formatjs.slack.com](https://formatjs.slack.com/) for help, general conversation and more 💬🎊🎉\nYou can sign-up using this [invitation link](https://join.slack.com/t/formatjs/shared_invite/enQtNjYwMzE4NjM1MDQzLTA5NDE1Y2Y1ZWNiZWI1YTU5MGUxY2M0YjA4NWNhMmU3YTRjZmQ3MTE3NzJmOTAxMWRmYWE1ZTdkMmYzNzA5Y2M).\n\n## Development\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md#Development) for instructions.\n\n## Published Packages\n\n| Package                                                                                                | Version                                                                 | Changelog                                                             | License                                                                       |\n| ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------- |\n| [@formatjs/cli](https://www.npmjs.com/package/@formatjs/cli)                                           | ![version](https://badgen.net/npm/v/@formatjs/cli)                      | [CHANGELOG](packages/cli/CHANGELOG.md)                                | ![license](https://badgen.net/npm/license/@formatjs/cli)                      |\n| [@formatjs/cli-lib](https://www.npmjs.com/package/@formatjs/cli-lib)                                   | ![version](https://badgen.net/npm/v/@formatjs/cli-lib)                  | [CHANGELOG](packages/cli-lib/CHANGELOG.md)                            | ![license](https://badgen.net/npm/license/@formatjs/cli-lib)                  |\n| [@formatjs/icu-messageformat-parser](https://www.npmjs.com/package/@formatjs/icu-messageformat-parser) | ![version](https://badgen.net/npm/v/@formatjs/icu-messageformat-parser) | [CHANGELOG](packages/@formatjs/icu-messageformat-parser/CHANGELOG.md) | ![license](https://badgen.net/npm/license/@formatjs/icu-messageformat-parser) |\n| [@formatjs/intl-datetimeformat](https://www.npmjs.com/package/@formatjs/intl-datetimeformat)           | ![version](https://badgen.net/npm/v/@formatjs/intl-datetimeformat)      | [CHANGELOG](packages/intl-datetimeformat/CHANGELOG.md)                | ![license](https://badgen.net/npm/license/@formatjs/intl-datetimeformat)      |\n| [@formatjs/intl-displaynames](https://www.npmjs.com/package/@formatjs/intl-displaynames)               | ![version](https://badgen.net/npm/v/@formatjs/intl-displaynames)        | [CHANGELOG](packages/intl-displaynames/CHANGELOG.md)                  | ![license](https://badgen.net/npm/license/@formatjs/intl-displaynames)        |\n| [@formatjs/intl-getcanonicallocales](https://www.npmjs.com/package/@formatjs/intl-getcanonicallocales) | ![version](https://badgen.net/npm/v/@formatjs/intl-getcanonicallocales) | [CHANGELOG](packages/intl-getcanonicallocales/CHANGELOG.md)           | ![license](https://badgen.net/npm/license/@formatjs/intl-getcanonicallocales) |\n| [@formatjs/intl-listformat](https://www.npmjs.com/package/@formatjs/intl-listformat)                   | ![version](https://badgen.net/npm/v/@formatjs/intl-listformat)          | [CHANGELOG](packages/intl-listformat/CHANGELOG.md)                    | ![license](https://badgen.net/npm/license/@formatjs/intl-listformat)          |\n| [@formatjs/intl-locale](https://www.npmjs.com/package/@formatjs/intl-locale)                           | ![version](https://badgen.net/npm/v/@formatjs/intl-locale)              | [CHANGELOG](packages/intl-locale/CHANGELOG.md)                        | ![license](https://badgen.net/npm/license/@formatjs/intl-locale)              |\n| [@formatjs/intl-localematcher](https://www.npmjs.com/package/@formatjs/intl-localematcher)             | ![version](https://badgen.net/npm/v/@formatjs/intl-localematcher)       | [CHANGELOG](packages/intl-localematcher/CHANGELOG.md)                 | ![license](https://badgen.net/npm/license/@formatjs/intl-localematcher)       |\n| [@formatjs/intl-numberformat](https://www.npmjs.com/package/@formatjs/intl-numberformat)               | ![version](https://badgen.net/npm/v/@formatjs/intl-numberformat)        | [CHANGELOG](packages/intl-numberformat/CHANGELOG.md)                  | ![license](https://badgen.net/npm/license/@formatjs/intl-numberformat)        |\n| [@formatjs/intl-pluralrules](https://www.npmjs.com/package/@formatjs/intl-pluralrules)                 | ![version](https://badgen.net/npm/v/@formatjs/intl-pluralrules)         | [CHANGELOG](packages/intl-pluralrules/CHANGELOG.md)                   | ![license](https://badgen.net/npm/license/@formatjs/intl-pluralrules)         |\n| [@formatjs/intl-relativetimeformat](https://www.npmjs.com/package/@formatjs/intl-relativetimeformat)   | ![version](https://badgen.net/npm/v/@formatjs/intl-relativetimeformat)  | [CHANGELOG](packages/intl-relativetimeformat/CHANGELOG.md)            | ![license](https://badgen.net/npm/license/@formatjs/intl-relativetimeformat)  |\n| [@formatjs/intl-segmenter](https://www.npmjs.com/package/@formatjs/intl-segmenter)                     | ![version](https://badgen.net/npm/v/@formatjs/intl-segmenter)           | [CHANGELOG](packages/intl-segmenter/CHANGELOG.md)                     | ![license](https://badgen.net/npm/license/@formatjs/intl-segmenter)           |\n| [@formatjs/intl](https://www.npmjs.com/package/@formatjs/intl)                                         | ![version](https://badgen.net/npm/v/@formatjs/intl)                     | [CHANGELOG](packages/intl/CHANGELOG.md)                               | ![license](https://badgen.net/npm/license/@formatjs/intl)                     |\n| [@formatjs/ts-transformer](https://www.npmjs.com/package/@formatjs/ts-transformer)                     | ![version](https://badgen.net/npm/v/@formatjs/ts-transformer)           | [CHANGELOG](packages/ts-transformer/CHANGELOG.md)                     | ![license](https://badgen.net/npm/license/@formatjs/ts-transformer)           |\n| [babel-plugin-formatjs](https://www.npmjs.com/package/babel-plugin-formatjs)                           | ![version](https://badgen.net/npm/v/babel-plugin-formatjs)              | [CHANGELOG](packages/babel-plugin-formatjs/CHANGELOG.md)              | ![license](https://badgen.net/npm/license/babel-plugin-formatjs)              |\n| [eslint-plugin-formatjs](https://www.npmjs.com/package/eslint-plugin-formatjs)                         | ![version](https://badgen.net/npm/v/eslint-plugin-formatjs)             | [CHANGELOG](packages/eslint-plugin-formatjs/CHANGELOG.md)             | ![license](https://badgen.net/npm/license/eslint-plugin-formatjs)             |\n| [intl-messageformat](https://www.npmjs.com/package/intl-messageformat)                                 | ![version](https://badgen.net/npm/v/intl-messageformat)                 | [CHANGELOG](packages/intl-messageformat/CHANGELOG.md)                 | ![license](https://badgen.net/npm/license/intl-messageformat)                 |\n| [react-intl](https://www.npmjs.com/package/react-intl)                                                 | ![version](https://badgen.net/npm/v/react-intl)                         | [CHANGELOG](packages/react-intl/CHANGELOG.md)                         | ![license](https://badgen.net/npm/license/react-intl)                         |\n| [@formatjs/utils](https://www.npmjs.com/package/@formatjs/utils)                                       | ![version](https://badgen.net/npm/v/@formatjs/utils)                    | [CHANGELOG](packages/utils/CHANGELOG.md)                              | ![license](https://badgen.net/npm/license/@formatjs/utils)                    |\n\n## Big Thanks\n\nCross-browser Testing Platform and Open Source \u003c3 Provided by [Sauce Labs][saucelabs]\n\n[lerna]: https://lerna.js.org/\n[saucelabs]: https://saucelabs.com\n","funding_links":[],"categories":["TypeScript","十三、国际化（i18n）","Internationalization \u0026 Localization","📖 Categories","web","UI Components","Uncategorized"],"sub_categories":["3.  Immutable 工具（辅助状态管理）","React i18n","Formatting","Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fformatjs%2Fformatjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fformatjs%2Fformatjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fformatjs%2Fformatjs/lists"}