SC 3.1.1 级别 A WCAG 2.0
页面语言
通过编程方式声明每个页面的默认人类语言——通常使用 html 元素上的 lang 属性。屏幕阅读器、盲文显示器和翻译工具依赖此声明来选择正确的发音规则、语音配置和字符映射。
要求内容
每个网页必须以辅助技术可读取的方式声明其默认人类语言。在 HTML 中,这意味着在根 <html> 元素上设置有效的 lang 属性,其值为 BCP 47 主语言子标签(en、de、bg、zh-Hans)。该值必须反映文本内容的实际默认语言——而非 CMS 的语言,也非服务器所在国家的语言。
一个包含多种语言的页面仍然只有一种默认语言;次要语言由成功准则 3.1.2”局部语言”负责处理。
如何满足此准则
- 在每个页面的
<html>元素上添加lang属性:<html lang="en">。 - 使用正确的 BCP 47 子标签。通用英语使用
en;仅当区域发音有实质差异时才使用en-GB或en-US。 - 对于中文,需区分书写系统:
zh-Hans(简体)、zh-Hant(繁体)。 - 对于从右向左书写的语言(阿拉伯语、希伯来语、波斯语),需将
lang与dir="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 秒即可完成的修复,能让页面上所有屏幕阅读器用户受益,然而它在相当比例的生产站点上仍然缺失。由于其可检测性强且结果明确,该问题是自动化审计中被引用最多的问题之一。