トピックを検索
読み上げの発音が崩れる、誤ったページの言語指定
共通レイアウトが lang="en" を固定しているため、スペイン語のページが英語の発音規則で読み上げられ、別の言語の引用もページの声で読まれます。
lang="en" 問題
スクリーンリーダーや点字ディスプレイの利用者に、ページが別の言語の発音で読み上げられ、理解しにくく、ときには理解できなくなります。
アウトドア用品店のサイトに、英語版とスペイン語版があります。スクリーンリーダー利用者が、スペイン語版の登山靴の商品ページを開きます。見出しは「Botas de montaña」ですが、スクリーンリーダーは英語の母音と強勢で「ボウタス・ディー・モンタナ」のように読み上げます。続く説明文も同じです。利用者はスペイン語が分かりますが、この読み方では内容を追えません。ページの下の方には、英語で書かれたお客様のレビューが引用されています。ページをスペイン語に直すと、この引用も印を付けない限りスペイン語の声で読まれます。
サイトの共通レイアウトは、英語だけだった頃に書いた <html lang="en"> で始まっています。スペイン語版を追加したとき、翻訳ライブラリは各ページの言葉を入れ替えましたが、lang 属性には手を付けませんでした。スクリーンリーダー、読み上げツール、点字翻訳は、この属性で声と発音規則を選ぶため、スペイン語のページをすべて英語として読みます。WCAG 3.1.1は、各ページの既定の言語をプログラムで判定できることを求めています。この例では判定はできますが、結果が誤っているため、指定がないのと同じく満たしません。WCAG 3.1.2は、英語のレビューのように、ページと異なる言語の部分にも同じことを求めています。固有名詞、専門用語、周囲の言語に定着した語は対象外です。
この問題は翻訳にだけ現れます。英語のページには問題がないため、自分の言語だけでテストするチームは気づきません。影響は支援技術にとどまりません。ブラウザーは lang を使って翻訳を提案し、フォント、ハイフネーション、引用符を選びます。英語と指定されたスペイン語のページは「英語から」の翻訳を提案され、ハイフネーションも崩れることがあります。
10グループ中3グループに影響
- 全盲 (影響あり)
- 弱視 (影響あり)
- 色覚 (影響なし)
- ろう (影響なし)
- 難聴 (影響なし)
- 発話 (影響なし)
- 手の操作 (影響なし)
- 届く範囲・力 (影響なし)
- 認知 (影響あり)
- 光過敏 (影響なし)
- 視覚を使わない スクリーンリーダーは、langから声と発音規則を選びます。値が誤っていると、スペイン語が英語のように読まれ、点字ディスプレイでも誤った略字が使われることがあります。
- 言語・認知・学習の能力が限られる 読むのを助けるために読み上げ機能で聞いている人には、崩れた音声が届き、頼りにしている支援が働かなくなります。
- 視覚が限られる 画面拡大と一緒にスクリーンリーダーやブラウザーの読み上げを使う人にも、同じ誤った発音が届きます。
axeの html-has-lang と html-lang-valid は、属性があるか、値が実在する言語タグかを確認します。スペイン語のページの lang="en" はどちらにも合格するため、この問題で最も多い「指定がない」ではなく「指定が誤っている」形は報告されません。見つけるには、テキストの言語を判定して比べる必要がありますが、通常のページチェックはそこまで行いません。引用、レビュー、商品名が別の言語で独自の lang が必要なのか、そのままにすべき名前なのかも、ツールには分かりません。コーディング支援AIに「lang属性を追加して」と頼むと、共通レイアウトに lang="en" を書くことがよくあります。チェックは合格しますが、翻訳されたすべてのページで問題は残ります。各言語版を聞いて確かめるか、少なくとも lang とテキストを見比べてください。
試してみる
スペイン語の商品ページを聞いてください。
各部分の「聞く」を押すと、langで選ばれる声で読み上げます(端末にその声がある場合)。パネルには声と聞こえ方が表示されます。言語を切り替えて、もう一度聞いてください。
問題あり 修正できますか?
Botas de montaña
Impermeables y ligeras, para todo el año.
Kept me dry for three days of rain.
ページの部分の「聞く」を押してください。
設定元: <html lang="en">
再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。
修正方法
htmlのlangをページの実際の言語から設定し、別の言語の部分にはそれぞれlangを付けます。
- 1どのページもhtml要素に、主な内容と一致する有効なlangがある。
- 2ページを読み込まずに言語が変わるときは、htmlのlangも合わせて変える。
- 3別の言語の部分は、独自のlangを持つ。
html
<!-- app.html, the shared layout --><html lang="en">html
<!-- the Spanish product page, words from the translation file --><h1>Botas de montaña</h1><p>Impermeables y ligeras, para todo el año.</p><blockquote>Kept me dry for three days of rain.</blockquote>テンプレートでページのロケールからlangを設定
html
<!-- app.html, rendered on the server for each request --><html lang="{locale}"> <!-- "es" on /es/ pages, "en" on /en/ -->html
<h1>Botas de montaña</h1><p>Impermeables y ligeras, para todo el año.</p><blockquote lang="en">Kept me dry for three days of rain.</blockquote>スペイン語のページが英語だと宣言しているため、英語の発音で読まれます。英語のレビューには独自の lang がないため、ページの指定に従います。
各ページが、書かれている言語の指定を持って、スクリプトが動く前に届きます。レビューは自分で英語だと示しているため、周りのページの指定に関係なく英語の発音で読まれます。
どちらも3.1.1と3.1.2を満たします。言語ごとにURLがあり、サーバーがページを描画する場合は、URLのロケールからテンプレートで lang を設定します。忘れる心配のあるスクリプトがありません。言語の切り替えでブラウザー内の言葉を入れ替える場合、サーバーの値は最初の読み込みでしか正しくないため、ロケールを変えるコードで document.documentElement.lang も設定します。多くのi18nライブラリには、そのためのフックやオプションがあります。最初の読み込み用のサーバーの値と、切り替え用のクライアントの更新の両方が必要なサイトも多くあります。
正しい範囲で最も短いタグを使います。例:en、es、ja。地域によって文章が異なる場合にだけ、pt-BR や、繁体字中国語の zh-Hant のように地域や文字を加えます。正しそうに見えても無効で、html-lang-valid が報告するコードには次のようなものがあります。
englishやspanish:言語名ではなくコードを使う。es_ES:タグはハイフンでつなぐ。一部のロケールの仕組みが出力するアンダースコアは使わない。jpやcn:これは国のコード。言語のコードはjaとzh。
印を付けるのは部分であり、借用された一語ではありません。別の言語の文、引用、レビューの一覧には、その要素に lang を付けます。英語の文中の「café」、ブランド名、「Cumbre」という商品名には付けません。レビュー、コメント、投稿など、自分で書かない内容はさまざまな言語で届きます。元のデータに言語が記録されていれば lang として出力し、なければ推測せずにページの言語のままにします。
言語切り替えのリンクは、それぞれの言語で書かれています(「Español」「English」)。各リンクにも lang を付けないと、英語のページで「Español」が英語の声で読まれます。そのリンクが別の言語版に移動するなら hreflang も付けます。ブラウザー内の翻訳サービスで内容を翻訳する場合、通常はサービスが lang を更新しますが、実際に更新されるか確認してください。
AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得
修正の確認
マウスを使わない5つの確認
確認方法: スクリーンリーダー
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。言語を追加した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。スクリーンリーダーが声を切り替えるのは、その言語の声がインストールされている場合だけで、短い部分の lang を無視するものもあります。これは制御できませんが、マークアップは正しくしておく必要があります。ある部分が名前なのか別の言語の語句なのかは、ツールでは判断できません。実際のページの各言語版を、できればその言語を読める人と一緒に確認してください。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
コードを更新しても、使いやすさを保つために
ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。