Nycklar delas aldrig — var och en lagras och slås upp bokstavligt. Välj detta när dina nycklar innehåller punkter eller är naturlig text: versioner, priser, filnamn, bibel- eller juridiska hänvisningar. App Version 6.3.8 förblir exakt det.
Guide · Nästling av nycklar
Platta eller nästlade nycklar
Som standard delar Sonenta upp dina nycklar på . till ett nästlat JSON-träd i CDN-bunten — den klassiska i18next-formen. Det är perfekt för organiserade nycklar som checkout.review.confirm, men det förvanskar tyst nycklar vars text innehåller en punkt. Den här guiden täcker projektinställningen och det motsvarande SDK-alternativet så att dina uppslagningar alltid löses.
Fällan med nycklar som har punkter
En nyckel är bara en sträng. När den strängen innehåller en bokstavlig punkt — en version som App Version 6.3.8, ett pris, ett filnamn, en bibelhänvisning som Jean 3.16 — förvandlar uppdelningen på . en nyckel till ett oavsiktligt nästlat objekt. Översättningen lagras fortfarande, men t("App Version 6.3.8") hittar den inte längre.
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" } Projektinställningen
Två inställningar på projektnivå styr hur CDN-bunten formas. Standardvärdena återskapar det nuvarande i18next-beteendet, så befintliga projekt påverkas inte förrän du väljer att aktivera det.
| Inställning | Värden | Standard |
|---|---|---|
| bundle_key_style | nested | flat | nested |
| bundle_key_separator | string | "." |
Ställ in dem på projektet — i din dashboards projektinställningar, eller via projekt-API:t. Den valda stilen bakas in i varje release, och varje publicerad version rapporterar tillbaka den, så att vilken klient som helst kan självkonfigurera sig.
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": "." } Välja platt eller nästlat
Nycklar delas på separatorn till ett JSON-träd — det klassiska i18next-upplägget. Välj detta för avsiktligt namespace-indelade nycklar som checkout.review.confirm. Detta är standardvärdet.
Matcha det i SDK:t
@sonenta/react-i18next (>= 0.11.0) tar ett keySeparator-alternativ: false för bokstavliga / platta uppslagningar, en sträng för nästlat, standard ".". Det finns också nsSeparator (standard ":"). SDK:t är bokstavligt först — det provar en exakt bundle[key]-matchning före all uppdelning, så nycklar med punkter löses även i nästlat läge. Vid start() autodetekterar det också key_style / key_separator från den publicerade versionen (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 Autodetekteringen läser versionsmetadata och behöver en nyckel med project:read. Om den läsningen nekas (403) faller SDK:t tillbaka snyggt på sina standardvärden — så vid tveksamhet, sätt keySeparator explicit för att matcha din bunt i stället för att förlita dig på detektering.
Rekommendation
- Innehåller dina nycklar punkter? Sätt
bundle_key_style: flatpå projektet ochkeySeparator={false}i SDK:t. Bokstavligt i båda ändar — inga överraskningar. - Snyggt namespace-indelade nycklar (
checkout.review.confirm)? Behåll den nästlade standarden; inget att ändra. - Migrerar du en befintlig app? Standardvärdena bevarar ditt nuvarande beteende. Växla till platt först när du stöter på en nyckel med punkter, publicera sedan om och uppdatera SDK-alternativet samtidigt.