Start · Sprachen · JavaScript · Referenz · SpeechRecognition.available()

SpeechRecognition.available()

Methode

Statische Methode, die asynchron prüft, ob die angegebenen Sprachen für die Spracherkennung verfügbar sind – optional ausschließlich lokal auf dem Gerät.

seit JavaScript Experimentell: Chromium 139+ (nicht Baseline) Kategorie: webapi

Signatur

SpeechRecognition.available(options)

Beschreibung

Die statische Methode SpeechRecognition.available() der Web Speech API gibt an, ob die Spracherkennung für eine oder mehrere Sprachen genutzt werden kann. Mit der Option processLocally lässt sich gezielt abfragen, ob die Erkennung auf dem Gerät stattfinden kann, also ohne dass Audiodaten an einen Clouddienst gehen.

Das Ergebnis ist ein Promise, das mit einem von vier Statuswerten erfüllt wird: "available" (sofort nutzbar), "downloadable" (kann mit SpeechRecognition.install() heruntergeladen werden), "downloading" (Download läuft) oder "unavailable" (wird nicht unterstützt).

Rufe die Methode vor dem Start einer Erkennungssitzung auf. So kannst du deine Oberfläche anpassen, etwa einen Mikrofon-Knopf ausblenden, einen Download des Sprachpakets anbieten oder auf Cloud-Erkennung umschalten. Das ist besonders nützlich für datenschutzkritische Anwendungen, die nur lokal arbeiten dürfen, und für Szenarien ohne Netzwerk.

Parameter

Name Typ Default Beschreibung
$options Pflicht Object Konfigurationsobjekt mit den folgenden Eigenschaften.
$options.langs Pflicht Array<string> Liste von BCP-47-Sprach-Tags, z. B. ["de-DE", "en-US"]. Der Status "available" kommt nur zurück, wenn alle Sprachen verfügbar sind.
$options.processLocally boolean false Bei true wird nur die Verfügbarkeit der lokalen Erkennung auf dem Gerät geprüft. Bei false zählt auch die Erkennung über einen Server.

Rückgabewert

Typ
Promise<"available" | "downloadable" | "downloading" | "unavailable">
Beschreibung
Ein Promise, das mit einem Statuswert zur Verfügbarkeit der angefragten Sprachen erfüllt wird.

Beispiele

Verfügbarkeit einer Sprache prüfen

const Recognition = window.SpeechRecognition ?? window.webkitSpeechRecognition;

if (Recognition && typeof Recognition.available === 'function') {
  const status = await Recognition.available({ langs: ['de-DE'] });
  console.log(`Deutsch: ${status}`);
} else {
  console.log('available() wird nicht unterstützt');
}
Deutsch: available

Lokale Erkennung prüfen und bei Bedarf installieren

const Recognition = window.SpeechRecognition ?? window.webkitSpeechRecognition;
const options = { langs: ['de-DE'], processLocally: true };

const ensureOnDevice = async () => {
  const status = await Recognition.available(options);
  if (status === 'available') return true;
  if (status === 'downloadable' || status === 'downloading') {
    // install() muss durch eine Nutzeraktion ausgelöst werden
    return Recognition.install(options);
  }
  return false;
};

document.querySelector('#mic').addEventListener('click', async () => {
  const ok = await ensureOnDevice();
  if (!ok) {
    console.log('Lokale Erkennung nicht möglich');
    return;
  }
  const rec = new Recognition();
  rec.lang = 'de-DE';
  rec.processLocally = true;
  rec.onresult = (e) => console.log(e.results[0][0].transcript);
  rec.start();
});
Hallo Welt

Mehrere Sprachen für die Oberfläche auswerten

const Recognition = window.SpeechRecognition ?? window.webkitSpeechRecognition;
const candidates = ['de-DE', 'en-US', 'fr-FR'];

const results = await Promise.all(
  candidates.map(async (lang) => [
    lang,
    await Recognition.available({ langs: [lang], processLocally: true })
  ])
);

console.table(Object.fromEntries(results));
{ 'de-DE': 'downloadable', 'en-US': 'available', 'fr-FR': 'unavailable' }

// Wichtig · Fallstricke

  • Experimentell: Zurzeit nur in Chromium-basierten Browsern (ab etwa Version 139) vorhanden. Firefox unterstützt SpeechRecognition standardmäßig nicht. Safari stellt nur webkitSpeechRecognition ohne available() bereit. Prüfe daher immer vorher mit typeof Recognition.available === 'function'.
  • Die Methode ist statisch. Ein Aufruf auf einer Instanz (new SpeechRecognition().available()) schlägt fehl.
  • Stehen mehrere Sprachen in langs, ist das Ergebnis nur "available", wenn alle verfügbar sind. Für einzelne Aussagen jede Sprache getrennt abfragen.
  • Ein leeres oder ungültiges langs-Array kann dazu führen, dass das Promise abgelehnt wird. Den Aufruf deshalb in try/catch kapseln.
  • Ohne processLocally: true kann die Erkennung über Server des Browserherstellers laufen. Das ist für den Datenschutz relevant (DSGVO).
  • Das Ergebnis kann der Seite Rückschlüsse auf installierte Sprachpakete erlauben (Fingerprinting). Browser können die Antwort deshalb einschränken oder vereinheitlichen.