Internationalization (i18n)
Priority: P2 (MEDIUM)
Maintain single source of truth for locales and ensure SEO-friendly sub-path routing.
Workflow: Add i18n to Next.js App Router Project
- Install
next-intland createmessages/en.json,messages/fr.json, etc. - Add locale detection middleware in
middleware.ts - Create
app/[lang]/layout.tsxwith locale param - Load translations server-side via
getMessages() - Add
hreflangtags ingenerateMetadata - Pre-render locales with
generateStaticParams - Verify: run
next buildand confirm all locale paths render
Middleware Example
Implementation Guidelines
- Locale Routing: Follow URL-first approach for SEO. Use dynamic segments in App Router (
app/[lang]/page.tsx) andi18nconfiguration innext.config.jsfor Pages Router. - Library Selection: Use
next-intlfor App Router (modern) orreact-intl/next-translatefor legacy apps. - Detection: Implement middleware localization in
middleware.tsto detect user language fromAccept-Languageheaders or cookies and perform redirects. - Server-Side: Load translation
messages/*.jsondictionaries in Server Components to keep client bundle small. - SEO: Ensure
hreflangtags generated correctly inmetadataAPI for all translated routes. - Static Generation: Use
generateStaticParamsto pre-render localized versions of static pages at build time.
Library Specifics
For detailed setup with common libraries, refer to:
Anti-Patterns
- No hardcoded strings in JSX: Use translation keys; never commit raw text.
- No client-side translation bundles: Load dictionaries server-side with
getMessages(). - No mixed URL locale patterns: Use sub-paths or domains consistently.