lang属性必须写在<html>标签上,其他位置无效;浏览器、屏幕阅读器、搜索引擎和翻译工具仅认此位置的声明,写在<meta>、<body>或JS中均无效,且非法值比不写更糟。

lang 属性必须写在 html 标签上,其他位置无效。这是唯一被浏览器、屏幕阅读器、搜索引擎和翻译工具共同认可的页面语言声明方式。
为什么只能写在 html 标签上
浏览器和辅助技术(如 NVDA、JAWS)只从 html 元素读取默认语言;写在 meta、body 或用 JS 动态插入都无效。
-
<meta http-equiv="Content-Language" content="zh-CN">已被废弃,完全不起作用 -
<body lang="zh-CN">只影响body内文本的语音断词和 CSS:lang()匹配,但不改变页面级语言 -
<div lang="en">这类局部声明有效,但前提是html上已有合法的主语言 - 空值或非法值(如
lang=""、lang="chinese")比不写还糟,会被识别为“未知语言”
lang 值必须符合 BCP 47 规范
不能随便填缩写或口语化名称,大小写和连字符位置都有语义含义。
- 中文推荐用
zh-CN(简体,中国大陆)、zh-TW(繁体,台湾地区)、zh-HK(繁体,香港) - 避免只写
zh:虽能被多数浏览器接受,但字体渲染、标点排版、词典匹配可能不准 - 英文必须用
en-US或en-GB,不能用english、en_US(下划线非法)或EN-us(大小写错位) - 法语、葡萄牙语等小语种对大小写敏感:
fr-FR合法,FR-fr不合法
多语言内容怎么处理
主语言由 html 的 lang 决定,局部切换靠子元素的 lang 覆盖,无需额外 JS 或 meta。
立即学习“前端免费学习笔记(深入)”;
- 引文、术语、代码注释等混合内容,直接加
lang:<p>中文段落中嵌入<span lang="ja">日本語</span></p> - 双向文本(如阿拉伯语、希伯来语)要同时配
dir属性:<p lang="ar" dir="rtl">مرحبا</p> -
title元素内无法嵌套标签,若含多语言文本,只能整体按html的lang处理,无完美解法 - 属性值语言与内容语言不一致时(如
title="English tooltip"在中文页),应把该属性移到独立元素上,避免歧义
最容易被忽略的是:即使页面显示正常,lang 缺失或错误也会导致屏幕阅读器读错音节、Chrome 翻译按钮消失、Google Search Console 报告“未指定语言”,且这些故障往往没有视觉提示。



















