translate="no"明确禁用浏览器翻译,作用于元素及所有子内容,父级设置后子级translate="yes"无效;需配合lang属性精准控制多语言混合文本,动态插入dom时须手动设置。

translate属性设为no时浏览器不翻译指定元素
当translate属性值为no,主流浏览器(Chrome、Edge、Firefox)在触发页面翻译时会跳过该元素及其所有子内容。这比用lang或CSS隐藏更直接有效——它明确告诉翻译引擎“这段文本不要动”。
- 必须写成
translate="no",写成translate="false"或省略引号无效 - 对
<input>、<textarea></textarea>等表单控件也生效,但用户手动输入的内容不受影响 - 若父元素设了
translate="no",子元素即使显式写translate="yes"也会被忽略(继承不可覆盖)
translate="yes"在多数场景下可省略
translate默认值就是yes,所以除非父级已禁用翻译,否则无需主动声明。强行加translate="yes"不会报错,但属于冗余代码,还可能干扰语义理解。
- 常见误用:在
根节点上加translate="yes"——毫无必要 - 唯一需要显式写
yes的场景是:父元素为no,而你只想让某个子元素恢复可翻译(但实际极少这么用) - 注意:某些旧版Safari对
translate="yes"支持不稳定,建议只在必要时使用
和lang属性配合使用才能精准控制多语言混合内容
单独靠translate无法解决中英混排时的误翻译问题。比如一段含英文品牌名的中文句子,应结合lang标明局部语言,并用translate="no"锁定关键词。
<p>请打开<span lang="en" translate="no">Settings</span>菜单</p>
-
lang="en"帮助翻译工具识别这是英文词,translate="no"阻止它被替换成“设置”之类译文 - 若只写
translate="no"不写lang,部分浏览器可能仍尝试音译或按上下文猜测 - 避免对整段
<p></p>设translate="no",否则中文部分也无法被翻译成其他语言
translate在动态渲染内容中需手动同步
通过JavaScript插入的DOM节点不会自动继承父级translate状态,尤其是用innerHTML或createElement创建时。
- 错误写法:
el.innerHTML = "<span>API Key</span>"→ 新<span></span>无translate属性,可能被误译 - 正确做法:显式设置
span.setAttribute("translate", "no"),或用el.insertAdjacentHTML("beforeend", '<span translate="no">API Key</span>') - Vue/React等框架中,需在模板里写死
translate="no",JSX中用translate="no"(注意不是translate={false})
translate的支持虽已稳定,但它的作用范围其实很窄:仅影响浏览器内置翻译功能,对SEO、屏幕阅读器、服务端渲染都无影响。最容易被忽略的是继承规则和动态插入时的遗漏——这两个点一旦出错,调试起来几乎看不到明显线索。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











