---
title: "Añadir un idioma"
description: "Añade un nuevo locale de destino a un proyecto de verbatra con una línea de configuración y una ejecución de translate, sin tocar tus locales actuales."
type: "how-to"
---
# Añadir un idioma

Añade un nuevo locale de destino a un proyecto de verbatra con una línea de configuración y una ejecución de translate, sin tocar tus locales actuales.

Usa esto cuando un proyecto ya traduce a algunos idiomas y quieres uno más. Basta con cambiar una línea de la configuración y hacer una ejecución. verbatra ve el nuevo locale como si le faltaran todas las claves y lo rellena; tus locales actuales no cuestan nada, porque el archivo de bloqueo los sigue registrando como al día.

Necesitas un proyecto que ya funcione: una configuración, un archivo de locale de origen y una clave de proveedor. Si aún no lo tienes, empieza por el [inicio rápido](https://verbatra.kreitz-webdev.de/es/docs/quickstart.md).

## Añade el locale a tu configuración [#añade-el-locale-a-tu-configuración]

Añade el código a `targetLocales` en `verbatra.config.ts`:

```ts title="verbatra.config.ts"
import { defineConfig } from "@verbatra/cli";

export default defineConfig({
  sourceLocale: "en",
  targetLocales: ["de", "fr"], // [!code highlight]
  format: "i18next-json",
  files: { pattern: "locales/{locale}.json" },
  provider: { id: "gemini", options: { model: "gemini-2.5-flash", maxOutputTokens: 4096 } },
});
```

### Reglas de los códigos de locale [#reglas-de-los-códigos-de-locale]

<AvailableFrom version="0.12.0" />

Escribe el código en forma BCP 47, con guion: `pt-BR`, no `pt_BR`. Si tus archivos usan guiones bajos, escribe igualmente `pt-BR` y pon `files.localeStyle` en `posix`; verbatra conserva el nombre de archivo `pt_BR.json`. Al cargar la configuración se rechazan un código no válido, el locale de origen y dos códigos que solo difieren en mayúsculas. Las reglas completas están en [Códigos de locale](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#códigos-de-locale), y con [`verbatra doctor`](https://verbatra.kreitz-webdev.de/es/docs/cli/doctor.md) ves si un proveedor admite el nuevo idioma.

## Previsualiza el trabajo [#previsualiza-el-trabajo]

Mira qué haría una ejecución antes de gastar nada:

```bash
verbatra diff --locales fr
```

El nuevo locale aún no tiene archivo, así que todas las claves de origen aparecen como faltantes. Quita `--locales` para comprobar que tus otros locales no listan nada. `diff` no llama a ningún proveedor ni escribe nada. Para una estimación de coste, ejecuta `verbatra translate --estimate`; consulta [Estima el coste antes de una ejecución](https://verbatra.kreitz-webdev.de/es/docs/estimating-cost.md).

## Traduce [#traduce]

```bash
verbatra translate
```

La ejecución traduce todas las claves de origen al nuevo locale y escribe el archivo en tu `files.pattern`, aquí `locales/fr.json`. Solo el nuevo locale provoca llamadas al proveedor: los demás locales no tienen claves faltantes ni cambiadas respecto a su referencia en el archivo de bloqueo, así que no se envía nada por ellos.

Si la ejecución no conserva nada para el nuevo locale, porque todas las claves fallaron una comprobación, fallaron sus peticiones al proveedor o un presupuesto de tokens las retuvo, no se crea ningún archivo. Las claves siguen faltando y la siguiente ejecución las reintenta.

Después, `verbatra check` sale con `0` cuando todos los locales, incluido el nuevo, están sincronizados.

## Idiomas con más categorías de plural [#idiomas-con-más-categorías-de-plural]

Algunos idiomas necesitan más formas de plural de las que tiene tu origen. El inglés tiene `one` y `other`; el polaco necesita cuatro, el árabe seis y el francés añade `many`. Por defecto, verbatra traduce las formas que tiene tu origen y no inventa las demás: la ejecución tiene éxito e informa de un aviso `PLURAL_CATEGORIES_INCOMPLETE` que nombra lo que falta.

### Generar las formas que faltan [#generar-las-formas-que-faltan]

<AvailableFrom version="0.3.0" />

Si usas JSON de i18next con un proveedor LLM, verbatra puede escribir las formas que faltan:

```ts title="verbatra.config.ts"
export default defineConfig({
  // ...
  generatePlurals: true,
});
```

Las formas generadas pasan las mismas comprobaciones de integridad que cualquier traducción.

### Formas a partir de CLDR [#formas-a-partir-de-cldr]

<AvailableFrom version="0.12.0" />

Qué formas necesita un idioma sale de las reglas de plural de CLDR integradas en Node.js, para cada idioma, ordinales incluidos. Los formatos ICU (next-intl y ARB) guardan un plural completo en un solo valor, así que no necesitan generación: al proveedor se le piden exactamente las ramas que usa el idioma de destino. En [`generatePlurals`](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#generateplurals) verás qué recurre al aviso, y en [Plurales](https://verbatra.kreitz-webdev.de/es/docs/language-support.md#plurales) cómo decide verbatra qué formas necesita un idioma.

## Sigue manteniendo solo el origen [#sigue-manteniendo-solo-el-origen]

A partir de ahora solo editas el locale de origen. Añade ahí una cadena y vuelve a ejecutar `translate`: verbatra la rellena en todos los destinos, incluido el que acabas de añadir.

## Relacionado [#relacionado]

- [`verbatra translate`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md) y [`verbatra diff`](https://verbatra.kreitz-webdev.de/es/docs/cli/diff.md): todos los flags que usa esta página.
- [El archivo de configuración](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#locales-y-archivos): `targetLocales`, `files.pattern` y `files.localeStyle`.
- [Soporte de idiomas](https://verbatra.kreitz-webdev.de/es/docs/language-support.md): qué idiomas cubre cada proveedor, escrituras, variantes regionales y texto de derecha a izquierda.
- [El archivo de bloqueo](https://verbatra.kreitz-webdev.de/es/docs/the-lock-file.md): por qué los locales existentes no cuestan nada al volver a ejecutar.
