Skip to content
Breaking
Latest technical intelligence from Northeast India • Infrastructure, AI, Cloud & Security Analysis • Precision Analysis | Raw Intelligence | Your North Star of Tech Latest technical intelligence from Northeast India • Infrastructure, AI, Cloud & Security Analysis • Precision Analysis | Raw Intelligence | Your North Star of Tech
WEBDEV

Analysis: A Complete Guide to i18n in Next.js 15 App Router with next-intl (Supporting 8 Languages)

Empowering Multi-language Support in Next.js 15: A Comprehensive Guide for Developers

Empowering Multi-language Support in Next.js 15: A Comprehensive Guide for Developers

In today's interconnected world, catering to a diverse audience is essential. For developers building web applications with Next.js, providing multi-language support has never been easier, thanks to the next-intl library. In this article, we delve into the process of implementing multi-language support in Next.js 15 using next-intl, based on the real-world example of DevType, a typing practice game for programmers.

Why next-intl?

When building a multi-language Next.js application, you have several options. We chose next-intl for the following reasons:

  • App Router Support: next-intl seamlessly integrates with the Next.js App Router and Server Components.
  • First-class Adapter: It provides a first-class adapter for handling locale-specific data.
  • Type Safety: next-intl offers excellent type safety, ensuring that developers can catch potential issues at compile time.
  • Bundle Size: next-intl has a small bundle size, making it a good choice for performance-conscious developers.

Project Structure

The i18n file structure in DevType follows this pattern:

src/ app/ [locale]/ # Dynamic locale segment layout.tsx # Locale-specific layout page.tsx # Home page play/ ranking/ ... layout.tsx # Root layout sitemap.ts i18n/ config.ts config.tsx routing.ts request.ts messages/ en.json ja.json zh.json ...

Key Points

Configuring Locales

Create a central configuration file for your supported languages:

typescript // src/i18n/config.ts export const locales = ["en", "ja", "zh", "es", "pt", "de", "fr", "it"] as const; export type Locale = typeof locales[number]; export const defaultLocale: Locale = "en"; export const localeNames: Record = { en: "English", ja: "", zh: "", es: "Espaol", pt: "Portugus", de: "Deutsch", fr: "Franais", it: "Italiano", };

Setting Up Routing

Create navigation helpers that work with your locale structure:

typescript // src/i18n/routing.ts import { defineRouting } from "next-intl/routing"; import { createNavigation } from "next-intl/navigation"; import { locales, defaultLocale } from "./config"; export const routing = defineRouting({ locales, defaultLocale, localePrefix: "always" }); export const { Link, redirect, usePathname, useRouter, getPathname } = createNavigation(routing);

Configuring Message Loading

Set up server-side message loading:

typescript // src/i18n/request.ts import { getRequestConfig } from "next-intl/server"; import { locales, type Locale } from "./config"; export default getRequestConfig(async ({ requestLocale }) => { let locale = await requestLocale; // Fallback if locale is invalid if (!locale || !locales.includes(locale as Locale)) { locale = "en"; } return { locale, messages: (await import(`../../messages/${locale}.json`)).default, }; });

Configuring Next.js

Wrap your Next.js config with the next-intl plugin:

typescript // next.config.ts import type { NextConfig } from "next"; import createNextIntlPlugin from "next-intl/plugin"; const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts"); const nextConfig: NextConfig = { // Your other config options... }; export default withNextIntl(nextConfig);

Relevance to North East India and Broader Indian Context

As the digital landscape continues to expand in India, the need for multi-language support becomes increasingly important, particularly in regions like North East India, where multiple languages are spoken. Implementing solutions like next-intl can help developers cater to diverse audiences, fostering inclusivity and accessibility.

Looking Forward

With next-intl, implementing multi-language support in Next.js 15 is a straightforward process. By following the structure outlined in this article, developers can create applications that cater to a global audience, enabling seamless user experiences across various languages. Happy coding!