> 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.

# कई भाषाओं में डब करें

> **Note**
>
> **कैसे करें गाइड** · इसमें माना गया है कि आपने डबिंग प्रोजेक्ट बना लिया है, जैसा कि [डबिंग क्विकस्टार्ट](/docs/hi/eleven-api/guides/cookbooks/dubbing) में दिखाया गया है।

एक प्रोजेक्ट में एक स्रोत ट्रांसक्रिप्ट होता है और आप अपनी ज़रूरत के अनुसार कितनी भी लक्ष्य भाषाएं जोड़ सकते हैं। हर भाषा स्वतंत्र रूप से जनरेट होती है और उसका अपना स्टेटस व आउटपुट होता है, इसलिए आप स्रोत का अनुवाद एक बार करते हैं और उससे हर डब बनाते हैं।

## कई भाषाएं जोड़ें

जिस भाषा में डब करना है, उसके लिए एक लक्ष्य भाषा जोड़ें। हर भाषा `queued` में शुरू होती है और प्रोजेक्ट के `ready` होने पर जनरेट होना शुरू हो जाती है।

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

आप `project.create` को `target_language` पास करके प्रोजेक्ट बनाते समय पहली भाषा को भी कतार में लगा सकते हैं। ऊपर दिखाए अनुसार `language.create` से आगे की भाषाएं जोड़ें।

भाषाएं BCP-47 टैग के रूप में दी जाती हैं, जैसे `es` या `fr-CA`। स्वीकार किए गए सभी मानों के लिए [समर्थित भाषाएं और बोलियां](/docs/hi/overview/capabilities/dubbing#supported-languages) देखें।

## हर भाषा को अलग-अलग ट्रैक करें

भाषाएं समानांतर रूप से जनरेट होती हैं और अलग-अलग समय पर पूरी होती हैं। उन्हें एक-एक करके पोल करने के बजाय, हर भाषा का स्टेटस देखने के लिए प्रोजेक्ट की भाषाओं की सूची देखें।

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

## हर पूरा हुआ डब डाउनलोड करें

जब कोई भाषा `completed` पर पहुंचती है, तो उसके `outputs.lossless_audio` में साइन किया हुआ डाउनलोड URL होता है। जो भाषा विफल रही हो उसे छोड़कर, हर डब डाउनलोड करें।

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

साइन किए गए URL जारी होने के करीब एक घंटे बाद एक्सपायर हो जाते हैं। अगर URL एक्सपायर होने की वजह से डाउनलोड विफल हो जाए, तो नया URL पाने के लिए `language.get` से भाषा को फिर से पाएं।

> **Tip**
>
> अगर कोई भाषा जनरेट नहीं हो पाती है, तो नया प्रोजेक्ट बनाने के बजाय उसी प्रोजेक्ट में उसे फिर से
> `language.create` से जोड़ें। प्रोजेक्ट और उसका ट्रांसक्रिप्ट दोबारा इस्तेमाल किए जा सकते हैं, इसलिए सिर्फ़ विफल
> भाषा फिर से जनरेट होती है।