Posez votre question et obtenez un résumé du document en referencant cette page et le Provider AI de votre choix
Historique des versions
- "Importer les providers et les hooks directement depuis react-native-intlayer ; react-intlayer n'est plus nécessaire en tant que dépendance directe"v9.0.025/06/2026
- "Mettre à jour l'utilisation de l'API useIntlayer de Solid pour un accès direct aux propriétés"v8.9.004/05/2026
- "Ajouter la commande init"v7.5.930/12/2025
- "Ajouter la section de débogage"v6.1.602/10/2025
- "Historique initial"v5.5.1029/06/2025
Le contenu de cette page a été traduit à l'aide d'une IA.
Voir la dernière version du contenu original en anglaisIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Traduire votre application Expo et React Native | Internationalisation (i18n)
Table des matières
Pourquoi Intlayer plutôt que des alternatives ?
Par rapport aux solutions principales telles que react-native-localize ou i18next, Intlayer est une solution qui comprend des optimisations intégrées telles que :
Intlayer est optimisé pour fonctionner parfaitement avec React Native et Expo en offrant une portée du contenu au niveau des composants, une prise en charge de TypeScript et toutes les fonctionnalités nécessaires à la mise à l'échelle de l'internationalisation (i18n) dans les applications mobiles.
Déclarer le contenu directement au plus près de vos composants facilite la maintenance des applications de grande envergure. Vous pouvez dupliquer ou supprimer le dossier d'une fonctionnalité sans le fardeau mental de devoir passer en revue toute votre base de code de contenu. De plus, Intlayer est entièrement typé pour garantir l'exactitude de vos traductions.
La colocalisation du contenu réduit le contexte nécessaire aux grands modèles de langage (LLM). Intlayer est également livré avec une suite d'outils, tels qu'une CLI pour vérifier les traductions manquantes, un LSP, un MCP et des agent skills, afin de rendre l'expérience développeur (DX) encore plus fluide pour les agents IA.
Automatisez les traductions dans votre pipeline CI/CD en utilisant le LLM de votre choix au coût de votre propre fournisseur d'IA. Intlayer propose également un compilateur pour automatiser l'extraction de contenu, ainsi qu'une plateforme web pour vous aider à traduire en arrière-plan.
Associer de gros fichiers JSON à vos composants peut ralentir les performances et impacter la réactivité. Intlayer optimise le chargement du contenu directement au moment du build.
Bien plus qu'une simple solution i18n, Intlayer propose un éditeur visuel auto-hébergé et un CMS complet pour gérer votre contenu multilingue en temps réel. Cela rend la collaboration avec les traducteurs, concepteurs-rédacteurs et autres membres de l'équipe extrêmement simple. Le contenu peut être stocké localement et/ou à distance.
Au lieu de charger de lourds fichiers JSON dans vos pages, ne chargez que le contenu strictement nécessaire. Intlayer vous aide à réduire la taille de votre bundle et de vos vues jusqu'à 50 %.
Installer les dépendances
Voir Modèle d'application sur GitHub.
Depuis votre projet React Native, installez les packages suivants :
bashCopier le codeCopier le code dans le presse-papiers
npx intlayer@canary init --interactive # v9# npx intlayer init # v8Le flag
--interactiveest facultatif. Utilisezintlayer-cli initsi vous êtes un agent IA.Cette commande détectera votre environnement et installera les packages requis. Par exemple :
bashCopier le codeCopier le code dans le presse-papiers
npm install intlayer react-native-intlayerPackages
intlayer
La boîte à outils i18n principale pour la configuration, le contenu des dictionnaires, la génération de types et les commandes CLI.react-native-intlayer
Intégration React Native qui fournit les fournisseurs de contexte et les hooks React que vous utiliserez pour obtenir et changer les locales, les polyfills React Native et le plugin Metro pour intégrer Intlayer avec le bundler React Native. Il ré-exporte tout depuisreact-intlayer, vous n'avez donc besoin que de ce seul package dans une application React Native.
Créer une configuration Intlayer
Dans la racine de votre projet (ou à tout autre endroit pratique), créez un fichier de configuration Intlayer. Il pourrait ressembler à ceci :
intlayer.config.tsCopier le codeCopier le code dans le presse-papiers
/** * Si les types Locales ne sont pas disponibles, essayez de définir moduleResolution à "bundler" dans votre tsconfig.json */ import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // ... Ajoutez toutes les autres locales dont vous avez besoin ], defaultLocale: Locales.ENGLISH, }, }; export default config;Dans cette configuration, vous pouvez :
- Configurer votre liste de locales prises en charge.
- Définir une locale par défaut.
- Plus tard, vous pourrez ajouter des options plus avancées (par exemple, des logs, des répertoires de contenu personnalisés, etc.).
- Consultez la documentation de configuration d'Intlayer pour plus d'informations.
Ajouter le plugin Metro
Metro est un bundler pour React Native. C'est le bundler par défaut pour les projets React Native créés avec la commande
react-native init. Pour utiliser Intlayer avec Metro, vous devez ajouter le plugin dans votre fichiermetro.config.js:metro.config.jsCopier le codeCopier le code dans le presse-papiers
const { getDefaultConfig } = require("expo/metro-config");const { configMetroIntlayer } = require("react-native-intlayer/metro");module.exports = (async () => { const defaultConfig = getDefaultConfig(__dirname); return await configMetroIntlayer(defaultConfig);})();Note :
configMetroIntlayerest une fonction asynchrone. UtilisezconfigMetroIntlayerSyncà la place si vous souhaitez l'utiliser de manière synchrone, ou éviter une IIFE (Immediately Invoked Function Expression). Note :configMetroIntlayerSyncne permet pas de construire les dictionnaires intlayer au démarrage du serveurAjouter le fournisseur Intlayer
Pour garder synchronisée la langue de l'utilisateur dans toute votre application, vous devez envelopper votre composant racine avec le composant
IntlayerProviderdereact-native-intlayer.Importez toujours depuis
react-native-intlayer. SonIntlayerProviderinclut des polyfills pour l'API web utilisée par Intlayer, et le package ré-exporte tous les hooks et utilitaires dereact-intlayer.De plus, vous devez ajouter la fonction
intlayerPolyfillà votre fichierindex.jspour vous assurer qu'Intlayer puisse fonctionner correctement.app/_layout.tsxCopier le codeCopier le code dans le presse-papiers
import { Stack } from "expo-router"; import { getLocales } from "expo-localization"; import { IntlayerProvider } from "react-native-intlayer"; import { type FC } from "react"; const getDeviceLocale = () => getLocales()[0]?.languageTag; const RootLayout: FC = () => { return ( <IntlayerProvider defaultLocale={getDeviceLocale()}> <Stack> <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> </Stack> </IntlayerProvider> ); }; export default RootLayout;Déclarez Votre Contenu
Créez des fichiers de déclaration de contenu n'importe où dans votre projet (généralement dans
src/), en utilisant l'un des formats d'extension pris en charge par Intlayer :.content.json.content.jsonc.content.json5.content.ts.content.tsx.content.js.content.jsx.content.mjs.content.mjx.content.cjs.content.md.content.mdx.content.yaml.content.yml- etc.
Expo Router (web) : gardez les fichiers
.content.*en dehors du répertoireapp/. Expo Router traite chaque fichier JavaScript/TypeScript dansapp/comme une route. Sur le web, sa découverte de routes scanne directement le système de fichiers et ne respecte pas leresolver.blockListde Metro, donc un*.content.tsco-localisé est enregistré comme une route. Un fichier tel queapp/(tabs)/_layout.content.tsest même analysé comme un layout (la partie.contentest lue comme un suffixe de plateforme), ce qui entre en conflit avec le vrai_layout.tsxet renvoie une erreur :plaintextCopier le codeCopier le code dans le presse-papiers
The layouts "./(tabs)/_layout.content.ts" and "./(tabs)/_layout.tsx" conflict on the route "/(tabs)/_layout.content". Remove or rename one of these files.Placez vos déclarations dans un répertoire en dehors de
app/(par exemplecontent/ousrc/content/). Intlayer découvre les fichiers.content.*n'importe où dans le projet et les dictionnaires sont référencés par leurkey, donc aucune modification d'importation n'est nécessaire. En natif, ce n'est pas requis (leblockListde Metro les cache déjà), mais l'utilisation d'un répertoire autre queapp/permet aux deux plateformes de fonctionner.Exemple (TypeScript avec des nœuds TSX pour React Native) :
src/app.content.tsxCopier le codeCopier le code dans le presse-papiers
import { t, type Dictionary } from "intlayer"; import type { ReactNode } from "react"; /** * Dictionnaire de contenu pour notre domaine "app" */ import { t, type Dictionary } from "intlayer"; const homeScreenContent = { key: "home-screen", content: { title: t({ en: "Welcome!", fr: "Bienvenue!", es: "¡Bienvenido!", }), }, } satisfies Dictionary; export default homeScreenContent;Pour plus de détails sur les déclarations de contenu, consultez la documentation du contenu d'Intlayer.
Utiliser Intlayer dans vos composants
Utilisez le hook
useIntlayerdans les composants enfants pour obtenir du contenu localisé.Exemple
app/(tabs)/index.tsxCopier le codeCopier le code dans le presse-papiers
import { Image, StyleSheet, Platform } from "react-native"; import { useIntlayer } from "react-native-intlayer"; import { HelloWave } from "@/components/HelloWave"; import ParallaxScrollView from "@/components/ParallaxScrollView"; import { ThemedText } from "@/components/ThemedText"; import { ThemedView } from "@/components/ThemedView"; import { type FC } from "react"; const HomeScreen = (): FC => { const { title, steps } = useIntlayer("home-screen"); return ( <ParallaxScrollView headerBackgroundColor={{ light: "#A1CEDC", dark: "#1D3D47" }} headerImage={ <Image source={require("@/assets/images/partial-react-logo.png")} style={styles.reactLogo} /> } > <ThemedView style={styles.titleContainer}> <ThemedText type="title">{title}</ThemedText> <HelloWave /> </ThemedView> </ParallaxScrollView> ); }; const styles = StyleSheet.create({ titleContainer: { flexDirection: "row", alignItems: "center", gap: 8, }, }); export default HomeScreen;Lors de l'utilisation de
content.someKeydans des props basées sur des chaînes (par exemple, letitled'un bouton ou leschildrend'un composantText), appelezcontent.someKey.valuepour obtenir la chaîne réelle.Si votre application existe déjà, vous pouvez utiliser le Compilateur Intlayer, ainsi que la commande d'extraction, pour transformer des milliers de composants en une seconde.
Changer la langue de l'application
FacultatifPour changer la langue depuis vos composants, vous pouvez utiliser la méthode
setLocaledu hookuseLocale:src/components/LocaleSwitcher.tsxCopier le codeCopier le code dans le presse-papiers
import { type FC } from "react"; import { View, Text, TouchableOpacity, StyleSheet } from "react-native"; import { getLocaleName } from "intlayer"; import { useLocale } from "react-native-intlayer"; export const LocaleSwitcher: FC = () => { const { setLocale, availableLocales } = useLocale(); return ( <View style={styles.container}> {availableLocales.map((locale) => ( <TouchableOpacity key={locale} style={styles.button} onPress={() => setLocale(locale)} > <Text style={styles.text}>{getLocaleName(locale)}</Text> </TouchableOpacity> ))} </View> ); }; const styles = StyleSheet.create({ container: { flexDirection: "row", justifyContent: "center", alignItems: "center", gap: 8, }, button: { paddingVertical: 6, paddingHorizontal: 12, borderRadius: 6, backgroundColor: "#ddd", }, text: { fontSize: 14, fontWeight: "500", color: "#333", }, });Cela déclenche un nouveau rendu de tous les composants qui utilisent le contenu Intlayer, affichant désormais les traductions pour la nouvelle locale.
Voir la documentation de
useLocalepour plus de détails.
Configurer TypeScript (si vous utilisez TypeScript)
Intlayer génère des définitions de types dans un dossier caché (par défaut .intlayer) pour améliorer l'autocomplétion et détecter les erreurs de traduction :
Copier le code dans le presse-papiers
// tsconfig.json{ // ... votre configuration TS existante "include": [ "src", // votre code source ".intlayer/types/**/*.ts", // <-- assurez-vous que les types générés automatiquement sont inclus // ... tout autre élément que vous incluez déjà ],}C'est ce qui permet des fonctionnalités telles que :
- Autocomplétion pour vos clés de dictionnaire.
- Vérification de type qui avertit si vous accédez à une clé inexistante ou si le type ne correspond pas.
Configuration Git
Pour éviter de committer les fichiers générés automatiquement par Intlayer, ajoutez ce qui suit à votre .gitignore :
Copier le code dans le presse-papiers
# Ignorer les fichiers générés par Intlayer.intlayerExtension VS Code
Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l'extension officielle Intlayer pour VS Code.
Installer depuis le Marketplace VS Code
Cette extension offre :
- Autocomplétion pour les clés de traduction.
- Détection d'erreurs en temps réel pour les traductions manquantes.
- Aperçus en ligne du contenu traduit.
- Actions rapides pour créer et mettre à jour facilement les traductions.
Pour plus de détails sur l'utilisation de l'extension, consultez la documentation de l'extension VS Code Intlayer.
Aller plus loin
- Éditeur Visuel : Utilisez le Éditeur Visuel Intlayer pour gérer les traductions visuellement.
- Intégration CMS : Vous pouvez également externaliser et récupérer le contenu de votre dictionnaire depuis un CMS.
- Commandes CLI : Explorez le CLI Intlayer pour des tâches telles que l'extraction des traductions ou la vérification des clés manquantes.
Profitez de la création de vos applications React Native avec une i18n pleinement optimisée grâce à Intlayer !
Débogage
React Native peut être moins stable que React Web, donc faites particulièrement attention à l'alignement des versions.
Intlayer cible principalement l'API Web Intl ; sur React Native, vous devez inclure les polyfills appropriés.
Checklist :
- Utilisez les dernières versions de
intlayeretreact-native-intlayer. - Activez le polyfill Intlayer.
- Si vous utilisez
getLocaleNameou d'autres utilitaires basés sur l'API Intl, importez ces polyfills tôt (par exemple dansindex.jsouApp.tsx) :
Copier le code dans le presse-papiers
import "intl";import "@formatjs/intl-getcanonicallocales/polyfill";import "@formatjs/intl-locale/polyfill";import "@formatjs/intl-pluralrules/polyfill";import "@formatjs/intl-displaynames/polyfill";import "@formatjs/intl-listformat/polyfill";import "@formatjs/intl-numberformat/polyfill";import "@formatjs/intl-relativetimeformat/polyfill";import "@formatjs/intl-datetimeformat/polyfill";- Vérifiez votre configuration Metro (resolver aliases, asset plugins, chemins
tsconfig) si les modules ne se résolvent pas.