Tech debt takes a moment to create, but years to pay off.
Why is internationalization so hard?
If you're a developer who has already worked on the internationalization of an app, chances are you might nod along here. Maybe you were unsure about how to set it up, or you ran into a tough problem along the way.
“This time I'll get it right.”
That's what I told myself one too many times at the beginning of a project, always being optimistic that this time I'd know which challenges to anticipate.
But fast forward a few months, and inevitably, I'd encounter an unforeseen problem that would force me to rethink my app's architecture.
So why is it so hard?
This question haunted me for so long that, one day, I decided to do something about it. I started building next-intl
and spent the next 5 years talking to hundreds of developers who've faced the very same struggles.
And through all these conversations, I've discovered that the difficulty comes down to three core questions.
Assumptions
1What are we getting wrong?
Let's consider this snippet:
<h2>{t('Latest reviews for')} {productName}</h2>
Do you see a problem with this?
While this might work for languages like English and Spanish, this approach will break if we localize to Japanese.
The reason for it is that we've assumed a grammatical structure for this label.
Properly translating the message to Japanese would require the product name to be put at the beginning of the sentence:
// ✅ Grammatically correct<h2>{productName} の最新レビュー</h2>
While this is only one example, the underlying problem is: We too often assume that other languages—and cultures—work the same way as our own.
If we knew about these differences upfront, we could ensure that our apps are built to adapt gracefully right from the start.
Architecture
2Why can't we just copy what works?
If you ask 10 different people how they implement internationalization, you might get 10 different answers. Building a solid foundation is about understanding the tradeoffs and picking a strategy that fits your needs.
Some of the key questions to consider:
- What routing strategy fits your use case?
- Which aspects of your app need to be internationalized?
- What's the relation to countries of your supported languages?
- How do you handle country specifics like currencies?
- How do time zones affect your app?
The truth is: What works for a small startup might not work for an enterprise. And what works for a content-heavy site might not work for a SaaS application.
Getting internationalization right isn't about copying your competitors' solution—it's about understanding the underlying principles and applying them systematically to your specific needs.
Ecosystem
3What's the full picture?
While next-intl
is a great starting point, it's only part of the solution. Getting internationalization right takes an ecosystem that works together seamlessly.
Think about it, you need:
- Backend and CMS integration — to bring localization to your dynamic content
- SEO adjustments — to ensure discoverability of your multilingual content
- Design considerations — to improve the UX of your app for different cultures
- IDE tooling — for an efficient and streamlined developer experience
- Continuous localization — to keep your translations up to date
- Generative AI — to never wait for missing translations
… and all of this, integrated into your Next.js app with a codebase that's still a joy to work with three months from now.
What I've put together for you
Your fast track to internationalization
This course distills years of hard-won experience into clear, actionable insights for you to apply in your projects.
It contains:
10 chapters with a total of 42 lessons and 5+ hours of tightly-edited video content in 4K
A purpose-built course experience, with code snippets and summaries for later reference
A real-world project, with full access to the source code on GitHub
Individually tagged commits with all lesson code changes
Full access to a CMS backend based on Sanity with a ready-to-deploy internationalization setup
We'll start with the fundamentals and dive deep into hands-on, code-driven explorations with a focus on conceptual understanding.
This time we'll get it right. For good.


Build international Next.js apps with confidence
Learn everything from the fundamentals to advanced patterns, to make internationalization your competitive advantage—starting today.
All chapters & code
Master the art of holistic internationalization, from the fundamentals to advanced patterns.
$249$199
$50 off for a limited time
Get instant accessPrice shown in USD, excl. sales tax
All 10 chapters with a total of 42 lessons
5+ hours of tightly-edited video content in 4K
All the source code to use in your apps (private repos for project app & CMS)
Avoid expensive refactors
One-time payment, future updates included
14-day money-back guarantee
Support the development of next-intl
The fundamentals
Learn the fundamentals of building international Next.js apps, from planning to implementation.
$159
Get instant accessPrice shown in USD, excl. sales tax
The first 6 chapters with a total of 26 lessons
3+ hours of tightly-edited video content in 4K
Lesson summaries and code snippets for later reference
One-time payment, future updates included
14-day money-back guarantee
Support the development of next-intl
Full access to GitHub repos not included
What you'll learn
- Architect internationalized apps with care & foresight
- Deeply understand all pieces that contribute to a truly localized experience
- Work with translations in depth
- Get the UX right: Resilient layouts, culture & country specifics, right-to-left languages & more
- Integrate with external backend services and a CMS
- Max out your developer experience with TypeScript and IDE tooling
- Use generative AI to improve your workflow and for content localization
- Collaborate with your team using a translation management system
- Master SEO for multilingual apps to reach global audiences
And most importantly: Stay happy with internationalization past the honeymoon phase of your project and live happily ever after.

