# General Translation React SDKs (gt-react, gt-next, gt-react-native): React SPA Démarrage rapide
URL: https://generaltranslation.com/fr/docs/react/react-spa-quickstart.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Ajoutez plusieurs langues à une application React monopage.

À la fin de ce guide, votre application React monopage affichera du contenu en plusieurs langues, avec un sélecteur de langue que vos utilisateurs pourront utiliser.

Dans une application monopage, `gt-react` s’exécute entièrement dans le navigateur — vous l’initialisez une seule fois au démarrage avec [`initializeGTSPA()`](/docs/react/reference/config#initialize-spa), et vous n’avez pas besoin d’un composant provider.

**Prérequis :**

* Une application React avec rendu côté client (Vite, webpack ou similaire)
* Node.js 18+

Votre système de build peut nécessiter une version plus récente de Node.js. Par exemple, Vite 8 requiert `^20.19.0 || >=22.12.0`.

<Callout type="info">
  **Astuce :** Exécutez `npx gt@latest` pour configurer l’amorçage de Vite et le chargement des traductions avec l’[assistant de configuration](/docs/cli/quickstart). Ce guide présente la configuration manuelle.
</Callout>

<Callout type="info">
  **Remarque :** Si votre application effectue un rendu côté serveur, suivez plutôt le [React Démarrage rapide](/docs/react/react-quickstart).
</Callout>

## Choisissez votre bundler [#bundlers]

Les étapes ci-dessous utilisent Vite comme exemple principal. Pour un autre système de build, consultez
son guide de configuration pour le point d’entrée, l’amorçage et le loader de traduction :

<Cards>
  <Card title="Vite" href="/docs/react/guides/spa/configuring-vite-spa">
    Configurez le point d’entrée HTML de Vite et le chargement des traductions.
  </Card>

  <Card title="webpack" href="/docs/react/guides/spa/configuring-webpack-spa">
    Configurez le point d’entrée webpack et le contexte de traduction.
  </Card>

  <Card title="esbuild" href="/docs/react/guides/spa/configuring-esbuild-spa">
    Configurez les points d’entrée esbuild et les contenus de secours selon la cible de sortie.
  </Card>

  <Card title="Rollup" href="/docs/react/guides/spa/configuring-rollup-spa">
    Configurez l’entrée Rollup et une carte des paramètres régionaux analysable statiquement.
  </Card>

  <Card title="Rolldown" href="/docs/react/guides/spa/configuring-rolldown-spa">
    Configurez l’entrée Rolldown et une carte des paramètres régionaux analysable statiquement.
  </Card>

  <Card title="Bazel" href="/docs/react/guides/spa/configuring-bazel-spa">
    Déclarez l’amorçage, la configuration, le paquet et les traductions comme entrées Bazel.
  </Card>
</Cards>

Après la configuration, consultez [Internationaliser une SPA React](/docs/react/guides/spa/internationalizing-react-spa)
pour des recommandations spécifiques aux SPA concernant JSX, les chaînes, la sélection du paramètre régional et la validation.

## Démarrage rapide [#quickstart]

### 1. Installez les paquets

`gt-react` est la bibliothèque qui gère les traductions dans votre application. `gt` est l’outil CLI qui prépare vos traductions.

<Tabs items={['npm', 'yarn', 'bun', 'pnpm']}>
  <Tab value="npm">
    ```bash
    npm i gt-react
    npm i -D gt
    ```
  </Tab>

  <Tab value="yarn">
    ```bash
    yarn add gt-react
    yarn add --dev gt
    ```
  </Tab>

  <Tab value="bun">
    ```bash
    bun add gt-react
    bun add --dev gt
    ```
  </Tab>

  <Tab value="pnpm">
    ```bash
    pnpm add gt-react
    pnpm add --save-dev gt
    ```
  </Tab>
</Tabs>

### 2. Créer un fichier de configuration de traduction

Créez un fichier **`gt.config.json`** à la racine de votre projet. Ce fichier indique à la bibliothèque les langues que vous prenez en charge :

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["es", "fr", "ja"],
  "files": {
    "gt": {
      "output": "src/_gt/[locale].json"
    }
  }
}
```

* **`defaultLocale`** — la langue dans laquelle votre application est écrite (votre langue source).
* **`locales`** — les langues vers lesquelles vous souhaitez traduire. Choisissez-les dans la [liste des paramètres régionaux pris en charge](/docs/platform/dashboard/reference/supported-locales).
* **`files`** — indique au CLI où enregistrer les fichiers de traduction. Le chemin `output` doit correspondre au chemin d’import de votre fonction [`loadTranslations`](/docs/react/reference/functions/load-translations) (étape 3).

Par défaut, le CLI analyse les fichiers JavaScript et TypeScript situés dans `src`, `app`, `pages` et `components`. Définissez [`src`](/docs/cli/reference/config#src) si votre source se trouve ailleurs.

<Callout type="info">
  **Remarque :** Les bundlers comme Vite importent les fichiers de traduction sous forme de modules. Les fichiers de traduction doivent donc se trouver dans `src/`.
</Callout>

### 3. Créer un loader de traduction

Dans une SPA, `gt-react` a besoin d’une fonction pour charger les fichiers de traduction dans le navigateur à l’exécution. Créez un fichier [`loadTranslations`](/docs/react/reference/functions/load-translations) :

```ts title="src/loadTranslations.ts"
export default async function loadTranslations(locale: string) {
  try {
    const translations = await import(`./_gt/${locale}.json`);
    return translations.default;
  } catch (error) {
    console.warn(`No translations found for ${locale}`);
    return {};
  }
}
```

Cette fonction charge les fichiers de traduction JSON à partir de votre répertoire `src/_gt/`. Le CLI génère ces fichiers lorsque vous exécutez [`npx gt translate`](/docs/cli/reference/commands/translate).

<Callout type="info">
  **Rollup :** Rollup seul ne peut pas analyser l’importation entièrement dynamique ci-dessus. Utilisez plutôt le [mappage statique des loaders de paramètres régionaux](/docs/react/guides/developing-spa-translations#setup).
</Callout>

<Accordions>
  <Accordion title="Conserver les traductions de Create React App dans public ?">
    Create React App peut utiliser le loader du répertoire source ci-dessus. Si vous préférez conserver les traductions générées dans `public/`, modifiez le chemin de sortie du CLI en `public/_gt/[locale].json` :

    ```json title="gt.config.json"
    {
      "defaultLocale": "en",
      "locales": ["es", "fr", "ja"],
      "files": {
        "gt": {
          "output": "public/_gt/[locale].json"
        }
      }
    }
    ```

    Chargez le fichier via HTTP avec `PUBLIC_URL` :

    ```ts title="src/loadTranslations.ts"
    export default async function loadTranslations(locale: string) {
      try {
        const response = await fetch(
          `${process.env.PUBLIC_URL}/_gt/${locale}.json`
        );
        if (!response.ok) throw new Error('Translation file not found');
        return await response.json();
      } catch {
        console.warn(`No translations found for ${locale}`);
        return {};
      }
    }
    ```
  </Accordion>
</Accordions>

### 4. Initialiser la bibliothèque

Appelez **[`initializeGTSPA`](/docs/react/reference/config#initialize-spa)** une seule fois au démarrage, avant le rendu de votre application. Cette fonction prend votre configuration et votre loader de traduction, détermine le paramètre régional de l&#39;utilisateur et charge les traductions correspondantes.

L&#39;approche la plus robuste consiste à utiliser un petit module d&#39;entrée qui initialise d&#39;abord GT, puis charge le reste de l&#39;application. Cela vous permet de traduire le contenu au niveau du module.

```ts title="src/index.ts"
import { initializeGTSPA } from 'gt-react';
import gtConfig from '../gt.config.json';
import loadTranslations from './loadTranslations';

