Aller au contenu

React Native et Expo

Sur mobile, le provider est le même que sur le web : @sonenta/react-i18next. Ce qui change, c'est le moment où les traductions arrivent et ce qui se passe quand il n'y a pas de réseau.

Le gain est là : corriger un texte ne demande pas de nouvelle version ni de passage par les stores, parce que les bundles se chargent à l'exécution.

Le même paquet que sur le web. Aucun module natif supplémentaire.

Fenêtre de terminal
npm i @sonenta/react-i18next

Le stockage du jeton utilise le secure store de la plateforme.

// App.tsx (Expo / React Native)
import { SonentaProvider } from "@sonenta/react-i18next";
export default function App() {
return (
<SonentaProvider
projectUuid="proj_xxx"
token={process.env.EXPO_PUBLIC_SONENTA_TOKEN}
defaultLocale="fr"
>
{/* votre navigation */}
</SonentaProvider>
);
}

3. Figez un jeu de bundles pour le premier démarrage

Section intitulée « 3. Figez un jeu de bundles pour le premier démarrage »

Une app mobile peut démarrer sans réseau. sonenta snapshot récupère les bundles publiés au moment du build et les écrit sur le disque, pour que l'app ait quelque chose à afficher avant le premier chargement CDN.

Fenêtre de terminal
npx sonenta snapshot --out ./assets/i18n
import snapshot from "./assets/i18n";
<SonentaProvider projectUuid="proj_xxx" snapshot={snapshot} autoStart>
{/* … */}
</SonentaProvider>

Au démarrage suivant, le provider rafraîchit depuis le CDN et bascule sur la version publiée. Si le CDN est injoignable, l'API sert les mêmes bundles en repli.

La remontée automatique des clés appelées sans traduction ne fonctionne pas en mode zéro réseau : elle a besoin du chemin snapshot avec autoStart: true. Si vous coupez le réseau entièrement, les clés manquantes ne remontent pas au dashboard, et il faut les repérer autrement.

C'est une limite du transport, pas un défaut de configuration : sans réseau, rien ne part.

Les add-ons d'évaluation par l'utilisateur final et d'édition en contexte ont un point d'entrée /native, qui se branche sur le même provider :

import { feedbackPlugin } from "@sonenta/feedback/native";
<SonentaProvider
projectUuid="proj_xxx"
plugins={[ feedbackPlugin({ onReady: (c) => (ctrl = c) }) ]}
>{/* … */}</SonentaProvider>