Vai al contenuto
Sonenta

Guida · Migrazione

Migrare da i18next

Già in produzione con i18next? @sonenta/react-i18next è un sostituto diretto (drop-in) di react-i18next — stessa API useTranslation() e t(): basta cambiare il provider e le vostre traduzioni arrivano in tempo reale dal CDN. Portate i vostri file locales/ esistenti in Sonenta con un solo comando, poi lasciate il vostro codice così com'è. L'import crea le chiavi mancanti, aggiorna ogni traduzione ed è completamente idempotente: potete rilanciarlo dalla CI senza timori. Ecco l'intero percorso: installare, importare, pubblicare, verificare, collegare l'SDK.

Prima di iniziare

Tre cose, e siete pronti a importare:

1. Installare e inizializzare

Installate la CLI globalmente, generate una config che punta al vostro progetto ed esportate la vostra chiave.

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 scrive un sonenta.config.json che potete committare. In CI, saltate init e passate --project più la variabile d'ambiente SONENTA_TOKEN. sonenta e SONENTA_* sono canonici; il vecchio comando sonenta e le variabili SONENTA_* funzionano ancora durante la transizione.

2. Anteprima, poi import

L'import legge il percorso di ogni file per dedurne lingua e namespace: un albero locales/ convenzionale non richiede alcuna opzione. Fate prima un dry-run per vedere il piano, poi rimuovete --dry-run per applicarlo.

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

Gli alberi possono essere annidati o piatti — entrambi si importano in modo identico. --status imposta lo stato in ingresso (draft o translated, predefinito translated); --version punta a una versione non predefinita. I plurali espressi come dizionario CLDR ({ one, other }) vengono memorizzati automaticamente come forme plurali.

3. Pubblicare sul CDN

L'import riempie il progetto; la pubblicazione lo rende servibile. Tagliate una release e i bundle si propagano sul CDN globale da cui legge l'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

Le release sono istantanee immutabili di una versione. Ripubblicate ogni volta che importate nuovi contenuti — sia l'SDK sia la vostra build statica recuperano l'ultima release.

4. Verificare il bundle

Confermate che il contenuto è online. Un bundle pubblicato è un semplice file JSON pubblico per lingua e namespace — recuperatene uno direttamente, oppure aprite il progetto nella 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 su una lingua? Non fa ancora parte delle lingue del progetto, oppure la release non si è propagata — attendete qualche secondo e riprovate.

5. Puntare il vostro SDK su Sonenta

Sostituite il vostro backend i18next con il provider Sonenta. Le vostre chiamate t(), le chiavi e i namespace restano identici — le traduzioni ora provengono dal bundle CDN che avete appena pubblicato.

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>

Chiavi che contengono punti (una versione, un prezzo, un riferimento biblico)? Impostate keySeparator={false} e passate il progetto a flat — vedi la guida Chiavi piatte o annidate. Altrimenti il valore predefinito annidato funziona così com'è.

Rilanciabile in qualsiasi momento

sonenta import è idempotente: reimportare contenuti identici non cambia nulla (0 create, 0 aggiornate, N invariate). Collegatelo alla CI per mantenere Sonenta sincronizzato con il vostro repository — crea solo ciò che manca e aggiorna solo ciò che è realmente cambiato.

Cosa gestisce l'import

Avanti