await initializeGTSPA({
  ...gtConfig,
  loadTranslations,
});

await import('./main'); // rendre l'application uniquement une fois que GT est prêt
```

<Accordions>
  <Accordion title="Vous utilisez CommonJS ?">
    CommonJS ne prend pas en charge `await` au niveau supérieur. Encapsulez l’initialisation dans une fonction de démarrage asynchrone, puis importez dynamiquement l’application. Cela préserve le contexte asynchrone requis pour les appels [`t()`](/docs/react/reference/functions/t-function) au niveau du module.

    ```js title="src/index.js"
    const { initializeGTSPA } = require('gt-react');
    const gtConfig = require('../gt.config.json');

    async function loadTranslations(locale) {
      try {
        return require(`./_gt/${locale}.json`);
      } catch (error) {
        console.warn(`No translations found for ${locale}`);
        return {};
      }
    }

    async function start() {
      await initializeGTSPA({
        ...gtConfig,
        loadTranslations,
      });

      await import('./main');
    }

    start().catch(console.error);
    ```

    <Callout type="warn">
      **Avertissement :** N’appelez pas `require` sur `main` avant l’initialisation. Cela évalue les appels [`t()`](/docs/react/reference/functions/t-function) au niveau du module avant que les traductions ne soient prêtes.
    </Callout>
  </Accordion>
</Accordions>

```tsx title="src/main.tsx"
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <App />
  </StrictMode>
);
```

Mettez ensuite à jour la balise de script de type module dans votre `index.html` pour qu’elle pointe vers la nouvelle entrée : remplacez son `src` de `/src/main.tsx` par `/src/index.ts`.

```html title="index.html"
<!-- <script type="module" src="/src/main.tsx"></script> -->
<script type="module" src="/src/index.ts"></script>
```

[`initializeGTSPA`](/docs/react/reference/config#initialize-spa) s’exécute une seule fois au démarrage — la configuration est immuable pendant toute la durée de vie de l’application. Une fois l’initialisation terminée, les traductions peuvent être récupérées dans n’importe quel module. **Vous n&#39;avez pas besoin d&#39;entourer votre application d’un provider.**

<Accordions>
  <Accordion title="Vous utilisez Create React App ?">
    Create React App bloque les importations depuis l’extérieur de `src/` et ne prend pas en charge `await` au niveau supérieur. Conservez le fichier `gt.config.json` à la racine pour la CLI, renommez votre point d’entrée `src/index.tsx` existant en `src/main.tsx`, puis créez ce nouveau point d’entrée :

    ```ts title="src/index.ts"
    import { initializeGTSPA } from 'gt-react';
    import loadTranslations from './loadTranslations';

    async function start() {
      await initializeGTSPA({
        defaultLocale: 'en',
        locales: ['es', 'fr', 'ja'],
        loadTranslations,
      });

      await import('./main');
    }

    start().catch(console.error);
    ```

    Gardez ces valeurs de paramètres régionaux synchronisées avec la configuration à la racine chaque fois que vous ajoutez ou supprimez une langue. Ne modifiez pas `public/index.html` ; Create React App charge déjà `src/index`.
  </Accordion>
</Accordions>

<Callout type="info">
  **Astuce :** Suivez [Développer avec les traductions SPA](/docs/react/guides/developing-spa-translations) pour ajouter le compiler et les identifiants de développement.
</Callout>

### 5. Marquer le contenu à traduire

Maintenant, entourez tout texte que vous souhaitez traduire avec le composant **[`<T>`](/docs/react/reference/components/t)**. [`<T>`](/docs/react/reference/components/t) signifie &quot;traduire&quot; :

```tsx title="src/components/Welcome.tsx"
import { T } from 'gt-react';

