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