Start · Sprachen · JavaScript · Referenz · AudioTrack.language

AudioTrack.language

Eigenschaft

Schreibgeschützte Eigenschaft, die die Sprache einer Audiospur als BCP-47-Sprachcode (z. B. <code>"de"</code>, <code>"en-US"</code>) oder als leere Zeichenkette liefert.

seit JavaScript Safari 7+; Chrome/Edge nur hinter Flag, Firefox nu Kategorie: webapi

Signatur

AudioTrack.language

Beschreibung

Die Eigenschaft language eines AudioTrack-Objekts gibt die Hauptsprache der Audiospur als gültiges BCP-47-Sprachtag zurück, etwa "en", "de-DE" oder "pt-BR". Der Wert stammt aus den Metadaten der Mediendatei bzw. des Streams (z. B. MP4-, WebM- oder HLS-Manifest). Enthält die Quelle keine Sprachangabe oder kann der Browser sie nicht ermitteln, ist der Wert eine leere Zeichenkette "".

Typischer Einsatzzweck ist ein eigenes Sprachauswahl-Menü für Videos mit mehreren Tonspuren (z. B. Originalton und Synchronfassung). Über HTMLMediaElement.audioTracks erhält man eine AudioTrackList, deren Einträge man anhand von language filtert und dann über AudioTrack.enabled aktiviert oder deaktiviert.

Da die Eigenschaft schreibgeschützt ist, lässt sich die Sprache einer Spur per JavaScript nicht ändern. Für eine lesbare Anzeige im Menü kombiniert man sie sinnvollerweise mit AudioTrack.label oder übersetzt den Code mit Intl.DisplayNames.

Rückgabewert

Typ
string
Beschreibung
Ein BCP-47-Sprachtag wie "en" oder "de-AT", oder "", wenn die Sprache unbekannt ist.

Beispiele

Sprachen aller Audiospuren auflisten

const video = document.querySelector('video');

video.addEventListener('loadedmetadata', () => {
  const tracks = video.audioTracks;
  if (!tracks) {
    console.warn('AudioTrack-API wird nicht unterstützt');
    return;
  }
  for (const track of tracks) {
    console.log(`${track.id}: ${track.language || '(unbekannt)'} – ${track.label}`);
  }
});
1: en – English 2: de – Deutsch 3: (unbekannt) – Kommentar

Tonspur passend zur Browsersprache aktivieren

const video = document.querySelector('video');

const selectAudioByLanguage = (media, preferred = navigator.language) => {
  const tracks = Array.from(media.audioTracks ?? []);
  const base = preferred.split('-')[0].toLowerCase();

  // Erst exakte Übereinstimmung, dann nur die Hauptsprache
  const match =
    tracks.find((t) => t.language.toLowerCase() === preferred.toLowerCase()) ??
    tracks.find((t) => t.language.split('-')[0].toLowerCase() === base);

  if (!match) return null;
  tracks.forEach((t) => { t.enabled = t === match; });
  return match.language;
};

video.addEventListener('loadedmetadata', () => {
  console.log('Aktive Sprache:', selectAudioByLanguage(video, 'de-DE'));
});
Aktive Sprache: de

Sprachauswahl-Menü mit lesbaren Namen via Intl.DisplayNames

const video = document.querySelector('video');
const select = document.querySelector('#audio-lang');
const names = new Intl.DisplayNames(['de'], { type: 'language' });

video.addEventListener('loadedmetadata', () => {
  for (const track of video.audioTracks ?? []) {
    const option = document.createElement('option');
    option.value = track.id;
    option.textContent = track.language
      ? names.of(track.language)
      : track.label || 'Unbekannte Sprache';
    option.selected = track.enabled;
    select.append(option);
  }
});

select.addEventListener('change', () => {
  for (const track of video.audioTracks) {
    track.enabled = track.id === select.value;
  }
});

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Die AudioTrack-API ist nur in Safari standardmäßig aktiv. In Chrome/Edge ist sie hinter dem Flag „Experimental Web Platform features“ versteckt, in Firefox hinter media.track.enabled. Immer vorher prüfen, ob video.audioTracks existiert. Für die Produktion eignen sich oft Player-Bibliotheken wie hls.js, Shaka Player oder dash.js mit eigener Spurverwaltung besser.
  • Der Wert kann eine leere Zeichenkette sein – nie davon ausgehen, dass jede Spur eine Sprache hat.
  • Sprachtags unterscheiden in der Praxis Groß-/Kleinschreibung uneinheitlich ("en-us" vs. "en-US"), und manche Container liefern ISO-639-2-Codes wie "deu" oder "und" (unbestimmt). Deshalb vor dem Vergleich normalisieren.
  • Die Audiospuren stehen erst nach dem Laden der Metadaten zur Verfügung – daher im Event loadedmetadata oder im addtrack-Event der AudioTrackList auswerten.
  • Die Eigenschaft ist schreibgeschützt; Zuweisungen werden stillschweigend ignoriert (im Strict Mode gibt es einen TypeError).