HTML 页面语言必须声明在 <html lang="de-DE"> 标签上,de-DE 符合 BCP 47 规范,确保浏览器、屏幕阅读器、翻译和 SEO 正确识别;其他位置或非法值均无效。

必须写在 <html> 标签上,其他位置全无效
浏览器、屏幕阅读器(如 NVDA、VoiceOver)、Chrome 翻译按钮和 Google SEO 都只在 HTML 解析最初阶段读取 <html lang="de-DE">。写在 <body>、<div> 甚至用 JS 设置 document.body.setAttribute("lang", "de-DE"),对页面级语言声明完全没用。
常见错误包括:<body lang="de-DE">(仅影响该元素内局部 :lang() 匹配)、<meta http-equiv="Content-Language" content="de-DE">(HTML5 已废弃)、<html lang="">(空值会被当“未知语言”,比不写还糟)。
de-DE 是首选,别用 de、german 或下划线
德语必须严格按 BCP 47 规范写,大小写、连字符、子标签顺序都不能错:
-
de-DE✅ 最稳妥:明确“德语 + 德国规范”,字体 fallback、标点挤压、语音引擎(如 Windows OneCore TTS)全链路支持 -
de❌ 过于宽泛:iOS VoiceOver 可能跳过德语 TTS,Google Search Console 可能报“未指定语言” -
de_DE❌ 下划线非法:Chrome 会静默忽略,等同于没设 -
german❌ 非标准值:被所有辅助技术当无效,SEO 和翻译功能直接失效 -
de-AT/de-CH✅ 合理变体:奥地利、瑞士德语用户需区分时才用,注意拼写(如FarbevsFarb)、数字格式(1.000,00)
局部混排内容必须显式加 lang,不能靠继承
<html lang="de-DE"> 只定义主语言,不影响内部英文术语、法语引文或代码块的识别。这些节点必须单独声明:
立即学习“前端免费学习笔记(深入)”;
- 英文技术词:
<p>Wir nutzen die <code lang="en">useState</code>-Hook.</p> - 法语引用:
<blockquote lang="fr">C'est une bonne idée.</blockquote> - Bash 命令:
<pre lang="en">curl -X POST https://api.example.com</pre>(别用lang="bash",那不是合法语言码) - 双向文本(如含阿拉伯语):
<p lang="ar" dir="rtl">مرحبا</p>
切记:不要给 <div lang="en"> 批量套娃——语义不清,且可能干扰父级 :lang(de) 样式匹配。
:lang(de) 和 :lang(de-DE) 匹配逻辑不同
CSS 的 :lang() 伪类对语言码敏感,匹配规则和属性值必须对齐:
-
:lang(de)只匹配lang="de",不匹配lang="de-DE"或lang="de-AT" -
:lang(de-DE)只匹配lang="de-DE",不匹配lang="de" - 想覆盖所有德语变体,用属性选择器更可靠:
[lang|="de"] { quotes: "»" "«"; }(匹配de、de-DE、de-CH等)
最容易被忽略的一点:动态插入的 DOM 节点(比如 React 组件里 useEffect 创建的 <p>)如果没手动补 lang="de-DE",屏幕阅读器就按默认语种读——哪怕整页都设了根语言,它也管不了新来的节点。



















