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 deshop.localization que o SDK lê em GET /public/stores/{id}/shop. moneyFormat pode vir vazio. Nesse caso formatMoney usa Intl, não o template.
- formatar preços (
product.price.formatted, carrinho,formatMoney) - escolher qual arquivo de
locales/carregar conformelanguage
shop.localization manualmente em sections — use os hooks abaixo.
2. Arquivos do tema (locales/)
Estrutura
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:
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:4. Build e publish
.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.
.corvex/ no git.
5. Fluxo completo
6. Checklist para agências / LLMs
- Criar
locales/pt-BR.default.jsonquando 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
.formattedouformatMoney()— 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_cartem vez do texto): o artefato não tem catálogo de locales. Rodecorvex builde envie o tema de novo. No dev,GET .../theme-bundle/...?asset=localesdeve responder 200 com JSON. - Sections existentes precisam migrar strings para
t()manualmente.