{"_rev":"3-2d50096baab5c5cdc360cd440c7fdaec","time":{"created":"2023-10-13T17:18:26.975Z","3.0.0":"2023-10-13T16:22:23.154Z","modified":"2023-10-13T17:18:27.731Z","3.0.1":"2023-10-13T17:18:27.379Z"},"_id":"@cprussin/next-intl","name":"@cprussin/next-intl","dist-tags":{"latest":"3.0.1"},"versions":{"3.0.1":{"name":"@cprussin/next-intl","version":"3.0.1","sideEffects":false,"author":{"name":"Jan Amann","email":"jan@amann.work"},"description":"A minimal, but complete solution for internationalization in Next.js apps.","license":"MIT","homepage":"https://next-intl-docs.vercel.app","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/amannn/next-intl.git"},"scripts":{"build":"rm -rf dist && rollup -c","test":"TZ=Europe/Berlin vitest","lint":"eslint src test && tsc --noEmit","prepublishOnly":"CI=true turbo test && turbo lint && turbo build && cp ../../README.md .","postpublish":"git checkout . && rm ./README.md","size":"size-limit"},"main":"./dist/index.js","module":"./dist/esm/index.js","typings":"./dist/types/src/index.d.ts","exports":{".":{"types":"./dist/types/src/index.d.ts","react-server":"./dist/esm/index.react-server.js","default":"./dist/index.js"},"./server":{"types":"./server.d.ts","react-server":"./dist/esm/server.react-server.js","default":"./dist/server.js"},"./config":{"types":"./config.d.ts","default":"./dist/config.js"},"./middleware":{"types":"./middleware.d.ts","default":"./dist/middleware.js"},"./navigation":{"types":"./navigation.d.ts","react-server":"./dist/esm/navigation.react-server.js","default":"./dist/navigation.js"},"./plugin":{"types":"./plugin.d.ts","default":"./dist/plugin.js"}},"keywords":["react","intl","i18n","internationalization","localization","translate","translation","format","formatting","next","next.js"],"dependencies":{"@formatjs/intl-localematcher":"^0.2.32","negotiator":"^0.6.3","server-only":"0.0.1","use-intl":"3.0.0-beta.3"},"peerDependencies":{"next":"^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0","react":"^16.8.0 || ^17.0.0 || ^18.0.0"},"devDependencies":{"@edge-runtime/vm":"^3.1.3","@size-limit/preset-big-lib":"^8.2.6","@testing-library/react":"^13.0.0","@types/negotiator":"^0.6.1","@types/node":"^17.0.23","@types/react":"^18.2.5","eslint":"^8.46.0","eslint-config-molindo":"^7.0.0","eslint-plugin-deprecation":"^1.4.1","next":"13.5.2","path-to-regexp":"^6.2.1","react":"^18.2.0","react-dom":"^18.2.0","rollup":"^3.28.1","rollup-plugin-preserve-directives":"0.2.0","size-limit":"^8.2.6","typescript":"^5.0.0","vitest":"^0.32.2"},"size-limit":[{"path":"dist/production/index.js","limit":"12.72 KB"},{"path":"dist/production/navigation.js","limit":"2.6 KB"},{"path":"dist/production/server.js","limit":"0.4 KB"},{"path":"dist/production/middleware.js","limit":"5.7 KB"}],"gitHead":"54e80c3538fc8b9ede621372806fd6e5f83c7a0a","bugs":{"url":"https://github.com/amannn/next-intl/issues"},"_id":"@cprussin/next-intl@3.0.1","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-NcJRg78XG/WaLVUufAKL+M4nWDP31e+AfHKQdppRegxi81KTOdNs9CxraeMdDdTFUUEze4flfDBtawvGobj1RA==","shasum":"115dd77aa83e3b52ee90316b270b1cbe0f8b6b61","tarball":"https://registry.npmjs.org/@cprussin/next-intl/-/next-intl-3.0.1.tgz","fileCount":249,"unpackedSize":183565,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYYWt5HTYkNM7BThTOtGX4kOATonL/oguWxIiqbveP2AIgVY86dBnaHZXBqwDa/XfBKObqKK5MLgs134HSsAohgE8="}]},"_npmUser":{"name":"cprussin","email":"connor@prussin.net"},"directories":{},"maintainers":[{"name":"cprussin","email":"connor@prussin.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-intl_3.0.1_1697217507091_0.6002568867723475"},"_hasShrinkwrap":false}},"maintainers":[{"name":"cprussin","email":"connor@prussin.net"}],"description":"A minimal, but complete solution for internationalization in Next.js apps.","homepage":"https://next-intl-docs.vercel.app","keywords":["react","intl","i18n","internationalization","localization","translate","translation","format","formatting","next","next.js"],"repository":{"type":"git","url":"git+https://github.com/amannn/next-intl.git"},"author":{"name":"Jan Amann","email":"jan@amann.work"},"bugs":{"url":"https://github.com/amannn/next-intl/issues"},"license":"MIT","readme":"<h1 align=\"center\">\n\t<br>\n\t<br>\n    <a href=\"https://next-intl-docs.vercel.app/\">\n      <img width=\"400\" src=\"media/logo.svg\" alt=\"next-intl\">\n    </a>\n\t<br>\n\t<br>\n\t<br>\n</h1>\n\n> Internationalization (i18n) for Next.js that gets out of your way.\n\n![Gzipped size](https://badgen.net/bundlephobia/minzip/next-intl) ![Tree shaking supported](https://badgen.net/bundlephobia/tree-shaking/next-intl) [<img src=\"https://img.shields.io/npm/dw/next-intl.svg\" />](https://www.npmjs.com/package/next-intl)\n\n<hr />\n\n📣 [Support for Next.js 13 and the App Router has arrived →](https://next-intl-docs.vercel.app/docs/next-13)\n\n<hr />\n\n## Features\n\nInternationalization is an essential part of the user experience. next-intl gives you everything you need to get language subtleties right and has always got your back whenever you need to fine-tune a translation.\n\n- 🌟 **ICU message syntax**: Localize your messages with interpolation, plurals, ordinal pluralization, enum-based label selection, and rich text.\n- 📅 **Dates, times & numbers**: Apply appropriate formatting without worrying about server/client differences like time zones.\n- ✅ **Type-safe**: Speed up development with autocompletion for message keys and catch typos early with compile-time checks.\n- 💡 **Hooks-only API**: Learn a single API that can be used across your code base to turn translations into plain strings or rich text.\n- 🚀 **Fast**: Get the best performance from your app by supporting internationalization on both static and dynamic pages.\n- ⚔️ **Standards-based**: Use the best parts of built-in JavaScript APIs and supplemental lower-level APIs from Format.JS.\n\n## What does it look like?\n\nThis library is based on the premise that messages can be grouped by namespaces (typically a component name).\n\n```jsx\n// UserDetails.tsx\nimport {useTranslations, useFormatter} from 'next-intl';\n \nfunction UserDetails({user}) {\n  const t = useTranslations('UserDetails');\n  const format = useFormatter();\n \n  return (\n    <section>\n      <h2>{t('title')}</h2>\n      <p>{t('followers', {count: user.followers.length})}</p>\n      <p>{t('lastSeen', {time: format.relativeTime(user.lastSeen)})</p>\n      <Image alt={t('portrait', {username: user.name})} src={user.portrait} />\n    </section>\n  );\n}\n```\n\n```js\n// en.json\n{\n  \"UserDetails\": {\n    \"title\": \"User details\",\n    \"followers\": \"{count, plural, ↵\n                    =0 {No followers yet} ↵\n                    =1 {One follower} ↵\n                    other {# followers} ↵\n                  }\",\n    \"lastSeen\": \"Last seen {time}\",\n    \"portrait\": \"Portrait of {username}\"\n  }\n}\n```\n\n### [→ Read the docs](https://next-intl-docs.vercel.app/)\n\n<div align=\"center\">\n  <a href=\"https://next-intl-docs.vercel.app/redirect?href=https://crowdin.com\" target=\"_blank\">\n    <img width=\"350\" src=\"media/partner.svg\" alt=\"Crowdin logo\">\n  </a>\n  <br>\n  <p>Hosted on <a href=\"https://vercel.com?utm_source=next-intl&utm_campaign=oss\">Vercel</a></p>\n</div>\n","readmeFilename":"README.md"}