Signatur
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
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);
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');
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);
// 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. voicehat Vorrang: Ist eine Stimme gesetzt, deren Sprache nicht zulangpasst, 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 aufvoiceschangedwarten.