valid-lang
要素のlang属性は構文的に有効である必要があります
automaticWCAG 3.1.2 (AA)確度:high重大度:moderateunderstandable
空でないlang属性を持つ要素(ルートの<html>以外)が、構文的に有効な言語タグを使用していることを確認します。
適用範囲:ルートの<html>以外で、空でないlang属性を持ち、かつ、その要素から実際に言語を継承する空白以外の「対象テキスト」を少しでも持つ要素に適用されます(ACT de46e4に準拠)。
- 子孫のテキストやaltは、langを持つ最も近い祖先要素だけに従います。自身の空でないlangを持つ入れ子の子孫要素は、その内側すべての範囲を改めて定めるため、そのサブツリーは外側の要素の適用範囲には数えません(その入れ子の要素も評価対象であれば、そちらの適用範囲に数えます)。
- img/area/input[type=image]の空でないalt属性は、テキストノードと同じく対象テキストとして数えます。
- CSSによってレンダーツリーから外されているテキストやalt(display:none、hidden属性など)は数えません。aria-hiddenや画面外への配置では、テキストは除外されません。ACT自身のfailの例がどちらについても示しているとおり、除外されるのは実際にレンダリングされない場合だけです。
期待される結果:lang値の主言語サブタグ(最初のハイフンより前の部分)が、ACT de46e4が求めるとおり登録済みの言語サブタグです。WCAG 3.1.2(一部分の言語)は、ある部分の言語がページの既定の言語と異なる場合に、それがプログラムによって識別されることを求めています。主サブタグが不明なタグは実在する言語をまったく示しません。後続のサブタグの形式が正しくない場合(lang="en-US_x")は英語を示したままで、言語の欠落ではなくマークアップの妥当性の誤りであるため、ここでは合格します。
検出結果が報告する内容:
reasonCode:どの祖先(シャドウホストをたどり、<html>も含む)も空でないlangを持たず、この要素がテキストの起点となる言語を設定する場合(<html>にlangがないページの<body lang>など)はDEFAULT_LANG_INVALID、継承された言語を変更する場合はELEMENT_LANG_INVALIDです。ACT de46e4と同じく、どちらも3.1.2でfailになります。value:lang属性の値で、前後の空白を除いたものです。
これらのdata.detailsのフィールドは、検出結果を読み解き、再現するのに役立ちます。reasonCodeと、出力スキーマで安定と明記された一部のフィールドを除き、安定した契約ではありません。マイナーリリースで名前が変わったり、なくなったりすることがあるため、これらに依存した実装はしないでください。
例
pass
<p lang="fr">Bonjour</p>
「fr」は、構文的に有効なBCP 47言語タグです。
fail
<p lang="xyz123!!">???</p>
値が有効なBCP 47の構文ではありません。