- Keys e params type-safe
- Inferidos do seu texto
- Tamanho do runtime (gzip)
- 3.00 KB, zero deps
- Manutenção de keys
- Nenhuma, extraídas
- Conteúdo dinâmico / CMS
- Rota runtime real
- HTML puro (sem framework)
- Interpretador de DOM
- Traduções faltantes
- O build falha
- Traduções quebradas
- O build falha
- Formato de catálogo
- JSON puro
- Agentes de código
- Servidor MCP + skill
Escrevatexto natural. Publiquetraduçõestype-safe.
O compilador extrai suas mensagens, gera os tipos e separa os bundles por idioma. Uma tradução faltando quebra o build, então ela nunca chega aos seus usuários.
Por que Verbaly
Quatro coisas que o compilador faz por você, e cada uma está rodando aqui mesmo.
Zero config, de verdade
Um plugin do Vite. Sem um init() gigante, sem macros do Babel, sem formatos proprietários. Os catálogos são JSON puro que você leva para qualquer lugar.
Onde você já está
Um único runtime sob cada adaptador, então a mensagem que você escreve é a mesma em todos. Só muda o pacote.
Tipos das suas mensagens
O próprio texto declara seus params, então se você esquecer um o TypeScript te barra.
HTML puro, de primeira
Sem framework? O interpretador do DOM hidrata os nós data-verbaly, re-renderiza ao trocar o idioma e observa novos elementos.
O mesmo trabalho, menos maquinaria
Um olhar honesto frente às ferramentas que você usaria no lugar. Mostra onde o Verbaly ganha e onde as outras também funcionam bem.
| Funcionalidade | i18next | Lingui | Paraglide | |
|---|---|---|---|---|
| Keys e params type-safe | Inferidos do seu texto | Plugin / manual | Parcial | Sim |
| Tamanho do runtime (gzip) | 3.00 KB, zero deps | ~14 KB (+9 KB react) | ~5 KB | ~0 (compilado) |
| Manutenção de keys | Nenhuma, extraídas | À mão | Etapa extract → compile | À mão |
| Conteúdo dinâmico / CMS | Rota runtime real | Sim | Sim | Fraco |
| HTML puro (sem framework) | Interpretador de DOM | — | — | — |
| Traduções faltantes | O build falha | Warning em runtime | Etapa de CI | O build falha |
| Traduções quebradas | O build falha | — | — | — |
| Formato de catálogo | JSON puro | JSON | PO / JSON | Formato inlang |
| Agentes de código | Servidor MCP + skill | — | Skill | — |
- Keys e params type-safe
- Plugin / manual
- Tamanho do runtime (gzip)
- ~14 KB (+9 KB react)
- Manutenção de keys
- À mão
- Conteúdo dinâmico / CMS
- Sim
- HTML puro (sem framework)
- —
- Traduções faltantes
- Warning em runtime
- Traduções quebradas
- —
- Formato de catálogo
- JSON
- Agentes de código
- —
- Keys e params type-safe
- Parcial
- Tamanho do runtime (gzip)
- ~5 KB
- Manutenção de keys
- Etapa extract → compile
- Conteúdo dinâmico / CMS
- Sim
- HTML puro (sem framework)
- —
- Traduções faltantes
- Etapa de CI
- Traduções quebradas
- —
- Formato de catálogo
- PO / JSON
- Agentes de código
- Skill
- Keys e params type-safe
- Sim
- Tamanho do runtime (gzip)
- ~0 (compilado)
- Manutenção de keys
- À mão
- Conteúdo dinâmico / CMS
- Fraco
- HTML puro (sem framework)
- —
- Traduções faltantes
- O build falha
- Traduções quebradas
- —
- Formato de catálogo
- Formato inlang
- Agentes de código
- —
Os tamanhos são pegadas gzip aproximadas do runtime; cada projeto pondera os trade-offs de forma diferente.
De palavras a idiomas publicados
Três passos e uma barreira, ou deixe o verbaly init gerar tudo com um comando. Sem arquivos de keys à mão: o compilador faz a parte chata enquanto você continua escrevendo o copy do produto.
Instale
Um comando, dois pacotes.
pnpm add verbaly @verbaly/viteAdicione o plugin
Aponte para o idioma em que você escreve.
vite.config.tsimport verbaly from '@verbaly/vite'; export default { plugins: [verbaly({ sourceLocale: 'es' })] };Escreva texto, não chaves
Chaves, tipos e catálogos: gerados.
src/app.tsimport { t, setLocale } from 'virtual:verbaly'; t`Hola ${name}`; // keys, types & catalogs: generated await setLocale('pt'); // lazy-loads its chunkDeixe o CI vigiar
Sai com 1 enquanto algum idioma estiver incompleto, então texto sem tradução nunca é publicado.
.github/workflows/ci.yml- run: npx verbaly check # the build gate, in your pipeline
Em breve você poderá quebrá-lo você mesmo.
Um playground sobre o runtime real: edite os catálogos, troque de idioma, esvazie uma tradução e veja o gate do build pegar o erro. Está sendo construído agora mesmo.
Enquanto isso, leia o guia