如何查找React/Node项目中所有硬编码字符串?遗留项目i18n实现不全
React/Node 项目硬编码 i18n 字符串排查实用方案
VS Code 侧零依赖排查方案
i18n-ally:React/Node 栈最常用的 i18n 辅助插件,开启后会自动为项目内未走 i18n 方法的硬编码文本打标,对 jsx、tsx、js、ts 语法的适配成熟,不会误把变量名、属性名判定为待处理硬编码。可自定义规则:跳过已被$t()、i18n.t()包裹的合法文本,过滤注释、内部常量中的非展示内容。- ESLint 自定义规则:无需额外安装重型插件,直接在现有项目的 ESLint 配置中添加检测逻辑,可精准识别三类问题:JSX 标签子节点中未被 i18n 函数包裹的裸露文本、JSX 属性(placeholder、title、按钮文案等)中的硬编码值、TS/JS 文件中面向用户的提示文案(接口错误提示、弹窗内容等)。基于 ESLint 的 AST 解析能力,比纯正则方案误判率低很多。
可直接复用的适配型正则检索规则
以下正则可直接粘贴到 VS Code 全局搜索框使用,记得打开搜索的正则匹配开关,提前将
node_modules、dist、build、.next这类非业务目录加入搜索排除项,避免第三方代码产生大量无效结果:
- 匹配 JSX 标签间的裸露硬编码文案:
>[\s]*[A-Za-z\u4e00-\u9fa5][^<{}]+[\s]*<,可精准抓出类似<button>提交</button>中的“提交”,不会将 JSX 注释、{}包裹的表达式内容误判为硬编码。 - 匹配 JSX 用户可见属性上的硬编码值:
(title|placeholder|label|alt)="[^"]*",抓取所有未被 i18n 函数处理的属性文案,后续手动排除已使用$t(...)的合法调用即可。 - 匹配 JS/TS 文件中的用户提示类硬编码:
(message|tip|error|successText|content)\s*[:=]\s*"[A-Za-z\u4e00-\u9fa5][^"]+",专门抓取弹窗、接口提示类字段中的硬编码,不会将接口路径、配置 key 这类非展示字符串纳入结果。
自动化批量排查的脚本/工具方案
- 轻量自定义 Node 脚本:无需依赖重型第三方工具,借助
@babel/parser将业务文件解析为 AST,遍历节点时判断:如果字符串出现在 JSX 子节点、用户可见属性、面向用户的提示字段中,且未被 i18n 调用包裹,就将文件位置、内容收集为待迁移清单,可完全适配项目自身的特殊代码写法,准确率远高于纯字符串扫描。 - 面向 React 栈的 i18n 扫描工具:可直接遍历项目业务目录,自动区分组件、工具函数、配置文件中的不同场景字符串,生成结构化的待迁移硬编码清单,支持配置白名单跳过本身无需翻译的固定文本(比如公司名称、固定版权声明、对外固定链接文案)。
内容的提问来源于stack exchange,提问作者Flo
相关产品推荐
相关产品推荐

