{"_id":"@agurtovoy/next-intl","name":"@agurtovoy/next-intl","dist-tags":{"latest":"3.21.1"},"versions":{"3.21.1":{"name":"@agurtovoy/next-intl","version":"3.21.1","sideEffects":false,"author":{"name":"Jan Amann","email":"jan@amann.work"},"funding":[{"type":"individual","url":"https://github.com/sponsors/amannn"}],"description":"Internationalization (i18n) for Next.js","license":"MIT","homepage":"https://next-intl-docs.vercel.app","repository":{"type":"git","url":"git+https://github.com/amannn/next-intl.git"},"main":"./dist/index.react-client.js","module":"./dist/esm/index.react-client.js","typings":"./dist/types/src/index.react-client.d.ts","exports":{".":{"types":"./dist/types/src/index.react-client.d.ts","react-server":"./dist/esm/index.react-server.js","default":"./dist/index.react-client.js"},"./server":{"types":"./server.d.ts","react-server":"./dist/esm/server.react-server.js","default":"./dist/server.react-client.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.react-client.js"},"./routing":{"types":"./routing.d.ts","default":"./dist/routing.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.5.4","negotiator":"^0.6.3","use-intl":"^3.21.1"},"peerDependencies":{"next":"^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0","react":"^16.8.0 || ^17.0.0 || ^18.0.0"},"devDependencies":{"@arethetypeswrong/cli":"^0.15.3","@edge-runtime/vm":"^3.2.0","@size-limit/preset-big-lib":"^11.1.4","@testing-library/react":"^16.0.0","@types/negotiator":"^0.6.3","@types/node":"^20.14.5","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","eslint":"^9.11.1","eslint-config-molindo":"^8.0.0","eslint-plugin-react-compiler":"0.0.0-experimental-8e3b87c-20240822","next":"^14.2.4","path-to-regexp":"^6.2.2","prettier":"^3.3.3","publint":"^0.2.8","react":"^18.3.1","react-dom":"^18.3.1","rollup":"^4.18.0","rollup-plugin-preserve-directives":"0.4.0","size-limit":"^11.1.4","typescript":"^5.5.3","vitest":"^2.0.2"},"prettier":"eslint-config-molindo/.prettierrc.json","scripts":{"build":"rm -rf dist && rollup -c","test":"TZ=Europe/Berlin vitest","lint":"pnpm run lint:source && pnpm run lint:package","lint:source":"eslint src test && tsc --noEmit && pnpm run lint:prettier","lint:package":"publint && attw --pack","lint:prettier":"prettier src --check","size":"size-limit"},"_id":"@agurtovoy/next-intl@3.21.1","bugs":{"url":"https://github.com/amannn/next-intl/issues"},"_integrity":"sha512-QJlk3zF50+rBe4JTdyUSYZQKEWhKEM/9sb95CXf3/VFT7ypsb9NC92xEhfz3HFAfRD+T7wkSM/t7FiSIP+O3uw==","_resolved":"/private/var/folders/hk/v9s741fd7lv95fm29_qxx6x80000gn/T/a2e4b3dba0410e6f18cb196e0b12323c/agurtovoy-next-intl-3.21.1.tgz","_from":"file:agurtovoy-next-intl-3.21.1.tgz","_nodeVersion":"18.20.3","_npmVersion":"10.7.0","dist":{"integrity":"sha512-QJlk3zF50+rBe4JTdyUSYZQKEWhKEM/9sb95CXf3/VFT7ypsb9NC92xEhfz3HFAfRD+T7wkSM/t7FiSIP+O3uw==","shasum":"908c0c349fbe59ec2449de9a5022864a01defdb7","tarball":"https://registry.npmjs.org/@agurtovoy/next-intl/-/next-intl-3.21.1.tgz","fileCount":286,"unpackedSize":229363,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaLtNJ8zJ1TmHridj3VvYCNaBlaIQ8ZuivZIwdYtYuFAIhAMGtgAGuBCjbsYXM9CGfXHgEhS1Y2sFAjqOpfuPtfQki"}]},"_npmUser":{"name":"agurtovoy","email":"agurtovoy@acm.org"},"directories":{},"maintainers":[{"name":"agurtovoy","email":"agurtovoy@acm.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-intl_3.21.1_1729463933307_0.033546782818123067"},"_hasShrinkwrap":false}},"time":{"created":"2024-10-20T22:38:53.204Z","3.21.1":"2024-10-20T22:38:53.555Z","modified":"2024-10-20T22:38:53.847Z"},"maintainers":[{"name":"agurtovoy","email":"agurtovoy@acm.org"}],"description":"Internationalization (i18n) for Next.js","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  <br>\n  <a href=\"https://next-intl-docs.vercel.app/\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"media/logo-dark-mode.svg\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"media/logo.svg\">\n      <img alt=\"next-intl\" src=\"media/logo.svg\" width=\"600\">\n    </picture>\n  </a>\n  <br>\n  <br>\n</h1>\n\n> Internationalization (i18n) for Next.js\n\n## Features\n\nInternationalization (i18n) is an essential part of the user experience, therefore `next-intl` gives you all the parts you need to get language nuances right.\n\n- 🌟 **ICU message syntax**: Localize your messages with interpolation, cardinal & ordinal plurals, 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-based API**: Learn a single API that can be used across your code base to turn translations into plain strings or rich text.\n- 🚀 **Next.js-native and performance-obsessed**: App Router, Server Components, static rendering—pick the right tool for the right job, next-intl works everywhere.\n- ⚔️ **Internationalized routing**: Provide unique pathnames per language and optionally localize pathnames for search engine optimization.\n\n## What does it look like?\n\n```jsx\n// UserProfile.tsx\nimport {useTranslations} from 'next-intl';\n \nexport default function UserProfile({user}) {\n  const t = useTranslations('UserProfile');\n \n  return (\n    <section>\n      <h1>{t('title', {firstName: user.firstName})}</h1>\n      <p>{t('membership', {memberSince: user.memberSince})}</p>\n      <p>{t('followers', {count: user.numFollowers})}</p>\n    </section>\n  );\n}\n```\n\n```js\n// en.json\n{\n  \"UserProfile\": {\n    \"title\": \"{username}'s profile\",\n    \"membership\": \"Member since {memberSince, date, short}\",\n    \"followers\": \"{count, plural, ↵\n                    =0 {No followers yet} ↵\n                    =1 {One follower} ↵\n                    other {# followers} ↵\n                  }\"\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"}