You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在i18n中使用Trans标签处理含HTML标签的JSON翻译键

解决i18next Trans组件解析翻译文本中HTML标签的问题

当翻译JSON中的HTML标签被当作字符串渲染时,核心原因是Trans组件默认会转义HTML以避免XSS风险。以下是针对不同场景的解决方案:

场景1:处理无属性的简单标签(如<b>)

推荐方案:组件插值法

修改翻译文件,用数字占位符替换HTML标签:

"RESPONSIBLE": "<0>Responsible</0> is {{name}}"

在组件中通过components属性传入对应标签:

<Trans i18nKey="RESPONSIBLE" components={[<b />]} name="Jon" />

这里的<0>会被components数组中索引为0的<b>组件替换,最终渲染出加粗的Responsible is Jon。

备选方案:关闭全局转义(不推荐)

如果信任所有翻译内容,可在i18next初始化时关闭HTML转义:

i18n.init({
  interpolation: {
    escapeValue: false // 禁用HTML转义,所有翻译文本中的HTML都会被解析
  }
});

之后直接使用Trans组件或t函数即可:

<Trans i18nKey="RESPONSIBLE" name="Jon" />
// 或
{t('RESPONSIBLE', {name: 'Jon'})}

⚠️ 注意:该方法存在XSS风险,仅适用于完全可控的翻译内容。

场景2:处理带属性的标签(如带class和href的<a>)

组件插值+动态属性法

修改翻译文件,用数字占位符替换整个标签部分:

"NO_ACTIVE": "Please go to the <0>Go Here</0>"

在组件中定义带属性的<a>元素,通过components传入:

const targetLink = '/your-target-path'; // 动态链接可以是变量或其他翻译键

<Trans i18nKey="NO_ACTIVE" components={[
  <a className="no-wrap" href={targetLink} />
]} />

这种方式既能保留标签的属性,又能安全地渲染出可点击的链接。

内容的提问来源于stack exchange,提问作者Volodumr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:16:28