Hoppa till innehållet
Sonenta

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

bundle_key_style: flat

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.

bundle_key_style: nested

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: flat på projektet och keySeparator={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.

Härnäst