Gå til innholdet
Sonenta

Veiledning · Nesting av nøkler

Flate eller nestede nøkler

Som standard deler Sonenta nøklene dine på . i et nestet JSON-tre i CDN-bundlen — den klassiske i18next-formen. Det er perfekt for organiserte nøkler som checkout.review.confirm, men det forvrenger stille nøkler hvis tekst inneholder et punktum. Denne veiledningen dekker prosjektinnstillingen og det tilsvarende SDK-alternativet slik at oppslagene dine alltid løses.

Fellen med nøkler med punktum

En nøkkel er bare en streng. Når den strengen inneholder et bokstavelig punktum — en versjon som App Version 6.3.8, en pris, et filnavn, en skriftstedsreferanse som Jean 3.16 — gjør deling på . én nøkkel om til et utilsiktet nestet objekt. Oversettelsen er fremdeles lagret, men t("App Version 6.3.8") finner den ikke lenger.

bundle.json
1// your source key — a literal label with dots in it2{ "App Version 6.3.8": "App Version 6.3.8" } 4// nested bundle (default) — split on "." → broken tree5{ "App Version 6": { "3": { "8": "App Version 6.3.8" } } } 7// flat bundle — the key stays literal, lookups just work8{ "App Version 6.3.8": "App Version 6.3.8" }

Prosjektinnstillingen

To innstillinger på prosjektnivå styrer hvordan CDN-bundlen formes. Standardverdiene reproduserer dagens i18next-atferd, så eksisterende prosjekter påvirkes ikke før du melder deg inn.

Innstilling Verdier Standard
bundle_key_style nested | flat nested
bundle_key_separator string "."

Sett dem på prosjektet — i prosjektinnstillingene i dashbordet ditt, eller via prosjekt-API-et. Den valgte stilen bakes inn i hver release, og hver publisert versjon rapporterer den tilbake, slik at enhver klient kan selvkonfigurere.

versions/main
1# the version object reports the active key style2GET /v1/projects/<project_uuid>/versions/main 4{ "slug": "main", "key_style": "flat", "key_separator": "." }

Velge flat eller nestet

bundle_key_style: flat

Nøkler deles aldri — hver enkelt lagres og slås opp bokstavelig. Velg dette når nøklene dine inneholder punktum eller er naturlig tekst: versjoner, priser, filnavn, skriftsteds- eller juridiske referanser. App Version 6.3.8 forblir nøyaktig det.

bundle_key_style: nested

Nøkler deles på skilletegnet til et JSON-tre — det klassiske i18next-oppsettet. Velg dette for bevisst namespacede nøkler som checkout.review.confirm. Dette er standarden.

Match det i SDK-en

@sonenta/react-i18next (>= 0.11.0) tar et keySeparator-alternativ: false for bokstavelige / flate oppslag, en streng for nestet, standard ".". Det finnes også nsSeparator (standard ":"). SDK-en er bokstavelig-først — den prøver et eksakt bundle[key]-treff før all deling, så nøkler med punktum løses selv i nestet modus. Ved start() autodetekterer den også key_style / key_separator fra den publiserte versjonen (best-effort).

main.tsx
1// src/main.tsx — match the bundle in @sonenta/react-i18next >= 0.11.02import { SonentaProvider } from "@sonenta/react-i18next"; 4<SonentaProvider5  projectUuid="<project_uuid>"6  token={import.meta.env.VITE_SONENTA_TOKEN}7  keySeparator={false}   // literal lookup — for dotted / natural-text keys8  nsSeparator=":"        // default; set false to disable ns parsing too9>10  <App />11</SonentaProvider> 13// then t() treats the whole string as one key — no splitting14t("App Version 6.3.8");   // ✓ exact match

Autodeteksjonen leser versjonsmetadataene og trenger en nøkkel med project:read. Hvis den lesingen nektes (403) faller SDK-en pent tilbake til standardverdiene sine — så når du er i tvil, sett keySeparator eksplisitt for å matche bundlen din heller enn å stole på deteksjon.

Anbefaling

  • Inneholder nøklene dine punktum? Sett bundle_key_style: flat på prosjektet og keySeparator={false} i SDK-en. Bokstavelig i begge ender — ingen overraskelser.
  • Rent namespacede nøkler (checkout.review.confirm)? Behold den nestede standarden; ingenting å endre.
  • Migrerer du en eksisterende app? Standardverdiene bevarer din nåværende atferd. Bytt til flat kun når du støter på en nøkkel med punktum, deretter republiser og oppdater SDK-alternativet samtidig.

Videre