必须在<html>标签设lang属性,且局部外语内容需逐元素声明lang,因屏幕阅读器依赖HTML层lang语义准确发音,仅JS层SpeechSynthesisUtterance.lang无法替代。

必须在 <html> 标签上设 lang,否则屏幕阅读器大概率把中文逐字拼成英文音节——这不是“效果差”,是根本听不懂。
为什么只写 <html lang="zh-CN"> 还不够
全局 lang 只定基调,但页面里常有英文引文、日文术语、代码标识符等局部外语内容。浏览器不会自动识别这些片段的语言,必须显式声明。
-
<p>《The Art of Computer Programming》</p>不加lang="en-US",中文语音引擎会强行切分单词,读成“特-阿-特-欧夫-科-姆-普-特-尔-普罗-格-拉-明” -
<td>API</td>在表格中若没lang,可能被读作“阿皮”,而非 /ˈeɪ.piː/ -
<div lang="ja-JP">こんにちは</div>若缺lang,假名可能被中文字体渲染,或直接跳过不读
表格里怎么给单元格指定发音规则
表格语言切换不能靠 <table lang="en"> 或 <tr lang="fr"> —— 这些标签没有语言语义,屏幕阅读器完全忽略。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 必须为每个
<td>或<th>单独加lang,例如:<td lang="en-US">HTTP status code</td> - 中英对照表要每个单元格独立标注:
<td lang="zh">辅助技术</td><td lang="en">Assistive Technology</td> - 动态渲染表格时,
lang必须随文本一起注入,不能只靠 JS 改innerHTML后再统一补属性
lang 和 SpeechSynthesisUtterance.lang 别混用
lang 是 HTML 层语义,决定屏幕阅读器从加载起就用什么规则读;SpeechSynthesisUtterance.lang 是 JS 层控制,只影响 speechSynthesis.speak() 主动触发的朗读。
立即学习“前端免费学习笔记(深入)”;
- 即使你写了
utterance.lang = "zh-CN",但<html>没设lang,屏幕阅读器仍按默认英文引擎读正文 - 想让某段文字用日语朗读,必须同时满足:
<span lang="ja-JP">ありがとう</span>+utterance.lang = "ja-JP" - SPA 切换语言时,只改
document.body.lang无效,必须同步更新document.documentElement.lang,否则 VoiceOver 仍用旧语种
最容易被忽略的是:语音是否自然,80% 取决于 lang 是否准确、是否嵌套得当——不是用了多高级的 TTS 库,而是你有没有让浏览器真正“看懂”哪段话该用哪种语言发音。


















