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>.jsonper language. No nested folders, no over-engineering. next-intlfor 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.