Gå til innholdet
Sonenta

Veiledning · Migrering

Migrer fra i18next

Allerede i produksjon med i18next? @sonenta/react-i18next er en drop-in-erstatning for react-i18next — samme useTranslation()- og t()-API: du bytter bare provider, og oversettelsene dine kommer live fra CDN. Ta de eksisterende locales/-filene dine inn i Sonenta med én enkelt kommando, og behold koden din nøyaktig som den er. Importen oppretter de manglende nøklene, upserter hver oversettelse, og er fullstendig idempotent: du kan kjøre den på nytt fra CI uten frykt. Her er hele stien: installere, importere, publisere, verifisere, koble til SDK-en.

Før du begynner

Tre ting, så er du klar til å importere:

1. Installer og initialiser

Installer CLI-en globalt, generer en config som peker mot prosjektet ditt, og eksporter nøkkelen din.

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 skriver en sonenta.config.json du kan committe. I CI hopper du over init og sender --project pluss miljøvariabelen SONENTA_TOKEN. sonenta og SONENTA_* er kanoniske; den eldre sonenta-kommandoen og SONENTA_*-variablene fungerer fortsatt i overgangsperioden.

2. Forhåndsvis, deretter importer

Importøren leser stien til hver fil for å utlede språk og namespace, så et konvensjonelt locales/-tre trenger ingen flagg. Kjør en dry-run først for å se planen, og fjern deretter --dry-run for å anvende den.

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

Trær kan være nestede eller flate — begge importeres identisk. --status setter innkommende status (draft eller translated, standard translated); --version sikter mot en ikke-standard versjon. Flertallsformer uttrykt som en CLDR-dict ({ one, other }) lagres automatisk som flertallsformer.

3. Publiser til CDN

Importen fyller prosjektet; publiseringen gjør det serverbart. Skjær en release, og bundlene propagerer til det globale CDN-et som SDK-en leser fra.

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

Releaser er uforanderlige snapshots av en versjon. Republiser hver gang du importerer nytt innhold — både SDK-en og det statiske bygget ditt henter den nyeste releasen.

4. Verifiser bundlen

Bekreft at innholdet er live. En publisert bundle er en enkel, offentlig JSON-fil per språk og namespace — hent en direkte, eller åpne prosjektet i dashbordet.

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

404 på et språk? Det er ikke ett av prosjektets språk ennå, eller releasen har ikke propagert — vent noen sekunder og prøv igjen.

5. Pek SDK-en din mot Sonenta

Bytt ut i18next-backenden din med Sonenta-provideren. Dine t()-kall, nøkler og namespaces forblir de samme — oversettelsene kommer nå fra CDN-bundlen du nettopp publiserte.

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>

Nøkler som inneholder punktum (en versjon, en pris, en skriftstedsreferanse)? Sett keySeparator={false} og bytt prosjektet til flat — se veiledningen Flate eller nestede nøkler. Ellers fungerer den nestede standarden som den er.

Kjørbar på nytt når som helst

sonenta import er idempotent: å reimportere identisk innhold endrer ingenting (0 opprettet, 0 oppdatert, N uendret). Koble det inn i CI for å holde Sonenta synkronisert med repoet ditt — det oppretter kun det som mangler og oppdaterer kun det som faktisk har endret seg.

Hva importøren håndterer

Videre