Skip to main content

Locales e internacionalização

Temas Corvex V2 suportam vitrines internacionais com duas camadas separadas: O SDK conecta as duas automaticamente. Não hardcode moeda nem strings de interface no código.

1. Configuração da loja (automática)

O JSON abaixo ilustra os campos de shop.localization que o SDK lê em GET /public/stores/{id}/shop. moneyFormat pode vir vazio. Nesse caso formatMoney usa Intl, não o template.
O SDK usa isso para:
  • formatar preços (product.price.formatted, carrinho, formatMoney)
  • escolher qual arquivo de locales/ carregar conforme language
Não leia shop.localization manualmente em sections — use os hooks abaixo.

2. Arquivos do tema (locales/)

Estrutura

O validador não exige a pasta locales/. Sem arquivo .default, o build não grava __defaultLocale e o SDK usa o primeiro catálogo que sobrar.

Convenção de nomes

O sufixo .default vira __defaultLocale. O SDK usa esse catálogo quando shop.localization.language não encontra arquivo, e também para chaves que faltam no idioma escolhido. A comparação ignora maiúsculas: pt-br casa com pt-BR.

Formato JSON

Chaves aninhadas com ponto na API de tradução:
Recomendação de chaves: Interpolação: {{variavel}} na string, passada no segundo argumento de t().

3. SDK — hooks e helpers

Import

Traduções (locales/ do tema)

Moeda e preços

Preferir valores já formatados pela API:
Formatação manual (quando só tem número):

4. Build e publish

Gera .corvex/locales.json a partir de locales/*.json. O runtime pede esse JSON em ?asset=locales. O log do corvex build só imprime a linha de locales quando o resultado da validação traz bundleLocales. O arquivo é gravado pelo build mesmo assim.
Não versionar .corvex/ no git.

5. Fluxo completo


6. Checklist para agências / LLMs

  • Criar locales/pt-BR.default.json quando a loja tiver textos de interface
  • Adicionar en.json (e outros) se a loja for multilíngue
  • Nenhum texto de UI hardcoded em português/inglês nas sections — usar t('...')
  • Preços sempre via .formatted ou formatMoney() — nunca "R$ " + price
  • Rodar corvex build . após alterar locales
  • Testar com loja em outro idioma/moeda no admin Corvex

7. Anti-patterns


8. Limitações e troubleshooting

  • Um idioma por loja — definido no admin; não há seletor /en/ na URL (ainda).
  • Chaves literais na UI (cart.add_to_cart em vez do texto): o artefato não tem catálogo de locales. Rode corvex build e envie o tema de novo. No dev, GET .../theme-bundle/...?asset=locales deve responder 200 com JSON.
  • Sections existentes precisam migrar strings para t() manualmente.

Próximos passos