lang属性必须写在对应html标签上,浏览器、屏幕阅读器和搜索引擎仅识别,局部lang只影响自身;需严格遵循bcp 47标准(如zh-cn),避免大小写或连字符错误,并在spa语言切换时同步更新所有相关元素的lang属性。

lang属性必须写在html>标签上,否则浏览器不认
页面主体是中文但没设lang,Chrome 自动翻译成英文再翻回中文,语义错乱;SPA 切换语言后只改了document.body的lang,语音朗读仍用旧语种——根本原因是浏览器、屏幕阅读器、搜索引擎只看这一处。局部元素的lang不影响整页基调,只作用于自身。
实操建议:
- SSR 页面:服务端根据
Accept-Language头动态生成,别靠 JS 注入 - SPA 页面:语言切换时执行
document.documentElement.lang = "ja-JP",不是document.body.lang - 静态页:每个语言版本单独一份 HTML,
lang硬编码,避免闪动
局部多语言内容必须显式声明lang,不能靠继承
浏览器不会自动推断「这段英文是引用」「这行日文是代码注释」。不加lang,就全按根语言处理:语音朗读错、拼写检查失效、字体 fallback 异常(比如日文混排时用中文字体显示假名)。
使用场景举例:
- 中文文档里嵌法语引文:
<blockquote lang="fr">Je suis français.</blockquote> - 技术文档夹
<code lang="en">useState,触发 IDE 英文高亮 -
<pre class="brush:php;toolbar:false;" lang="bash">curl -X POST</pre>——lang="bash"虽非标准语言码,但被语法高亮工具识别为代码上下文
lang值必须符合BCP 47标准,大小写和连字符不能错
常见错误:lang="ch"、lang="cn"、lang="zh_ch"、lang="ZH-CN" 都非法,会被浏览器忽略。iOS VoiceOver 某些版本对lang="ja"降级为英语发音,而lang="ja-JP"才稳妥。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
关键点:
- 语言子标签小写,地区子标签大写,中间用连字符:
zh-CN、en-US、pt-BR - 后端返回
zh_ch或ZH-CN,前端必须转成zh-CN再赋值 - 简体中文用
zh-Hans,繁体用zh-Hant,不要混用zh-CN/zh-TW替代
切换语言时必须同步更新所有lang属性,不只是根节点
只改document.documentElement.lang,对已渲染的子元素完全无效。屏幕阅读器、浏览器字体引擎、拼写检查器,全按**每个元素自身的lang值**工作,不是看父级继承来的。
容易踩的坑:
- 给每个单词都加
lang:DOM 体积增大,可访问性树构建变慢 - 误以为
lang="ja"足够:发音不准,尤其在 iOS 上 - 动态插入的内容(如 AJAX 加载的段落)没补
lang属性,导致混排字体异常
复杂点在于:lang 不是“设置一次就全局生效”的配置项,它是每个元素独立持有的属性,该写就得写,该同步就得同步——漏掉一个,那一块的排版、朗读、翻译就可能出问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










