v0.23.0latest

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.

Integrações
~3 KBruntime
10pacotes
MITlicença
i18n que parece sem config

Funcionalidades

Por que Verbaly

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.

vite.config.ts
import verbaly from '@verbaly/vite';

export default { plugins: [verbaly()] };

Tipos das suas mensagens

O próprio texto declara seus params, então se você esquecer um o TypeScript te barra.

editor
t('inbox', { count: 3 });  
t('inbox');  ✗ { count: number }

O gate do build

Traduções faltando abortam o vite build, então chaves cruas nunca chegam aos seus usuários.

vite build
✗ [es] x7Ka9q2f: "Welcome back"
✓ all locales complete

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.

index.html
<h1 data-verbaly="home.title"></h1>
<p  data-verbaly="inbox" data-verbaly-args='{"count":3}'></p>

Comparar

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.

FuncionalidadeVerbalyVerbalyi18nextLinguiParaglide
Keys e params type-safeInferidos do seu textoPlugin / manualParcialSim
Tamanho do runtime (gzip)~3 KB, zero deps~14 KB (+9 KB react)~5 KB~0 (compilado)
Manutenção de keysNenhuma, extraídasÀ mãoEtapa extract → compileÀ mão
Conteúdo dinâmico / CMSRota runtime realSimSimFraco
HTML puro (sem framework)Interpretador de DOM
Traduções faltantesO build falhaWarning em runtimeEtapa de CIO build falha
Formato de catálogoJSON puroJSONPO / JSONFormato inlang
VerbalyVerbaly
Keys e params type-safe
Inferidos do seu texto
Tamanho do runtime (gzip)
~3 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
Formato de catálogo
JSON puro
i18next
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
Formato de catálogo
JSON
Lingui
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
Formato de catálogo
PO / JSON
Paraglide
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
Formato de catálogo
Formato inlang

Os tamanhos são pegadas gzip aproximadas do runtime; cada projeto pondera os trade-offs de forma diferente.

Comece aqui

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.

  1. Instale

    Um comando, dois pacotes.

     pnpm add verbaly @verbaly/vite
  2. Adicione o plugin

    Aponte para o idioma em que você escreve.

    vite.config.ts
    import verbaly from '@verbaly/vite';
    
    export default { plugins: [verbaly({ sourceLocale: 'es' })] };
  3. Escreva texto, não chaves

    Chaves, tipos e catálogos: gerados.

    src/app.ts
    import { t, setLocale } from 'virtual:verbaly';
    
    t`Hola ${name}`;      // keys, types & catalogs: generated
    await setLocale('pt'); // lazy-loads its chunk
  4. Deixe 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

Prefere quebrar você mesmo?

Edite os catálogos, troque de idioma e esvazie uma tradução, tudo no runtime real, ao vivo.

Abrir o playground
Copiado para a área de transferência