HTMLのlang属性はページの言語をhtml要素へ指定する
公開日: 執筆:佐藤
日本語を中心に書いたHTML文書では、html要素へlang="ja"を指定します。ページ全体の基準となる言語を最上位の要素で示し、英語などへ切り替わる部分があれば、その部分の要素でlangを指定し直します。
<html lang="ja">
lang属性は、文字コードや文字の表示方向を指定する属性ではありません。何の言語で書かれた内容かをHTMLに記述するための属性です。
日本語ページではhtml要素へlang="ja"を指定する
HTML 4.01の言語情報に関する仕様は、lang属性を、要素の内容と属性値の基準言語を示すものと定義しています。文書全体の基準言語は、次のようにhtml要素へ指定します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<title>会社案内</title>
</head>
<body>
<p>事業内容をご案内します。</p>
</body>
</html>
日本語の言語コードはjaです。jpは日本という国を表すコードと混同した値であり、日本語の基準言語として指定しません。日本語で書いたページなら、まずlang="ja"を使います。
言語情報は、音声合成による発音、引用符、文字の形、ハイフン処理、綴りの確認などを利用者の環境が選ぶ手掛かりになります。WCAG 2.0の実装方法H57も、文書の既定の言語をhtml要素のlangまたはxml:langで示す方法を説明しています。
lang属性と文字コードは別に指定する
lang="ja"とcharset=UTF-8は、どちらか一方を指定すればよい関係ではありません。langは内容の言語を示し、文字コードは文字をどの符号で保存し、読み取るかを示します。
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>会社案内</title>
</head>
日本語の文字が正しく表示されていても、langが正しいとは限りません。反対に、lang="ja"があっても、文字コードの指定と実際のファイルが食い違えば文字化けします。出力されたHTMLでは、言語と文字コードを別々に確認します。
一部だけ言語が変わる場合はその要素で指定し直す
html要素に指定した言語は、内側の要素へ引き継がれます。ページの大半が日本語なら、すべての段落へlang="ja"を繰り返す必要はありません。
英語の文章をまとまった範囲で掲載する場合は、その範囲を囲む要素へlang="en"を指定します。
<html lang="ja">
<body>
<p>英語でのご案内は次のとおりです。</p>
<blockquote lang="en">
<p>Information about our services.</p>
</blockquote>
</body>
</html>
WCAG 2.0の実装方法H58は、ページ内で人間の言語が変わる箇所へ、文書形式に応じたlangまたはxml:langを指定する方法を示しています。ただし、日本語文中に現れる固有名詞、技術用語、日常語として定着した短い語まで、一語ずつ機械的に囲む必要はありません。文章や引用の言語が切り替わる範囲を見て判断します。
HTMLとXHTMLでは使う属性を分ける
HTML 4.01ではlang属性を使います。XHTMLでは、配信する内容形式によって指定が変わります。
| 文書と配信形式 | html要素への指定 |
|---|---|
| HTML 4.01 | lang="ja" |
XHTML 1.0をtext/htmlで配信 |
lang="ja" xml:lang="ja" |
XHTMLをapplication/xhtml+xmlで配信 |
xml:lang="ja" |
見た目だけでHTMLかXHTMLかを決めず、文書型宣言とHTTPのContent-Typeを確認します。テンプレートの一行だけを別形式の書き方へ変えるのではなく、サイトが実際に出力する文書形式に合わせます。
lang属性とdir属性を混同しない
lang属性は言語、dir属性は文字や表の基準方向を示します。HTML 4.01は、文字の方向をlangから決めてはいけないとしています。
日本語ページにlang="ja"を指定することと、左から右または右から左という方向を指定することは別です。右から左へ書く言語を含むページでは、言語の指定だけで表示方向まで処理させず、内容に応じてdir属性も検討します。
テンプレートと出力HTMLの両方を確認する
サイト全体で共通のテンプレートを使っているなら、html要素は通常、そのテンプレートから出力されます。個々の本文だけを直しても、最上位のlangは変わらない場合があります。
まず一ページのソースを開き、開始タグが<html lang="ja">になっているかを確認してください。次に、文書型宣言とHTTP応答のContent-Typeを見て、HTMLとXHTMLのどちらとして出力しているかを照合します。ページ内に別言語のまとまった文章がある場合だけ、その範囲のlangも確認します。
関連記事

