---
title: "verbatra watch"
description: "Retraduce en cada cambio del origen hasta que lo interrumpas, para que los locales sigan al día; cada ejecución solo envía claves nuevas o cambiadas."
type: "reference"
---
# verbatra watch

Retraduce en cada cambio del origen hasta que lo interrumpas, para que los locales sigan al día; cada ejecución solo envía claves nuevas o cambiadas.

Vigila el archivo del locale de origen y vuelve a traducir tras cada cambio, con anti-rebote, hasta que lo interrumpas. `watch` ejecuta una traducción inicial al arrancar y luego mantiene al día tus locales de destino mientras guardas. Cada ejecución funciona como [`verbatra translate`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md), salvo que `watch` no tiene `--dry-run`, `--prune`, `--include-human`, `--estimate` ni `--max-tokens` y nunca sale con `3`. Al arrancar también añade las entradas que falten a un `.gitignore` existente, consulta [Entradas de .gitignore](https://verbatra.kreitz-webdev.de/es/docs/cli.md#entradas-de-gitignore).

## Sinopsis [#sinopsis]

```bash
verbatra watch [flags]
```

## Ejemplos [#ejemplos]

```bash
# vigila y retraduce en cada cambio
verbatra watch

# más tranquilo en un editor ajetreado: espera 1 s tras el último cambio y emite NDJSON
verbatra watch --debounce 1000 --json

# mantén al día solo el alemán mientras trabajas
verbatra watch --locales de
```

## Flags [#flags]

| Flag | Argumento | Por defecto | Efecto |
| --- | --- | --- | --- |
| `--locales` | `<list>` | cada locale de destino configurado | vigila solo este subconjunto separado por comas; se comprueba una vez al arrancar, donde un locale no configurado falla con `UNKNOWN_LOCALE` |
| `--debounce` | `<ms>` | `300` | espera estos milisegundos tras el último cambio antes de traducir; un entero de `1` a `60000` |
| `--lock-timeout` | `<seconds>` | `600` | en cada ejecución, espera este tiempo por un bloqueo de escritura ocupado de un locale; un entero de `1` a `3600` |
| `--concurrency` | `<n>` | `1` | traduce hasta `n` locales de destino a la vez por ejecución; un entero de `1` a `100`, rechazado con un presupuesto `maxTokens` |
| `--no-cache` | ninguno | desactivado (caché activa) | omite la [caché de memoria de traducción](https://verbatra.kreitz-webdev.de/es/docs/the-cache.md) (`verbatra.cache.json`) en cada ejecución |

También acepta los [flags globales](https://verbatra.kreitz-webdev.de/es/docs/cli.md#flags-globales) `--cwd`, `--config` y `--json`; aquí `--json` imprime un registro por ejecución. Antes de arrancar, `watch` carga los [archivos de entorno](https://verbatra.kreitz-webdev.de/es/docs/cli.md#archivos-de-entorno).

## Comportamiento [#comportamiento]

### Cada ejecución [#cada-ejecución]

Cada ejecución traduce el subconjunto de `--locales`, o todos los destinos, con un presupuesto de tokens nuevo. Un locale cuyo [bloqueo de escritura](https://verbatra.kreitz-webdev.de/es/docs/the-lock-file.md) siga ocupado más allá de `--lock-timeout` falla con `LOCK_CONTENDED` en el resumen de esa ejecución, mientras los demás siguen; un bloqueo de un proceso de verbatra que ya no corre se recupera al momento. Una ejecución fallida nunca detiene el vigilante. La espera de un bloqueo imprime la misma línea de espera que se describe en [`translate`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md#bloqueos-de-escritura-e-interrupciones).

Un `--concurrency` mayor que `1` junto con un presupuesto `maxTokens` configurado se rechaza al arrancar con salida `2`, antes de la primera ejecución, porque el orden en que se intercalan los locales decidiría cuál pierde el trabajo restante.

Un proveedor que no se puede construir, casi siempre porque falta su variable de API key, también se rechaza al arrancar: `watch` sale con `2` y `PROVIDER_CONSTRUCTION_FAILED` y una línea `next:` que nombra la variable, igual que `translate`, en lugar de esperar cambios que ninguna ejecución podría traducir. Antes de 0.12.0 seguía esperando.

### Detención [#detención]

<AvailableFrom version="0.12.0" />

La primera interrupción (Ctrl-C o SIGTERM) deja terminar la ejecución en curso, detiene el vigilante y sale con `0`. Una segunda interrupción mientras el apagado sigue en marcha fuerza la parada con salida `130`, tras liberar los bloqueos de escritura de la sesión. Sin `--json`, stderr dice `verbatra: waiting for changes...` tras cada ejecución, `verbatra: press Ctrl-C to stop` tras la línea de arranque en un terminal interactivo y `verbatra: stopped` cuando termina el apagado. `--quiet` quita estas líneas, pero no la línea de arranque ni `verbatra: stopping, finishing current run...` en la primera interrupción: se escriben en todos los modos, `--json` incluido.

### Salida JSON [#salida-json]

Esquema: [`watch-envelope.json`](https://verbatra.kreitz-webdev.de/schema/v1/watch-envelope.json) valida el envoltorio completo; [Esquemas](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#esquemas) enumera los demás.

Con `--json`, stdout es NDJSON: un [envoltorio](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#salida-json) por ejecución, con `command: "watch"`. Una ejecución correcta es un registro `ok: true` con el [`RunSummary`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md#salida-json) de esa ejecución; una fallida es un registro `ok: false` con el código propio del fallo, o `WATCH_RUN_FAILED` si no tenía, más su `hint` cuando lo hay. Una ejecución fallida es solo un registro: no detiene el vigilante ni cambia el código de salida. La línea de arranque, el aviso de parada y el progreso van a stderr. Sin `--json`, el resumen de una ejecución va a stdout y la línea `verbatra: error [CODE] message` de una fallida a stderr.

### Información en el terminal [#información-en-el-terminal]

<AvailableFrom version="0.12.0" />

Sin `--json`, `watch` nombra el archivo de origen cuando un cambio se ha asentado y luego informa de la ejecución como `translate`, con el mismo spinner en un terminal interactivo:

```text output
verbatra: change detected: locales/en.json
verbatra: translating de
verbatra: de batch 1/1
verbatra: de: writing
verbatra: de done, 1 translated
verbatra: run finished, 1 locale processed
verbatra: waiting for changes...
```

Estas líneas van a stderr, y `--quiet` las omite. Consulta [Salida en el terminal](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#salida-en-el-terminal).

## Códigos de salida [#códigos-de-salida]

| Código | Significado |
| --- | --- |
| `0` | detenido limpiamente con una sola interrupción |
| `2` | no pudo arrancar o detenerse: un error de configuración, un fallo al arrancar o al apagar, o un error de uso como un `--debounce` no válido |
| `130` | detenido a la fuerza con una segunda interrupción |

Una ejecución fallida durante la sesión nunca cambia el código de salida. Consulta [el contrato de códigos de salida](https://verbatra.kreitz-webdev.de/es/docs/cli/output.md#códigos-de-salida).

## Relacionado [#relacionado]

- [`verbatra translate`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md) es la ejecución única que `watch` repite.
- [La caché](https://verbatra.kreitz-webdev.de/es/docs/the-cache.md) explica qué omite `--no-cache` en cada ejecución.
- [Cómo funciona](https://verbatra.kreitz-webdev.de/es/docs/how-it-works.md) explica qué hace cada ejecución.
- [Proteger las traducciones humanas](https://verbatra.kreitz-webdev.de/es/docs/protecting-human-translations.md) explica por qué una ejecución conserva un valor obsoleto que escribió una persona.
- [La referencia del SDK](https://verbatra.kreitz-webdev.de/es/docs/sdk.md) documenta las formas `WatchRunResult` y `RunSummary`.
