Internationalization (i18n)
Priority: P2 (MEDIUM)
Maintain a single source of truth for locales and ensure SEO-friendly sub-path routing.
Implementation Guidelines
- Locale Routing: Follow the URL-first approach for SEO. Use dynamic segments in the App Router (e.g.,
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.ts) to 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. UsegetMessages()orrequestConfigpatterns. - 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.module.exports = { i18n: { locales: ['en', 'fr', 'vi'], defaultLocale: 'en', }, };
3. Library Specifics
For detailed setup with common libraries, refer to:
- references/react-intl.md
- references/next-intl.md
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.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.