# General Translation Knowledge Base: Alternatives à next-intl : gt-next ou next-intl
URL: https://generaltranslation.com/fr/kb/next-intl-vs-gt-next.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: next-intl affiche les traductions que vous fournissez dans un catalogue de messages pour chaque langue. gt-next affiche lui aussi des traductions, mais General Translation les génère en plus à partir du texte intégré directement dans votre JSX. Les deux sont sous licence MIT et prennent en charge l’App Router et les Composants serveur. Si vos catalogues next-intl fonctionnent déjà, vous pouvez les conserver et confier leur traduction à General Translation, sans migration.
Category: Outils de workflow
Last updated: 2026-10-16
Authors: Jackie Chen
Published: 2026-10-16

next-intl et gt-next permettent tous deux de localiser des applications Next.js basées sur l’App Router, y compris les Composants serveur. La différence tient à l’origine des traductions : next-intl affiche les messages que votre équipe ou un service de traduction rédige dans un catalogue JSON pour chaque langue, tandis que gt-next conserve le texte source intégré dans votre JSX et General Translation génère toutes les traductions lors de la compilation.

Trois options s’offrent donc à vous : conserver next-intl et votre processus de traduction actuel ; conserver next-intl et confier la traduction de ses catalogues à General Translation, sans toucher à vos composants ; ou adopter gt-next pour écrire vos textes directement dans le code et générer automatiquement les traductions.

## Quelles sont les différences entre next-intl et gt-next ?

| Question                               | next-intl                                                                                                    | gt-next (General Translation)                                                                                                                                                      |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Traduit-il votre contenu ?             | Non. Il affiche les messages que vous fournissez, rédigés par votre équipe ou par un service tel que Crowdin | Oui. [`gt translate`](/docs/cli/reference/commands/translate) génère des traductions en tenant compte du contexte de votre code, mais votre équipe peut aussi les rédiger          |
| Où se trouve le texte source ?         | Messages à clés dans un catalogue JSON ; l&#39;extraction intégrée avec `useExtracted` est expérimentale     | JSX intégré dans [`<T>`](/docs/react/reference/components/t) et chaînes via [`useGT`](/docs/react/reference/hooks/use-gt) ; les dictionnaires à clés sont également pris en charge |
| Composants serveur ?                   | Oui, avec des API distinctes pour les composants synchrones et asynchrones                                   | Oui : [`<T>`](/docs/react/reference/components/t), [`useGT`](/docs/react/reference/hooks/use-gt) et [`getGT`](/docs/react/nextjs/reference/functions/get-gt)                       |
| Composants client ?                    | Sous `NextIntlClientProvider`                                                                                | Sous [`GTProvider`](/docs/react/reference/components/gt-provider)                                                                                                                  |
| Routage selon les paramètres régionaux | Middleware avec des routes préfixées par le paramètre régional                                               | [`createNextMiddleware`](/docs/react/nextjs/app-router-middleware) avec un segment `app/[locale]`                                                                                  |
| Formes plurielles                      | ICU MessageFormat dans chaque catalogue                                                                      | Branches [`<Plural>`](/docs/react/reference/components/plural), traduites avec le reste du bloc                                                                                    |
| Distribution des traductions           | Fichiers de catalogue intégrés au bundle de l&#39;application                                                | Fichiers intégrés au bundle, ou CDN de General Translation pour des mises à jour sans redéploiement                                                                                |
| Licence                                | MIT                                                                                                          | MIT                                                                                                                                                                                |

