# General Translation React SDKs (gt-react, gt-next, gt-react-native): Démarrage rapide avec React Router
URL: https://generaltranslation.com/fr/docs/react/react-router-quickstart.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Ajoutez General Translation à une application React Router en mode framework, y compris les boutiques Shopify Hydrogen, et traduisez votre premier contenu.

`gt-react` fonctionne en mode framework de React Router par l’intermédiaire de votre route racine. Vous initialisez la bibliothèque dans `app/root.tsx`, résolvez le paramètre régional de chaque visiteur dans le loader racine, puis affichez [`GTProvider`](/docs/react/reference/components/gt-provider) depuis le `Layout` racine.

Utilisez ce démarrage rapide pour les applications créées avec `@react-router/dev`. Si vous utilisez React Router comme bibliothèque au sein d’une application monopage Vite, suivez plutôt le [Démarrage rapide pour une SPA React](/docs/react/react-spa-quickstart).

Exécutez [`npx gt@latest init`](/docs/cli/reference/commands/init) depuis la racine de l’application pour automatiser le setup. L’assistant installe `gt-react`, crée la configuration et le chargeur de traductions, et configure un fichier `app/root.tsx` issu du modèle de départ create-react-router ou Hydrogen. Il ne modifie pas les autres fichiers racine et répertorie les éventuelles actions manuelles à effectuer ; ce guide décrit ce même setup, réalisé manuellement.

*Remarque : ce setup nécessite `gt-react` 11.1.3 ou une version ultérieure, ainsi qu’une application dont le rendu s’effectue à chaque requête. Le mode SPA (`ssr: false`), le prérendu et le RSC Framework Mode ne sont pas pris en charge.*

## Démarrage rapide [#quickstart]

### 1. Installer les paquets

`gt-react` est la bibliothèque qui prend en charge les traductions dans votre application. `gt` est la CLI qui les génère.

<Tabs items={['npm', 'yarn', 'bun', 'pnpm']}>
  <Tab value="npm">
    ```bash
    npm install gt-react && npm install gt --save-dev
    ```
  </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 `gt.config.json`

Créez un fichier `gt.config.json` à la racine de votre projet. Il définit votre langue source, vos paramètres régionaux cibles et l&#39;emplacement où sont écrits les fichiers de traduction.

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

* `defaultLocale` — la langue dans laquelle votre application est rédigée.
* `locales` — les langues cibles de la traduction. Choisissez-les parmi les [paramètres régionaux pris en charge](/docs/platform/dashboard/reference/supported-locales).
* `files.gt.output` — l&#39;emplacement où la CLI écrit les fichiers de traduction. Placez-les dans `app/` pour que Vite les intègre aux bundles de votre code serveur et client.

### 3. Créer un chargeur de traductions

Créez `app/loadTranslations.ts`. Ce fichier importe le fichier de traduction d&#39;un paramètre régional lorsque le loader racine en fait la requête.

```ts title="app/loadTranslations.ts"
export default async function loadTranslations(locale: string) {
  const translations = await import(`./_gt/${locale}.json`);
  return translations.default;
}
```

Créez ensuite un fichier `{}` vide pour chaque locale cible, par exemple `app/_gt/es.json` et `app/_gt/ja.json` ; la commande [`gt init`](/docs/cli/reference/commands/init) les crée pour vous. Un paramètre régional sans fichier de traduction s’affiche dans votre langue par défaut.

### 4. Configurer la route racine

