v0.23.0latest

Escribetexto natural. Publicatraduccionestype-safe.

El compilador extrae tus mensajes, genera los tipos y separa los bundles por idioma. Una traducción faltante rompe el build, así que nunca llega a tus usuarios.

Integraciones
~3 KBruntime
10paquetes
MITlicencia
i18n que se siente sin config

Funcionalidades

Por qué Verbaly

Cero config, de verdad

Un plugin de Vite. Sin un init() gigante, sin macros de Babel, sin formatos propietarios. Los catálogos son JSON plano que puedes llevar a donde sea.

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

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

Tipos desde tus mensajes

El propio texto declara sus params, así que si olvidas uno TypeScript te detiene.

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

El gate del build

Las traducciones faltantes abortan vite build, así que las claves crudas nunca llegan a tus usuarios.

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

HTML plano, de primera

¿Sin framework? El intérprete del DOM hidrata los nodos data-verbaly, re-renderiza al cambiar de idioma y observa los elementos nuevos.

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

Comparar

El mismo trabajo, menos maquinaria

Una mirada honesta frente a las herramientas que usarías en su lugar. Muestra dónde gana Verbaly y dónde las demás también están bien.

FuncionalidadVerbalyVerbalyi18nextLinguiParaglide
Keys y params type-safeInferidos de tu textoPlugin / manualParcial
Tamaño del runtime (gzip)~3 KB, cero deps~14 KB (+9 KB react)~5 KB~0 (compilado)
Mantenimiento de keysNinguno, se extraenA manoPaso extract → compileA mano
Contenido dinámico / CMSRuta runtime realDébil
HTML plano (sin framework)Intérprete de DOM
Traducciones faltantesEl build fallaWarning en runtimePaso de CIEl build falla
Formato de catálogoJSON planoJSONPO / JSONFormato inlang
VerbalyVerbaly
Keys y params type-safe
Inferidos de tu texto
Tamaño del runtime (gzip)
~3 KB, cero deps
Mantenimiento de keys
Ninguno, se extraen
Contenido dinámico / CMS
Ruta runtime real
HTML plano (sin framework)
Intérprete de DOM
Traducciones faltantes
El build falla
Formato de catálogo
JSON plano
i18next
Keys y params type-safe
Plugin / manual
Tamaño del runtime (gzip)
~14 KB (+9 KB react)
Mantenimiento de keys
A mano
Contenido dinámico / CMS
HTML plano (sin framework)
Traducciones faltantes
Warning en runtime
Formato de catálogo
JSON
Lingui
Keys y params type-safe
Parcial
Tamaño del runtime (gzip)
~5 KB
Mantenimiento de keys
Paso extract → compile
Contenido dinámico / CMS
HTML plano (sin framework)
Traducciones faltantes
Paso de CI
Formato de catálogo
PO / JSON
Paraglide
Keys y params type-safe
Tamaño del runtime (gzip)
~0 (compilado)
Mantenimiento de keys
A mano
Contenido dinámico / CMS
Débil
HTML plano (sin framework)
Traducciones faltantes
El build falla
Formato de catálogo
Formato inlang

Los tamaños son huellas gzip aproximadas del runtime; cada proyecto pondera los trade-offs distinto.

Empieza aquí

De palabras a idiomas publicados.

Tres pasos y una barrera, o deja que verbaly init lo genere todo con un comando. Sin archivos de keys a mano: el compilador hace la parte aburrida mientras tú sigues escribiendo el copy del producto.

  1. Instala

    Un comando, dos paquetes.

     pnpm add verbaly @verbaly/vite
  2. Agrega el plugin

    Apúntalo al idioma en el que escribes.

    vite.config.ts
    import verbaly from '@verbaly/vite';
    
    export default { plugins: [verbaly({ sourceLocale: 'es' })] };
  3. Escribe texto, no claves

    Claves, tipos y catálogos: generados.

    src/app.ts
    import { t, setLocale } from 'virtual:verbaly';
    
    t`Hola ${name}`;      // keys, types & catalogs: generated
    await setLocale('pt'); // lazy-loads its chunk
  4. Deja que CI lo vigile

    Sale con 1 mientras algún idioma esté incompleto, así que el texto sin traducir nunca se publica.

    .github/workflows/ci.yml
    - run: npx verbaly check  # the build gate, in your pipeline

¿Prefieres romperlo tú mismo?

Edita los catálogos, cambia de idioma y vacía una traducción, todo en el runtime real, en vivo.

Abrir el playground
Copiado en el portapapeles