---
title: "Eine Sprache hinzufügen"
description: "Füge einem verbatra-Projekt eine neue Ziel-Locale hinzu: eine Zeile Konfiguration und ein translate-Lauf, während die bestehenden Locales unangetastet bleiben."
type: "how-to"
---
# Eine Sprache hinzufügen

Füge einem verbatra-Projekt eine neue Ziel-Locale hinzu: eine Zeile Konfiguration und ein translate-Lauf, während die bestehenden Locales unangetastet bleiben.

Nutze das, wenn ein Projekt schon in einige Sprachen übersetzt wird und du eine weitere willst. Es braucht eine Zeile Konfiguration und einen Lauf. verbatra behandelt die neue Locale so, als fehle ihr jeder Key, und füllt sie; deine bestehenden Locales kosten nichts, weil die Lock-Datei sie weiterhin als aktuell verzeichnet.

Du brauchst ein funktionierendes Projekt: eine Konfiguration, eine Quell-Locale-Datei und einen Provider-Key. Wenn du noch keins hast, fang mit dem [Quickstart](https://verbatra.kreitz-webdev.de/de/docs/quickstart.md) an.

## Füge die Locale zu deiner Konfiguration hinzu [#füge-die-locale-zu-deiner-konfiguration-hinzu]

Trage den Code in `targetLocales` in `verbatra.config.ts` ein:

```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 } },
});
```

### Regeln für Locale-Codes [#regeln-für-locale-codes]

<AvailableFrom version="0.12.0" />

Schreib den Code in BCP-47-Form, mit Bindestrich: `pt-BR`, nicht `pt_BR`. Wenn deine Dateien Unterstriche verwenden, schreib trotzdem `pt-BR` und setz `files.localeStyle` auf `posix`; verbatra behält den Dateinamen `pt_BR.json`. Beim Laden der Konfiguration werden ein ungültiger Code, die Quell-Locale und zwei Codes, die sich nur in der Groß- und Kleinschreibung unterscheiden, abgelehnt. Die vollständigen Regeln stehen unter [Locale-Codes](https://verbatra.kreitz-webdev.de/de/docs/config-file.md#locale-codes); mit [`verbatra doctor`](https://verbatra.kreitz-webdev.de/de/docs/cli/doctor.md) siehst du, ob ein Provider die neue Sprache unterstützt.

## Sieh dir die Arbeit vorab an [#sieh-dir-die-arbeit-vorab-an]

Schau dir an, was ein Lauf tun würde, bevor du etwas ausgibst:

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

Die neue Locale hat noch keine Datei, also wird jeder Quell-Key als fehlend aufgeführt. Lass `--locales` weg, um zu prüfen, dass deine anderen Locales nichts auflisten. `diff` ruft keinen Provider auf und schreibt nichts. Für eine Kostenschätzung führ `verbatra translate --estimate` aus; siehe [Kosten vor einem Lauf schätzen](https://verbatra.kreitz-webdev.de/de/docs/estimating-cost.md).

## Übersetze [#übersetze]

```bash
verbatra translate
```

Der Lauf übersetzt jeden Quell-Key in die neue Locale und schreibt die Datei an dein `files.pattern`, hier `locales/fr.json`. Nur die neue Locale löst Provider-Aufrufe aus: Die anderen Locales haben gegenüber ihrer Lock-Baseline keine fehlenden oder geänderten Keys, also wird für sie nichts gesendet.

Wenn der Lauf für die neue Locale nichts behält, weil jeder Key eine Prüfung nicht bestanden hat, ihre Provider-Anfragen gescheitert sind oder ein Token-Budget sie zurückgehalten hat, wird keine Datei angelegt. Die Keys bleiben fehlend, und der nächste Lauf versucht sie erneut.

Danach endet `verbatra check` mit `0`, wenn jede Locale, die neue eingeschlossen, synchron ist.

## Sprachen mit mehr Pluralkategorien [#sprachen-mit-mehr-pluralkategorien]

Manche Sprachen brauchen mehr Pluralformen, als deine Quelle hat. Englisch hat `one` und `other`; Polnisch braucht vier, Arabisch sechs, und Französisch ergänzt `many`. Standardmäßig übersetzt verbatra die Formen, die deine Quelle hat, und erfindet die übrigen nicht: Der Lauf gelingt und meldet einen Hinweis `PLURAL_CATEGORIES_INCOMPLETE`, der nennt, was fehlt.

### Fehlende Formen erzeugen [#fehlende-formen-erzeugen]

<AvailableFrom version="0.3.0" />

Wenn du i18next-JSON mit einem LLM-Provider nutzt, kann verbatra die fehlenden Formen schreiben:

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

Erzeugte Formen durchlaufen dieselben Integritätsprüfungen wie jede Übersetzung.

### Formen aus CLDR [#formen-aus-cldr]

<AvailableFrom version="0.12.0" />

Welche Formen eine Sprache braucht, kommt aus den CLDR-Pluralregeln, die in Node.js eingebaut sind, für jede Sprache, Ordinalzahlen eingeschlossen. Die ICU-Formate (next-intl und ARB) halten einen ganzen Plural in einem Wert und brauchen deshalb keine Erzeugung: Der Provider wird genau nach den Zweigen gefragt, die die Zielsprache verwendet. Unter [`generatePlurals`](https://verbatra.kreitz-webdev.de/de/docs/config-file.md#generateplurals) steht, was auf den Hinweis zurückfällt, und unter [Plurale](https://verbatra.kreitz-webdev.de/de/docs/language-support.md#plurale), wie verbatra entscheidet, welche Formen eine Sprache braucht.

## Pflege weiter nur die Quelle [#pflege-weiter-nur-die-quelle]

Ab jetzt bearbeitest du nur noch die Quell-Locale. Füg dort einen String hinzu und führ `translate` erneut aus: verbatra trägt ihn in jedes Ziel ein, auch in das gerade hinzugefügte.

## Siehe auch [#siehe-auch]

- [`verbatra translate`](https://verbatra.kreitz-webdev.de/de/docs/cli/translate.md) und [`verbatra diff`](https://verbatra.kreitz-webdev.de/de/docs/cli/diff.md): jedes Flag, das auf dieser Seite vorkommt.
- [Die Konfigurationsdatei](https://verbatra.kreitz-webdev.de/de/docs/config-file.md#locales-und-dateien): `targetLocales`, `files.pattern` und `files.localeStyle`.
- [Sprachen und Locales](https://verbatra.kreitz-webdev.de/de/docs/language-support.md): welche Sprachen jeder Provider abdeckt, Schriften, regionale Varianten und Rechts-nach-links-Text.
- [Die Lock-Datei](https://verbatra.kreitz-webdev.de/de/docs/the-lock-file.md): warum bestehende Locales bei einem erneuten Lauf nichts kosten.