Appelez [`initializeGT`](/docs/react/reference/config#initialize) une seule fois au niveau du module dans `app/root.tsx`, renvoyez le paramètre régional et un instantané des traductions depuis le loader racine, puis encapsulez le contenu de `Layout` dans [`GTProvider`](/docs/react/reference/components/gt-provider). Ajoutez les lignes mises en évidence à votre route racine existante :

```tsx title="app/root.tsx"
import {
  Links,
  Meta,
  Outlet,
  Scripts,
  ScrollRestoration,
  useRouteLoaderData, // [!code ++]
} from 'react-router';
import { GTProvider, getTranslationsSnapshot, initializeGT, parseLocale } from 'gt-react'; // [!code ++]

import type { Route } from './+types/root';
import gtConfig from '../gt.config.json'; // [!code ++]
import loadTranslations from './loadTranslations'; // [!code ++]
import './app.css';

initializeGT({ ...gtConfig, loadTranslations }); // [!code ++]

// [!code ++:11]
// Les pages d’erreur n’ont pas de données de loader. On n’y utilise donc pas GTProvider, afin qu’il ne
// remplace pas le paramètre régional enregistré du visiteur par celui par défaut.
function RootGTProvider({ children }: { children: React.ReactNode }) {
  const data = useRouteLoaderData<typeof loader>('root');
  if (!data) return <>{children}</>;
  return (
    <GTProvider locale={data.locale} translations={data.translations}>
      {children}
    </GTProvider>
  );
}

// [!code ++:4]
export async function loader({ request }: Route.LoaderArgs) {
  const locale = parseLocale(request);
  return { locale, translations: await getTranslationsSnapshot(locale) };
}

export function Layout({ children }: { children: React.ReactNode }) {
  const locale = useRouteLoaderData<typeof loader>('root')?.locale ?? gtConfig.defaultLocale; // [!code ++]
  return (
    // [!code ++]
    <html lang={locale}>
      <head>
        <meta charSet="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <Meta />
        <Links />
      </head>
      <body>
        {/* [!code ++] */}
        <RootGTProvider>
          {children}
          <ScrollRestoration />
        {/* [!code ++] */}
        </RootGTProvider>
        <Scripts />
      </body>
    </html>
  );
}

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

`parseLocale` lit le cookie de paramètre régional, puis l&#39;en-tête `Accept-Language`, et se replie sur `defaultLocale` à défaut. Si votre route racine possède déjà un `loader`, ajoutez `locale` et `translations` à l&#39;objet qu&#39;il renvoie.

*Remarque : les pages d&#39;erreur dépourvues de données du loader racine, comme une erreur 404 directe ou une erreur du loader racine, sont rendues sans [`GTProvider`](/docs/react/reference/components/gt-provider). Les composants de traduction et les hooks, tels que [`<T>`](/docs/react/reference/components/t) et [`useLocale`](/docs/react/reference/hooks/use-locale), y lèvent une exception et transforment la page d&#39;erreur en erreur serveur : ne traduisez donc pas l&#39;`ErrorBoundary` racine.*

### 5. Marquer le contenu à traduire

Encapsulez le JSX dans le composant [`<T>`](/docs/react/reference/components/t) pour le traduire sur place, et utilisez [`useGT`](/docs/react/reference/hooks/use-gt) pour les simples chaînes de caractères, comme les valeurs `aria-label`. Ajoutez un composant [`<LocaleSelector>`](/docs/react/reference/components/locale-selector) pour permettre aux visiteurs de changer de langue.

```tsx title="app/routes/home.tsx"
import { LocaleSelector, T, useGT } from 'gt-react';

export default function Home() {
  const gt = useGT();

  return (
    <main>
      <LocaleSelector />
      <T>
        <h1>Welcome to my app</h1>
        <p>This content is translated automatically.</p>
      </T>
      <input aria-label={gt('Email address')} />
    </main>
  );
}
```

Lorsqu&#39;un visiteur choisit une langue, [`<LocaleSelector>`](/docs/react/reference/components/locale-selector) l&#39;enregistre dans le cookie de paramètre régional et recharge la page, de sorte que le loader racine affiche le contenu dans le nouveau paramètre régional.

### 6. Générer des traductions

Connectez-vous avec [`gt login`](/docs/cli/reference/commands/login), définissez le [`projectId`](/docs/cli/reference/config#project-id) de votre projet existant dans `gt.config.json` ou la variable d&#39;environnement `GT_PROJECT_ID`, puis lancez la traduction :

```bash
npx gt login
GT_PROJECT_ID=your-project-id npx gt translate
```

Se connecter ne sélectionne pas de projet. Si vous n&#39;en avez pas, créez-en un dans le [Dashboard](/docs/platform/dashboard/get-started), ou exécutez [`gt init`](/docs/cli/reference/commands/init) et activez les traductions en temps réel pendant le développement pour en choisir ou en créer un.

Démarrez le serveur de développement et changez de langue pour afficher les traductions. Placez la commande au début de votre script de build existant pour que les builds de production incluent toujours les traductions à jour :

```json title="package.json"
{
  "scripts": {
    "build": "npx gt translate && react-router build"
  }
}
```

Pour charger les traductions depuis le CDN au lieu de les intégrer au bundle, exécutez [`npx gt configure --storage cdn`](/docs/cli/reference/commands/configure). La commande indique la modification à apporter dans `app/root.tsx`.

Si vous mettez en cache les réponses de documents, par exemple sur un CDN ou un proxy inverse, faites varier le cache selon le paramètre régional afin que les visiteurs ne reçoivent pas une page dans une autre langue. Envoyez l&#39;en-tête `Vary: Cookie, Accept-Language` dans les réponses de documents, ou excluez-les des caches partagés.

<Callout type="info">
  **Remarque :** Pour la CI, fournissez une `GT_API_KEY` distincte à portée restreinte ainsi que le même identifiant de projet via les paramètres de secrets de votre CI. (Voir [Identifiants de la CLI](/docs/cli/guides/configuring#credentials)).
</Callout>

## Shopify Hydrogen [#hydrogen]

Les boutiques Hydrogen sont des applications basées sur le framework React Router et suivent donc les mêmes étapes. Conservez la commande de compilation propre à Hydrogen et ajoutez-y en amont la génération des traductions :

```json title="package.json"
{
  "scripts": {
    "build": "npx gt translate && shopify hydrogen build --codegen"
  }
}
```

`gt-react` traduit le texte du code de votre boutique, comme la navigation, les boutons et le contenu rédactionnel des pages. Les titres et descriptions de produits, ainsi que les autres contenus de la boutique, proviennent de Shopify : traduisez-les directement dans Shopify.

## Dépannage [#troubleshooting]

<Accordions>
  <Accordion title="gt init n’a pas modifié app/root.tsx">
    L’assistant ne modifie que les fichiers racines dont la structure correspond au starter create-react-router ou Hydrogen et qui n’appellent pas déjà [`initializeGT`](/docs/react/reference/config#initialize). Suivez l’[étape 4](#quickstart) pour effectuer les modifications manuellement.
  </Accordion>

  <Accordion title="gt init s’est arrêté avant d’effectuer des modifications">
    La solution dépend de la cause :

    * **Mode SPA, prérendu ou RSC Framework Mode :** ce setup lit le paramètre régional de chaque visiteur dans un loader racine à chaque requête ; ces modes ne sont donc pas pris en charge, que ce soit via l’assistant ou manuellement.
    * **Une plage de versions de `gt-react` autorisant des versions antérieures à 11.1.3 :** mettez à jour `gt-react` et relancez `npx gt@latest init`.
    * **Un `appDirectory` autre que `app`, ou un `react-router.config` que l’assistant ne parvient pas à lire :** si l’application est rendue à chaque requête, exécutez `npx gt@latest init --no-react-setup` pour tout configurer à l’exception de votre code source, puis suivez les étapes 2 à 4 en remplaçant `app/` par le répertoire de votre application, y compris dans `files.gt.output`.
  </Accordion>

  <Accordion title="La langue ne change pas lorsque j’utilise le sélecteur">
    Vérifiez que les cookies sont activés, que le paramètre régional figure dans `gt.config.json` et que le sélecteur est affiché à l’intérieur de `RootGTProvider`. Si `<html lang>` change mais pas le texte, exécutez [`npx gt translate`](/docs/cli/reference/commands/translate) pour générer `app/_gt/[locale].json`.
  </Accordion>
</Accordions>

## Next steps

- /docs/react/guides/translating-jsx
- /docs/react/guides/translating-strings
- /docs/react/guides/managing-locales
- /docs/react/guides/storing-translations

## Sitemap

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