# General Translation Knowledge Base: General Translation ou Intlayer : lequel choisir ?
URL: https://generaltranslation.com/fr/kb/general-translation-vs-intlayer.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Intlayer conserve le contenu de chaque composant dans un fichier de déclaration typé placé juste à côté, où toutes les langues sont écrites côte à côte, et peut compléter les langues manquantes grâce à un fournisseur d’IA que vous configurez. General Translation conserve les textes directement intégrés dans vos composants, dans une seule langue, et génère les autres langues en s’appuyant sur le contexte de votre code.
Category: Internationalisation
Last updated: 2026-10-16
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-16

Intlayer est une [bibliothèque d’i18n open source](https://github.com/aymericzip/intlayer) qui place le contenu dans un fichier de déclaration situé à côté de chaque composant, par exemple `inbox.content.ts`, où chaque chaîne de caractères regroupe ses traductions dans un unique appel `t({ en, es, pl })`. Un hook comme `useIntlayer('inbox')` renvoie ce contenu, typé, dans le paramètre régional courant. Intlayer complète les langues manquantes grâce à un fournisseur d’IA que vous configurez, et propose un éditeur visuel gratuit ainsi qu’un CMS hébergé facultatif. Mais chaque langue de chaque chaîne reste stockée dans vos fichiers sources : c’est à vous de la rédiger, de la compléter et de la relire. General Translation adopte l’approche inverse : vous rédigez vos textes une seule fois, directement dans le code, dans la langue source, et General Translation génère les autres langues en s’appuyant sur le contexte de votre code.

## Les points forts d’Intlayer

* **Le contenu à côté du composant.** Un fichier de déclaration par composant garde le texte au plus près du code qui l’affiche.
* **Sûreté du typage.** Les clés de `useIntlayer` sont typées : dans la version 9.7.0, `useIntlayer('inbx')` provoque une erreur TypeScript. Un appel `t()` auquel il manque l’un de vos paramètres régionaux configurés est également signalé (une erreur de type lors d’un test sur la 9.7.0, `strictMode` déterminant la sévérité de la vérification) : les oubli sont donc repérés avant la mise en production.
* **Types de contenu riches.** Outre le texte par paramètre régional, les déclarations prennent en charge les [formes plurielles par catégorie CLDR](https://intlayer.org/doc/concept/content/plural) (`plural({ one, few, many, other })`), les énumérations, les conditions, le genre, le Markdown, le HTML, l’imbrication et l’insertion.
* **Le modèle de votre choix.** `intlayer fill` traduit les paramètres régionaux manquants avec OpenAI, Anthropic, Mistral, Gemini, DeepSeek, Ollama, OpenRouter et d’autres fournisseurs, à configurer sous [`ai` dans `intlayer.config.ts`](https://intlayer.org/doc/concept/configuration) ou via `--provider` et `--api-key`. Avec votre propre clé et le paquet `@intlayer/ai` installé, [la commande s’exécute localement](https://intlayer.org/doc/concept/cli/fill) et vous payez directement le fournisseur.
* **Édition visuelle.** Le paquet `intlayer-editor` charge votre application en cours d’exécution dans un éditeur où les rédacteurs sélectionnent et modifient le texte, puis reporte les modifications dans vos fichiers de déclaration. [Selon la documentation d’Intlayer](https://intlayer.org/doc/concept/editor), l’éditeur est sous licence Apache 2.0, gratuit pour un usage commercial et destiné au développement et à la préproduction.
* **Large couverture de frameworks.** Des [guides](https://intlayer.org/doc/get-started) couvrent Next.js, React avec Vite, React Router, TanStack Start, React Native, Vue et Nuxt, Svelte et SvelteKit, Solid, Preact, Astro, Angular, ainsi que des frameworks serveur comme Express, NestJS, Fastify et Hono.

## Ce qu&#39;Intlayer vous laisse à faire

Voici le fichier de contenu d&#39;une boîte de réception avec trois paramètres régionaux :

```ts title="inbox.content.ts"
import { t, plural, type Dictionary } from 'intlayer';

const inboxContent = {
  key: 'inbox',
  content: {
    title: t({
      en: 'Inbox',
      es: 'Bandeja de entrada',
      pl: 'Skrzynka odbiorcza',
    }),
    unread: t({
      en: plural({
        one: 'You have {{count}} unread message.',
        other: 'You have {{count}} unread messages.',
      }),
      es: plural({
        one: 'Tienes {{count}} mensaje sin leer.',
        other: 'Tienes {{count}} mensajes sin leer.',
      }),
      pl: plural({
        one: 'Masz {{count}} nieprzeczytaną wiadomość.',
        few: 'Masz {{count}} nieprzeczytane wiadomości.',
        many: 'Masz {{count}} nieprzeczytanych wiadomości.',
        other: 'Masz {{count}} nieprzeczytanej wiadomości.',
      }),
    }),
  },
} satisfies Dictionary;

export default inboxContent;
```

```tsx title="Inbox.tsx"
import { useIntlayer } from 'react-intlayer';

export function Inbox({ count }: { count: number }) {
  const { title, unread } = useIntlayer('inbox');
  return (
    <section>
      <h1>{title}</h1>
      <p>{unread({ count })}</p>
    </section>
  );
}
```

Le rendu est correct dans chaque paramètre régional, mais le fichier s&#39;allonge à chaque paramètre régional ajouté : avec 20 paramètres régionaux, chaque chaîne de caractères comporte 20 entrées. Et toute nouvelle chaîne doit, elle aussi, toutes les fournir. L&#39;ajout de `archive: t({ en: 'Archive' })` a déclenché une erreur de type indiquant les paramètres régionaux encore manquants :

```text title="Output"
Type '{ en: string; }' is missing the following properties from type
'Required<Record<keyof __RequiredLocalesRegistry, unknown>>': es, pl
```

À l’exécution, les paramètres régionaux manquants se rabattaient sur l’anglais. Pour combler ce manque, vous rédigez les traductions vous-même ou lancez `intlayer fill`. Fill transmet au modèle le contenu du dictionnaire, [sa description](https://intlayer.org/doc/concept/content) et une chaîne de caractères `applicationContext` tirée de votre configuration. Il ne voit ni le composant ni le JSX qui entoure une chaîne de caractères. [Le compilateur d&#39;Intlayer](https://intlayer.org/doc/compiler) peut extraire le texte JSX brut vers des fichiers de contenu lors du build, ce qui vous dispense d’écrire les déclarations à la main, mais les traductions aboutissent malgré tout dans ces fichiers.

## General Translation ne garde qu&#39;une seule langue dans le code

Les bibliothèques de General Translation affichent les traductions de la même manière : elles sélectionnent les messages de chaque paramètre régional et appliquent ses règles de pluriel. La différence, c&#39;est que seule la langue source figure dans vos composants. Voici la même boîte de réception avec `gt-react` :

```tsx title="Inbox.tsx"
import { T, Plural, Num } from 'gt-react';

export function Inbox({ count }: { count: number }) {
  return (
    <T>
      <section>
        <h1>Inbox</h1>
        <Plural
          n={count}
          singular={<p>You have <Num>{count}</Num> unread message.</p>}
          plural={<p>You have <Num>{count}</Num> unread messages.</p>}
        />
      </section>
    </T>
  );
}
```

Il n&#39;y a ni fichier de contenu ni clé. [`npx gt translate`](/docs/cli/reference/commands/translate) envoie chaque bloc [`<T>`](/docs/react/reference/components/t), avec sa structure d&#39;éléments, à l&#39;API de General Translation et écrit les traductions de chaque locale cible dans des fichiers distincts. Ajouter un paramètre régional revient donc à modifier `gt.config.json`, et non vos composants. Vous écrivez les formes du pluriel propres à l&#39;anglais, la traduction génère celles dont chaque langue cible a besoin, et [`<Plural>`](/docs/react/reference/components/plural) sélectionne la branche traduite selon les règles du paramètre régional du lecteur. [`npx gt validate`](/docs/cli/reference/commands/validate) vérifie le projet sans appeler l&#39;API, et [`gt generate`](/docs/cli/reference/commands/generate) génère des modèles pour les équipes qui traduisent manuellement.

C&#39;est le contexte qui fait la différence. General Translation traduit ensemble le texte et la structure JSX de chaque bloc marqué, en s&#39;appuyant sur des notes de développeur qui en précisent le sens. Un bouton « Save » pour un document se traduit par « speichern » en allemand ; une offre permettant d&#39;économiser de l&#39;argent, par « sparen ». Les [groupes de contexte](/docs/platform/dashboard/guides/defining-context-for-translations) appliquent votre glossaire et vos instructions personnalisées aux projets que vous leur assignez. Les relecteurs modifient les traductions dans le tableau de bord, tandis que la CLI ou [Locadex](/docs/platform/locadex/quickstart) gère les mises à jour au fil de l&#39;évolution du code. Les équipes qui souhaitent baliser automatiquement le JSX existant peuvent activer l&#39;[injection automatique de JSX](/docs/cli/guides/using-auto-jsx).

Les bibliothèques JavaScript sont sous licence MIT et peuvent afficher les traductions fournies sans nécessiter de compte. Conservez les traductions dans votre compilation, ou publiez-les sur le CDN de General Translation.

Cursor utilise General Translation pour plus de 14 paramètres régionaux sur son site web et sa documentation. (Voir les [déploiements en production](https://generaltranslation.com/enterprise).)

## Intlayer et General Translation en un coup d’œil

| Fonctionnalité                 | Intlayer                                                                                                                                                                                     | General Translation                                                                                                                      |
| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Rédaction des textes           | `t({ en, es, ... })` dans un fichier de déclaration par composant, lu avec `useIntlayer`                                                                                                     | JSX dans [`<T>`](/docs/react/reference/components/t), chaînes via [`useGT`](/docs/react/reference/hooks/use-gt), ou dictionnaires à clés |
| Emplacement des traductions    | Dans les fichiers de déclaration, ou dans des fichiers de contenu par paramètre régional                                                                                                     | Fichiers distincts par paramètre régional, ou CDN de General Translation                                                                 |
| Traduction par IA              | `intlayer fill` avec la clé de votre fournisseur, ou via le service d’Intlayer                                                                                                               | [`npx gt translate`](/docs/cli/reference/commands/translate) via l’API de General Translation                                            |
| Contexte fourni au modèle      | Contenu du dictionnaire, description et chaîne de caractères décrivant le contexte de l’application                                                                                          | Structure JSX balisée, notes de développeur, glossaire et instructions personnalisées assignés                                           |
| Paramètres régionaux manquants | Signalés sous forme d’erreur de type lors d’un test en 9.7.0 ; [`intlayer test`](https://intlayer.org/doc/concept/cli/test) les répertorie                                                   | Générés par [`npx gt translate`](/docs/cli/reference/commands/translate) ; le contenu non traduit s’affiche dans la langue source        |
| Édition                        | Éditeur visuel local gratuit ; CMS hébergé facultatif                                                                                                                                        | Édition et relecture des traductions dans le tableau de bord                                                                             |
| Frameworks                     | React, Next.js, Vue, Svelte, Solid, Angular, Astro, React Native et serveurs Node.js                                                                                                         | React, Next.js, Vue, Node.js et [autres SDK](/docs/overview/get-started)                                                                 |
| Licence et coût                | Apache 2.0 ; le prix des offres du CMS hébergé varie selon le nombre de projets et de sièges et l’espace de stockage ([tarifs](https://app.intlayer.org/pricing), consultés en octobre 2026) | Bibliothèques JavaScript sous licence MIT ; [traduction facturée à l’usage](https://generaltranslation.com/pricing)                      |

Choisissez Intlayer si vous voulez voir toutes les langues à côté du composant, obtenir des erreurs de type pour les paramètres régionaux manquants, proposer aux rédacteurs un éditeur directement sur la page, ou utiliser son intégration Svelte, Solid ou Angular. Optez pour General Translation si vous préférez rédiger vos textes une seule fois dans la langue source et laisser générer toutes les autres langues à partir du contexte de votre code, de votre glossaire et de vos instructions personnalisées.

## Passer d&#39;Intlayer à General Translation

Migrez un composant à la fois, en continuant d&#39;utiliser ses traductions Intlayer jusqu&#39;à ce que sa version General Translation soit prête. Lors d&#39;un rendu côté serveur avec `react-intlayer` 9.7.0 et `gt-react` 11.4.12, un composant Intlayer et un composant [`<T>`](/docs/react/reference/components/t) se sont affichés côte à côte sous `IntlayerProvider` et [`GTProvider`](/docs/react/reference/components/gt-provider). Copiez les valeurs `en` du composant sous forme de JSX dans [`<T>`](/docs/react/reference/components/t), générez les traductions avec [`npx gt translate`](/docs/cli/reference/commands/translate), puis vérifiez le résultat avant de basculer le composant. Commencez par le [Démarrage rapide avec Next.js](/docs/react/nextjs-quickstart) ou le [Démarrage rapide avec React](/docs/react/react-quickstart), et consultez [Migrer des bibliothèques i18n](/docs/react/guides/migrating-i18n-libraries) pour faire cohabiter deux bibliothèques pendant une migration.

## Points clés

* Intlayer conserve le contenu de chaque composant dans un fichier de déclaration typé où toutes les langues figurent côte à côte, signale les paramètres régionaux manquants sous forme d&#39;erreurs de type et les complète grâce au fournisseur d&#39;IA de votre choix.
* General Translation ne conserve que la langue source dans vos composants et génère toutes les autres langues en s&#39;appuyant sur le contexte tiré de votre code, de votre glossaire et de vos instructions personnalisées, la relecture se faisant dans le tableau de bord.
* Intlayer prend en charge davantage de frameworks et propose l&#39;édition visuelle directement sur la page ; vous pouvez migrer vers General Translation composant par composant, puisque les deux bibliothèques peuvent cohabiter dans le rendu.

## 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.
- [General Translation ou Paraglide JS : lequel choisir ?](https://generaltranslation.com/fr/kb/general-translation-vs-paraglide.mdx): Choisissez General Translation pour garder vos textes intégrés au code et générer des traductions qui tiennent compte de la structure de vos composants React, d’une terminologie partagée et d’une relecture dans le tableau de bord. Choisissez Paraglide JS pour des fonctions de messages compilées et typées, avec un tree-shaking message par message. Paraglide affiche vos catalogues ; General Translation relie vos textes source à la génération des traductions et à leurs mises à jour au fil de l’eau.
- [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.
- [Pourquoi utiliser General Translation plutôt qu’un TMS (Smartling, Lokalise, Phrase, Crowdin ou Transifex) ?](https://generaltranslation.com/fr/kb/general-translation-vs-tms.mdx): Un système de gestion de la traduction (TMS) comme Smartling, Lokalise, Phrase, Crowdin ou Transifex coordonne les traducteurs, mais les ingénieurs doivent toujours extraire les chaînes, les envoyer, attendre les traductions, puis les réintégrer dans le produit. General Translation traduit le contenu directement dans votre code, avec son contexte, fournit toutes les langues à chaque livraison et repose sur des bibliothèques open source, sans dépendance à un fournisseur.

## Previous and next questions

- Previous question: [General Translation ou i18n-tasks : lequel choisir ?](https://generaltranslation.com/fr/kb/general-translation-vs-i18n-tasks.mdx)
- Next question: [General Translation ou le framework de traduction de Django : avez-vous besoin des deux ?](https://generaltranslation.com/fr/kb/general-translation-vs-django-i18n.mdx)

## Sitemap

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