应使用 usestate 等方式为技术术语标注真实语言,确保屏幕阅读器正确发音;lang 值须小写、短横线分隔、符合 bcp 47 标准,如 ja、ko、en-us。

专业术语必须用包裹再加lang
技术文档里出现的 useState、API、curl 这类词,不能直接写在段落里统一设 lang="zh-CN",否则屏幕阅读器会把 useState 拆成“用-state-钩子”硬读。正确做法是让外文术语脱离中文语境,用 元素显式包裹并标注真实语言。
原因很简单: 是 HTML 中唯一被广泛支持用于嵌入外语技术词汇的语义化内联元素,NVDA、VoiceOver 对它的 <code>lang 属性识别稳定,且多数代码高亮插件、拼写检查器也会据此跳过校验。
-
<p>调用 <code lang="en">useState初始化状态 ✅ -
<p lang="en">useState</p>❌(整段变英文,中文上下文丢失) -
<span lang="en">useState</span>⚠️(语义弱,部分读屏软件不触发英文 TTS 切换) -
<div lang="en">useState</div>❌(块级元素破坏行内流,影响排版和可访问性)
lang值不能“看起来像英文”就填en
一个词用什么 lang,取决于它实际所属的语言体系,不是拼写形式。比如日文片假名写的 ユーザー,哪怕全是拉丁字母转写,也得用 lang="ja";韩文术语 사용자 不能标 lang="en",哪怕它在键盘上打不出来。
错误标注的后果很直接:VoiceOver 可能把 ユーザー 当英语单词,按 /yoo-zuh/ 发音;Chrome 翻译会把它当成乱码跳过,或误判为英文后翻成中文再翻回日文,语义全毁。
-
<code lang="ja">ユーザー✅ -
<code lang="ko">사용자✅ -
<code lang="en">UI/UX✅(缩写遵循英文断词与重音规则) -
<code lang="en">こんにちは❌(假名用英文引擎读,必然错)
中英文混排单元格里的术语怎么标
HTML 表格里最常踩坑:一个 <td> 同时含中文说明和英文术语,比如“使用 <code>useState 钩子”。这里不能给整个 <td> 设 <code>lang="zh-CN" 或 lang="en",必须分层处理。
表格单元格本身保留主语言(如 lang="zh-CN"),把术语用 <code lang="en"> 单独包住——这是目前最轻量、兼容性最好、读屏支持最稳的做法。别用 <span></span> 或 <em></em> 替代 <code>,它们没有被辅助技术约定为“外语技术词容器”。
-
<td lang="zh-CN">调用 <code lang="en">useState初始化状态 ✅ -
<td lang="en">Call <code lang="en">useState⚠️(整单元格英文,中文用户可能看不懂) -
<td>调用 <span lang="en">useState</span> 初始化状态</td>❌(NVDA 不保证切换发音引擎)
为什么不用lang="bash"标命令行术语
像 curl -X POST 这种命令,有人习惯写 <code lang="bash">,但要注意:bash 不是 BCP 47 标准语言标签,浏览器和读屏软件不会因此加载 bash 专用语音库——它根本不存在。这类内容本质仍是英文描述,应标 lang="en"。
语法高亮工具(如 Prism、highlight.js)识别的是 class="bash",不是 lang 属性。混淆这两者会导致翻译出错(把命令当正文翻译)、语音误读(用法语引擎读 curl)。
-
<code lang="en">curl -X POST✅(语义准确,TTS 正常) -
<code lang="bash">curl -X POST❌(非标准值,等于没标,且干扰翻译) -
<pre class="brush:php;toolbar:false;" lang="en"># Initialize counter</pre>✅(注释是英文,不是 bash 语言)
最容易被忽略的是:所有这些 lang 值都必须小写、用短横线、严格匹配 BCP 47,比如 en-US 不能写成 EN-us 或 en_us;一旦出错,浏览器静默忽略,你根本收不到报错提示。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











