← back

Building a Next.js app in 7 different languages with i18n

i18n is one of those features that looks trivial in the docs and terrifying once you try to retrofit it onto a real project. Here's how I did it without rewriting the world.

The approach

  • App Router with route-based locales: /en, /de, /fr, etc.
  • A single messages/<locale>.json per language. No nested folders, no over-engineering.
  • next-intl for the client-side bits. Picked it because it plays nicely with Server Components.
  • A fallback locale so missing keys never break the page.

What I'd do differently

  • Start with two languages, not seven. Translation quality matters more than coverage.
  • Don't auto-translate marketing copy. I tried and it showed.
  • Ship the language switcher last — people care about it less than you'd think.