translate="no"是唯一有效的禁用翻译值,大小写敏感且必须显式声明;它仅被chrome和edge支持,用于标记语义固定、不可替换的英文内容如代码、api路径、版本号等,与lang属性职责分离。

translate="no" 是唯一真正起作用的值
浏览器(尤其是 Chrome 和 Edge)只识别字面值 no 作为禁用翻译的明确指令;写成 false、"off"、空字符串或自定义 class(如 class="notranslate")都无效。HTML 规范定义该属性为枚举型,合法值仅有 yes 和 no,而 yes 是默认行为——不写等价于写了。
-
translate="no"必须显式写出,且大小写敏感,不能是NO或No - 父元素设了
translate="no",子元素会继承,除非子元素显式写translate="yes" -
<input>和<textarea></textarea>的value不继承父级translate,需单独加属性 -
<script></script>和<style></style>内部文本天生不参与翻译,加translate属性无意义
哪些内容必须加 translate="no"
不是所有英文都需要防翻译,关键看是否「语义固定、不可替换」。被机器误译后会导致功能异常、技术歧义或品牌失真时,才需要干预。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 代码相关:
fetch()、useState、props.children、npm install -D vite - API 路径与字段:
/api/v1/users/:id、user_email、X-Auth-Token - 版本号与标识符:
v5.2.0、ABC-123、React(作为框架名,非上下文中的“反应”) - CSS 类名与 data 属性:
class="btn-primary"、data-testid="submit-btn"
translate 和 lang 属性别混用
lang 告诉浏览器「这段内容当前是什么语言」,影响拼写检查、语音朗读和字体回退;translate 只告诉翻译工具「这段要不要动」。两者职责分离,不能互相替代。
- 正确组合示例:
<div lang="zh-CN" translate="no">Vue DevTools</div>—— 表示“这是中文页面里的一个不可翻译的英文专有名词” - 错误假设:
<div lang="en">Vue DevTools</div>不加translate="no",Chrome 在中文页中仍可能把它当待译内容处理 - 服务端渲染时注意:
lang值需随当前 locale 动态输出,静态写死lang="zh"在英文页面里反而触发反向翻译逻辑
动态内容和第三方组件容易漏掉 translate="no"
你写的模板里加了 translate="no",不代表最终 DOM 里还有——尤其在使用 Vue 的 v-html、React 的 dangerouslySetInnerHTML 或 CMS 输出富文本时,原始 HTML 字符串必须已包含该属性;JS 动态插入的新节点也得手动补上。
- 验证是否生效:打开 Chrome DevTools → Elements 面板,直接查看目标元素上是否存在
translate="no"属性(不是靠肉眼判断文字有没有变) - Chrome 翻译策略有缓存,若修改后未生效,可访问
chrome://settings/languages,关闭再开启「提供网页翻译」强制刷新 - 第三方组件库(如 Ant Design、MUI)或 Headless UI 渲染的弹窗、Tooltip 等,可能自带内联文本且未设
translate,需 inspect 后针对性覆盖
translate="no",但 Firefox 和 Safari 尚未实现该属性——所以它不是万能开关,而是对主流场景的务实控制。真正容易被忽略的是:你没写的部分,浏览器默认全都要翻;而你写了但没查 DOM 实际结果的地方,很可能早已失效。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










