Inicio
Primeros pasos
Verbaly invierte el flujo i18n habitual: escribes texto natural en tu código y el compilador extrae los mensajes, genera claves estables, tipos y bundles por idioma. Requisitos: Node 20+ y Vite 7 u 8.
Instalación
Agrega el runtime y el plugin de Vite. Elige tu gestor de paquetes.
pnpm add verbaly @verbaly/viteEl runtime es siempre el mismo; el segundo depende de tu setup. En webpack, Rollup, esbuild o Rspack instalas
@verbaly/unpluginen su lugar, y Next.js, Nuxt y Astro tienen el suyo. Ver Paquetes.Genera todo con un comando
npx verbaly initescribe la config, crea los catálogos enlocales/y te dice qué integración necesita tu proyecto. Nunca sobrescribe nada. ¿Prefieres cablearlo a mano? Los pasos de abajo hacen lo mismo.terminalnpx verbaly init # config + locales/ + the integration to installAgrega el plugin
vite.config.tsimport verbaly from '@verbaly/vite'; export default { plugins: [verbaly({ sourceLocale: 'es' })], };sourceLocalees el idioma en el que escribes. Los demás idiomas salen de un catálogo JSON enlocales/: deja ahí unen.jsonopt.jsony Verbaly los detecta automáticamente.Escribe texto, no claves
src/app.tsimport { t, setLocale } from 'virtual:verbaly'; const saludo = t`Hola ${name}, tienes ${count} mensajes`; await setLocale('pt'); // lazy-loads pt chunkEn dev, el plugin extrae los mensajes en vivo: tu catálogo fuente se llena solo, los demás idiomas reciben placeholders
"", yverbaly.d.tsmantiene claves y params tipados.Traduce y verifica
terminalnpx verbaly extract # sync catalogs + types npx verbaly check # exit 1 if anything is missing
Qué exporta el módulo virtual
| Export | Descripción |
|---|---|
| t | Traduce: t('key', params) o el tagged t`...` |
| setLocale(locale) | Async: carga el chunk de ese idioma bajo demanda y luego cambia |
| getLocale() | Idioma actual |
| subscribe(fn) | Re-ejecuta la UI en cambios de idioma/mensajes; devuelve unsubscribe |
| verbaly | La instancia subyacente (uso avanzado) |