valid-lang
L’attribut lang d’un élément doit être syntaxiquement valide
Vérifie que tout élément (autre que la racine <html>) doté d’un attribut lang non vide utilise une balise de langue syntaxiquement valide.
Applicabilité. S’applique à tout élément autre que la racine <html> doté d’un attribut lang non vide ET d’au moins un peu de « texte régi » non blanc qui hérite réellement sa langue de cet élément, selon ACT de46e4 :
- Le texte ou l’alt des descendants n’est régi que par l’ancêtre porteur de lang le plus proche : un descendant imbriqué doté de son propre lang non vide redéfinit la portée de tout ce qu’il contient, si bien que ce sous-arbre ne compte plus pour l’applicabilité de l’élément externe (il compte pour celle de l’élément imbriqué, si celui-ci est également évalué).
- Un attribut alt non vide sur img/area/input[type=image] compte comme texte régi, au même titre qu’un nœud texte.
- Le texte (ou l’alt) que le CSS maintient hors de l’arbre de rendu (display:none, l’attribut hidden, ...) ne compte pas. aria-hidden et le positionnement hors écran n’exemptent PAS le texte, d’après les propres exemples en échec d’ACT pour ces deux cas ; seule l’absence réelle de rendu l’exempte.
Attendu. La sous-étiquette de langue principale de la valeur de lang (la partie avant le premier trait d’union) est une sous-étiquette de langue enregistrée, comme l’exige ACT de46e4. WCAG 3.1.2 (Langue d’un passage) exige que, lorsque la langue d’un passage diffère de la langue par défaut de la page, elle soit identifiée par programme. Une étiquette dont la sous-étiquette principale est inconnue n’identifie aucune langue réelle ; une sous-étiquette ultérieure mal formée (lang="en-US_x") identifie toujours l’anglais et réussit ici, puisqu’il s’agit d’une erreur de validité du balisage et non d’une langue manquante.
Ce que rapporte un constat.
reasonCode:DEFAULT_LANG_INVALIDlorsqu’aucun ancêtre (à travers les hôtes shadow, <html> compris) n’a de lang non vide, si bien que celui-ci fixe la langue de départ de son texte, comme le fait<body lang>sur une page dont le <html> n’en a pas ;ELEMENT_LANG_INVALIDlorsqu’il change une langue héritée. Les deux échouent au critère 3.1.2, comme dans ACT de46e4.value: la valeur de l’attribut lang, sans espaces aux extrémités.
Ces champs de data.details aident à lire et à reproduire un constat. À part reasonCode et les quelques champs que la page Schéma de sortie donne comme stables, ils ne constituent pas un contrat stable : un champ peut être renommé ou supprimé dans une version mineure, ne vous appuyez donc pas dessus.
Exemples
<p lang="fr">Bonjour</p>
« fr » est une balise de langue BCP 47 syntaxiquement valide.
<p lang="xyz123!!">???</p>
La valeur ne respecte pas la syntaxe BCP 47.