[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3879":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":15,"starSnapshotCount":15,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},3879,"formatjs","formatjs\u002Fformatjs","The monorepo home to all of the FormatJS related libraries, most notably react-intl.","https:\u002F\u002Fformatjs.github.io\u002F",null,"TypeScript",14717,1384,126,3,0,5,16,1,44.42,false,"main",[5,23,24,25,26,27,28,29,30,31,32],"globalization","i18n","internationalization","intl","javascript","localization","react","translation","ui","web","2026-06-12 02:00:55","# FormatJS\n\n[![Unit Tests](https:\u002F\u002Fgithub.com\u002Fformatjs\u002Fformatjs\u002Factions\u002Fworkflows\u002Ftests.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fformatjs\u002Fformatjs\u002Factions\u002Fworkflows\u002Ftests.yml)\n[![Slack FormatJS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fslack-@formatjs-green.svg?logo=slack)](https:\u002F\u002Fjoin.slack.com\u002Ft\u002Fformatjs\u002Fshared_invite\u002FenQtNjM2MjM4NjE4ODIxLTMyMWE0YTNhMTlmMzZlNzJlNjEzMWY0YjM2ODUxYjlmNDE2YzQyMDIxZDg3Y2Q5YWNlMzhhYzRiNDk0OGQwNGI)\n[![Sauce Browser Matrix Status](https:\u002F\u002Fapp.saucelabs.com\u002Fbrowser-matrix\u002Fformatjsproject.svg)](https:\u002F\u002Fapp.saucelabs.com\u002Fu\u002Fformatjsproject)\n\nThis repository is the home of [FormatJS](http:\u002F\u002Fformatjs.github.io\u002F) and related libraries.\n\n**Slack:** Join us on Slack at [formatjs.slack.com](https:\u002F\u002Fformatjs.slack.com\u002F) for help, general conversation and more 💬🎊🎉\nYou can sign-up using this [invitation link](https:\u002F\u002Fjoin.slack.com\u002Ft\u002Fformatjs\u002Fshared_invite\u002FenQtNjYwMzE4NjM1MDQzLTA5NDE1Y2Y1ZWNiZWI1YTU5MGUxY2M0YjA4NWNhMmU3YTRjZmQ3MTE3NzJmOTAxMWRmYWE1ZTdkMmYzNzA5Y2M).\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\u002Fcli](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fcli)                                           | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fcli)                      | [CHANGELOG](packages\u002Fcli\u002FCHANGELOG.md)                                | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fcli)                      |\n| [@formatjs\u002Fcli-lib](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fcli-lib)                                   | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fcli-lib)                  | [CHANGELOG](packages\u002Fcli-lib\u002FCHANGELOG.md)                            | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fcli-lib)                  |\n| [@formatjs\u002Ficu-messageformat-parser](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Ficu-messageformat-parser) | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Ficu-messageformat-parser) | [CHANGELOG](packages\u002F@formatjs\u002Ficu-messageformat-parser\u002FCHANGELOG.md) | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Ficu-messageformat-parser) |\n| [@formatjs\u002Fintl-datetimeformat](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-datetimeformat)           | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-datetimeformat)      | [CHANGELOG](packages\u002Fintl-datetimeformat\u002FCHANGELOG.md)                | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-datetimeformat)      |\n| [@formatjs\u002Fintl-displaynames](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-displaynames)               | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-displaynames)        | [CHANGELOG](packages\u002Fintl-displaynames\u002FCHANGELOG.md)                  | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-displaynames)        |\n| [@formatjs\u002Fintl-getcanonicallocales](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-getcanonicallocales) | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-getcanonicallocales) | [CHANGELOG](packages\u002Fintl-getcanonicallocales\u002FCHANGELOG.md)           | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-getcanonicallocales) |\n| [@formatjs\u002Fintl-listformat](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-listformat)                   | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-listformat)          | [CHANGELOG](packages\u002Fintl-listformat\u002FCHANGELOG.md)                    | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-listformat)          |\n| [@formatjs\u002Fintl-locale](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-locale)                           | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-locale)              | [CHANGELOG](packages\u002Fintl-locale\u002FCHANGELOG.md)                        | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-locale)              |\n| [@formatjs\u002Fintl-localematcher](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-localematcher)             | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-localematcher)       | [CHANGELOG](packages\u002Fintl-localematcher\u002FCHANGELOG.md)                 | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-localematcher)       |\n| [@formatjs\u002Fintl-numberformat](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-numberformat)               | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-numberformat)        | [CHANGELOG](packages\u002Fintl-numberformat\u002FCHANGELOG.md)                  | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-numberformat)        |\n| [@formatjs\u002Fintl-pluralrules](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-pluralrules)                 | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-pluralrules)         | [CHANGELOG](packages\u002Fintl-pluralrules\u002FCHANGELOG.md)                   | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-pluralrules)         |\n| [@formatjs\u002Fintl-relativetimeformat](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-relativetimeformat)   | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-relativetimeformat)  | [CHANGELOG](packages\u002Fintl-relativetimeformat\u002FCHANGELOG.md)            | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-relativetimeformat)  |\n| [@formatjs\u002Fintl-segmenter](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl-segmenter)                     | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl-segmenter)           | [CHANGELOG](packages\u002Fintl-segmenter\u002FCHANGELOG.md)                     | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl-segmenter)           |\n| [@formatjs\u002Fintl](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fintl)                                         | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fintl)                     | [CHANGELOG](packages\u002Fintl\u002FCHANGELOG.md)                               | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fintl)                     |\n| [@formatjs\u002Fts-transformer](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Fts-transformer)                     | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Fts-transformer)           | [CHANGELOG](packages\u002Fts-transformer\u002FCHANGELOG.md)                     | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Fts-transformer)           |\n| [babel-plugin-formatjs](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fbabel-plugin-formatjs)                           | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002Fbabel-plugin-formatjs)              | [CHANGELOG](packages\u002Fbabel-plugin-formatjs\u002FCHANGELOG.md)              | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002Fbabel-plugin-formatjs)              |\n| [eslint-plugin-formatjs](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Feslint-plugin-formatjs)                         | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002Feslint-plugin-formatjs)             | [CHANGELOG](packages\u002Feslint-plugin-formatjs\u002FCHANGELOG.md)             | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002Feslint-plugin-formatjs)             |\n| [intl-messageformat](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fintl-messageformat)                                 | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002Fintl-messageformat)                 | [CHANGELOG](packages\u002Fintl-messageformat\u002FCHANGELOG.md)                 | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002Fintl-messageformat)                 |\n| [react-intl](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Freact-intl)                                                 | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002Freact-intl)                         | [CHANGELOG](packages\u002Freact-intl\u002FCHANGELOG.md)                         | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002Freact-intl)                         |\n| [@formatjs\u002Futils](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@formatjs\u002Futils)                                       | ![version](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Fv\u002F@formatjs\u002Futils)                    | [CHANGELOG](packages\u002Futils\u002FCHANGELOG.md)                              | ![license](https:\u002F\u002Fbadgen.net\u002Fnpm\u002Flicense\u002F@formatjs\u002Futils)                    |\n\n## Big Thanks\n\nCross-browser Testing Platform and Open Source \u003C3 Provided by [Sauce Labs][saucelabs]\n\n[lerna]: https:\u002F\u002Flerna.js.org\u002F\n[saucelabs]: https:\u002F\u002Fsaucelabs.com\n","FormatJS 是一个专注于国际化和本地化的库集合，最著名的是 react-intl。它提供了丰富的功能来处理日期、数字、相对时间等格式化问题，支持多种语言环境，并且能够解析和生成 ICU 消息格式。使用 TypeScript 编写，确保了代码质量和类型安全。适用于需要进行多语言支持的 Web 应用场景，特别是那些基于 React 构建的应用程序。通过 FormatJS，开发者可以轻松地实现应用的全球化，提高用户体验。",2,"2026-06-11 02:56:51","top_language"]