Sources : [configuration initiale de next-intl avec l&#39;App Router](https://next-intl.dev/docs/getting-started/app-router), [utilisation de next-intl côté serveur et côté client](https://next-intl.dev/docs/environments/server-client-components), [Démarrage rapide gt-next](/docs/react/nextjs-quickstart).

## À quoi ressemble ce même titre dans chaque bibliothèque ?

Avec le workflow de catalogue de next-intl, le message source se trouve dans un fichier JSON :

```json
{
  "Projects": {
    "heading": "Find your next project"
  }
}
```

Le composant sélectionne le message à partir de son espace de noms et de sa clé :

```tsx
import { useTranslations } from 'next-intl';

export default function ProjectHeading() {
  const t = useTranslations('Projects');
  return <h1>{t('heading')}</h1>;
}
```

Avec gt-next, la même phrase reste directement dans le composant :

```tsx
import { T } from 'gt-next';

export default function ProjectHeading() {
  return (
    <T>
      <h1>Find your next project</h1>
    </T>
  );
}
```

Les deux extraits partent du principe que le fournisseur et la configuration de chaque bibliothèque sont déjà en place. Consultez le [guide de configuration initiale de next-intl](https://next-intl.dev/docs/getting-started/app-router) et la [référence de `<T>`](/docs/react/reference/components/t).

Un catalogue permet aux relecteurs de lire les textes indépendamment du code. Avec des textes intégrés, les relecteurs voient chaque phrase dans le JSX auquel elle appartient, et General Translation peut la traduire en s’appuyant sur cette structure comme contexte. Pour les formulations qui restent ambiguës, le [`<T>` de gt-next accepte une prop `context`](/docs/react/reference/components/t#context), et l’[extraction expérimentale de next-intl prend en charge les descriptions de messages](https://next-intl.dev/docs/usage/extraction#descriptions).

L’API expérimentale [`useExtracted`](https://next-intl.dev/docs/usage/extraction) de next-intl permet également d’écrire des messages intégrés et de les extraire dans des catalogues. L’extraction change la façon de rédiger les textes, mais elle ne traduit pas les catalogues extraits : ceux-ci doivent toujours être traduits par votre équipe ou par un prestataire.

## Peut-on utiliser General Translation sans abandonner next-intl ?

Oui. La CLI `gt` détecte next-intl à partir de votre `package.json` et [traduit ses catalogues JSON](/docs/cli/guides/generating-translations) en préservant la syntaxe des messages de next-intl. Vos composants, vos appels de traduction et votre routage restent inchangés.

Pour l&#39;essayer, faites pointer `gt.config.json` vers vos catalogues source et cibles, importez vos traductions existantes, puis traduisez un nouveau paramètre régional. Les relecteurs peuvent corriger le résultat dans l&#39;[Éditeur de Traduction du tableau de bord](/docs/platform/dashboard/guides/reviewing-translations). S&#39;ils modifient plutôt les catalogues téléchargés directement dans votre dépôt, exécutez [`gt save-local`](/docs/cli/reference/commands/save-local) avant la prochaine exécution de traduction pour que ces modifications soient conservées.

Si vous passez ensuite à gt-next, le [guide de migration](/docs/react/guides/migrating-i18n-libraries) explique comment importer les traductions relues, conserver vos dictionnaires et faire cohabiter les deux bibliothèques pendant que vous migrez une route à la fois.

## Comment chaque bibliothèque gère-t-elle les Composants Serveur et Client ?

Aucune des deux bibliothèques n&#39;oblige à transformer une page App Router en composant client pour la localiser. La différence tient à l&#39;API à appeler dans chaque environnement.

| Composant                    | next-intl                                                                                                                                                                  | gt-next                                                                                                                                                        |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Composant Serveur synchrone  | [`useTranslations`](https://next-intl.dev/docs/environments/server-client-components#using-internationalization-in-server-components), avec la configuration de la requête | [`<T>`](/docs/react/reference/components/t) pour le JSX ; [`useGT`](/docs/react/reference/hooks/use-gt) pour les chaînes                                       |
| Composant Serveur asynchrone | Attendre (`await`) [`getTranslations`](https://next-intl.dev/docs/environments/server-client-components#async-components) depuis `next-intl/server`                        | Attendre (`await`) [`getGT`](/docs/react/nextjs/reference/functions/get-gt) depuis `gt-next/server`, puis appeler la fonction renvoyée                         |
| Composant client             | [`useTranslations`](https://next-intl.dev/docs/environments/server-client-components#using-internationalization-in-client-components) dans `NextIntlClientProvider`        | [`<T>`](/docs/react/reference/components/t) ou [`useGT`](/docs/react/reference/hooks/use-gt) dans [`GTProvider`](/docs/react/reference/components/gt-provider) |

Dans les deux bibliothèques, gardez les contrôles interactifs dans des composants client et traduisez le reste de la page côté serveur. next-intl permet également de [transmettre des libellés déjà traduits](https://next-intl.dev/docs/environments/server-client-components#option-1-passing-translated-labels-to-client-components) d&#39;un Composant Serveur à un contrôle client, pour éviter que le client ne reçoive l&#39;intégralité du catalogue.

## Comment les traductions gt-next sont-elles livrées en production ?

gt-next propose deux options de livraison :

* **Intégrer les traductions au bundle de l&#39;application** à l&#39;aide d&#39;un [loader local](/docs/react/guides/storing-translations). En production, l&#39;application lit ses propres fichiers de traduction et n&#39;effectue aucun appel à General Translation à l&#39;exécution. Les mises à jour sont livrées avec la compilation suivante.
* **Charger les traductions depuis le CDN de General Translation** à l&#39;aide de la [configuration de livraison distante](/docs/react/nextjs/config). Les modifications publiées sont répercutées sur l&#39;application déployée sans nouvelle compilation, selon ses paramètres de version et de cache.

gt-next est [sous licence MIT](https://github.com/generaltranslation/gt) et affiche les traductions intégrées au bundle sans nécessiter de compte General Translation, tout comme next-intl affiche ses catalogues.

## Quelles équipes utilisent gt-next en production ?

General Translation est utilisé par les équipes de développement de Cursor, Ramp, Profound, Cognition, Sierra et ClickHouse. Profound localise avec General Translation son produit principal, une application Next.js reposant sur l&#39;App Router. Découvrez nos [déploiements en production](https://generaltranslation.com/enterprise).

## Quand choisir next-intl ou gt-next ?

**Conservez next-intl** si son modèle de catalogue convient à votre application et que votre processus de traduction fonctionne déjà. Si la gestion répétitive des clés est votre principal reproche, essayez son extraction expérimentale avant de migrer.

**Conservez next-intl et ajoutez General Translation** si c&#39;est la production des traductions qui vous ralentit. La CLI `gt` traduit vos catalogues existants : vos composants, vos appels et votre routage restent inchangés.

**Choisissez gt-next** si vous souhaitez intégrer vos textes directement dans votre JSX et générer les traductions à chaque compilation. Testez-le sur une route qui utilise à la fois des Composants Serveur et Client, des formes plurielles, du texte enrichi et des métadonnées. Conservez les URL par paramètre régional et les traductions existantes de cette route jusqu&#39;à ce que leurs remplaçants soient prêts, et vérifiez une compilation de production avant de migrer d&#39;autres routes.

Pour commencer, suivez le [Démarrage rapide Next.js App Router](/docs/react/nextjs-quickstart). Pour comparer d&#39;autres bibliothèques, consultez [General Translation vs. i18next, react-intl et next-intl](/kb/general-translation-vs-i18n-libraries).

## Questions fréquentes

### next-intl traduit-il mon contenu ?

Non. next-intl affiche et formate les messages de vos catalogues. Les traductions sont fournies par votre équipe, des traducteurs ou un service comme [Crowdin](https://next-intl.dev/docs/workflows/localization-management). General Translation peut également traduire les catalogues next-intl, sans nécessiter de migration.

### Puis-je utiliser General Translation avec next-intl ?

Oui. La CLI `gt` traduit les catalogues JSON de next-intl en conservant leur syntaxe de messages : vous gardez donc vos composants et votre routage. Consultez [Générer des traductions](/docs/cli/guides/generating-translations).

### gt-next est-il gratuit et open source ?

Oui. gt-next est distribué sous licence MIT et affiche les traductions incluses dans le bundle sans nécessiter de compte. Pour générer des traductions avec le service hébergé de General Translation, consultez la page des [tarifs](https://generaltranslation.com/pricing).

### gt-next prend-il en charge les composants serveur de React ?

Oui. Utilisez [`<T>`](/docs/react/reference/components/t) et [`useGT`](/docs/react/reference/hooks/use-gt) dans les Composants Serveur synchrones, et [`getGT`](/docs/react/nextjs/reference/functions/get-gt) dans les Composants Serveur asynchrones.

### Puis-je migrer de next-intl vers gt-next route par route ?

Oui. Le [guide de migration](/docs/react/guides/migrating-i18n-libraries) explique comment faire cohabiter les deux bibliothèques, importer vos traductions existantes et conserver des dictionnaires à clés là où vous le souhaitez.

## Autres alternatives à next-intl

Pour les applications Next.js, les équipes comparent également ces bibliothèques :

* **i18next :** génère le rendu de catalogues de messages indexés par clé, avec gestion du pluriel. Associé à react-i18next et next-i18next, c&#39;est un choix courant pour les applications React et Next.js. (Voir [General Translation vs. i18next](/kb/general-translation-vs-i18next).)
* **react-intl :** met en forme les messages ICU et propose un guide pour l&#39;App Router de Next.js. (Voir [General Translation vs. react-intl](/kb/general-translation-vs-react-intl).)
* **Paraglide JS :** compile les catalogues en fonctions de message typées et tree-shakable, et dispose d&#39;une intégration Next.js pour les compilations webpack. (Voir [General Translation vs. Paraglide JS](/kb/general-translation-vs-paraglide).)

## Points clés

* next-intl et gt-next prennent tous deux en charge l&#39;App Router, les Composants Serveur et le routage selon les paramètres régionaux, et tous deux sont distribués sous licence MIT.
* next-intl affiche les traductions que vous fournissez. gt-next les affiche également, mais General Translation les génère aussi à partir du JSX intégré, en s&#39;appuyant sur votre code comme contexte.
* Inutile de migrer pour utiliser General Translation : la CLI `gt` traduit directement vos catalogues next-intl existants.
* Si vous choisissez de migrer, procédez route par route et continuez à charger les traductions existantes jusqu&#39;à ce que leurs remplaçantes soient prêtes.

## Related questions

- [General Translation vs i18next, react-intl et next-intl : quelle bibliothèque d’i18n choisir ?](https://generaltranslation.com/fr/kb/general-translation-vs-i18n-libraries.mdx): Les bibliothèques open source comme i18next, react-intl et next-intl ne traduisent rien. Elles affichent les traductions que vous leur fournissez dans un fichier de catalogue par langue, rédigées par vous, vos traducteurs ou un service tiers. Les bibliothèques de General Translation sont elles aussi open source et remplissent le même rôle, mais General Translation se charge en plus de la traduction, en s’appuyant sur votre code comme contexte.
- [Comment configurer le SEO d’une application Next.js multilingue ?](https://generaltranslation.com/fr/kb/multilingual-nextjs-seo.mdx): Attribuez à chaque langue sa propre URL, définissez l’attribut lang de la balise html, faites pointer l’URL canonique de chaque page vers elle-même, ajoutez des variantes localisées hreflang pour chaque langue, traduisez les titres et les descriptions, et listez toutes les versions linguistiques dans votre sitemap.
- [Peut-on faire de l’i18n sans fichiers de traduction ?](https://generaltranslation.com/fr/kb/i18n-without-translation-files.mdx): Oui. Avec gt-react ou gt-next, le contenu reste intégré dans vos composants, à l’intérieur d’un composant `<T>`, et les traductions sont générées lors du build. Il n’y a donc ni clés ni fichiers JSON par paramètre régional à écrire et à garder synchronisés.
- [Comment gérer les formes plurielles dans React ?](https://generaltranslation.com/fr/kb/how-to-handle-plurals-in-react.mdx): Ne codez pas en dur la logique de pluralisation avec des tests comme n === 1. Un petit utilitaire suffit pour une application uniquement en anglais, mais une application multilingue a besoin de règles de pluriel adaptées au paramètre régional, que prend en charge pour chaque langue un composant i18n tel que `<Plural>` de gt-react ou gt-next.

## Previous and next questions

- Previous question: [Alternatives à Lokalise : General Translation ou Lokalise](https://generaltranslation.com/fr/kb/general-translation-vs-lokalise.mdx)
- Next question: [Alternatives à Phrase : General Translation ou Phrase](https://generaltranslation.com/fr/kb/general-translation-vs-phrase.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/fr/kb/sitemap.md) for every article.
