Ir para o conteúdo
Sonenta

Guia · Aninhamento de chaves

Chaves planas ou aninhadas

Por omissão, a Sonenta divide as suas chaves no . numa árvore JSON aninhada no bundle CDN, a forma clássica do i18next. É perfeito para chaves organizadas como checkout.review.confirm, mas quebra silenciosamente as chaves cujo texto contém um ponto. Este guia cobre a definição do projeto e a opção SDK correspondente para que as suas pesquisas resolvam sempre.

A armadilha das chaves com pontos

Uma chave é apenas uma string. Quando essa string contém um ponto literal, uma versão como App Version 6.3.8, um preço, um nome de ficheiro, uma referência bíblica como Jean 3.16, a divisão no . transforma uma única chave num objeto aninhado acidental. A tradução continua armazenada, mas t("App Version 6.3.8") já não a encontra.

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" }

A definição do projeto

Duas definições ao nível do projeto controlam a forma do bundle CDN. Os valores por omissão reproduzem o comportamento atual do i18next, pelo que os projetos existentes não são afetados até que opte explicitamente.

Definição Valores Por omissão
bundle_key_style nested | flat nested
bundle_key_separator string "."

Defina-as no projeto, nas definições de projeto do seu dashboard, ou através da API de projetos. O estilo escolhido é fixado em cada release, e cada versão publicada devolve-o, de modo que qualquer cliente se pode autoconfigurar.

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": "." }

Escolher plano ou aninhado

bundle_key_style: flat

As chaves nunca são divididas, cada uma é armazenada e pesquisada literalmente. Escolha isto quando as suas chaves contêm pontos ou são texto natural: versões, preços, nomes de ficheiros, referências bíblicas ou jurídicas. App Version 6.3.8 permanece exatamente isso.

bundle_key_style: nested

As chaves são divididas no separador numa árvore JSON, a disposição clássica do i18next. Escolha isto para chaves deliberadamente com namespace como checkout.review.confirm. É o valor por omissão.

Alinhar o SDK

@sonenta/react-i18next (>= 0.11.0) aceita uma opção keySeparator: false para pesquisas literais / planas, uma string para aninhado, por omissão ".". Existe também nsSeparator (por omissão ":"). O SDK é literal primeiro, tenta uma correspondência exata bundle[key] antes de qualquer divisão, pelo que as chaves com pontos resolvem mesmo em modo aninhado. No start(), também deteta automaticamente key_style / key_separator a partir da versão publicada (na melhor das hipóteses).

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

A deteção automática lê os metadados da versão e precisa de uma chave com project:read. Se essa leitura for recusada (403), o SDK recorre de forma limpa aos seus valores por omissão, por isso, em caso de dúvida, defina keySeparator explicitamente para corresponder ao seu bundle em vez de depender da deteção.

Recomendação

  • As suas chaves contêm pontos? Defina bundle_key_style: flat no projeto e keySeparator={false} no SDK. Literal em ambos os lados, sem surpresas.
  • Chaves devidamente com namespace (checkout.review.confirm)? Mantenha o padrão aninhado; nada a alterar.
  • A migrar uma app existente? Os valores por omissão preservam o seu comportamento atual. Mude para plano apenas quando encontrar uma chave com pontos, depois republique e atualize a opção SDK em simultâneo.

A seguir