Getting Started with Next.js: Part 7 - Internationalization and Localization

Dipak Ahirav - May 19 - - Dev Community

πŸš€ Check Out My YouTube Channel! πŸš€

Hi everyone! If you enjoy my content here on Dev.to, please consider subscribing to my YouTube channel devDive with Dipak. I post practical full-stack development videos that complement my blog posts. Your support means a lot!

Introduction

Welcome to Part 7 of our Next.js series! Today, we focus on internationalization (i18n) and localization (l10n), which are crucial for creating applications that support multiple languages and regional differences. Next.js provides built-in support for internationalized routing and locale detection, which simplifies the process of localizing your application.

What is Internationalization and Localization?

  • Internationalization (i18n): The process of designing a software application so that it can be adapted to various languages and regions without engineering changes.
  • Localization (l10n): The process of adapting internationalized software for a specific region or language by adding locale-specific components and translating text.

Configuring Internationalization in Next.js

Next.js supports internationalization natively through its routing system. Here’s how to set it up:

Step 1: Update Next.js Configuration

  1. Modify next.config.js:

    • Enable and configure the internationalization preferences:
     module.exports = {
       i18n: {
         locales: ['en-US', 'fr', 'es'], // List of supported locales
         defaultLocale: 'en-US',         // Default locale
       },
     };
    

Step 2: Add Locale-Specific Pages

  1. Create Locale-Specific Versions of Pages:
    • For instance, to create a French version of your homepage, you might create a file named index.js under pages/fr.

Step 3: Using Locale Information in Your Application

  1. Accessing the Current Locale:

    • Next.js automatically provides locale information via the router object, which you can use in your components:
     import { useRouter } from 'next/router';
    
     function MyComponent() {
       const router = useRouter();
       const { locale } = router;
    
       return <p>Current locale: {locale}</p>;
     }
    

Handling Locale-Switching

Allow users to switch between languages dynamically:

Step 1: Implement a Language Switcher

  1. Create a Language Selector Component:

    • This component enables users to switch between the available locales:
     import { useRouter } from 'next/router';
    
     function LanguageSwitcher() {
       const router = useRouter();
       const { locale, locales, asPath } = router;
    
       const handleLocaleChange = (event) => {
         const newLocale = event.target.value;
         router.push(asPath, asPath, { locale: newLocale });
       };
    
       return (
         <select value={locale} onChange={handleLocaleChange}>
           {locales.map((loc) => (
             <option key={loc} value={loc}>{loc}</option>
           ))}
         </select>
       );
     }
    
     export default LanguageSwitcher;
    

Conclusion

Internationalization and localization are vital for reaching a global audience with your Next.js application. By leveraging Next.js's built-in i18n support, you can easily offer multi-language support that enhances user experience and accessibility.

Series Index

Part Title Link
1 Getting Started with Next.js: Setting Up Your Project Read Part 1
2 Next.js: Creating Pages and Routing Read Part 2
3 Next.js: API Routes Read Part 3
4 Next.js: Server-Side Rendering (SSR) Read Part 4
5 Next.js: Static Site Generation and ISR Read Part 5
6 Next.js: Advanced Configuration and Optimization Read Part 6
7 Next.js: Internationalization and Localization Read Part 7
8 Next.js: State Management and API Integration Read Part 8

Stay tuned for Part 8, where we will explore state management and API integration strategies in Next.js.


This guide introduces the basics of setting up internationalization and localization in a Next.js application, helping you create a multi-language website. If there's anything specific you’d like to add or another aspect of Next.js you want to explore next, just let me know!

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player