lang 属性

3.2.5.3 langxml:lang 属性

lang 属性(名前空間に属さない)は、要素のコンテンツと、要素のテキストを含んだ属性の主言語を指定するものです。その値は、BCP 47 の言語コードに準拠するか、もしくは空文字でなければいけません。空文字列をこの属性にセットすると、主言語は不明ということを意味ます。 [BCP47]

XML 名前空間lang 属性は、XML で定義されています。 [XML]

これらの属性が要素から省略された場合、その要素の言語は、もし親要素があれば、その親要素の言語と同じになります。

名前空間に属さない lang 属性は、あらゆる HTML 要素で使うことができます。

XML 名前空間の lang 属性は、関連の仕様が認めているのであれば(具体的には、MathML や SVG では、それらの要素に XML 名前空間の lang 属性を指定することが認められています)、他の名前空間の要素と同様に、XML ドキュメントにある HTML 要素に使うことができます。名前空間に属さない lang 属性と XML 名前空間の lang 属性の両方を同じ要素に指定する場合、それらの値は大文字と小文字を区別せずに比較したときに正確に同じでなければいけません。

ウェブ制作者は XML 名前空間の lang 属性HTML ドキュメントHTML 要素に使ってはいけません。XHTML への移行や XHTML からの移行を簡単にするため、ウェブ制作者は HTML ドキュメントHTML 要素に、プレフィックスがなく、文字通りのローカル名である "xml:lang" を持った名前空間に属さない属性を指定することができます。しかし、そのような属性は、名前空間に属さない lang 属性も指定される場合にのみ、指定することができます。そして、これらの属性の値はいずれも大文字と小文字を区別せずに比較したときに同じでなければいけません。

プレフィックスがなく、文字通りのローカル名である "xml:lang" を持った名前空間に属さない属性は、言語処理において影響を及ぼすことはありません。


ノードの言語を決定するために、ユーザーエージェントは、XML 名前空間の lang 属性がセットされている、または、HTML 要素であり、名前空間に属さない lang 属性がセットされている直近の祖先の要素(そのノードが要素なら、要素である自分自身も含みます)を見なければいけません。その属性が、そのノードの言語を指定します(その値は問いません)。

もし名前空間に属さない lang 属性と XML 名前空間の lang 属性の両方が要素にセットされているなら、ユーザーエージェントは、XML 名前空間の lang 属性を採用しなければいけません。そして、名前空間に属さない lang 属性は、その要素の言語を決定する目的においては、無視されなければいけません。

もし、root 要素も含め、属性がセットされたノードが祖先にひとつもないけれども、プラグマ・セットのデフォルト言語がセットされているなら、それが該当のノードの言語になります。プラグマ・セットのデフォルト言語がセットされていない場合、上位プロトコル(HTTP など)から言語情報が得られるなら、それが最終のフォールバック言語として採用されなければいけません。言語情報が何も見つからず、上位プロトコルが多言語を報告する場合は、該当のノードの言語は不明となり、関連の言語タグは空文字列となります。

得られた値が認識可能な言語タグでなければ、それは、他のあらゆる言語と区別して、指定言語タグを持つ不明の言語として扱われなければいけません。言語タグを期待する他のサービスとやりとりする目的においては、ユーザーエージェントは、不明な言語タグを変更せず BCP 47 言語タグであるとしてタグ付けして、そのまま引き渡し、次に続くサービスがそのデータを別の言語タイプの記述と解釈しないようにするべきです。[BCP47]

ゆえに、たとえば、どちらも妥当ではありませんが、lang="xyzzy" を持つ要素は、セレクター :lang(xyzzy)に一致するでしょう(たとえば CSS で)が、:lang(abcde) には一致しないでしょう。同様に、ウェブブラウザーとスクリーンリーダーが一体となって要素の言語についてやりとりしたなら、ウェブブラウザーは、その言語は "xyzzy" だったとスクリーンリーダーに教えるでしょう。たとえ、それが妥当でないと分かっていたとしても、スクリーンリーダーが実際にはそのタグを持つ言語をサポートしているかもしれません。たとえスクリーンリーダーが 言語名エンコーディングのために BCP 47 と他の構文の両方をサポートしており、その他の構文では、文字列 "xyzzy" がベラルーシ語を意味する方法だったとしても、それはスクリーンリーダーがテキストをベラルーシ語として扱い始めるには適切ではありません。なぜなら、"xyzzy" は、BCP 47 コードでベラルーシ語を表す方法ではないからです(BCP 47 ではベラルーシ語のコードに "be" を使います)

得られた値が空文字列なら、それは、そのノードの言語が明示的に不明という意味で解釈されなければいけません。


ユーザーエージェントは、要素の言語を使って、それに合わせた処理やレンダリングを決定することができます(例えば、フォントや発音の選択や、辞書選択や、日付ピッカーのようなフォームコントロールのユーザーインタフェースのためなど)。


lang IDL 属性は、名前空間に属さない lang コンテント属性を反映しなければいけません。


※ 原文:http://www.w3.org/TR/2014/REC-html5-20141028/dom.html#the-lang-and-xml:lang-attributes