
I18n快速
一个钩子驱动的i18n插件,支持多种开发场景。
英语 | 简体中文
前言
市场上现有i18n插件最大的痛点是它们无法满足每个项目的国际化需求。
以我们公司的项目为例:要求是根据文本条目的语义自动生成一个密钥,并将其写入相应的i18n文件和代码中,使国际化开发像常规开发一样简单。虽然这个要求听起来很简单,但很难找到合适的插件。
I18n快速 是一个i18n代插件,强调 可定制性插件本身不实现特定功能;相反,它利用了一种钩子机制,允许用户实现自己的逻辑。该插件只需连接钩子即可使流程正常工作。简而言之,通过增加配置开销并启用外部代码的动态执行,它牺牲了一些开箱即用的通用性和灵活性,从而满足了更广泛项目的国际化需求。
如果其他i18n插件不能满足您的要求,而您愿意投入一些时间来理解和编写挂钩文件,那么 I18n快速 是您理想的选择。
特性
- 支持i18n反馈显示
- 支持跳转到i18n定义
- 支持i18n冲突解决(重复定义)
- 支持通过剪贴板文本、选定文本或自定义逻辑进行i18n转换
- 支持批量匹配中文文本进行i18n转换
- 理论上支持您想要的任何功能(通过钩子)
- ~~支持搜索i18n~~https://github.com/lvboda/vscode-i18n-fast/issues/1
快速开始
搜索 I18n快速 在VS代码市场中,单击 安装,或从下载相应版本 发布在VS Code中,打开命令面板 ctrl + shift + p,类型 Install from VSIX,然后选择要安装的下载文件。
安装插件后,您需要完成 插件配置 和 钩状文件。使用配置良好的设置,您在预览代码时应该会看到i18n反馈。尝试使用 i18n-fast.convert 或 i18n-快速粘贴 命令来验证您的实现!
MCP服务器
在Claude Code或Cursor中需要相同的钩子驱动的i18n流吗?看 docs/mcp/README.md 用于MCP设置、工具合同和迁移说明。
流程图

