Skip to content Skip to sidebar Skip to footer

Widget HTML #1

Building a Full-stack Multilingual Blog with Next.js 13.4

In the ever-evolving world of web development, creating a full-stack multilingual blog that caters to users from diverse linguistic backgrounds is a valuable skill. In this tutorial, we will explore how to build a cutting-edge multilingual blog using Next.js 13.4, a powerful React framework that enables seamless server-side rendering and efficient client-side routing. This tutorial assumes you have basic knowledge of JavaScript, React, and Node.js.

Why Next.js 13.4?

Next.js 13.4, as of the time of writing, is the latest version of this popular framework, packed with new features and enhancements. Its excellent support for internationalization (i18n) and optimized static site generation make it an ideal choice for building multilingual blogs. The i18n support allows us to efficiently manage content in multiple languages, providing a more personalized experience to our global audience.

Setting up the Project

To get started, make sure you have Node.js and npm installed on your system. Create a new Next.js project with the following command:

npx create-next-app multilingual-blog cd multilingual-blog

Directory Structure

Next.js follows a convention-based approach for the directory structure. We'll need to create specific folders to organize our code better:

- pages/ - index.js - about.js - [slug].js - public/ - static files (images, etc.) - components/ - Header.js - Post.js - ... - locales/ - en.js - fr.js - ...

Implementing i18n Support

Next.js provides built-in i18n support using the "next-translate" package. To set up multilingual capabilities, install the package:

npm install next-translate

In your project's next.config.js file, add the following code:

const { nextTranslate } = require('next-translate'); module.exports = { ...nextTranslate(), };

Create a locales folder inside the project's root directory. Each language file (e.g., en.js, fr.js) will contain key-value pairs for the translated text. For instance, the en.js file:

export default { welcome: 'Welcome to our blog!', about: 'About Us', readMore: 'Read More', // ... other translations };

Similarly, create other language files (e.g., fr.js for French) in the locales folder.

Creating the Blog Pages

Now, let's create the blog pages in the pages/ directory. For instance, we can have an index.js, about.js, and [slug].js, where [slug] represents the dynamic route for individual blog posts.

  1. pages/index.js - The home page of the blog, which will display a list of recent blog posts.
import React from 'react'; import useTranslation from 'next-translate/useTranslation'; import Header from '../components/Header'; import Post from '../components/Post'; const HomePage = () => { const { t } = useTranslation('common'); return ( <div> <Header /> <h1>{t('welcome')}</h1> {/* Display recent blog posts */} </div> ); }; export default HomePage;
  1. pages/about.js - The about page, which will provide information about the blog or the authors.
import React from 'react'; import useTranslation from 'next-translate/useTranslation'; import Header from '../components/Header'; const AboutPage = () => { const { t } = useTranslation('common'); return ( <div> <Header /> <h1>{t('about')}</h1> {/* About content */} </div> ); }; export default AboutPage;
  1. pages/[slug].js - The individual blog post page that will display the detailed content of each post.
import React from 'react'; import { useRouter } from 'next/router'; import useTranslation from 'next-translate/useTranslation'; import Header from '../components/Header'; const PostPage = () => { const router = useRouter(); const { t } = useTranslation('common'); const { slug } = router.query; return ( <div> <Header /> <h1>{t('postTitle', { slug })}</h1> {/* Display blog post content */} </div> ); }; export default PostPage;

Implementing the Header Component

Next, let's create the Header.js component in the components/ folder. The Header component will include navigation links to the home page and the about page, as well as a language selector to switch between available languages.

import React from 'react'; import Link from 'next/link'; import useTranslation from 'next-translate/useTranslation'; const Header = () => { const { t } = useTranslation(); return ( <header> <nav> <Link href="/"> <a>{t('home')}</a> </Link> <Link href="/about"> <a>{t('about')}</a> </Link> </nav> <div> <button>{t('en')}</button> <button>{t('fr')}</button> {/* Implement language switching */} </div> </header> ); }; export default Header;

This component uses the useTranslation() hook from next-translate to access the translations based on the selected language.


In this tutorial, we explored the process of building a full-stack multilingual blog with Next.js 13.4. We covered setting up the project, enabling i18n support, creating the required pages, and implementing the Header component with a language selector. With this foundation, you can further enhance your blog by adding features such as comment sections, user authentication, and more.

Remember, the key to building a successful multilingual blog is to cater to the diverse needs of your audience and provide content that resonates with them. Happy coding!

Learn More