valid-lang
lang-Attribut eines Elements muss syntaktisch gültig sein
Prüft, dass jedes Element (außer dem Wurzelelement <html>) mit nicht leerem lang-Attribut ein syntaktisch gültiges Sprach-Tag verwendet.
Anwendbarkeit. Gilt für jedes Element außer dem Wurzelelement <html> mit nicht leerem lang-Attribut UND mindestens etwas „zugehörigem Text“ außer Leerraum, der seine Sprache tatsächlich von diesem Element erbt, gemäß ACT de46e4:
- Text/alt von Nachfahren gehört nur zum nächstgelegenen Vorfahren mit lang; ein verschachtelter Nachfahre mit eigenem nicht leerem lang grenzt alles in ihm neu ab, sodass dieser Teilbaum nicht mehr zur Anwendbarkeit des äußeren Elements zählt (er zählt zu der des verschachtelten Elements, falls dieses ebenfalls bewertet wird).
- Ein nicht leeres alt-Attribut an img/area/input[type=image] zählt als zugehöriger Text, genau wie ein Textknoten.
- Text (oder alt), den CSS aus dem Render-Baum heraushält (display:none, das hidden-Attribut, ...), zählt nicht. aria-hidden und Positionierung außerhalb des sichtbaren Bereichs nehmen Text NICHT aus, gemäß den eigenen Fehlerbeispielen von ACT für beides; nur tatsächliches Nicht-Rendern tut das.
Erwartung. Das primäre Sprach-Subtag des lang-Werts (der Teil vor dem ersten Bindestrich) ist ein registriertes Sprach-Subtag, wie ACT de46e4 es verlangt. WCAG 3.1.2 (Sprache von Teilen) verlangt, dass ein Abschnitt, dessen Sprache von der Standardsprache der Seite abweicht, programmatisch gekennzeichnet ist. Ein Tag mit unbekanntem primärem Subtag bezeichnet überhaupt keine echte Sprache; ein fehlerhaftes späteres Subtag (lang="en-US_x") bezeichnet weiterhin Englisch und besteht hier, da es ein Fehler in der Gültigkeit des Markups ist und keine fehlende Sprache.
Was ein Befund meldet.
reasonCode:DEFAULT_LANG_INVALID, wenn kein Vorfahre (über Shadow Hosts hinweg, <html> eingeschlossen) ein nicht leeres lang hat, dieses Element also die Sprache festlegt, von der sein Text ausgeht, wie<body lang>auf einer Seite, deren <html> keines hat;ELEMENT_LANG_INVALID, wenn es eine geerbte Sprache ändert. Beide ergeben fail für 3.1.2, wie bei ACT de46e4.value: der Wert des lang-Attributs, ohne umgebende Leerzeichen.
Diese Felder in data.details helfen, einen Befund zu lesen und zu reproduzieren. Außer reasonCode und den wenigen Feldern, die Ausgabeschema als stabil nennt, sind sie kein stabiler Vertrag: Ein Feld kann in einer Minor-Version umbenannt werden oder wegfallen, bauen Sie also nicht darauf auf.
Beispiele
<p lang="fr">Bonjour</p>
„fr“ ist ein syntaktisch gültiges BCP-47-Sprach-Tag.
<p lang="xyz123!!">???</p>
Der Wert entspricht nicht der BCP-47-Syntax.