Skip to Content

Translation

Next Built in Internalization

Next.js has built-in support for internationalized (i18n) routing since v10.0.0. You can provide a list of locales, the default locale, and domain-specific locales and Next.js will automatically handle the routing.

Next.js automatically matches the route with the actual local. example: /fr/login will be set a locale property on the Next.js router Object .

React-Intl library

Translation Package that matches the content with the locale context. Official website & docs 

This package needs to wrap around out root App component.

<IntlProvider locale={usersLocale} messages={translationsForUsersLocale}> <App /> </IntlProvider>,

Implementation and Usage

First, we declare our ‘locale’ inside a config file next-i18next.config.js that needs to be imported inside next.config.js.

next-i18next.config.js

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

Also, _app.tsx file, the root of the app, needs to be make the app contextualizing the react-Intl Provider

src/pages/_app.tsx

import en from '../utils/locales/en/common.json'; import fr from '../utils/locales/fr/common.json'; const messages = { en, fr, }; .. .. <IntlProvider locale={locale} messages={messages[locale]}> <Component {...pageProps} /> </IntlProvider> }

Now, we need to declare Messages or Translation folder: src/utils/locales/en

src / └── utils ├── locales │ ├── en │ │ └── common.json │ └── fr │ └── common.json ...

Usage:

inside common.json we create the exquivalent of ‘textOriginal’

{ "Add": "Ajouter", "Filters": "Filtres", "Home": "Accueil", .. }

Then inside project component/pages, we use the useTranslation custom hook.

import useTranslation from '@/hooks/shared/translation/useTranslation'; function component(){ const {t} = useTranslation() .. ... ( <div> <section>{t(`textOriginal`)}</section> </div> ) }

Language Selection Custom component

It is a component that renders a select component to choose the language

<LangSelector />
Last updated on