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.
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
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: flatpå prosjektet ogkeySeparator={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.