export default function Welcome() {
  return (
    <main>
      <T>
        <h1>Welcome to my app</h1>
        <p>This content will be translated automatically.</p>
      </T>
    </main>
  );
}
```

Vous pouvez entourer autant ou aussi peu de JSX que vous le souhaitez avec [`<T>`](/docs/react/reference/components/t). Tout ce qu’il contient — texte, éléments imbriqués, même la mise en forme — est traduit comme un tout.

Pour les chaînes en dehors des composants React, utilisez **[`t()`](/docs/react/reference/functions/t-function)**. Cela fonctionne au niveau du module, car [`initializeGTSPA()`](/docs/react/reference/config#initialize-spa) charge les traductions avant le reste de votre application :

```ts title="src/navigation.ts"
import { t } from 'gt-react';

export const navigation = [
  { label: t('Home'), href: '/' },
  { label: t('About'), href: '/about' },
];
```

### 6. Ajoutez un sélecteur de langue

Ajoutez un **[`<LocaleSelector>`](/docs/react/reference/components/locale-selector)** pour permettre aux utilisateurs de changer de langue :

```tsx title="src/components/Welcome.tsx"
import { T, LocaleSelector } from 'gt-react';

export default function Welcome() {
  return (
    <main>
      <LocaleSelector />
      <T>
        <h1>Welcome to my app</h1>
        <p>This content will be translated automatically.</p>
      </T>
    </main>
  );
}
```

[`LocaleSelector`](/docs/react/reference/components/locale-selector) affiche un menu déroulant contenant les langues de votre `gt.config.json`.

Lorsque l’utilisateur choisit une langue, `gt-react` enregistre ce choix dans le cookie `generaltranslation.locale` et recharge la page — [`initializeGTSPA`](/docs/react/reference/config#initialize-spa) s’exécute alors à nouveau et charge les traductions du nouveau paramètre régional avant le rendu de l’application.

### 7. Authentifiez-vous et traduisez

Connectez-vous avec [`gt login`](/docs/cli/reference/commands/login) :

```bash
npx gt login
```

La connexion ne sélectionne pas de projet et n’écrit aucun fichier d’environnement. Définissez l’identifiant de votre projet existant dans l’environnement avant de traduire, ou ajoutez [`projectId`](/docs/cli/reference/config#project-id) à la configuration créée à l’étape 2 :

```bash title=".env.local"
GT_PROJECT_ID="your-project-id"
```

Utilisez [`gt init`](/docs/cli/reference/commands/init) uniquement si vous avez besoin d’être guidé pour sélectionner ou créer un projet, et pas simplement pour vous connecter.

<Callout type="warn">
  **Avertissement :** Ne versionnez pas `.env.local`. Pour la CI, utilisez une `GT_API_KEY` dotée d’une portée distincte, stockée dans votre gestionnaire de secrets. N’exposez jamais les clés d’outillage dans le code côté navigateur. (Voir [Identifiants du CLI](/docs/cli/guides/configuring#credentials).)
</Callout>

Exécutez ensuite la commande translate pour générer des fichiers de traduction pour chaque paramètre régional configuré :

```bash
npx gt translate
```

Le CLI analyse votre application, en traduit le contenu et écrit les résultats dans le chemin de sortie défini dans `gt.config.json`. Relancez-le chaque fois que votre contenu source est modifié.

### 8. Exécuter et vérifier

Affichez le composant d&#39;exemple depuis votre application :

```tsx title="src/App.tsx"
import Welcome from './components/Welcome';

