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

如何通过正则表达式批量为React项目中的硬编码字符串添加国际化标记(t()/<Trans></Trans>)?

如何通过正则表达式批量为React项目中的硬编码字符串添加国际化标记(t()/
return (<Trans></Trans>)
)?

我完全理解你的困扰——几百个硬编码字符串手动套t()或者<Trans>标签,想想都头大!确实,主流的国际化工具(比如react-i18next)都要求字符串被特定标记包裹才能识别提取,但批量处理这事靠正则确实能省大半功夫,只是没法用一个正则搞定所有场景,得根据代码里字符串的出现形式来针对性写规则。我整理了几个最常见场景的正则方案,你可以根据自己项目的代码情况调整:

1. JSX纯文本节点(比如 <div>Hello World</div>)

  • 匹配正则:<([a-zA-Z0-9-]+)>([^<>"{}]+)</\1>
  • 替换模板:<$1><Trans>$2</Trans></$1>
  • 说明:这个规则专门匹配闭合标签里的纯静态文本,比如普通的<p>、<span>里的内容。如果文本里包含JSX表达式(比如{user.name})或者引号,这个正则会自动跳过,避免误匹配。

2. JSX属性中的硬编码字符串(比如 <button title="Submit">Submit</button>)

  • 匹配正则:([a-zA-Z-]+)="([^"{}]+)"
  • 替换模板:$1={t('$2')}
  • 说明:把属性里的静态字符串替换成t()包裹的形式,适合title、placeholder这类属性。注意如果属性值是动态表达式(比如title={Hello ${user}}),这个正则不会匹配,不用担心误改。

3. JavaScript变量中的硬编码字符串(比如 const message = "Welcome back";)

  • 匹配正则:(const|let|var)\s+(\w+)\s*=\s*"([^"{}]+)";
  • 替换模板:$1 $2 = t('$3');
  • 说明:针对普通JS变量里的静态字符串,把赋值右侧的字符串直接换成t()调用。如果变量值是模板字符串或者包含表达式,同样不会被匹配。

重要注意事项

  • 先备份代码! 正则替换是“暴力操作”,一定要先提交当前代码或者备份,避免误改后无法恢复。
  • 分场景分批测试:先找几个典型的例子测试对应的正则,确认没问题后再批量替换整个项目。
  • 处理特殊情况:如果你的代码里有单引号包裹的字符串、多行字符串,或者文本里包含特殊字符,需要调整正则(比如把正则里的"换成['"]来支持单引号,用[\s\S]+?来匹配多行)。
  • 用编辑器的正则替换功能:VS Code、WebStorm这类编辑器都支持正则查找替换,打开正则模式后直接套用上面的规则就行。

备注:内容来源于stack exchange,提问作者stoefln

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:09:34