Internationalisation
Next.js vous permet de configurer le routage et le rendu du contenu pour prendre en charge plusieurs langues. Adapter votre site à différentes locales inclut du contenu traduit (localisation) et des routes internationalisées.
Terminologie
- Locale : Un identifiant pour un ensemble de préférences linguistiques et de format. Cela inclut généralement la langue préférée de l'utilisateur et éventuellement sa région géographique.
en-US
: Anglais tel que parlé aux États-Unisnl-NL
: Néerlandais tel que parlé aux Pays-Basnl
: Néerlandais, sans région spécifique
Aperçu du routage
Il est recommandé d'utiliser les préférences linguistiques du navigateur pour sélectionner la locale à utiliser. Changer votre langue préférée modifiera l'en-tête Accept-Language
envoyé à votre application.
Par exemple, en utilisant les bibliothèques suivantes, vous pouvez examiner une Request
entrante pour déterminer quelle locale sélectionner, en fonction des Headers
, des locales que vous prévoyez de supporter et de la locale par défaut.
Le routage peut être internationalisé soit par sous-chemin (/fr/products
), soit par domaine (my-site.fr/products
). Avec ces informations, vous pouvez maintenant rediriger l'utilisateur en fonction de la locale dans le Middleware.
Enfin, assurez-vous que tous les fichiers spéciaux dans app/
sont imbriqués sous app/[lang]
. Cela permet au routeur Next.js de gérer dynamiquement différentes locales dans la route et de transmettre le paramètre lang
à chaque layout et page. Par exemple :
Le layout racine peut également être imbriqué dans le nouveau dossier (par exemple app/[lang]/layout.js
).
Localisation
Changer le contenu affiché en fonction de la locale préférée de l'utilisateur, ou localisation, n'est pas spécifique à Next.js. Les modèles décrits ci-dessous fonctionneraient de la même manière avec n'importe quelle application web.
Supposons que nous voulions prendre en charge du contenu en anglais et en néerlandais dans notre application. Nous pourrions maintenir deux "dictionnaires" différents, qui sont des objets nous donnant une correspondance entre une clé et une chaîne localisée. Par exemple :
Nous pouvons ensuite créer une fonction getDictionary
pour charger les traductions pour la locale demandée :
Étant donné la langue actuellement sélectionnée, nous pouvons récupérer le dictionnaire dans un layout ou une page.
Comme tous les layouts et pages dans le répertoire app/
sont par défaut des Composants Serveur, nous n'avons pas à nous soucier de la taille des fichiers de traduction affectant la taille de notre bundle JavaScript côté client. Ce code ne s'exécutera que sur le serveur, et seul le HTML résultant sera envoyé au navigateur.
Rendu statique
Pour générer des routes statiques pour un ensemble donné de locales, nous pouvons utiliser generateStaticParams
avec n'importe quelle page ou layout. Cela peut être global, par exemple dans le layout racine :