配置
插件配置
- i18n文件模式: 匹配i18n文件的模式
- hookFile模式: 匹配钩子文件的模式,默认为
.vscode/i18n-fast.hook.js - 冲突策略: 如何处理重复的i18n条目,默认为
smart
- 重新使用: 重用现有的i18n条目 - 忽略: 忽略重复项 - 选择器: 弹出选择器进行手动选择 - 聪明的 如果找到一个匹配的i18n条目,请重用它;如果找到多个,则弹出选择器进行手动选择
- autoMatch中文版: 是否自动匹配中文文本,默认为
true
这 i18n文件模式 通常在每个项目的基础上进行配置 .vscode/settings.json.钩子
钩子文件是一个JavaScript文件,它导出钩子方法供插件调用(请参阅 流程图 用于执行定时)。钩子在Node.js中运行,遵循CommonJS标准,支持异步函数(async/await),并且可以 require 其他模块(来自您的项目或第三方库),因此理论上可以实现您需要的任何功能。
钩子文件的位置基于 config.hookFile模式,违约 .vscode/i18n-fast.hook.js。您只需下载 模板文件 到相应的位置并对其进行修改;模板已经定义了钩子方法类型。
请随意 提交问题 共享您的钩子文件(示例:https://github.com/lvboda/vscode-i18n-fast/issues/21)这样其他人就可以引用和重用你的代码。
钩子代码更改立即生效,无需重新启动插件或VS代码。
上下文
与钩子共享的上下文对象作为第一个参数传递,包括:
- context.vscode
- context.extensionContext
- context.qs
- context.crypto
- context.uid
- 背景。\_
- context.babel
- context.hook:当前文件导出的钩子对象,可以调用同一文件中的其他钩子
- context.i18n:用于读取和写入i18n条目的实例处理i18n存储
- context.convert2拼音:一种基于 小拼音 将汉字转换为拼音
- context.isInJsxElement:一种基于 巴别 确定代码是否在JSX元素内
- context.isInJsxAttribute:一种基于 巴别 确定代码是否在JSX属性内
- context.writeFileByEditor:一种通过编辑器编写文件的方法
- context.getICUMessageFormatAST:一种使用以下命令获取ICU MessageFormat AST的方法 @formatjs/icu消息格式解析器
- context.safeCall:一个辅助函数,用于捕获和忽略函数执行过程中抛出的错误
- context.asyncSafeCall:safeCall的异步版本
- context.getConfig:检索 插件配置
- context.getLoading:获取全局加载状态
- context.setLoading:设置全局加载状态
- context.showMessage:VS Code弹出消息的简化版本
- context.matchChinese:中文匹配方法(实现
autoMatchChinese: true)
上面列出了每个钩子可用的公共属性。还有其他属性(例如 context.document, context.convertGroups, context.i18nFileUri等等),这些特定于钩子执行上下文;请参阅 模板文件 详细定义。
hook.match
在开始时执行 i18n-fast.convert 命令,此钩子自定义如何匹配当前文档中的文本,并返回匹配结果。注意优先级:如果 i18n-快速粘贴 调用命令或选择文本, hook.match 不会跑。
在 这个例子, hook.match 用于匹配包裹在其中的所有文本 #(...) 在当前文档中。
hook.convert
之后立即执行 hook.match,此钩子处理或预处理数据。
在 这个例子, hook.convert 将代码替换文本定义为 formatMessage({ id: 'xxx' });如果在JSX或JSX属性内,则将结果封装在 {...} 并生成一个uuid作为加载i18n密钥,以供以后查找和替换。
hook.write
执行后 hook.convert,此钩子将数据写入文件。
在 这个例子, hook.write 首先同步写入代码文件(使用加载键),然后调用AI接口根据语义生成简洁的键,确定键应出现在哪个i18n文件中,最后写入AI生成的键以替换代码中的加载键,并将i18n定义写入相应的文件。
hook.collectI18n
在初始化、配置或i18n文件更改时触发,此钩子收集i18n数据。
在 这个例子, hook.collectI18n 根据以下内容加载i18n文件内容 i18nFileUri 参数并将其转换为 I18nGroup[] 格式。
hook.matchI18n
在浏览代码时触发,此钩子过滤匹配的i18n键或自定义i18n反馈/跳转/hoverMessage功能,默认情况下基于i18nKey进行匹配。
在 这个例子, hook.matchI18n 过滤按键以确保它们包含一个点(.),未括在引号中的键仅支持jump和hoverMessage,以避免不准确(请参阅https://github.com/lvboda/vscode-i18n-fast/issues/3详细信息)。
命令
i18n-fast.convert
convert命令将匹配的文本转换为i18n格式。
快捷方式: cmd + option + c (macOS)/ ctrl + alt + c (Windows/Linux)
执行流程:
- 匹配文本(优先级:参数文本>选定文本>hook.Match+~~中文匹配~~)
- 转换数据(通过hook.Convert)
- 写入文件(通过hook.Write)
i18n-快速粘贴
粘贴命令将剪贴板中的文本转换为i18n格式并粘贴。
快捷方式: cmd + option + v (macOS)/ ctrl + alt + v (Windows/Linux)
执行流程:
- 从剪贴板检索文本
- 呼叫
i18n-fast.convert以剪贴板文本作为输入
i18n-fast.undo
撤消命令撤消此会话中执行的所有文件写入操作。
快捷方式: cmd + option + b (macOS)/ ctrl + alt + b (Windows/Linux)
只有调用的写入操作context.writeFileByEditor和needSnapshot设置为true可以通过此命令撤消(默认情况下,needSnapshot是真的)。
常见问题
阅读文档后,我仍然不知道如何配置它。我该怎么办?
我不想写代码。还有其他方法可以直接使用它吗?
检查以下问题 钩示例标签 对于一些钩子示例,您可以直接参考或使用。
执行动态代码是否存在安全风险?
I18n-Fast是一个完全独立的应用程序。理论上,只要你确保你编写的挂钩代码是安全的,就没有安全风险。
许可证
版权(c) 2025年-博达吕
