> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# In mehrere Sprachen synchronisieren

> **Note**
>
> **Anleitung** · Setzt voraus, dass Sie ein Synchronisationsprojekt erstellt haben, wie im [Dubbing- Schnellstart](/docs/de/eleven-api/guides/cookbooks/dubbing) gezeigt.

Ein einzelnes Projekt enthält ein Quelltranskript. Sie können so viele Sprachziele hinzufügen, wie Sie benötigen. Jede Sprache wird unabhängig generiert und hat ihren eigenen Status und Output. So übersetzen Sie die Quelle einmal und erstellen daraus jede Synchronisation.

## Mehrere Sprachen hinzufügen

Fügen Sie für jede Sprache, in die Sie synchronisieren möchten, ein Sprachziel hinzu. Jedes startet im Status `queued` und beginnt mit der Generierung, sobald das Projekt den Status `ready` hat.

```python
import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs

load_dotenv()

elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))

project_id = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3"
target_languages = ["es", "fr", "de", "ja"]

languages = [
    elevenlabs.dubbing.project.language.create(project_id, target_language=lang)
    for lang in target_languages
]
```

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import "dotenv/config";

const elevenlabs = new ElevenLabsClient();

const projectId = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3";
const targetLanguages = ["es", "fr", "de", "ja"];

const languages = await Promise.all(
  targetLanguages.map((lang) =>
    elevenlabs.dubbing.project.language.create(projectId, { targetLanguage: lang })
  )
);
```

Sie können auch die erste Sprache beim Erstellen des Projekts in die Warteschlange stellen, indem Sie `target_language` an `project.create` übergeben. Fügen Sie weitere Sprachen wie oben gezeigt mit `language.create` hinzu.

Sprachen werden als BCP-47-Tags angegeben, zum Beispiel `es` oder `fr-CA`. Alle akzeptierten Werte finden Sie unter [unterstützte Sprachen und Dialekte](/docs/de/overview/capabilities/dubbing#supported-languages).

## Jede Sprache unabhängig verfolgen

Sprachen werden parallel generiert und zu unterschiedlichen Zeiten fertiggestellt. Listen Sie die Sprachen des Projekts auf, um den Status jeder Sprache zu prüfen, statt sie einzeln abzufragen.

```python
import time

while True:
    result = elevenlabs.dubbing.project.language.list(project_id)
    pending = [l for l in result.languages if l.status in ("queued", "processing")]
    if not pending:
        break
    print(f"{len(pending)} language(s) still generating...")
    time.sleep(5)
```

```typescript
while (true) {
  const result = await elevenlabs.dubbing.project.language.list(projectId);
  const pending = result.languages.filter(
    (l) => l.status === "queued" || l.status === "processing"
  );
  if (pending.length === 0) break;
  console.log(`${pending.length} language(s) still generating...`);
  await new Promise((resolve) => setTimeout(resolve, 5000));
}
```

## Jede abgeschlossene Synchronisation herunterladen

Sobald eine Sprache den Status `completed` erreicht, enthält ihr `outputs.lossless_audio` eine signierte Download-URL. Laden Sie jede Datei herunter und überspringen Sie Sprachen, bei denen die Generierung fehlgeschlagen ist.

```python
import requests

result = elevenlabs.dubbing.project.language.list(project_id)
for language in result.languages:
    if language.status != "completed":
        print(f"Skipping {language.target_language}: {language.status}")
        continue
    audio = requests.get(language.outputs.lossless_audio)
    with open(f"dubbed_{language.target_language}.wav", "wb") as f:
        f.write(audio.content)
    print(f"Saved dubbed_{language.target_language}.wav")
```

```typescript
import { writeFile } from "fs/promises";

const result = await elevenlabs.dubbing.project.language.list(projectId);
for (const language of result.languages) {
  if (language.status !== "completed") {
    console.log(`Skipping ${language.targetLanguage}: ${language.status}`);
    continue;
  }
  const response = await fetch(language.outputs!.losslessAudio!);
  const buffer = Buffer.from(await response.arrayBuffer());
  await writeFile(`dubbed_${language.targetLanguage}.wav`, buffer);
  console.log(`Saved dubbed_${language.targetLanguage}.wav`);
}
```

Signierte URLs laufen etwa eine Stunde nach ihrer Ausstellung ab. Wenn ein Download fehlschlägt, weil die URL abgelaufen ist, rufen Sie die Sprache mit `language.get` erneut ab, um eine neue URL zu erhalten.

> **Tip**
>
> Wenn die Generierung einer Sprache fehlschlägt, fügen Sie sie im selben Projekt mit `language.create` erneut hinzu,
> statt ein neues Projekt zu erstellen. Das Projekt und sein Transkript sind wiederverwendbar, sodass nur die fehlgeschlagene
> Sprache erneut generiert wird.