Start · Sprachen · JavaScript · Referenz · SVGAnimationElement.systemLanguage

SVGAnimationElement.systemLanguage

Eigenschaft

Gibt eine schreibgeschützte, aber live veränderbare <code>SVGStringList</code> mit den Sprach-Tags des <code>systemLanguage</code>-Attributs eines SVG-Animationselements zurück.

seit JavaScript SVG 1.1 / SVG 2 (SVGTests); Chrome, Edge, Firefox, Kategorie: webapi

Signatur

SVGAnimationElement.systemLanguage

Beschreibung

Die Eigenschaft systemLanguage steht auf allen Animationselementen wie <animate>, <animateTransform>, <animateMotion> und <set> zur Verfügung. Sie kommt aus der Mixin-Schnittstelle SVGTests und spiegelt das Attribut systemLanguage wider. Das Attribut enthält eine kommagetrennte Liste von BCP-47-Sprach-Tags, zum Beispiel "de, en-US".

Das Attribut gehört zur bedingten Verarbeitung in SVG. Eine Animation mit systemLanguage läuft nur dann, wenn eine der eingetragenen Sprachen zu den Spracheinstellungen des Benutzers passt. Sonst gilt die Bedingung als nicht erfüllt und die Animation wird nicht ausgeführt. So kann man sprachabhängige Animationen bauen, zum Beispiel einen Texteinblender, der nur für deutschsprachige Nutzer erscheint.

„Schreibgeschützt“ heißt hier nur: Man kann der Eigenschaft kein neues Objekt zuweisen. Die zurückgegebene SVGStringList ist dagegen live. Methoden wie appendItem(), removeItem() oder clear() ändern das Attribut direkt und umgekehrt.

Rückgabewert

Typ
SVGStringList
Beschreibung
Eine live mit dem Attribut verbundene Liste der Sprach-Tags. Fehlt das Attribut, ist die Liste leer (numberOfItems === 0).

Beispiele

Sprach-Tags einer Animation auslesen

// <svg><rect width="50" height="50">
//   <animate id="anim" attributeName="x" from="0" to="100" dur="2s" systemLanguage="de, en-US"/>
// </rect></svg>
const anim = document.getElementById('anim');
const langs = anim.systemLanguage;

console.log(langs.numberOfItems);
for (let i = 0; i < langs.numberOfItems; i++) {
  console.log(langs.getItem(i));
}
2 de en-US

Sprache zur Laufzeit ergänzen

const anim = document.querySelector('animate');

// Liste ist live – Änderungen wirken sich direkt auf das Attribut aus
anim.systemLanguage.appendItem('fr');
console.log(anim.getAttribute('systemLanguage'));
de en-US fr

Prüfen, ob die Animation zur Browsersprache passt

const anim = document.querySelector('animate');
const list = anim.systemLanguage;
const userLangs = navigator.languages.map((l) => l.toLowerCase());

const tags = Array.from({ length: list.numberOfItems }, (_, i) => list.getItem(i).toLowerCase());
const matches = tags.length === 0 || tags.some((tag) =>
  userLangs.some((u) => u === tag || u.startsWith(`${tag}-`))
);

console.log(matches ? 'Animation wird ausgeführt' : 'Animation wird übersprungen');
Animation wird ausgeführt

Sprachbeschränkung entfernen

const anim = document.querySelector('animate');
anim.systemLanguage.clear();

// Ohne Einträge gilt keine Sprachbedingung mehr
console.log(anim.systemLanguage.numberOfItems);
anim.beginElement();

// Wichtig · Fallstricke

  • Nur scheinbar schreibgeschützt: anim.systemLanguage = … hat keine Wirkung und wirft im Strict Mode einen TypeError. Ändern lässt sich die Liste über ihre Methoden oder über setAttribute('systemLanguage', …).
  • Die Trennzeichen im Attribut sind uneinheitlich. Laut SVG 2 sind Einträge kommagetrennt, aber manche Browser serialisieren die Liste beim Zurückschreiben mit Leerzeichen. Deshalb lieber die Liste auswerten als den Attribut-String.
  • Wie Sprachen verglichen werden, hängt vom Browser ab. Meist passt "en" auch zu "en-US", umgekehrt aber nicht immer.
  • Ein leeres Attribut systemLanguage="" gilt als nicht erfüllt. Die Animation läuft dann nicht. Fehlt das Attribut ganz, gibt es keine Einschränkung.
  • Den Index-Zugriff list[0] unterstützen nur moderne Browser. getItem() und numberOfItems funktionieren überall.
  • Browser-Kompatibilität: Chrome, Edge, Firefox und Safari unterstützen die Eigenschaft. SMIL-Animationen selbst gelten wieder als stabil, waren aber zeitweise in Chrome als veraltet markiert.