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

如何在VSCode中查找未用i18next翻译的文本?

在VSCode里找React项目中未接入i18next的硬编码文本

先明确场景:项目里未翻译的文本一般是这些形式(已翻译内容会用{t('xxx')}包裹)

未翻译示例:

<Button className="w-full" onClick={onClick}>
  Save
<Button>

<ContentWrapper title="Connection" headerAction={<Button size="small">Add</Button>}>
  <div>{`Connection`}</div>
</ContentWrapper>

<div>
  {mediaRecorder?.state === 'recording' ? (
    <Button onClick={handleStop}>{t('Stop')}</Button>
  ) : (
    <Button onClick={handleStart}>Start</Button>
  )}
</div>

已翻译示例:

<Button>{t('Save')}</Button>

<ContentWrapper title={t('Connection')} headerAction={<Button size="small">{t('Add')}</Button>}>
  <div>{t('Connection')}</div>
</ContentWrapper>

最直接的方式:用VSCode正则全局搜索

打开VSCode全局搜索(Ctrl+Shift+F),点开「正则表达式」开关(界面上的.*按钮),然后根据不同场景使用对应正则:

1. 匹配标签内的纯文本

针对<Button>Save</Button>这类标签包裹的硬编码文本,用这个正则:

>([^<>{}\s]+(?:\s+[^<>{}\s]+)*)<

规则说明:抓取标签闭合符>和<之间的非空文本,自动跳过{t('xxx')}这类已翻译内容。

2. 匹配JSX属性中的硬编码

针对title="Connection"这类属性值,用这个正则:

\w+="([^"{]+)"

规则说明:只匹配双引号内的纯文本,不会抓取title={t('xxx')}这类动态属性。

3. 匹配模版字符串中的硬编码

针对{Connection}这类模版字符串,用这个正则:

{`([^`]+)`}

规则说明:精准匹配包裹在{``}里的纯文本。

4. 一键覆盖多数场景

嫌分开搜索麻烦,用这个组合正则一次性匹配常见未翻译文本:

>([^<>{}\s]+(?:\s+[^<>{}\s]+)*)<|\w+="([^"{]+)"|{`([^`]+)`}

注意:该正则可能误匹配注释、样式类名,需要手动筛选结果

大规模项目用插件更高效

如果项目文件数量多,正则筛选效率低,可以安装VSCode专用插件:

  • i18n-ally:自动识别未翻译文本,支持批量提取,还能直接在编辑器内替换为t()包裹的格式
  • react-i18next-extract:专门针对react-i18next的工具,精准扫描所有未使用t()的硬编码文本

实用小技巧

  • 搜索时限定文件类型,在「文件包含」输入框中填写*.jsx,*.tsx,只扫描React组件文件,减少无关结果
  • 条件渲染中的纯文本(比如示例里的Start),上述正则也能抓取到,只要它是标签内的纯文本内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:05:16