Le chiavi non vengono mai divise — ciascuna è memorizzata e ricercata letteralmente. Scegliete questa opzione quando le vostre chiavi contengono punti o sono testo naturale: versioni, prezzi, nomi di file, riferimenti biblici o giuridici. App Version 6.3.8 resta esattamente questo.
Guida · Annidamento delle chiavi
Chiavi piatte o annidate
Per impostazione predefinita, Sonenta divide le vostre chiavi sul . in un albero JSON annidato nel bundle CDN — la forma classica di i18next. Perfetto per chiavi organizzate come checkout.review.confirm, ma rovina silenziosamente le chiavi il cui testo contiene un punto. Questa guida copre l'impostazione di progetto e l'opzione SDK corrispondente affinché le vostre ricerche vadano sempre a buon fine.
La trappola delle chiavi con punti
Una chiave è solo una stringa. Quando quella stringa contiene un punto letterale — una versione come App Version 6.3.8, un prezzo, un nome di file, un riferimento biblico come Jean 3.16 — la divisione sul . trasforma un'unica chiave in un oggetto annidato accidentale. La traduzione è comunque memorizzata, ma t("App Version 6.3.8") non la trova più.
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" } L'impostazione di progetto
Due impostazioni a livello di progetto determinano la forma del bundle CDN. I valori predefiniti riproducono il comportamento i18next attuale: i progetti esistenti non cambiano finché non aderite esplicitamente.
| Impostazione | Valori | Predefinito |
|---|---|---|
| bundle_key_style | nested | flat | nested |
| bundle_key_separator | string | "." |
Impostatele sul progetto — nelle impostazioni di progetto della vostra dashboard, oppure tramite l'API progetti. Lo stile scelto viene fissato in ogni release, e ogni versione pubblicata lo restituisce, in modo che qualsiasi client possa auto-configurarsi.
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": "." } Scegliere piatto o annidato
Le chiavi vengono divise sul separatore in un albero JSON — la disposizione i18next classica. Scegliete questa opzione per chiavi deliberatamente in namespace come checkout.review.confirm. È il valore predefinito.
Allineare l'SDK
@sonenta/react-i18next (>= 0.11.0) accetta un'opzione keySeparator: false per ricerche letterali / piatte, una stringa per l'annidato, predefinito ".". C'è anche nsSeparator (predefinito ":"). L'SDK è letterale prima di tutto — tenta una corrispondenza esatta bundle[key] prima di qualsiasi divisione, quindi le chiavi con punti vanno a buon fine anche in modalità annidata. Al start(), auto-rileva anche key_style / key_separator dalla versione pubblicata (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 L'auto-rilevamento legge i metadati di versione e richiede una chiave con project:read. Se questa lettura viene negata (403), l'SDK ripiega in modo pulito sui propri valori predefiniti — quindi nel dubbio impostate keySeparator esplicitamente per corrispondere al vostro bundle invece di affidarvi al rilevamento.
Raccomandazione
- Le vostre chiavi contengono punti? Impostate
bundle_key_style: flatsul progetto ekeySeparator={false}nell'SDK. Letterale su entrambi i lati — nessuna sorpresa. - Chiavi pulitamente in namespace (
checkout.review.confirm)? Mantenete il valore predefinito annidato; niente da cambiare. - State migrando un'app esistente? I valori predefiniti preservano il vostro comportamento attuale. Passate a flat solo quando incontrate una chiave con punti, poi ripubblicate e aggiornate l'opzione SDK allo stesso tempo.