# react-native: Dictionnaires URL: https://generaltranslation.com/fr/docs/react-native/guides/dictionaries.mdx --- title: Dictionnaires description: Comment utiliser les approches traditionnelles de traduction à base de dictionnaires --- {/* GÉNÉRÉ AUTOMATIQUEMENT : ne modifiez pas ce fichier directement. Modifiez plutôt le modèle dans content/docs-templates/. */} Les dictionnaires offrent une approche classique pour organiser les traductions sous forme d’objets imbriqués avec des paires clé-valeur. Bien que les [composants ``](/docs/react-native/guides/t) soient l’approche recommandée, les dictionnaires peuvent être utiles lors d’une migration depuis d’autres bibliothèques d’i18n ou si vous préférez centraliser le stockage des traductions. **Recommandation :** Utilisez les [composants ``](/docs/react-native/guides/t) pour les nouveaux projets. Les dictionnaires sont pris en charge principalement pour la migration et la compatibilité avec les workflows de traduction existants. ## Dictionnaire ou traduction par composant ### Approche par dictionnaire ```tsx // dictionary.ts export default { greetings: { hello: 'Hello, world!', welcome: 'Welcome, {name}!' } }; // Utilisation du composant function MyComponent() { const t = useTranslations(); return
{t('greetings.hello')}
; } ``` ### Approche par composant ```tsx // Utilisation directe du composant - recommandée function MyComponent() { return
Hello, world!
; } ``` ## Arbitrages ### Avantages du dictionnaire * **Stockage centralisé** - Toutes les traductions au même endroit * **Standard du secteur** - Un modèle familier issu d'autres bibliothèques d'i18n * **Facilite la migration** - Permet de réutiliser facilement des traductions existantes ### Inconvénients du dictionnaire * **Complexité** - Nécessite davantage de configuration et de paramétrage * **Maintenance** - Le fait de séparer le contenu de son usage complique les mises à jour * **Débogage** - Il est plus difficile de faire le lien entre les traductions et les composants * **Lisibilité** - Les clés ne montrent pas le contenu réel ## Démarrage rapide ### Étape 1 : Créer un dictionnaire Créez un fichier de dictionnaire à la racine de votre projet ou dans le dossier `src` : ```ts title="dictionary.ts" const dictionary = { greetings: { hello: 'Hello, world!', welcome: 'Welcome to our app!' }, navigation: { home: 'Home', about: 'About', contact: 'Contact' } }; export default dictionary; ``` Ou utilisez le format JSON : ```json title="dictionary.json" { "greetings": { "hello": "Hello, world!", "welcome": "Welcome to our app!" }, "navigation": { "home": "Home", "about": "About", "contact": "Contact" } } ``` Ensuite, passez-le à votre composant [``](/docs/react-native/api/components/gtprovider) : ```jsx title="index.js" copy import dictionary from "./dictionary.js"; import config from "./gt.config.json"; createRoot(document.getElementById("root")!).render( {/* [!code highlight] */} ); ``` ### Étape 2 : Utiliser dans les composants Le hook [`useTranslations`](/docs/react-native/api/dictionary/use-translations) vous permet d’accéder aux entrées du dictionnaire : ```tsx import { useTranslations } from 'gt-react-native'; function MyComponent() { const t = useTranslations(); return (

{t('greetings.hello')}

{t('greetings.welcome')}

); } ``` ## Utilisation des variables Ajoutez des variables aux entrées du dictionnaire à l’aide de la syntaxe `{variable}` : ```ts title="dictionary.ts" const dictionary = { user: { greeting: 'Hello, {name}!', itemCount: 'You have {count} items', orderTotal: 'Total: ${amount}' } }; ``` ```tsx function UserDashboard() { const t = useTranslations(); return (

{t('user.greeting', { name: 'Alice' })}

{t('user.itemCount', { count: 5 })}

{t('user.orderTotal', { amount: 99.99 })}

); } ``` ## Utiliser des préfixes Limitez l’accès au dictionnaire à des sections spécifiques à l’aide de préfixes : ```ts title="dictionary.ts" const dictionary = { dashboard: { header: { welcome: 'Welcome back!', lastLogin: 'Last login: {date}' }, stats: { totalUsers: 'Total Users: {count}', activeUsers: 'Active Users: {count}' } } }; ``` ```tsx function DashboardHeader() { // Le préfixe limite l'accès à 'dashboard.header' const t = useTranslations('dashboard.header'); return (

{t('welcome')}

{/* -> dashboard.header.welcome */}

{t('lastLogin', { date: 'Today' })}

{/* -> dashboard.header.lastLogin */}
); } function DashboardStats() { // Préfixe différent pour la section stats const t = useTranslations('dashboard.stats'); return (

{t('totalUsers', { count: 1000 })}

{/* -> dashboard.stats.totalUsers */}

{t('activeUsers', { count: 150 })}

{/* -> dashboard.stats.activeUsers */}
); } ``` ## Prise en charge de plusieurs langues ### Traduction automatique (recommandée) La plupart des utilisateurs devraient utiliser [`loadTranslations`](/docs/react-native/api/config/load-translations) pour générer automatiquement les traductions à partir de votre dictionnaire de base : ```ts title="dictionary.ts" const dictionary = { common: { save: 'Save', cancel: 'Cancel', delete: 'Delete' }, forms: { required: 'This field is required', email: 'Please enter a valid email' } }; export default dictionary; ``` Créez ensuite une fonction `loadTranslations` pour charger les fichiers de traduction générés : ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { const translations = await import(`./_gt/${locale}.json`); return translations.default; } ``` Transmettez-le à votre `` : ```tsx title="src/index.tsx" import loadTranslations from './loadTranslations'; import dictionary from './dictionary'; createRoot(document.getElementById("root")!).render( ); ``` GT génère automatiquement les traductions pour les autres langues à partir de votre dictionnaire de base. Exécutez `npx gt translate` pour générer les traductions de toutes les langues configurées. ### Fichiers de traduction manuels (migration) Pour migrer depuis d’autres bibliothèques d’i18n ou depuis une gestion manuelle des traductions, utilisez [`loadDictionary`](/docs/react-native/api/config/load-dictionary): ```ts title="src/loadDictionary.ts" export default async function loadDictionary(locale: string) { const translations = await import(`../public/locales/${locale}.json`); return translations.default; } ``` Cela charge les fichiers de traduction JSON depuis le répertoire `public/locales/` de votre projet : **Choisissez la bonne approche :** utilisez [`loadTranslations`](/docs/react-native/api/config/load-translations) pour les nouveaux projets avec génération automatique des traductions, ou [`loadDictionary`](/docs/react-native/api/config/load-dictionary) si vous migrez des fichiers de traduction existants. ## Configuration de production ### Processus de build Ajoutez la traduction à votre pipeline de build : ```json title="package.json" { "scripts": { "build": "npx gt translate && <...YOUR_BUILD_COMMAND...>" } } ``` ### Comportement en développement et en production * **Développement**: entrées du dictionnaire traduites on-demand avec la clé API de développement * **Production**: toutes les traductions du dictionnaire sont pré-générées à l’étape de build ## Associer des composants Les dictionnaires et les [composants ``](/docs/react-native/guides/t) peuvent être utilisés ensemble : ```tsx function MixedApproach() { const t = useTranslations(); return (
{/* Dictionnaire pour les chaînes simples */}

{t('page.title')}

{/* composant `` pour le JSX complexe */}

This is a complex message with links.

{/* Dictionnaire pour les libellés de formulaire */}
); } ``` ## Étapes suivantes **Voyez-le en action :** Consultez l’[application d’exemple de l’approche par dictionnaire](https://github.com/gt-examples/dictionary-pattern) pour voir une démo fonctionnelle — [aperçu en direct](https://dictionary-pattern.generaltranslation.dev). * [Guide des langues](/docs/react-native/guides/languages) - Configurez les langues prises en charge et les paramètres régionaux * [Guide du contenu dynamique](/docs/key-concepts/dynamic-content) - Gérez les besoins de traduction à l'exécution * Références API : * [Hook `useTranslations`](/docs/react-native/api/dictionary/use-translations)