Start · Sprachen · JavaScript · Referenz · SpeechSynthesisUtterance.lang

SpeechSynthesisUtterance.lang

Eigenschaft

Liest oder setzt die Sprache einer Sprachausgabe als BCP-47-Sprachcode, z. B. <code>"de-DE"</code> oder <code>"en-US"</code>.

seit JavaScript Baseline: alle modernen Browser (Web Speech API) Kategorie: webapi

Signatur

SpeechSynthesisUtterance.lang

Beschreibung

Die Eigenschaft lang eines SpeechSynthesisUtterance-Objekts gibt an, in welcher Sprache der Text vorgelesen werden soll. Als Wert dient ein BCP-47-Sprach-Tag wie "de-DE", "en-GB" oder "fr-FR". Die Sprachsynthese wählt damit eine passende Stimme und wendet die richtigen Aussprache-Regeln an.

Ist lang nicht gesetzt (leerer String), nutzt der Browser die Sprache des Dokuments (<html lang="…">) oder, falls diese fehlt, die Sprache des Benutzeragenten. Wer mehrsprachige Anwendungen baut, sollte lang deshalb immer ausdrücklich setzen.

Wird zusätzlich eine bestimmte Stimme über utterance.voice zugewiesen, hat diese Stimme Vorrang: Die Sprache der Stimme (SpeechSynthesisVoice.lang) bestimmt dann in der Praxis die Aussprache. Am robustesten ist es, lang und eine passende voice gemeinsam zu setzen.

Parameter

Name Typ Default Beschreibung
$value string "" Beim Setzen: ein gültiger BCP-47-Sprachcode, z. B. "de-DE". Ein leerer String bedeutet: Sprache des Dokuments bzw. Browsers verwenden.

Rückgabewert

Typ
string
Beschreibung
Der aktuell gesetzte BCP-47-Sprachcode oder ein leerer String, falls keiner festgelegt wurde.

Beispiele

Deutschen Text vorlesen

const utterance = new SpeechSynthesisUtterance('Guten Morgen! Ihr Termin beginnt in zehn Minuten.');
utterance.lang = 'de-DE';
console.log(utterance.lang);
speechSynthesis.speak(utterance);
de-DE

Passende Stimme zur Sprache auswählen

const getVoices = () => new Promise((resolve) => {
  const voices = speechSynthesis.getVoices();
  if (voices.length) return resolve(voices);
  speechSynthesis.addEventListener('voiceschanged', () => resolve(speechSynthesis.getVoices()), { once: true });
});

const speak = async (text, lang) => {
  const voices = await getVoices();
  const utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = lang;
  // Exakte Übereinstimmung bevorzugen, sonst nur Hauptsprache vergleichen
  utterance.voice = voices.find((v) => v.lang === lang)
    ?? voices.find((v) => v.lang.startsWith(lang.split('-')[0]))
    ?? null;
  console.log(`Sprache: ${utterance.lang}, Stimme: ${utterance.voice?.name ?? 'Standard'}`);
  speechSynthesis.speak(utterance);
};

speak('Hello, how are you?', 'en-GB');
Sprache: en-GB, Stimme: Google UK English Female (abhängig von System/Browser)

Mehrsprachige Ansage nacheinander ausgeben

const announcements = [
  { text: 'Der Zug fährt ab.', lang: 'de-DE' },
  { text: 'The train is departing.', lang: 'en-US' },
  { text: 'Le train part.', lang: 'fr-FR' }
];

for (const { text, lang } of announcements) {
  const utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = lang;
  speechSynthesis.speak(utterance); // wird in die Warteschlange eingereiht
}
console.log(speechSynthesis.pending || speechSynthesis.speaking);
true

// Wichtig · Fallstricke

  • Keine Validierung: Ungültige oder nicht unterstützte Sprachcodes lösen keinen Fehler aus. Der Browser fällt dann still auf eine Standardstimme zurück, und der Text wird womöglich mit falscher Aussprache gelesen.
  • Verfügbare Sprachen hängen vom System ab: Welche Sprachen es gibt, legen Betriebssystem und Browser fest. Prüfe mit speechSynthesis.getVoices(), ob eine passende Stimme vorhanden ist.
  • voice hat Vorrang: Ist eine Stimme gesetzt, deren Sprache nicht zu lang passt, entscheidet in den meisten Browsern die Stimme über die Aussprache.
  • Schreibweise: Manche ältere Implementierungen (z. B. Android) melden Stimmen mit Unterstrich (de_DE). Beim Vergleichen also sicherheitshalber normalisieren.
  • Kompatibilität: Wird von Chrome, Edge, Safari und Firefox unterstützt. getVoices() liefert in Chrome beim ersten Aufruf oft ein leeres Array, darum auf voiceschanged warten.