# react-native: Démarrage rapide React Native avec Expo
URL: https://generaltranslation.com/fr/docs/react-native/tutorials/quickstart-expo.mdx
---
title: Démarrage rapide React Native avec Expo
description: Ajoutez plusieurs langues à votre application Expo en moins de 10 minutes
---
À la fin de ce guide, votre application Expo affichera du contenu en plusieurs langues, avec un sélecteur de langue que vos utilisateurs pourront utiliser.
**Prérequis :**
* Un projet Expo (SDK 49+)
* Node.js 18+
`gt-react-native` est toujours expérimental et peut ne pas fonctionner sur tous les projets.
N'hésitez pas à nous le signaler si vous rencontrez des problèmes en [ouvrant une issue sur GitHub](https://github.com/generaltranslation/gt/issues).
**Vous voulez une configuration automatique ?** Exécutez `npx gt@latest` pour tout configurer avec l'[assistant de configuration](/docs/cli/init). Ce guide couvre la configuration manuelle.
Vous cherchez un projet React Native CLI sans Expo ? Consultez le [démarrage rapide React Native](/docs/react-native/tutorials/quickstart).
***
## Étape 1 : Installez les paquets
`gt-react-native` est la bibliothèque qui gère les traductions dans votre application. `gt` est l’outil CLI qui prépare les traductions pour la production.
```bash
npm i gt-react-native
npm i -D gt
```
```bash
yarn add gt-react-native
yarn add --dev gt
```
```bash
bun add gt-react-native
bun add --dev gt
```
```bash
pnpm add gt-react-native
pnpm add --save-dev gt
```
***
## Étape 2 : Créez un fichier de configuration de traduction
Créez un fichier **`gt.config.json`** à la racine de votre projet. Cela indique à la bibliothèque quelles langues sont prises en charge :
```json title="gt.config.json"
{
"defaultLocale": "en",
"locales": ["es", "fr", "ja"],
"files": {
"gt": {
"output": "content/[locale].json"
}
}
}
```
* **`defaultLocale`** — la langue dans laquelle votre application est écrite (votre langue source).
* **`locales`** — les langues dans lesquelles vous voulez traduire votre application. Choisissez-en dans la [liste des paramètres régionaux pris en charge](/docs/platform/supported-locales).
* **`files.gt.output`** — l’emplacement où la CLI enregistre les fichiers de traduction. `[locale]` est remplacé par chaque code de langue (par exemple, `content/es.json`).
***
## Étape 3 : Configurer les polyfills
L’environnement d’exécution JavaScript de React Native n’inclut pas les API `Intl` nécessaires à `gt-react-native`. Le plus simple est d’utiliser le plugin Babel fourni.
Ajoutez-le à votre configuration Babel :
```js title="babel.config.js"
const gtPlugin = require('gt-react-native/plugin');
const gtConfig = require('./gt.config.json');
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
[
gtPlugin,
{
locales: [gtConfig.defaultLocale, ...gtConfig.locales],
entryPointFilePath: require.resolve('expo-router/entry'),
},
],
],
};
};
```
Installez les polyfills FormatJS et importez-les en haut de votre fichier d’entrée. Vous avez besoin des polyfills de base, ainsi que des données propres au paramètre régional pour chaque langue prise en charge.
Consultez [la documentation des polyfills de FormatJS](https://formatjs.github.io/docs/polyfills) pour obtenir la liste complète. Au minimum, il vous faut :
```tsx title="index.js"
import '@formatjs/intl-getcanonicallocales/polyfill';
import '@formatjs/intl-locale/polyfill';
import '@formatjs/intl-pluralrules/polyfill-force';
import '@formatjs/intl-numberformat/polyfill';
import '@formatjs/intl-datetimeformat/polyfill';
import '@formatjs/intl-datetimeformat/add-all-tz';
// Ajoutez les données de paramètre régional pour chaque langue :
import '@formatjs/intl-pluralrules/locale-data/en';
import '@formatjs/intl-pluralrules/locale-data/es';
import '@formatjs/intl-numberformat/locale-data/en';
import '@formatjs/intl-numberformat/locale-data/es';
// ... répétez l’opération pour chaque paramètre régional et polyfill
```
***
## Étape 4 : Créer un chargeur de traductions
Metro (le bundler d’Expo) ne prend pas en charge les imports dynamiques. Vous devez donc associer explicitement chaque paramètre régional à son fichier de traduction :
```ts title="loadTranslations.ts"
const translations: Record = {
es: require("@/content/es.json"),
fr: require("@/content/fr.json"),
ja: require("@/content/ja.json"),
};
export function loadTranslations(locale: string) {
return translations[locale] ?? {};
}
```
Ces fichiers sont générés par la CLI lorsque vous exécutez `npx gt translate`.
***
## Étape 5 : Ajouter GTProvider à votre layout
Le composant **`GTProvider`** permet à toute votre application d’accéder aux traductions. Ajoutez-le à votre layout racine :
```tsx title="app/_layout.tsx"
import { Slot } from 'expo-router';
import { GTProvider } from 'gt-react-native';
import gtConfig from '../gt.config.json';
import { loadTranslations } from '../loadTranslations';
export default function RootLayout() {
return (
);
}
```
`GTProvider` gère l’état du paramètre régional et met les traductions à la disposition de tous les composants enfants. La prop `devApiKey` permet la traduction à la demande pendant le développement.
***
## Étape 6 : Marquez le contenu à traduire
Entourez de **``** tout texte que vous souhaitez traduire :
```tsx title="app/index.tsx"
import { Text, View } from 'react-native';
import { T } from 'gt-react-native';
export default function Home() {
return (
Welcome to my app
This content will be translated automatically.
);
}
```
Tout ce qui se trouve dans `` est traduit d’un seul bloc.
***
## Étape 7 : Ajouter un sélecteur de langue
Utilisez le hook **`useLocaleSelector`** pour créer un sélecteur de langue. Contrairement à `gt-react`, `gt-react-native` n’exporte pas de composant `` prêt à l’emploi : vous devez créer votre propre interface utilisateur à l’aide du hook.
```tsx title="app/index.tsx"
import { Text, View, Pressable } from 'react-native';
import { T, useLocaleSelector } from 'gt-react-native';
export default function Home() {
const { locales, locale, setLocale } = useLocaleSelector();
return (
{locales.map((l) => (
setLocale(l)}>
{l}
))}
Welcome to my app
);
}
```
`useLocaleSelector` renvoie les paramètres régionaux disponibles, le paramètre régional actuel et une fonction de mise à jour — ce qui vous donne un contrôle total sur l’interface utilisateur.
***
## Étape 8 : Configurer les variables d’environnement (facultatif)
Pour voir les traductions en développement, vous avez besoin de clés API General Translation.
Créez un fichier **`.env.local`**. Expo exige que les variables d’environnement publiques soient préfixées par `EXPO_PUBLIC_` :
```bash title=".env.local"
EXPO_PUBLIC_GT_DEV_API_KEY="your-dev-api-key"
EXPO_PUBLIC_GT_PROJECT_ID="your-project-id"
```
Obtenez gratuitement vos clés sur [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) ou en exécutant :
```bash
npx gt auth
```
Pour le développement, utilisez une clé commençant par `gtx-dev-`. Les clés de production (`gtx-api-`) sont réservées au CI/CD.
N’exposez jamais de clés d’API de production dans le bundle de votre application et ne les versionnez jamais.
Oui. Sans clés d’API, `gt-react-native` fonctionne comme une bibliothèque d’i18n standard. Vous n’aurez pas la traduction à la demande en développement, mais vous pouvez quand même :
* Fournir manuellement vos propres fichiers de traduction
* Utiliser tous les composants (``, ``, `LocaleSelector`, etc.)
* Exécuter `npx gt generate` pour créer des modèles de fichiers de traduction, puis les traduire vous-même
***
## Étape 9 : Vérifiez que cela fonctionne
Démarrez votre build de développement :
```bash
npx expo start --dev-client
```
**Expo Go ne fonctionne pas** avec `gt-react-native`, car il inclut un module natif. Vous avez besoin d’une [build de développement](https://docs.expo.dev/develop/development-builds/introduction/) :
```bash
npx expo run:ios
# ou
npx expo run:android
```
Utilisez le sélecteur de langue pour passer d’une langue à l’autre. Votre contenu devrait alors s’afficher traduit.
En développement, les traductions se font à la demande : vous pouvez voir un bref chargement la première fois que vous passez à une nouvelle langue. En production, les traductions sont pré-générées et se chargent instantanément.
***
## Étape 10 : Traduire les chaînes de caractères (pas seulement le JSX)
Pour les chaînes de caractères simples — comme les attributs `placeholder` ou les valeurs `accessibilityLabel` — utilisez le hook **`useGT`** :
```tsx title="app/contact.tsx"
import { TextInput, View } from 'react-native';
import { useGT } from 'gt-react-native';
export default function Contact() {
const gt = useGT();
return (
);
}
```
***
## Étape 11 : Déployer en production
En production, les traductions sont pré-générées au moment du build (sans appel d’API en temps réel). Ajoutez la commande translate à votre script de build :
```json title="package.json"
{
"scripts": {
"build": "npx gt translate && "
}
}
```
Définissez vos variables d’environnement de **production** dans votre pipeline CI/CD (elles sont uniquement côté serveur, et non `EXPO_PUBLIC_`) :
```bash
GT_PROJECT_ID=your-project-id
GT_API_KEY=gtx-api-your-production-key
```
Les clés de production commencent par `gtx-api-` (et non `gtx-dev-`). Récupérez-en une sur [dash.generaltranslation.com](https://dash.generaltranslation.com). N’exposez jamais de clés de production dans le bundle de votre application.
C'est tout — votre application est désormais multilingue. 🎉
***
## Dépannage
```
ERROR [Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'GtReactNative' could not be found.]
```
Cela signifie que le module natif n'a pas été correctement lié. Causes fréquentes :
1. **Vous utilisez Expo Go** au lieu d'une version de développement. Passez à un build de développement :
```bash
npx expo run:ios
# or
npx expo run:android
```
2. **Les Pods ne sont pas à jour (iOS).** Essayez de les réinstaller :
```bash
cd ios && rm -rf build Pods Podfile.lock && pod install && cd ..
```
```
Error: You are using invalid locale codes in your configuration.
```
Cela signifie généralement que les polyfills ne sont pas correctement configurés. Assurez-vous que le plugin Babel est bien configuré (ou que les polyfills manuels sont importés), puis videz le cache :
```bash
npx expo start --clear
```
C'est normal. En développement, les traductions se font à la demande (votre contenu est traduit en temps réel via l'API). Ce délai **n'existe pas en production** : toutes les traductions sont pré-générées par `npx gt translate`.
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 lever l'ambiguïté :
```jsx
Apple
```
`` et `useGT()` prennent tous deux en charge l'option `context`.
***
## Étapes suivantes
* [**Guide du composant ``**](/docs/react-native/guides/t) — Découvrez les variables, les pluriels et les schémas de traduction avancés
* [**Guide de traduction des chaînes**](/docs/react-native/guides/strings) — Explorez `useGT` en profondeur
* [**Composants variables**](/docs/react-native/guides/variables) — Gérez le contenu dynamique avec ``, ``, `` et ``
* [**Déploiement en production**](/docs/react-native/tutorials/quickdeploy) — Configuration CI/CD, mise en cache et optimisation des performances