标准 · WCAG 2.2

SC 3.1.1 级别 A WCAG 2.0

页面语言

通过编程方式声明每个页面的默认人类语言——通常使用 html 元素上的 lang 属性。屏幕阅读器、盲文显示器和翻译工具依赖此声明来选择正确的发音规则、语音配置和字符映射。

要求内容

每个网页必须以辅助技术可读取的方式声明其默认人类语言。在 HTML 中,这意味着在根 <html> 元素上设置有效的 lang 属性,其值为 BCP 47 主语言子标签(endebgzh-Hans)。该值必须反映文本内容的实际默认语言——而非 CMS 的语言,也非服务器所在国家的语言。

一个包含多种语言的页面仍然只有一种默认语言;次要语言由成功准则 3.1.2”局部语言”负责处理。

如何满足此准则

  • 在每个页面的 <html> 元素上添加 lang 属性:<html lang="en">
  • 使用正确的 BCP 47 子标签。通用英语使用 en;仅当区域发音有实质差异时才使用 en-GBen-US
  • 对于中文,需区分书写系统:zh-Hans(简体)、zh-Hant(繁体)。
  • 对于从右向左书写的语言(阿拉伯语、希伯来语、波斯语),需将 langdir="rtl" 配合使用。
  • 在 React/Next.js/Astro 中,应在根布局模板中设置该属性,而非在 _document 的 body 中设置,以确保每个路由都能继承此设置。
  • 在多语言站点中,应按路由切换 lang——切勿对本地化页面使用统一的全局默认值。

常见失败情形

  • 完全缺少 lang 属性——这是传统站点和 CMS 模板站点最常见的问题。
  • lang="" (空值)或 lang="english" ——无效;只有 BCP 47 子标签才符合规范。
  • 所有页面硬编码为 lang="en",即使内容为德语、法语或保加利亚语。
  • 一个法语页面使用了 lang="en",原因是 CMS 模板默认为英语且无人修改。
  • lang 设置在 <body> 而非 <html> 上——部分工具可接受,但并非规范位置。

重要性

屏幕阅读器依赖 lang 属性选择正确的语音合成器。若声明了错误的语言,英语屏幕阅读器将按英语音标朗读德语文本——“Schmetterling”会发出毫无意义的音节。盲文显示器依此选择正确的二级缩写对照表。浏览器翻译功能依此检测翻译源语言。搜索引擎依此进行排名和摘要生成。

这是一项 30 秒即可完成的修复,能让页面上所有屏幕阅读器用户受益,然而它在相当比例的生产站点上仍然缺失。由于其可检测性强且结果明确,该问题是自动化审计中被引用最多的问题之一。