It's a massive time-saver —
… not just for learning next-intl, but for understanding the bigger picture of i18n. I've been using next-intl since version zero, and I still had a wow effect in almost every video of the course.
Highly recommended for anyone working on multi-lingual (or multi-regional 😉) apps!

Hi, I‘m Jan!
I‘m an independent developer, open source maintainer, and university teacher from Austria.
Some facts about me:
- Created
next-intl
and grew it to over 800,000 weekly downloads, making it the go-to solution for internationalization in modern Next.js apps - 10 years of experience building user-centric apps with React
- Lecturer for React Enterprise Applications at university
I‘m incredibly excited to share everything I‘ve learned about internationalization with you in this course, to help you build apps that reach users across the globe with confidence.
What you'll learn
Everything you need to build international apps with Next.js
- 02
Planning
The first step to internationalization is to carefully plan ahead.
- 03
Translations
Let's take a deep dive on how to replace hardcoded strings with dynamic translations.
First translations 6:26Preview
Let's set up next-intl and our first translations.
Server & Client Components 5:44Preview
Learn how to use translations both on the server as well as the client side.
Organizing keys 6:35
Discover best practices for organizing message keys.
Reusing messages 7:50
Learn how, and more importantly, when to reuse messages.
Editor tools 6:41
Streamline your workflow with a VS Code integration and TypeScript.
ICU messages 13:39
Create flexible messages with ICU syntax to handle plurals and more.
Extracting literals 7:20
Find and convert hardcoded strings using ESLint and AI agents.
- 05
Dates, times & numbers
Learn how to format dates, times, and more—according to the user's locale.
Number formatting 10:28
Learn how to effectively format numbers and currencies across locales.
Dates & time zones 13:05
How can we reliably work with dates and time zones in JavaScript?
Date formatting 5:45
Learn how to format dates and times while handling time zones.
Global formats 8:25
Consistent formatting is key to a great localized experience.
Relative times 5:53
Let's explore the runtime implications of times like "2 days ago".
- 06
Routing
Let's set up locale-based routing to create unique URLs for each language.
Locale-based routing 13:13
Learn how to set up routing with a top-level locale segment.
Navigation APIs 7:36
Let's explore how to preserve locales during navigation.
Locale switchers part 2 5:00
Learn how to change the locale with navigation APIs.
Domain-based routing 8:37
Manage domains in coordination with locales.
Prefix-based routing 7:50
Let's switch to a custom, prefix-based routing strategy.
Localized pathnames 9:15
Pathnames are an important part of your UI, let's localize them too.
Locale cookie regulations 6:39
Understand legal and privacy considerations when using locale cookies.
- 07
Backend content
in cooperation with Sanity
Integrate external content from a backend, headless CMS or Markdown files into your app.
Overview 7:32
Learn about different approaches to localizing external content and their use cases.
Document-level localization 14:43
Work with locale-specific entities and pages, like our testimonials and stories.
CMS-driven URLs 10:37
Let's incorporate localized slugs from our CMS into our routing structure.
Field-level localization 10:41
Resolve localized fields like product descriptions and more.
User-generated content 6:39
Allow users to translate content like product reviews into their language.
Markdown 2:35
Use MDX files to provide localized content for static pages.
- 08
Search engine optimization
Optimize your app for search engines to improve discoverability.
Declaring content language 4:45Preview
Use HTML attributes to help search engines understand your multilingual content.
Geotargeting 6:22
Help search engines understand which countries you're targeting.
hreflang & canonicals 10:39
Learn about their use cases and how to use them effectively.
Sitemaps 8:43
Create a sitemap that helps search engines discover your localized content.
- 09
Design for localization
Let's explore UI design patterns that help you to create experiences that work across all languages.
Resilient layouts 6:33
Create layouts that adapt seamlessly to any language.
Right-to-left layouts 12:01
Learn how to adapt your layouts for languages that read from right to left.
Forms 9:51
Let's question our assumptions on forms, from filling in names to addresses.
Regional specifics 5:46
Explore real-world examples that illustrate cultural and regional differences.
- 10
Continuous localization
in cooperation with Crowdin
You've got questions?