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 22.12+ y Vite 7 u 8.
Instalación
Agrega el runtime, el plugin de Vite y el compilador, que es donde vive el comando
verbaly. Elige tu gestor de paquetes.pnpm add verbaly @verbaly/vite @verbaly/compilerEl 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 delocales/y detecta tu bundler, así que te dice qué plugin necesitas y dónde va. Nunca sobrescribe nada. Cablear el plugin te toca a ti, y es el paso siguiente.Agrega el plugin
vite.config.tsimport verbaly from '@verbaly/vite'; export default { plugins: [verbaly({ sourceLocale: 'es' })], };sourceLocalees el idioma en el que escribes. Si no listaslocales, cada catálogo JSON delocales/es un idioma: deja ahí unen.jsonopt.jsony Verbaly los detecta. Si listaslocales, esa lista es la lista entera, así que un fichero que te dejaste olvidado se ignora.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
"", y los tipos generados mantienen claves y params tipados.Traduce y verifica
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) |