使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
版本历史
- "新增查找引用、悬停、自动补全与诊断"v9.1.32026/8/10
- "Release LSP"v8.12.02026/6/1
如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接复制文档 Markdown 到剪贴板
Intlayer LSP 服务器
Intlayer 语言服务器是 Language Server Protocol (LSP) 的一个实现,它让你的 IDE —— 以及你的 AI 智能体 —— 理解 Intlayer。它把 useIntlayer("home") 这样的调用与声明它的 .content.ts 文件双向关联起来。
功能
在弹窗中打开表格以清晰地查看所有数据
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 转到定义 | F12 / Cmd+点击 | 从字典键或字段使用处跳转到内容文件中的声明 |
| 查找所有引用 | Shift+F12 | 从内容文件出发,列出使用该键或字段的所有调用点 |
| 悬停 | 将光标悬停其上 | 无需离开当前文件即可预览字典的字段,或某个字段的翻译值 |
| 自动补全 | " ' ` . | 在 getter 内提示已声明的字典键,并在 . 之后或解构时提示内容字段 |
| 诊断 | 自动 | 当某个键未在任何内容文件中声明时发出警告 |
还有两个行为值得了解:
- 合并字典 —— 分散在多个内容文件中的键会按文件各返回一个结果,因此你可以跳转到每一处声明。
- 支持 monorepo —— 服务器会解析距离每个文件最近的
intlayer.config.*,因此同一工作区中的多个项目各自拥有独立的字典。
支持的调用
键既可以从位置字符串参数读取,也可以从选项对象({ namespace }、{ id })读取。
在弹窗中打开表格以清晰地查看所有数据
| 库 | 调用 |
|---|---|
| Intlayer | useIntlayer, getIntlayer |
| i18next / react-i18next | useTranslation, getFixedT, t, Trans |
| next-intl / use-intl | useTranslations, getTranslations, createTranslator |
| react-intl | formatMessage, FormattedMessage |
| Lingui | useLingui, t, Trans, _ |
| vue-i18n | useI18n |
它适用于所有 *-intlayer 包(next-intlayer、react-intlayer、vue-intlayer、svelte-intlayer、solid-intlayer、preact-intlayer、angular-intlayer、lit-intlayer、express-intlayer、hono-intlayer、fastify-intlayer、intlayer),也适用于让你保留现有 i18n 语法的 compat 适配包。
字典读取自构建产物,因此请运行 npx intlayer build,或保持开发服务器运行,好让服务器有内容可解析。
安装
服务器以 @intlayer/lsp 中的 intlayer-lsp 可执行文件形式发布:
复制代码到剪贴板
如果你的编辑器需要在 PATH 中找到 intlayer-lsp,请改为全局安装(npm install -g @intlayer/lsp)—— Claude Code 插件以及下文中直接调用该可执行文件的配置都属于这种情况。
配置
安装 Intlayer VS Code 扩展。语言服务器自 v8.12.0 起已内置并会自动启动 —— 无需任何配置。
其他功能请参阅 VS Code 扩展文档。
Cursor 和 Windsurf 是 VS Code 的分支,使用相同的扩展生态。安装一次 Intlayer VS Code 扩展,服务器便会自动启用 —— 无需任何配置。
Intlayer 提供了一个托管在 Intlayer 仓库中的 Claude Code 插件。它让 Claude Code 能真正解析字典键的符号,而不必退回到 grep。
先把可执行文件放入 PATH,然后注册 marketplace 并安装插件:
复制代码到剪贴板
install 同时会启用该插件。请重启 Claude Code —— 语言服务器在启动时加载,因此在重启前插件不会生效。
之后 Claude Code 会在 .ts、.tsx、.js、.jsx、.vue、.astro 和 .svelte 文件上启动该服务器,并在浏览代码时使用 goToDefinition、findReferences 和 hover。
如果转到定义仍然没有反应,你使用的 Claude Code 版本可能通过一个开关来控制 LSP 工具:
复制代码到剪贴板
Zed 原生支持 LSP。请将该服务器添加到用户设置中:
复制代码到剪贴板
"..." 占位符可让 Zed 的默认语言服务器与 Intlayer 的服务器共存。
使用 nvim-lspconfig 注册一个自定义服务器配置:
复制代码到剪贴板
重启 Neovim 后,在字典键上按 gd 会执行转到定义,按 gr 会执行查找引用。
复制代码到剪贴板
复制代码到剪贴板
任何支持 LSP 的编辑器都可以运行 @intlayer/lsp。请将其指向:
- 可执行文件 ——
npx @intlayer/lsp,或intlayer-lsp可执行文件 - 传输方式 —— stdio(标准)
- 能力 ——
definitionProvider、referencesProvider、hoverProvider、completionProvider(触发字符"'`.)、推送式诊断、textDocumentSync: Incremental - 根目录匹配模式 ——
intlayer.config.ts、intlayer.config.js、package.json
确切的配置格式请查阅你所用编辑器的 LSP 文档。
关于终端 AI 智能体的说明
Claude Code 是一个真正的 LSP 客户端 —— 参见上面的标签页。
OpenAI Codex 及大多数其他终端工具并不是 LSP 客户端:它们直接读写文件。单独运行服务器对它们没有帮助;真正的价值在于服务器在一个配套编辑器中处于活跃状态,而智能体可以查询该编辑器的索引(Cursor Composer、Windsurf Cascade、Copilot Chat)。
工作原理
对每个文件,服务器会定位最近的 intlayer.config.*,加载该项目的配置以找到已编译的字典。配置、字典和源文件列表会以较短的 TTL 缓存,并在被监听的内容文件发生变化时失效。
收到请求时,服务器会(通过 oxc)解析文档并检查光标位置:
- 位于键字符串上(
useIntlayer("home"))→ 返回声明该键的每个内容文件,并定位到其key:所在行。 - 位于字段使用处(
content.title、解构出的属性、t('path.to.field')、<Trans>等)→ 将变量回溯到其字典,并返回内容文件中对应的字段。 - 从内容文件出发 → 执行反向查找,扫描项目源码以寻找该键或字段的调用点。
故障排查
在弹窗中打开表格以清晰地查看所有数据
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 完全没有反应 | 服务器未运行 | 检查是否已安装 @intlayer/lsp,以及编辑器是否会启动它 |
| 在编辑器中可用,在 Claude Code 中不可用 | 会话中途安装了插件 | 重启 Claude Code —— 语言服务器在启动时加载 |
| 找不到某个键的定义 | 字典尚未构建 | 运行 npx intlayer build,或启动开发服务器 |
| 所有键都被报告为未声明 | 配置未解析 | 确认项目根目录存在 intlayer.config.ts(或 .js) |
| 在 monorepo 中使用了错误的项目 | 缺少各自的包级配置 | 为每个声明自有内容的包添加 intlayer.config.* |
| 服务器启动时崩溃 | Node.js 版本过低 | 需要 Node.js ≥ 14.18 |
在 VS Code 中,服务器会将日志输出到 查看 → 输出 → “Intlayer LSP” —— 便于确认解析到的是哪份配置以及找到了多少字典。
