Internationalization Overview
The App Router has no built-in i18n routing
next.config.js-configured feature (i18n.locales, automatic locale detection, automatic /en//de prefixing). The App Router deliberately dropped that built-in system. Locale-aware routing in the App Router is instead something you build yourself, typically with a [locale] dynamic segment and middleware — or, in practice, with the help of a library that implements this pattern for you.Popular libraries
Library | Notes |
|---|---|
next-intl | Built specifically for the App Router; provides |
next-i18next | Mature and widely used, but designed around the Pages Router — needs workarounds for full App Router support |
react-intl (FormatJS) | Framework-agnostic i18n primitives (message formatting, pluralization, dates) — often paired with a routing solution rather than providing one itself |
[locale] segment you can see in the URL right now) uses next-intl, which is also the most commonly recommended choice for new App Router projects as of this writing.i18n covers both routing (which URL serves which language) and content (translated strings, formatted dates/numbers).
Unlike the Pages Router, the App Router has no built-in locale routing system — it is built on top of App Router primitives.
next-intl is the most common choice for new App Router projects; next-i18next targets the Pages Router; react-intl focuses on formatting rather than routing.
The next two pages dig into the two halves of the problem: locale-aware routing, and managing the translations themselves.