NextjsInternationalization Overview

Internationalization Overview

Internationalization (often abbreviated i18n — "i", 18 letters, "n") is the practice of building an application so it can serve content in more than one language and adapt to region-specific conventions like date formats, number formats, and currencies. In a Next.js app this usually touches three things at once: which URL a visitor lands on for a given locale, where translated strings live, and how the right ones get picked at render time.
The App Router has no built-in i18n routing
This is the detail that trips people up coming from the older Pages Router: Pages Router had i18n routing as a first-class, 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.
Note
This isn't a regression — it's a deliberate trade for flexibility. Baking locale routing into the framework meant one opinionated shape for everyone; leaving it to the app (or a library on top of the App Router's primitives) means it composes with whatever routing structure your app already has.
Popular libraries

Library

Notes

next-intl

Built specifically for the App Router; provides [locale] routing helpers, a useTranslations hook, and Server Component support

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

This site's own routing (the [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.