Internationalization (i18n)
Priority: P2 (MEDIUM)
Maintain a single source of truth for locales and ensure SEO-friendly sub-path routing.
Workflow: Add i18n to a 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 the URL-first approach for SEO. Use dynamic segments in the App Router (
app/[lang]/page.tsx) and thei18nconfiguration innext.config.jsfor the Pages Router. - Library Selection: Use
next-intlfor the 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 the client bundle small. - SEO: Ensure
hreflangtags are generated correctly in themetadataAPI 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.