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.