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.