@bytello/language-polit
使用前需要安装 @bytello/language-intl, 执行 bytello-language --init 命令初始化项目
执行命令后创建一个 .bytello-language.json 文件,用于配置项目信息
文件内容示例:
{
"appCode": "my-app", // 语料平台的应用标识
"env": "dev", // 语料平台的环境
"language": "zh-CN", // 语料平台的语言
"customizer": "my-app", // 语料平台的客户标识
"corpusFunctionName": "t", // 语料函数的名称,默认是 't',支持配置为 'i18n.t', '$t' 等
"corpusMatchRule": "/t\\('([^']+)'\\)/g" // 语料匹配的规则,默认是 '/t\\('([^']+)'\\)/g',支持配置为其他正则表达式
}
简介
@bytello/language-polit 是一个专为 VSCode 和 Cursor 编辑器设计的插件,用于在 JavaScript/TypeScript 项目中快速搜索和定位国际化语料(i18n corpus)。当项目接入国际化方案后,传统的文本搜索方式难以快速定位语料的引用位置,本插件通过智能识别和搜索功能,帮助开发者高效管理和查找项目中的国际化文本。
功能特性
- 🔍 文件内搜索:通过输入框搜索指定语料在当前文件中的引用
- 🌐 全局搜索:浏览并搜索工作区中的所有语料引用
- 🎯 智能识别:自动识别光标位置的语料 key 作为搜索默认值
- 📍 快速跳转:当语料有多个引用时,提供选择面板一键跳转
- ⚡ 快捷键支持:通过快捷键快速触发搜索功能
- 💾 智能缓存:使用 LRU 缓存提升搜索性能
支持的文件类型
- JavaScript (
.js)
- JSX (
.jsx)
- TypeScript (
.ts)
- TSX (
.tsx)
快捷键
| 快捷键 |
功能 |
说明 |
Cmd+Ctrl+F |
文件内搜索 |
在当前文件中搜索指定语料 key 的引用位置 |
Cmd+Ctrl+R |
全局搜索 |
浏览工作区所有语料,并搜索其引用位置 |
注意:快捷键仅在 JavaScript/TypeScript 相关文件中生效
使用方法
文件内搜索
文件内搜索用于快速定位当前文件中的语料引用。
使用步骤:
- 在 JS/TS 文件中
- 按下
Cmd+Ctrl+F 快捷键
- 在弹出的输入框中输入要搜索的语料 key(例如:
user.name)
- 按回车确认,插件会在当前文件中搜索该语料的所有引用
- 如果找到多个位置,会显示选择面板供你选择并跳转
示例场景:
const name = t('user.name');
// 按 Cmd+Ctrl+F 后,输入框会自动填充 'user.name'
// 确认后会找到文件中所有 t('user.name') 的引用位置
全局搜索
全局搜索用于浏览整个工作区的所有语料,并查找指定语料的引用。
使用步骤:
- 在任意 JS/TS 文件中按下
Cmd+Ctrl+R 快捷键
- 插件会收集所有语料 key
- 在弹出的选择面板中浏览并选择要搜索的语料
- 选择后,插件会扫描工作区,显示该语料在工作区中的所有引用位置
- 选择位置即可跳转到对应的代码行
适用场景:
- 不确定具体的语料 key,需要浏览所有可用语料
- 查找某个语料在项目中的所有使用位置
- 进行语料的全局维护和重构
命令面板
除了快捷键,你也可以通过命令面板使用插件功能:
- 按
Cmd+Shift+P(Mac)或 Ctrl+Shift+P(Windows/Linux)打开命令面板
- 输入并选择以下命令:
语料匹配规则
插件会识别以下格式的语料引用:
// 单引号
t('user.name');
// 双引号
t("user.email");
// 模板字符串
t(`user.phone`);
// 作为对象方法调用
this.t('common.button.submit');
// 嵌套在 JSX 中
<div>{t('page.title')}</div>
支持的函数名:
默认情况下,插件会识别以 t 命名的函数调用。如果你的项目使用其他函数名(如 i18n、$t 等),可以通过配置进行扩展(功能开发中)。
项目结构
src/
├── extension.ts # 扩展入口文件
├── constants/
│ └── index.ts # 常量定义
├── models/
│ └── Position.ts # 位置模型
├── services/
│ ├── ConfigManager.ts # 配置管理服务
│ ├── LineTipService.ts # 行提示服务
│ ├── SearchService.ts # 搜索核心服务
│ ├── ServiceManager.ts # 服务管理器
│ └── VsCodeManager.ts # VSCode API 封装
├── types/
│ ├── index.ts # 类型定义
│ └── service.ts # 服务类型定义
└── utils/
├── extractCorpusKeyFromCurrentFile.ts # 从文件提取语料 key
├── LruCache.ts # LRU 缓存实现
├── searchInFile.ts # 文件内搜索工具
├── searchInWorkspace.ts # 工作区搜索工具
└── transformPosition.ts # 位置转换工具
核心模块说明
- extension.ts:插件激活入口,注册命令和快捷键
- SearchService:核心搜索服务,负责语料的查找和匹配
- VsCodeManager:封装 VSCode API,提供统一的编辑器操作接口
- ConfigManager:管理插件配置(未来扩展)
- LruCache:缓存搜索结果,提升性能
构建命令
# 开发构建(监听模式)
pnpm run watch
# 生产构建
pnpm run build
# 打包为 VSIX
pnpm run package
调试
- 在 VSCode 中打开项目
- 按
F5 启动调试
- 在新窗口中测试插件功能
- 查看调试控制台的日志输出
技术栈
- TypeScript:类型安全的开发体验
- VSCode Extension API:编辑器扩展能力
- Vite:快速的构建工具
- Lodash:实用工具库
常见问题
Q: 插件无法识别我的国际化函数?
A: 当前版本默认识别 t() 函数。如果你的项目使用其他函数名可以通过 .bytello-language.json 的 corpusFunctionName 字段配置,同时支持配置语料匹配的规则,通过 corpusMatchRule 字段配置。
匹配优先级: corpusMatchRule > corpusFunctionName > 默认识别 t() 函数 > 全字符串匹配
Q: 插件想关闭行提示功能?
A: 可以通过 .bytello-language.json 的 feature.lineTip 字段配置,设置为 false 即可关闭行提示功能。
{
"appCode": "my-app", // 语料平台的应用标识
"env": "dev",
"language": "zh-CN",
"customizer": "my-app",
"feature": {
"lineTip": false, // 默认是 true, false 表示关闭行提示功能
"search": true // 默认是 true, false 表示关闭搜索功能
}
}
Q: 快捷键冲突?
A: 你可以在 VSCode 的快捷键设置中自定义快捷键:
- 打开命令面板 (
Cmd+Shift+P)
- 输入
Preferences: Open Keyboard Shortcuts
- 搜索
language-polit 并修改快捷键
Q: 支持哪些编辑器?
A: 目前支持 VSCode 和 Cursor 编辑器(基于 VSCode 的编辑器均可使用)。
License
ISC