# gt-next: General Translation Next.js SDK: Génération de site statique
URL: https://generaltranslation.com/fr/docs/next/guides/ssg.mdx
---
title: Génération de site statique
description: Préaffichez les pages internationalisées au build pour des performances optimales
---
## Vue d’ensemble
La génération de site statique (SSG) prégénère les pages au build en créant des fichiers HTML statiques qui peuvent être servis directement, sans traitement côté serveur.
Combinée à l’internationalisation, la SSG génère des versions prérendues pour chaque paramètre régional.
**Soyez attentif aux problèmes suivants lors de la configuration de la SSG :**
* [Compatibilité des versions de Next.js](#nextjs-version-compatibility)
* [Les pages ne sont pas générées statiquement](#pages-not-generating-statically)
* [Erreur d’exécution en production : "DYNAMIC_SERVER_USAGE"](#production-runtime-error-dynamic_server_usage)
* ["Le paramètre régional exporté n’existe pas dans le module cible"](#export-locale-doesnt-exist-in-target-module)
* [Les routes d’image de métadonnées (images OG) échouent avec `getLocale()`](#metadata-image-routes-og-images-fail-with-getlocale)
***
## Configuration
### Prérequis de configuration
Pour activer le SSG avec GT, il vous faut :
1. **App Router avec routage via middleware** - voir le [guide du middleware](/docs/next/guides/middleware)
2. **Fonction `getLocale` personnalisée** - pour détecter le paramètre régional pendant le rendu statique
3. **Désactiver `getRegion`** - la détection de région n’est pas prise en charge pendant le rendu statique
4. **Fonction `generateStaticParams`** - pour générer des paramètres statiques pour chaque paramètre régional
5. **Fichiers de layout dans le répertoire `/[locale]`** - tous les fichiers de layout (généralement `layout.tsx` et `page.tsx`) doivent se trouver sous le répertoire `/[locale]`
### Étape 1 : Configurer le middleware
Configurez le middleware pour les requêtes dynamiques (voir le [guide sur le middleware](/docs/next/guides/middleware)) :
```ts
// proxy.ts (Next.js 16+) ou middleware.ts (Next.js 15 et inférieur)
import { createNextMiddleware } from 'gt-next/middleware';
export default createNextMiddleware();
export const config = {
matcher: ['/((?!api|static|.*\\..*|_next).*)'],
};
```
### Étape 2 : Définir la détection du paramètre régional et de la région
Créez les fonctions `getLocale` et `getRegion` pour détecter le paramètre régional et la région lors du rendu statique :
#### Next.js 15.5+
```ts
// getLocale.ts
import { locale } from 'next/root-params';
export default async function getLocale() {
return await locale();
}
```
#### Next.js 15.1-15.4
```ts
// getLocale.ts
import { unstable_rootParams } from 'next/server';
export default async function getLocale() {
return (await unstable_rootParams())?.locale;
}
```
### Étape 3 : Désactiver getRegion
Comme la détection de région n'est pas prise en charge lors du rendu statique, vous devez redéfinir la fonction `getRegion` pour qu'elle renvoie une région fixe.
```ts
// getRegion.ts
export default async function getRegion() {
return undefined;
}
```
### Étape 4 : Configurer generateStaticParams
Assurez-vous que [`generateStaticParams`](https://nextjs.org/docs/app/api-reference/functions/generate-static-params) est bien configuré pour vos paramètres régionaux.
```tsx title="page.tsx"
import { getLocales } from 'gt-next/server';
export async function generateStaticParams() {
return getLocales().map((locale) => ({ locale }));
}
export default async function Page() {
...
}
```
### Étape 5 : Déplacez tous les fichiers `layout` dans le répertoire `/[locale]`
Tous les fichiers doivent avoir accès au paramètre régional de l'utilisateur via le segment `/[locale]` dans l'URL.
Ils doivent donc se trouver sous le répertoire `/[locale]`.
Assurez-vous de déplacer votre fichier `layout` racine vers `/[locale]/layout.tsx`.
***
## Configuration supplémentaire
Si vous ne souhaitez pas placer `getLocale.ts` et `getRegion.ts` à la racine de votre projet, vous pouvez spécifier un répertoire personnalisé dans votre fichier `next.config.js`.
```js
// next.config.js
export default withGTConfig(nextConfig, {
getLocalePath: './src/i18n/getLocale.ts',
getRegionPath: './src/i18n/getRegion.ts',
});
```
## Problèmes courants [#common-issues]
### Compatibilité des versions de Next.js
Pour les versions antérieures à Next.js 15.1, il n’est pas possible d’accéder aux paramètres du chemin de l’URL lors de la génération statique. Vous devrez passer à Next.js 15.1 ou une version ultérieure pour utiliser SSG avec gt-next.
### Pages non générées statiquement
Si vos pages ne sont pas générées statiquement, assurez-vous que :
* vos fonctions `getLocale` et `getRegion` sont correctement configurées
### Erreur d’exécution en production : "DYNAMIC_SERVER_USAGE"
```
⨯ [Error: An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.] {
digest: 'DYNAMIC_SERVER_USAGE'
}
```
Cette erreur se produit lorsque les fichiers `getLocale` ou `getRegion` n'existent pas ou ne sont pas correctement configurés.
Vérifiez bien que [l’étape 2](#step-2-define-locale-and-region-detection) et [l’étape 3](#step-3-disable-getregion) sont bien terminées.
### "Le paramètre régional exporté n’existe pas dans le module cible"
```
./getLocale.ts:2:1
Export locale doesn't exist in target module
1 | // getLocale.ts
> 2 | import { locale } from 'next/root-params';
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3 | export default async function getLocale() {
4 | return await locale();
5 | }
```
Cette erreur se produit généralement lorsqu’un fichier `layout.tsx`, `page.tsx`, etc. ne se trouve pas dans le répertoire `/[locale]`.
Pour corriger ce problème, assurez-vous que tous vos fichiers de segments de route (généralement `layout.tsx` et `page.tsx`) se trouvent sous le répertoire `/[locale]`.
En SSG, le seul moyen de résoudre le paramètre régional d’un utilisateur est de passer par le chemin de l’URL.
Donc, si on essaie d’exécuter un fichier `layout.tsx` en dehors du répertoire `/[locale]`, une erreur se produira, car il n’a pas accès à ce paramètre racine.
Ce qui est peu intuitif, c’est que lorsqu’une page est rendue, tous les fichiers `layout.tsx` qui l’encapsulent le sont aussi.
Vous pouvez donc avoir ajouté la SSG à un fichier `page.tsx` bien situé dans le répertoire `/[locale]`, alors qu’en réalité, l’erreur vient d’un fichier `layout.tsx` situé ailleurs.
Nous déconseillons fortement cette pratique.
Tous les fichiers de segments de route (à l’exception de `not-found.tsx`) doivent se trouver dans le répertoire `/[locale]` lorsque vous utilisez la SSG.
Mais si vous y êtes contraint, vous aurez besoin de deux fichiers de layout racine distincts : un dans le répertoire `/[locale]` et un autre en dehors.
Ainsi, la SSG n’exécutera que le layout situé dans le répertoire `/[locale]`.
De plus, vous devrez peut-être modifier le middleware pour router vers les segments qui existent en dehors du répertoire `/[locale]`, en contournant le middleware de localisation.
### Les routes d’images de métadonnées (images OG) échouent avec `getLocale()`
```
Error: Route /[locale]/.../opengraph-image used
import('next/root-params').locale() inside a Route Handler.
```
Les routes d’images de métadonnées Next.js (`opengraph-image.tsx`, `twitter-image.tsx`) sont en réalité des gestionnaires de route en interne, et `next/root-params` n’est pas pris en charge dans les gestionnaires de route.
Cela signifie que `getLocale()`, `getMessages()` et `getGT()` échoueront dans ces contextes.
**Correctif :** utilisez `registerLocale()` pour définir explicitement le paramètre régional au début du gestionnaire :
```tsx title="app/[locale]/opengraph-image.tsx"
import { ImageResponse } from 'next/og';
import { registerLocale, getMessages, msg } from 'gt-next/server';
const HEADING = msg('Welcome to our site');
export default async function OGImage({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
registerLocale(locale);
const m = await getMessages();
return new ImageResponse(
(
{m(HEADING)}
),
{ width: 1200, height: 630 }
);
}
```
Cela s’applique également à `twitter-image.tsx` et à toutes les autres routes d’images de métadonnées.
***
## Pour aller plus loin
**Voyez-le en action :** Consultez l’[application d’exemple Static Site Generation](https://github.com/gt-examples/static-site-generation) pour une démonstration fonctionnelle — [aperçu en direct](https://static-site-generation.generaltranslation.dev).
* Consultez le [Guide du middleware](/docs/next/guides/middleware), nécessaire au routage par paramètre régional
* Consultez les [notes de version](/devlog/gt-next_v6_10_0) pour migrer depuis l’ancien modèle SSG
* Consultez un exemple d’application dans le monorepo [ici](https://github.com/generaltranslation/gt/tree/main/examples/next-ssg)