translate 属性并非控制 CSS 位移,也非向浏览器“建议”翻译,而是明确指令 Chrome、Edge 等支持翻译的浏览器:“此内容禁止翻译”,直接干预机器翻译行为;其生效需满足三前提:位置准确(推荐设于具体元素而非全局 <html>)、规避继承陷阱(如 <input>/<textarea> 值不继承,须单独设置)、不与 lang 混淆(lang 表示语言类型,translate 控制是否翻译)。

translate 属性不是用来控制 CSS 位移的,也不是给浏览器“建议”翻译——它是明确告诉 Chrome、Edge 等支持翻译功能的浏览器:“这段内容不准动”,直接干预机器翻译行为。它在实际项目中生效的前提很具体:必须用对位置、避开继承陷阱、且不能和 lang 混淆。
translate="no" 写在哪一级才真正起作用
写在 <html> 上是全局开关,但容易误伤;写在具体元素上才是精准控制。父元素设了 translate="no",子元素会继承,但以下情况例外:
-
<input value="XZ-3000">和<textarea>的值不受父级translate影响,必须单独加translate="no" -
<script>和<style>内部文本天生不参与翻译,加该属性无效 - 用
v-html或dangerouslySetInnerHTML渲染的内容,其中的translate属性仍生效,但得确保字符串里已写好,模板里写没用
哪些内容必须加 translate="no"
不是所有英文都要拦,只拦那些语义固定、不可本地化的字符串。典型包括:
- 代码标识符:
fetch()、useState、npm install -D vite - 版本号:
v5.2.0、React 18.3 - 路径与 ID:
/api/v1/users/:id、abc123-token - 产品型号:
XZ-3000、TPM2.0 - 时间格式字符串(非渲染内容):
2024-06-15,建议套<time datetime="2024-06-15">并在外层加translate="no"
别给整个页面加 translate="no",否则按钮文字、提示语、菜单项全被跳过,用户看到的是中文界面配英文文案,体验断裂。
立即学习“前端免费学习笔记(深入)”;
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
translate="yes" 什么时候必须显式写
几乎不用。默认就是 translate="yes",显式写只是增加体积、干扰可读性。唯一合法场景是:父元素已设 translate="no",而你希望某个子元素「破例可译」,比如:
<div translate="no"> <p>设备型号:<span translate="yes">SmartHub Pro</span></p> </div>
这种嵌套控制极少见,多数项目连父级 translate="no" 都不需要——先确认是否真有被误译的问题,再加,别预防性滥用。
和 lang 属性混用时的常见错觉
lang 是告诉浏览器“这是什么语言”,translate 是告诉翻译工具“别碰它”。两者职责完全分离:
-
<div lang="zh-CN" translate="no">React</div>→ 中文页里的英文词,不许翻 -
<div lang="en">React</div>→ 英文页里的英文词,但若整页是中文环境,某些翻译插件仍可能尝试替换
真正决定是否被译的,是 translate,不是 lang。第三方组件库或 CMS 输出的 HTML 可能自带 translate,上线前务必用 DevTools 查 DOM 实际渲染结果,别只信模板源码。


















