Saltar al contenido

Referencia

Configuración

Un fichero en la raíz de tu proyecto, y el plugin toma el mismo objeto, así que una opción significa lo mismo para tu build que para la línea de comandos. Los flags ganan sobre el fichero.

verbaly.config.mjs
export default {
  sourceLocale: 'es',
  locales: ['es', 'en', 'pt'],
};

Los nombres aceptados son verbaly.config.js, .mjs, .ts, .mts y .json, leídos en ese orden. Un config en TypeScript necesita esbuild instalado, y la herramienta te lo dice si falta.

Todas las opciones

OpciónPor defectoQué hace
sourceLocale'en'El idioma en el que escribes
localesLos catálogos que encuentraTus idiomas. Si los listas, la lista está completa; si no la pones, cada fichero JSON de dir cuenta como uno
dir'locales'Dónde viven los catálogos
rootDonde ejecutaste el comandoLa raíz del proyecto contra la que se resuelven las demás rutas
includesrc/**, app/**Qué ficheros se escanean buscando mensajes. [] apaga el escaneo, para un proyecto cuyos catálogos se escriben a mano
excludenode_modules, distQué ficheros se saltan dentro de eso
routingSigue tu setupDónde vive el idioma en tus direcciones. Ver Estrategia de URLs
dts'verbaly.d.ts'Dónde se escriben los tipos generados, o false para no escribir ninguno. Astro y Nuxt los colocan en su propia carpeta de tipos sin que tú pongas esto
bundleNada excluidoexclude: grupos de mensajes que se quedan en el build y nunca llegan al navegador
renderApagadoEl mirror pre-traducido para sitios estáticos. Sus opciones están más abajo
translateClaudeTodo lo que la traducción automática necesita más allá del proveedor: modelo, tamaño de lote, glosario, instrucciones
icuLo deciden tus catálogosFuerza que el parser de ICU viaje. Solo para mensajes que llegan a tu app después del build
relativeLo deciden tus catálogosLo mismo, para el formato de tiempo relativo

Dentro de render

Solo para sitios estáticos que publican un árbol de direcciones por idioma. Añadir esta sección es lo que enciende el mirror.

OpciónQué hace
baseUrlTu dirección pública. Los alternates y el sitemap la necesitan
siteEl directorio construido que se mirrorea. Por defecto dist
sitemapEscribe un sitemap por idioma. Una cadena le pone nombre al fichero
excludePáginas a dejar fuera de ese sitemap, por ruta dentro del directorio de build
hreflangAlternates recíprocos en cada página. Encendido por defecto
redirectManda a quien llega por primera vez a su idioma antes de que la página pinte
linksLas direcciones reales detrás de los links con nombre dentro de tus mensajes
baseEl prefijo de ruta, si tu sitio no se sirve desde la raíz
attributeEl atributo que hay que buscar, si renombraste data-verbaly
inlineCatalogEscribe en cada página los mensajes que renderiza, así no se baja ningún otro
cleanBorra páginas de idioma que dejó un build anterior

Dentro de translate

Todo lo que la traducción automática necesita más allá del proveedor, para que una ejecución se comporte igual para todo el equipo en vez de depender de quién escribió el comando.

OpciónQué hace
modelQué modelo usa el proveedor incluido. --model lo cambia para una sola corrida
batchSizeCuántos mensajes van en una petición, 20 por defecto. Bájalo si los mensajes largos salen cortados, súbelo si son cortos
concurrencyCuántas peticiones van a la vez, 4 por defecto. Bájalo si tu proveedor te limita el ritmo
retriesCuántas veces se reintenta una petición que falló por algo pasajero, 2 por defecto
instructionsLo mismo que le contarías a una persona que traduce tu producto: cuánta formalidad usar, cuán corta tiene que quedar la etiqueta de un botón, qué es tu aplicación
glossaryCómo tiene que salir un término. Das una forma para todos los idiomas, que es como se dice deja esto en paz, o una por idioma. Solo se envían los términos que el lote realmente contiene

Una corrida sobrevive a una mala conexión. Las peticiones que fallan por algo pasajero se reintentan, y si aun así una no vuelve, todo lo demás queda escrito y el informe nombra los mensajes que no pudo llenar. Volver a correr translate pide solo esos, así que una conexión caída nunca te cuesta la corrida entera dos veces. El comando termina con 1 cuando pasa, para que un script se entere.

Solo en el plugin

failOnMissing: false deja que un build termine con mensajes sin traducir, que caen a tu idioma fuente. Nunca deja pasar una traducción rota: una que perdió un valor o un caso del plural sigue parando el build, porque renderizaría mal.

para moverteEnterpara abrir
Copiado en el portapapeles