Vai al contenuto
Sonenta

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

bundle_key_style: flat

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.

bundle_key_style: nested

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: flat sul progetto e keySeparator={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.

Avanti