Aller au contenu
Sonenta

Guide · Migration

Migrer depuis i18next

Déjà en production avec i18next ? @sonenta/react-i18next est un remplacement direct (drop-in) de react-i18next — même API useTranslation() et t() : vous changez simplement le provider et vos traductions arrivent en direct du CDN. Amenez vos fichiers locales/ existants dans Sonenta en une seule commande, puis gardez votre code tel quel. L'import crée les clés manquantes, met à jour chaque traduction, et est totalement idempotent : vous pouvez le relancer depuis la CI sans crainte. Voici le chemin complet : installer, importer, publier, vérifier, brancher le SDK.

Avant de commencer

Trois choses, et vous êtes prêt à importer :

1. Installer et initialiser

Installez la CLI globalement, générez une config pointant vers votre projet, et exportez votre clé.

terminal
1# one global install — gives you the `sonenta` command (Node >= 18)2npm i -g @sonenta/cli 4# scaffold sonenta.config.json and point it at your project5sonenta init --project <project_uuid> 7# the CLI talks to the MCP surface — use an mcp:* scoped key8export SONENTA_TOKEN=snt_live_<prefix>.<secret>

sonenta init écrit un sonenta.config.json que vous pouvez committer. En CI, sautez init et passez --project plus la variable d'environnement SONENTA_TOKEN. sonenta et SONENTA_* sont canoniques ; l'ancienne commande sonenta et les variables SONENTA_* fonctionnent encore pendant la transition.

2. Prévisualiser, puis importer

L'import lit le chemin de chaque fichier pour en déduire la langue et le namespace : un arbre locales/ conventionnel ne nécessite aucune option. Faites un dry-run d'abord pour voir le plan, puis retirez --dry-run pour l'appliquer.

your repo
1# the importer infers (language, namespace) from each path:2#   <lang>/<namespace>.json3locales/4├─ en/5│  ├─ common.json     → language en · namespace common6│  └─ checkout.json   → language en · namespace checkout7└─ fr/8   ├─ common.json     → language fr · namespace common9   └─ checkout.json   → language fr · namespace checkout
terminal
1# preview first — no writes, prints exactly what WOULD change2sonenta import "./locales/**/*.json" --dry-run 4# the real run — idempotent, safe to repeat5sonenta import "./locales/**/*.json" 7✓ common · checkout   (en, fr)8  keys           312 created · 0 reused9  translations   624 created · 0 updated · 0 unchanged10  errors 0 · glossary 0 violations 12# non-standard layout? override the inference per file:13sonenta import strings.fr.json --language fr --namespace common

Les arbres peuvent être imbriqués ou plats — les deux s'importent à l'identique. --status fixe le statut entrant (draft ou translated, défaut translated) ; --version cible une version non par défaut. Les pluriels exprimés en dictionnaire CLDR ({ one, other }) sont stockés en formes plurielles automatiquement.

3. Publier sur le CDN

L'import remplit le projet ; la publication le rend servable. Coupez une release et les bundles se propagent sur le CDN mondial que lit le SDK.

terminal
1# cut a CDN release so the SDK and your build can fetch it2sonenta releases publish 4→ released "main" · propagating to cdn.sonenta.com

Les releases sont des instantanés immuables d'une version. Re-publiez dès que vous importez du nouveau contenu — le SDK comme votre build statique récupèrent la dernière release.

4. Vérifier le bundle

Confirmez que le contenu est en ligne. Un bundle publié est un simple fichier JSON public par langue et namespace — récupérez-en un directement, ou ouvrez le projet dans le dashboard.

terminal
1# the published bundle is public — no auth needed2curl -s https://cdn.sonenta.com/p/<project_uuid>/main/latest/fr/common.json

Un 404 sur une langue ? Elle ne fait pas encore partie des langues du projet, ou la release ne s'est pas propagée — patientez quelques secondes et réessayez.

5. Brancher votre SDK sur Sonenta

Remplacez votre backend i18next par le provider Sonenta. Vos appels t(), vos clés et vos namespaces restent identiques — les traductions viennent maintenant du bundle CDN que vous venez de publier.

main.tsx
1// src/main.tsx — point @sonenta/react-i18next at the same project2import { SonentaProvider } from "@sonenta/react-i18next"; 4<SonentaProvider5  projectUuid="<project_uuid>"6  token={import.meta.env.VITE_SONENTA_TOKEN}7  defaultLocale="fr"8  namespaces={["common", "checkout"]}9>10  <App />11</SonentaProvider>

Des clés qui contiennent des points (une version, un prix, une référence biblique) ? Mettez keySeparator={false} et passez le projet en flat — voir le guide Clés plates ou imbriquées. Sinon, le défaut imbriqué fonctionne tel quel.

Ré-exécutable à tout moment

sonenta import est idempotent : ré-importer un contenu identique ne change rien (0 créées, 0 mises à jour, N inchangées). Branchez-le dans la CI pour garder Sonenta synchronisé avec votre dépôt — il ne crée que ce qui manque et ne met à jour que ce qui a réellement changé.

Ce que l'import gère

Ensuite