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

如何在react-i18n中处理含HTML表格的国际化需求?

在react-i18n中直接国际化包含表格的邮件模板方案

有两种可行方案可以直接在translation.json中保留完整表格结构实现国际化,无需拆分表格与文本:

方案一:使用t函数配合dangerouslySetInnerHTML

直接在翻译文件中存储完整的HTML表格字符串,通过dangerouslySetInnerHTML渲染:

  1. 在translation.json中定义模板:
{
  "email_template": "<table><tr><td>Hello User</td></tr><tr><td>Please visit the site for exclusive offers</td></tr></table>"
}
  1. 组件中渲染:
import { useTranslation } from 'react-i18next';

function EmailTemplate() {
  const { t } = useTranslation();
  return <div dangerouslySetInnerHTML={{ __html: t('email_template') }} />;
}

注意:使用dangerouslySetInnerHTML时,必须确保翻译内容是可信的,避免引入XSS风险(不要将用户输入的未过滤内容直接放入翻译字符串)。如果需要动态插入变量,可结合插值语法:

{
  "email_template": "<table><tr><td>Hello {{user_name}}</td></tr><tr><td>Please visit <a href='{{offer_url}}'>the site</a> for exclusive offers</td></tr></table>"
}

组件中传参:

const templateHtml = t('email_template', { 
  user_name: 'Alice', 
  offer_url: '/exclusive-deals' 
});
return <div dangerouslySetInnerHTML={{ __html: templateHtml }} />;

方案二:使用Trans组件的标签索引匹配

如果不想用dangerouslySetInnerHTML,可以利用Trans组件的标签自动匹配功能,将表格结构作为Trans的子元素,翻译文件中存储标签索引占位符:

  1. 在translation.json中定义带索引的结构:
{
  "email_template": "<0><1><2>Hello User</2></1><1><2>Please visit the site for exclusive offers</2></1></0>"
}
  1. 组件中通过Trans渲染:
import { Trans } from 'react-i18next';

function EmailTemplate() {
  return (
    <Trans i18nKey="email_template">
      <table>
        <tr>
          <td>Hello User</td>
        </tr>
        <tr>
          <td>Please visit the site for exclusive offers</td>
        </tr>
      </table>
    </Trans>
  );
}

这种方式会让react-i18n自动将翻译字符串中的<0>、<1>等索引对应到Trans子元素的DOM节点,文本内容可直接在翻译文件中修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:27:14