# General Translation React SDKs (gt-react, gt-next, gt-react-native): Développer avec les traductions SPA
URL: https://generaltranslation.com/fr/docs/react/guides/developing-spa-translations.mdx
---
title: Développer avec les traductions SPA
description: Comment prévisualiser les traductions de General Translation lors du développement d’une application React monopage.
related:
links:
- /docs/react/guides/storing-translations
- /docs/react/guides/configuring
- /docs/react/guides/translating-jsx
- /docs/react/guides/managing-locales
---
Les traductions de développement vous permettent de prévisualiser le contenu traduit pendant que vous modifiez votre SPA. Elles nécessitent le compilateur GT et une clé API de développement.
**Prérequis :**
* Une application React monopage configurée avec le [SPA Quickstart](/docs/react/react-spa-quickstart)
* Une clé API de développement commençant par `gtx-dev-`
**Limitation de CommonJS :** Le rechargement à chaud en développement nécessite ESM, car le compilateur injecte `await` au niveau supérieur. Cela ne fonctionne pas dans les applications compilées en CommonJS. Les traductions de production continuent toutefois de fonctionner avec le modèle de démarrage CommonJS du [SPA Quickstart](/docs/react/react-spa-quickstart).
## Configuration [#setup]
### 1. Installer le compilateur
Installez `@generaltranslation/compiler` en tant que dépendance de développement :
```bash
npm i -D @generaltranslation/compiler
```
```bash
yarn add --dev @generaltranslation/compiler
```
```bash
bun add --dev @generaltranslation/compiler
```
```bash
pnpm add --save-dev @generaltranslation/compiler
```
### 2. Ajouter le plugin du compilateur
Activez le hot reload en développement dans la configuration partagée par le CLI et le compilateur :
```json title="gt.config.json"
{
"files": {
"gt": {
"output": "src/_gt/[locale].json",
"parsingFlags": {
"devHotReload": true
}
}
}
}
```
Ajoutez ensuite le plugin pour votre bundler.
```ts title="vite.config.ts"
import react from '@vitejs/plugin-react';
import { vite as gtCompiler } from '@generaltranslation/compiler'; // [!code highlight]
import { defineConfig } from 'vite';
import gtConfig from './gt.config.json'; // [!code highlight]
export default defineConfig({
plugins: [react(), gtCompiler({ ...gtConfig })], // [!code highlight]
});
```
Installez `dotenv` comme dépendance de développement pour que webpack puisse lire `.env` et `.env.local`, puis ajoutez le compilateur avant les autres plugins. Utilisez `DefinePlugin` pour n'exposer au code exécuté dans le navigateur que les identifiants de développement :
```js title="webpack.config.mjs"
import { webpack as gtCompiler } from '@generaltranslation/compiler';
import dotenv from 'dotenv';
import webpack from 'webpack';
import gtConfig from './gt.config.json' with { type: 'json' };
dotenv.config({ path: '.env' });
dotenv.config({ path: '.env.local', override: true });
export default (_env, argv) => {
const isProduction = (argv.mode ?? 'production') === 'production';
return {
// Conservez vos paramètres webpack existants.
plugins: [
gtCompiler({ ...gtConfig }),
new webpack.DefinePlugin({
'process.env.GT_PROJECT_ID': JSON.stringify(
isProduction ? '' : (process.env.GT_PROJECT_ID ?? '')
),
'process.env.GT_DEV_API_KEY': JSON.stringify(
isProduction ? '' : (process.env.GT_DEV_API_KEY ?? '')
),
}),
],
};
};
```
Consultez l'[exemple webpack complet de `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/webpack-spa) pour les loaders, les fichiers de traduction locaux et la configuration du serveur de développement.
Enregistrez le compilateur avant vos autres plugins Rollup :
```js title="rollup.config.mjs"
import { rollup as gtCompiler } from '@generaltranslation/compiler';
export default {
input: 'src/index.ts',
plugins: [
gtCompiler(),
// Vos autres plugins Rollup
],
};
```
Rollup ne peut pas analyser un import de traduction entièrement dynamique. Listez chaque paramètre régional avec un spécificateur d'import statique :
```ts title="src/loadTranslations.ts"
const translationLoaders = {
es: () => import('./_gt/es.json'),
fr: () => import('./_gt/fr.json'),
};
export default async function loadTranslations(locale: string) {
const loader =
translationLoaders[locale as keyof typeof translationLoaders];
return loader ? (await loader()).default : {};
}
```
Rollup seul ne fournit pas l'intégration des identifiants de développement présentée pour Vite et webpack. Régénérez les fichiers de traduction locaux lorsque le contenu source change. Consultez l'[exemple Rollup complet de `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/rollup-spa).
Ajoutez l'adaptateur Rspack à vos plugins :
```js title="rspack.config.mjs"
import { rspack as gtCompiler } from '@generaltranslation/compiler';
export default {
plugins: [gtCompiler()],
};
```
La traduction de développement nécessite également d'exposer `GT_PROJECT_ID` et `GT_DEV_API_KEY` au code exécuté dans le navigateur sans inclure ces valeurs dans les bundles de production.
Ajoutez l'adaptateur esbuild au tableau `plugins` :
```js title="build.mjs"
import { build } from 'esbuild';
import { esbuild as gtCompiler } from '@generaltranslation/compiler';
await build({
entryPoints: ['src/index.tsx'],
bundle: true,
outdir: 'dist',
plugins: [gtCompiler()],
});
```
*Remarque : l'adaptateur esbuild ne prend pas en charge l'injection JSX automatique. Encapsulez explicitement le JSX traduisible ou utilisez un autre adaptateur lorsque `enableAutoJsxInjection` est requis.*
Consultez l'[exemple Vite complet de `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/vite-spa) pour une configuration Vite complète.
### 3. Ajoutez les identifiants de développement
Obtenez une clé API de développement sur [dash.generaltranslation.com](https://dash.generaltranslation.com/en-US/signin) ou en exécutant :
```bash
npx gt auth
```
Ajoutez ensuite votre ID de projet et votre clé API de développement à `.env.local`, puis transmettez-les à votre fonction d'initialisation :
```bash title=".env.local"
VITE_GT_PROJECT_ID="your-project-id"
VITE_GT_DEV_API_KEY="your-dev-api-key"
```
```ts
await initializeGTSPA({
...gtConfig,
projectId: import.meta.env.VITE_GT_PROJECT_ID,
devApiKey: import.meta.env.VITE_GT_DEV_API_KEY,
loadTranslations,
});
```
```bash title=".env.local"
GT_PROJECT_ID="your-project-id"
GT_DEV_API_KEY="your-dev-api-key"
```
```ts
await initializeGTSPA({
...gtConfig,
projectId: process.env.GT_PROJECT_ID,
devApiKey: process.env.GT_DEV_API_KEY,
loadTranslations,
});
```
La configuration webpack ci-dessus remplace les deux valeurs par des chaînes vides dans les builds de production, afin que les identifiants de développement ne soient pas inclus dans le bundle de production.
**Développement uniquement :** utilisez une clé commençant par `gtx-dev-`. N'exposez jamais une clé de production commençant par `gtx-api-` dans le code du navigateur.
### 4. Commencez à développer
Démarrez votre serveur de développement et passez à un paramètre régional autre que le paramètre régional par défaut. Lorsque vous modifiez du contenu à traduire, le compilateur enregistre la modification et `gt-react` demande une traduction de développement mise à jour.
## Next steps
- /docs/react/guides/storing-translations
- /docs/react/guides/configuring
- /docs/react/guides/translating-jsx
- /docs/react/guides/managing-locales