lang属性不触发自动翻译,但决定翻译模型选型;必须严格匹配bcp 47格式(如zh-cn),错误写法导致不提示翻译、误翻乱码或语义崩坏,js动态修改无效。

lang 属性本身不触发浏览器自动翻译,但它决定了翻译工具用哪个语言模型处理文本——写错、漏写或乱写,轻则不提示翻译,重则把“微信”翻成“we chat”再翻回“微信息”。
Chrome 翻译为什么有时不弹提示?
它根本不是靠扫描文字猜语言,而是第一眼就读 。如果用户浏览器语言是中文,页面又声明了 lang="zh-CN",Chrome 就默认“这页已经是中文了”,直接跳过翻译按钮。
- 用户偏好是英文,页面却写
lang="en"但满屏中文 → 可能弹出“翻译为英文?” - 用户偏好是中文,页面写
lang="en"但内容真是英文 → 正常提示“翻译为中文” - 用户偏好是中文,页面写
lang="en"但内容是中文 → 可能误判为“英文乱码”,二次翻译导致语义崩坏
多语言混排时,只设根元素 lang 不够用
浏览器和翻译插件对每个文本节点单独查 lang,不继承父级。写 document.documentElement.lang = "en" 后,<p>Helloこんにちは</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5806" title="html-deploy"><img
src="https://img.php.cn/upload/skill/000/000/081/179066538882434.jpg" alt="html-deploy" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5806" title="html-deploy" class="overflowclass">html-deploy</a>
<p class="overflowclass">使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。</p>
</div>
<a rel="nofollow" href="/xiazai/skill5806" title="html-deploy" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div> 里的日文仍按英文处理,除非你显式加 <p lang="ja">こんにちは</p>。
- 代码块必须标注:用
<pre class="brush:php;toolbar:false;" lang="bash">curl -X POST</pre>,而不是<pre class="brush:php;toolbar:false;" lang="en"></pre>(否则命令名被乱译) - 引文、术语、外语人名等都要局部
lang,例如<blockquote lang="de"></blockquote> -
<script></script>和<style></style>里写lang没意义,它们不参与文本渲染
lang 值写错会直接让翻译失效
Chrome 翻译和 SSR 框架在 HTML 解析阶段只读一次 lang,非法值会导致整个翻译上下文被丢弃。JS 后续改 document.documentElement.lang 完全无效。
- ✅ 正确:
zh-Hans、en-US、ja(全部小写,中划线分隔) - ❌ 错误:
zh_CN(下划线非法)、chinese(非标准)、zh(太宽泛,旧插件可能 fallback 到粤语引擎) - ⚠️ 特别注意:
lang="zh"在某些 TTS 引擎中会触发粤语发音,而lang="zh-CN"才锁定普通话
lang 和 translate 属性必须配合使用
lang 说明“这是什么语言”,translate 控制“要不要翻”。两者缺一不可。比如一个中文页里出现 React,只写 <span lang="en">React</span> 不够,Chrome 仍可能把它译成“反应”;必须加 translate="no" 显式锁定:<span lang="en" translate="no">React</span>。
- 技术名词、版本号(
v5.2.0)、路径(/api/v1)、token 都要同时带lang和translate="no" - 不要全局给
—— 按钮文案、提示语也会被跳过,多语言用户看到的全是英文残留 -
<textarea></textarea>和<input>的value不继承父级translate,需单独加
最容易被忽略的是首次渲染时机:服务端没输出正确的 lang,后续任何 JS 修改都晚了。动态语言切换必须从 SSR 或 HTML 模板层介入,而不是等 React/Vue mount 完再 patch。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










