Comment implémenter l'internationalisation dans une application Next.js utilisant le Pages Router
Rendez votre application React plus accessible et atteignez de nouveaux marchés grâce à l'internationalisation (i18n).
Alors que le monde devient de plus en plus mondialisé, il est de plus en plus important pour les développeurs web de créer des applications capables de répondre aux besoins des utilisateurs de différents pays et cultures. L’un des moyens clés pour y parvenir est l’internationalisation (i18n), qui vous permet d’adapter votre application à différentes langues, devises et formats de date.
Dans ce tutoriel, nous explorerons comment ajouter l’internationalisation à votre application React Next.js, avec rendu côté serveur. TL;DR: Voir l’exemple complet ici.
Ce guide s'adresse aux applications Next.js qui utilisent le Pages Router.
Si vous utilisez le App Router, veuillez consulter ce guide à la place.
Étape 1 : Installer une bibliothèque i18n
Pour implémenter l'internationalisation dans votre application Next.js, nous allons d'abord choisir une bibliothèque i18n. Il existe plusieurs bibliothèques populaires, y compris next-intl. Cependant, dans cet exemple, nous utiliserons TacoTranslate.
TacoTranslate traduit automatiquement vos chaînes dans n'importe quelle langue en utilisant une IA de pointe, et vous libère de la gestion fastidieuse des fichiers JSON.
Installons-le en utilisant npm dans votre terminal :
npm install tacotranslate
Étape 2 : Créez un compte TacoTranslate gratuit
Maintenant que vous avez installé le module, il est temps de créer votre compte TacoTranslate, un projet de traduction, et les clés API associées. Créer un compte ici. C’est gratuit, et ne nécessite pas que vous ajoutiez une carte de crédit.
Dans l’interface utilisateur de l’application TacoTranslate, créez un projet, puis accédez à l’onglet des clés API. Créez une clé read
, et une clé read/write
. Nous les enregistrerons comme variables d’environnement. La clé read
est ce que nous appelons public
, et la clé read/write
est secret
. Par exemple, vous pourriez les ajouter dans un fichier .env
à la racine de votre projet.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Assurez-vous de ne jamais divulguer la clé API secrète read/write
dans les environnements de production côté client.
Nous ajouterons également deux autres variables d’environnement : TACOTRANSLATE_DEFAULT_LOCALE
et TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Le code de la langue par défaut en cas de repli. Dans cet exemple, nous le définirons suren
pour l'anglais.TACOTRANSLATE_ORIGIN
: Le « dossier » où vos chaînes seront stockées, comme l'URL de votre site web. En savoir plus sur les origines ici.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Étape 3 : Configuration de TacoTranslate
To integrate TacoTranslate with your application, you’ll need to create a client using the API keys from earlier. For example, create a file named /tacotranslate-client.js
.
const {default: createTacoTranslateClient} = require('tacotranslate');
const tacoTranslate = createTacoTranslateClient({
apiKey:
process.env.TACOTRANSLATE_SECRET_API_KEY ??
process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
process.env.TACOTRANSLATE_API_KEY ??
'',
projectLocale: process.env.TACOTRANSLATE_DEFAULT_LOCALE ?? '',
});
module.exports = tacoTranslate;
Nous allons définir automatiquement TACOTRANSLATE_API_KEY
sous peu.
Créer le client dans un fichier séparé facilite sa réutilisation ultérieure. Maintenant, en utilisant un /pages/_app.tsx
personnalisé, nous allons ajouter le fournisseur TacoTranslate
.
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';
type PageProperties = {
origin: Origin;
locale: Locale;
locales: Locale[];
localizations: Localizations;
};
export default function App({Component, pageProps}: AppProps<PageProperties>) {
const {origin, locale, locales, localizations} = pageProps;
return (
<TacoTranslate
client={tacoTranslate}
origin={origin}
locale={locale}
localizations={localizations}
>
<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
<Component {...pageProps} />
</TacoTranslate>
);
}
Si vous avez déjà des pageProps
et _app.tsx
personnalisés, veuillez étendre la définition avec les propriétés et le code ci-dessus.
Étape 4 : Mise en œuvre du rendu côté serveur
TacoTranslate permet le rendu côté serveur de vos traductions. Cela améliore considérablement l'expérience utilisateur en affichant immédiatement le contenu traduit, au lieu d'un flash de contenu non traduit au départ. De plus, nous pouvons éviter les requêtes réseau côté client, car nous avons déjà toutes les traductions dont nous avons besoin.
Nous commencerons par créer ou modifier /next.config.js
.
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = {};
return withTacoTranslate(config, {
client: tacoTranslateClient,
isProduction:
process.env.TACOTRANSLATE_ENV === 'production' ||
process.env.VERCEL_ENV === 'production' ||
(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
process.env.NODE_ENV === 'production'),
});
};
Modifiez la vérification isProduction
en fonction de votre configuration. Si true
, TacoTranslate affichera la clé API publique. Si nous sommes dans un environnement local, de test ou de test (isProduction
is false
), nous utiliserons le secret read/write
clé API pour nous assurer que de nouvelles chaînes sont envoyées pour traduction.
Jusqu'à présent, nous avons seulement configuré l'application Next.js avec une liste de langues prises en charge. La prochaine étape consistera à récupérer les traductions pour toutes vos pages. Pour ce faire, vous utiliserez soit getTacoTranslateStaticProps
soit getTacoTranslateServerSideProps
en fonction de vos besoins.
Ces fonctions prennent trois arguments : un objet Next.js Static Props Context, la configuration pour TacoTranslate, et des propriétés Next.js optionnelles. Notez que revalidate
sur getTacoTranslateStaticProps
est défini à 60 par défaut, afin que vos traductions restent à jour.
Pour utiliser l’une ou l’autre fonction dans une page, supposons que vous ayez un fichier de page comme /pages/hello-world.tsx
.
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';
export async function getStaticProps(context) {
return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}
export default function Page() {
return <Translate string="Hello, world!"/>;
}
Vous devriez maintenant être en mesure d'utiliser le composant Translate
pour traduire les chaînes dans tous vos composants React.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}
Étape 5 : Déployer et tester !
C’est terminé ! Votre application React sera désormais traduite automatiquement lorsque vous ajoutez des chaînes dans un composant Translate
. Notez que seuls les environnements disposant des permissions read/write
sur la clé API pourront créer de nouvelles chaînes à traduire. Nous recommandons d’avoir un environnement de préproduction fermé et sécurisé où vous pourrez tester votre application en production avec une clé API de ce type, en ajoutant de nouvelles chaînes avant la mise en ligne. Cela empêchera quiconque de voler votre clé API secrète et d’encombrer potentiellement votre projet de traduction en ajoutant de nouvelles chaînes non pertinentes.
Assurez-vous de consulter l’exemple complet sur notre profil GitHub. Vous y trouverez également un exemple montrant comment faire cela avec le App Router ! Si vous rencontrez des problèmes, n’hésitez pas à nous contacter, nous serons plus qu’heureux de vous aider.
TacoTranslate vous permet de localiser automatiquement vos applications React rapidement, dans toutes les langues et depuis toutes les langues. Commencez dès aujourd’hui !