export default function App() {
  return <Welcome />;
}
```

Démarrez le serveur de développement de votre application (par exemple, `npm run dev` avec Vite), ouvrez son URL locale et sélectionnez `es`, `fr` ou `ja`. Vérifiez que la page se recharge et que le titre affiche bien la traduction sélectionnée.

## Dépannage [#troubleshooting]

<Accordions>
  <Accordion title="La langue ne change pas lorsque j’utilise le menu déroulant">
    Vérifiez que les cookies du navigateur sont activés, que le paramètre régional sélectionné figure dans `gt.config.json` et que [`initializeGTSPA`](/docs/react/reference/config#initialize-spa) soit résolu avant le chargement du module d’entrée de l’application.
  </Accordion>

  <Accordion title="Certaines traductions sont inexactes">
    Un texte ambigu peut entraîner des traductions inexactes. Par exemple, « apple » peut désigner le fruit ou l’entreprise. Ajoutez une prop `context` pour préciser le sens :

    ```jsx
    <T context="the technology company">Apple</T>
    ```

    [`<T>`](/docs/react/reference/components/t) accepte la prop `context`. Lorsque vous appelez [`useGT()`](/docs/react/reference/hooks/use-gt), transmettez la même chaîne de caractères de désambiguïsation via l’option `$context`.
  </Accordion>
</Accordions>

## Next steps

- /docs/react/guides/developing-spa-translations
- /docs/react/guides/translating-jsx
- /docs/react/guides/managing-locales
- /docs/react/guides/storing-translations

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
