Framework
Plugin de Vite
import verbaly from '@verbaly/vite';
export default { plugins: [verbaly({ sourceLocale: 'es' })] };Las opciones son las mismas que la config del CLI: sourceLocale, locales, dir, include, exclude, root. Las opciones inline ganan sobre el archivo de config.
Cómo compila
t`Hola ${name}`se convierte ent("x7Ka9q2f", { "name": name }), donde la clave es el hash del contenido, estable entre archivos.- El idioma fuente va inline; cada otro idioma se vuelve su propio chunk lazy, cargado en el primer
setLocale(). - Los catálogos siguen siendo JSON plano: sin formato propietario, portables a cualquier TMS.
- Desde
0.20.0esto cubre también archivos.sveltey.vue: bloques de script y markup, incluida la forma de store$tde Svelte.
Servidor de dev
- Los textos nuevos se extraen mientras escribes; catálogos y
verbaly.d.tsse actualizan con debounce, y el servidor dispara un reload completo. - Editar un catálogo JSON a mano invalida los módulos virtuales automáticamente.
Build
El módulo virtual
import { t, verbaly, setLocale, getLocale, subscribe } from 'virtual:verbaly';
// SSR: request-scoped instances + locale metadata
import { createRequestInstance, createInstance, loadMessages, locales, sourceLocale } from 'virtual:verbaly';
// 0.17.0: fresh instance, catalog awaited, no flash. One call per request:
const v = await createRequestInstance(locale);
// 0.19.0: raw catalog for a locale (SSR integrations serialize it to the client):
const messages = await loadMessages(locale);El singleton t/verbaly es para el browser. En el servidor, createRequestInstance(locale) construye una instancia fresca por request y espera su catálogo antes de devolver: el contrato no-FOUC en una llamada. createInstance(options) queda para setups custom (mira Server-side).
verbaly.d.ts (generado en la raíz del proyecto) tipa este módulo: las claves autocompletan y los params de cada clave se exigen. Commitéalo para que los clones frescos pasen typecheck antes del primer dev.
¿No usas Vite? Usa @verbaly/unplugin
Desde 0.10.0, @verbaly/unplugin lleva el mismo compilador a webpack 5, Rollup, esbuild y Rspack: el módulo tipado virtual:verbaly, la transformación de tagged templates y el build gate (failOnMissing: false para desactivarlo).
import { verbaly } from '@verbaly/unplugin';
export default { plugins: [verbaly.webpack({ locales: ['en', 'es'] })] };
// also: verbaly.rollup(…) · verbaly.esbuild(…) · verbaly.rspack(…)Está enfocado al build: corre npx verbaly extract en tu dev loop o CI, ya que la extracción en vivo y el HMR siguen siendo el valor de este plugin de Vite. Solo ESM, como el compilador (usa webpack.config.mjs).