Back to Blog

Quick guide to Next.js i18n

Blog post illustration

Internationalization or i18n is an essential aspect of web & app development, as it enables reaching a global audience by opening up our application to users who prefer content in their native language. That makes it easy to find a niche by catering to users who are overlooked by everyone who just goes with the generic approach of providing everything only in English.

Next.js

When thinking about applications the best practice currently is using Next.js - a popular React-based framework, which provides a number of technological benefits like pre-rendering, server-side rendering, code splitting, easy routing and static exports. Together that means one thing: speed, the app will work blazingly fast while also providing React-based functions.

More importantly for our use case, it provides built-in support for i18n, making it easier for developers to create apps that can be easily translated into any number of different languages.

next-i18next

There are several strategies for implementing Next.js i18n. The chosen approach will likely depend on the specific needs of the app and our own preferences. Opting for a custom solution is always possible, that said there is a widely used and popular strategy: using the next-i18next library, which provides a simple and efficient way to add i18n support to Next.js.

Installation & configuration

To get started with next-i18next, we need to install the library as a dependency in our project via a simple command (having React and Next installed is also required):

yarn add next-i18next react-i18next i18next

We also need to organize our translations. In almost every case this will be made via the /locales folder with subfolders for various languages like /en, /pl and the like. Though for those intent on keeping some other folder structure it’s quite simple to do so - all it requires is specifying the paths in localePath and localeStructure.

Next we need to create a configuration file, this file should specify what our default language is and what other languages we want to use in our project. The structure is pretty self-explanatory:

module.exports = {
    i18n: {
        defaultLocale: 'en',
        locales: ['en', 'de'],
    },
};

Once we have the configuration file, we can then use the next-i18next library to add i18n support to Next.js in our app. This also requires just a few simple additions to the Next.js config file:

const { i18n } = require('./next-i18next.config');

module.exports = {
    i18n,
};

The final step is wrapping the project with the appWithTranslation component. This provides i18next context to every page in it and should be included in the _app file like so:

import { appWithTranslation } from 'next-i18next';

const MyApp = ({ Component, pageProps }) => <Component {...pageProps} />;

export default appWithTranslation(MyApp);

With just these few simple steps, we now have a working i18n setup in our Next.js application. We can be sure the translations will be working as they should, but here comes the caveat: where do we get them from?

Yes, there’s always the option of either relying on the services of a translator or painstakingly copy-pasting everything into google translate and then back again into each and every string in our json files.

DevTranslate

But it would be a bummer to go through that setup for next-i18next just to then do the actual translations manually and waste so much time and effort on it. Fortunately, there’s DevTranslate which lets you automate the translation process by requiring just a few clicks to translate your json file into up to 26 languages while keeping the syntax and order intact. This way all you have to do is:

  • open your default language folder
  • upload the files from there to our in-browser translator
  • click play & wait a few seconds
  • download the translated files
  • put them in the corresponding subfolders for each language

With that your app is now internationalized! To sum it up implementing i18n in Next.js is a straightforward process thanks to the built-in support and the next-i18next library. On top of that DevTranslate provides an easy way to automate the translation process as well giving you a fully internationalized app with minimal effort. Your app is now open to a broader and more diverse audience and feels more tailored to the users. With how simple Nextjs i18n is if you havent done it yet means you're losing out.

postsRecommendation
What are the differences between translation and localization?

While both terms are similar, localization goes beyond just translating and ensures your product feels local and caters to the users in a particular region.

Author image
DevTranslate team
9/16/2022
A Quick Guide to App Localization - DevTranslate

Application localization is the process of adapting your application to the culture & language of each target market in which you would like to succeed.

Author image
DevTranslate team
9/18/2022
Reaching a global audience through localization

How to gain users by localizing your app and who or what to rely on for translation. Gain access to a global audience for your app by using the right tool.

Author image
DevTranslate team
10/4/2022

cta.translate

cta.description
cta.button