lang属性必须写在标签上,其他位置全无效;浏览器、屏幕阅读器、搜索引擎只认此位置,错误设置会导致翻译按钮缺失、语音朗读错乱、seo报错;中文首选zh-cn,符合bcp 47标准且兼容性最佳。

lang属性必须写在html>标签上,其他位置全无效
浏览器、屏幕阅读器、搜索引擎只认这个位置的声明,写在
、、<meta http-equiv="Content-Language" content="zh-CN">(HTML5已弃用)、(空值被当未知语言)。这些都会导致Chrome翻译按钮不出现、VoiceOver按系统默认语种朗读、Google Search Console报“未指定语言”。
中文该选zh-CN、zh-Hans还是zh?
优先用zh-CN——它明确表示简体中文+中国大陆规范,NVDA、JAWS、Chrome、Safari全链路支持最稳。别用zh,太宽泛,iOS VoiceOver可能跳过中文TTS引擎;也别用zh_Hans或zh-china,下划线和大小写混用是非法值,会被静默忽略。BCP 47要求小写+连字符,zh-CN是事实标准,兼容性、SEO、字体fallback都最可靠。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
多语言混排时怎么局部标注?
局部语言切换不是靠<div lang="en">,而是要语义合理+显式声明:
<ul>
<li>引文、术语、代码注释等有明确语义的元素才加<code>lang,比如<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,DOM体积增大,可访问性树构建变慢:lang(zh) CSS选择器能匹配zh-CN,但前提是合法存在;若不生效,先检查控制台是否报错,再确认拼写有无空格或下划线动态页面中改lang为什么经常白忙活?
关键点在于:辅助技术在HTML解析初期就读取document.documentElement.lang,JS后期修改对已激活的朗读会话基本无效。SPA切换语言时,仅执行document.documentElement.lang = "ja-JP"不够,必须同步触发document.title = document.title(空赋值)来强制屏幕阅读器重读根节点。但更稳妥的做法是服务端渲染时就输出正确值——Next.js在app/layout.tsx里用,PHP模板用防XSS。真正难的不是设对一个lang="zh-CN",而是让每个动态插入、跨框架、第三方脚本生成的文本节点,都带着准确的语言上下文被解析。










