mcpField
V
verbaly

verbaly

本地服务
github.com/AronSoto开发工具4今天更新

关于 verbaly

Verbaly 是面向应用开发团队的 i18n 编译器和运行时,支持在代码中编写文本并获得类型化翻译与 CI 检查。它提取消息并生成键,还提供 MCP 服务供 Agent 起草翻译,草稿须由人批准。

主要功能

  1. 01提取消息并生成稳定键
  2. 02根据消息文本推断类型化参数
  3. 03在 CI 中检查缺失或损坏的翻译
  4. 04导出目录以供翻译工作流使用
  5. 05在本地面板中审阅草稿

适用场景

  1. 01开发应用文本时添加翻译
  2. 02发布前发现缺少参数或复数形式
  3. 03使用 Agent 准备翻译草稿
  4. 04在 Studio 中审阅并批准草稿

MCP 相关

@verbaly/mcp 服务将翻译工作流提供为工具,并提供项目配置和目录的资源。Agent 可以创建草稿,但批准由人完成。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"aronsoto-verbaly": {
"command": "npx",
"args": [
"-y",
"@verbaly/mcp"
]
}
}
}
启动命令npx -y @verbaly/mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@verbaly/mcp0.79.0

工具

9

收录的工具列表 · 更新于 今天

参数类型必填说明
dirstring否语言目录(默认值:locales)
rootstring否包含 verbaly.config 的项目根目录(默认为服务器工作目录)
localesarray否所有语言环境,包括源语言
sourceLocalestring否编写内容所用的语言(默认值:en)

详细介绍

Verbaly

在代码中编写文本,以各种语言发布。

一款 i18n 编译器和轻量级运行时,支持 React、Vue、Svelte、Next.js、Nuxt、SvelteKit、Astro 和纯 HTML。
无需同步维护键文件,参数类型从文本中推导,并通过 CI 门禁阻止有问题的翻译。

npm 版本 CI 覆盖率 Socket 供应链安全 OpenSSF Scorecard 通过 npm provenance 发布 运行时 gzip 压缩后为 3.35KB 运行时零依赖 TypeScript MIT

左侧是一个组件,其中编写了 t`Welcome back, ${name}`、t`You have ${count} new messages` 和 t`Open inbox`。右侧是浏览器中的同一页面,语言从英语切换为西班牙语,再切换为葡萄牙语。下方显示四个步骤:编写、提取、翻译、检查。

React Next.js Vue Nuxt Svelte and SvelteKit Astro Vite webpack, Rollup, esbuild and Rspack Plain HTML, no framework

设计理念

大多数 i18n 工具都要求你为每个句子创建一个键,按语言分别写入文件,再手动让这些文件与代码保持同步。Verbaly 则反其道而行:

// with key files: name it, write it in en.json, es.json, pt.json, keep them in sync
t('dashboard.welcome_back', { name });

// with Verbaly: write the sentence where it is used
t`Welcome back, ${name}`;

// and the compiler writes a stable key and a typed call for you
t('ESsQIvlA', { name });

发布的运行时经 gzip 压缩后仅 3.35 KB,且零依赖。每次发布时,都会通过此仓库中的检查进行测量(pnpm --filter verbaly size)。

快速开始

pnpm add verbaly @verbaly/vite
pnpm add -D @verbaly/compiler   # the verbaly command: init, extract, check
npx verbaly init
// vite.config.ts
import verbaly from '@verbaly/vite';

export default { plugins: [verbaly()] };
// anywhere in your app: extracted and typed on save
import { t, setLocale } from 'verbaly/app';

t`Hello ${name}`;
await setLocale('es'); // loads only the Spanish module

verbaly/app 是项目自己的模块:插件会根据你的配置生成它,其中已包含你的语言和目录。Next.js、Nuxt、SvelteKit 和 Astro 都有各自的一行设置:在上方选择对应框架,或阅读完整文档:**https://verbaly-web.vercel.app/docs**。

Verbaly 的优势

✍️ 无需键文件
你只需写出句子。编译器会为其命名,并让每种语言的文件始终与你的代码保持同步。
🧷 从文本推导类型
{name}、复数、货币和日期都来自消息本身,因此错误或缺失的参数会导致编译失败。
🛑 有问题的内容不会发布
verbaly check 会用通俗易懂的语言指出缺失的翻译,以及丢失了 {param}、标签或复数形式的翻译。
🪶 轻巧快速
零依赖、每种语言一个模块,并且每次发布都会与 i18next 进行热路径基准测试。
🔄 适配各种工作流
为译者提供纯 JSON、XLIFF、CSV 和 gettext PO,支持 Android 和 iOS 导出,也支持由人工审核的 AI 草稿。
🤖 为 Agent 做好准备
提供 MCP 服务、Agent Skill 和 llms.txt,Agent 可以撰写草稿,但绝不能批准草稿。
## 在面板中审校翻译
npx verbaly-studio

Verbaly Studio:概览显示有五项待处理、一条会破坏网站的翻译、两条缺失消息,以及两条无人审阅的机器翻译,并展示语言和目录的最新提交

Studio 通过 localhost 提供项目服务:显示缺少什么、什么出了问题、机器写了什么,以及每段文本在代码中的位置。JSON 文件是数据库,git 则记录历史;每次保存都会运行与 verbaly check 相同的验证,而且绝不会修改源文本。

对比

Verbalyi18nextLinguiParaglidetypesafe-i18n
类型安全的键和参数✅ 从文本推断插件/手动部分支持✅✅
运行时大小(gzip)3.35KB,零依赖13.6KB(19.0 +react)2.2KB(3.3 +react)编译后1.2KB
设置1 个 Vite 插件配置繁琐宏 + Babel/SWCinlang 项目生成器
键维护无需维护,自动提取手动提取 → 编译步骤手动手动
动态/CMS 内容✅ 真正的运行时路径✅✅⚠️ 较弱✅
纯 HTML(无框架)✅ DOM 解释器❌❌❌❌
缺失翻译拦截✅ 仅导致 CI 失败运行时警告CI 步骤✅❌
错误翻译拦截✅ 仅导致 CI 失败❌❌❌❌
目录格式纯 JSONJSONPO/JSONinlang 格式TS 文件

大小为各库主入口在 React 外置时的 min+gzip 大小,使用相同方法于 2026-10-15 测得。

编码 Agent

claude mcp add verbaly -- npx -y @verbaly/mcp

MCP 服务通过工具向你的 Agent 提供完整流程,并提供结构化输出以及用于读取配置和目录的资源。机器翻译会一直保留为草稿,直到有人批准(使用 verbaly review --approve 或 Studio);批准操作特意不作为工具提供。Agent Skill 会指导写入、提取、检查和翻译流程(npx degit AronSoto/verbaly/skills/verbaly .claude/skills/verbaly),文档还发布了 llms.txt。

软件包

软件包内容
verbaly运行时:t、Intl 格式、区域设置辅助工具和 DOM 解释器
@verbaly/compiler提取、类型化代码生成、门禁和 verbaly 命令
@verbaly/vite · @verbaly/unplugin打包工具插件:Vite,以及 webpack、Rollup、esbuild 和 Rspack
@verbaly/react · @verbaly/vue · @verbaly/svelte框架适配器:hooks 或组合式函数,以及 <Trans>
@verbaly/next · @verbaly/nuxt · @verbaly/sveltekit服务端渲染:按请求确定语言,无闪烁地进行水合
@verbaly/astroAstro 集成:.astro 提取和按语言静态构建
@verbaly/mcpMCP 服务:将翻译流程作为 Agent 的工具
@verbaly/studio本地审核面板

所有软件包共用一个版本号,每次发布都通过 CI 发布,并附带 npm 来源证明。

编辑器:悬停即可查看键对应的文本

生成的键是哈希,因此在差异中看到 t('a1B2c3D4') 并不能告诉你任何信息。i18n-ally 扩展在你将其指向目录后,会以内联方式显示实际文本。只需两个文件,无须更改 Verbaly 配置:

.vscode/settings.json

{
  "i18n-ally.localesPaths": ["locales"],
  "i18n-ally.keystyle": "flat",
  "i18n-ally.sourceLanguage": "en",
  "i18n-ally.displayLanguage": "en"
}

.vscode/i18n-ally-custom-framework.yml

languageIds:
  - javascript
  - typescript
  - javascriptreact
  - typescriptreact
  - vue
  - svelte
  - astro
usageMatchRegex:
  - "[^\\w\\d]t\\(\\s*['\"`]({key})['\"`]"
monopoly: true

keystyle 必须与目录匹配:点分键使用 flat,分组使用 nested。请用该扩展读取,而不要用它写入:它的提取和重命名操作假定键由你管理,而这里负责管理的是编译器。

开发

pnpm install
pnpm build      # tsdown: ESM + CJS + .d.ts
pnpm test       # each package's suite
pnpm typecheck
pnpm --filter verbaly bench   # the hot path against i18next

Verbaly 处于 0.x 阶段:API 在次要版本之间仍可能发生变化,每项变更都会记录在变更日志中。欢迎贡献:请参阅 CONTRIBUTING.md。

反馈

  • 遇到故障或意外情况:提交 Bug。提供一段最小代码片段即可。
  • 觉得哪里不够顺手:告诉我们。路线图会根据实际使用情况制定。
  • **一切运行顺利:**点个星或提及我们,都能帮助其他人发现它。

赞助

Verbaly 采用 MIT 许可、没有依赖项,由独立开发者构建。如果它为你节省了时间,赞助项目将为迈向 1.0 提供资金支持:更多集成、更快发布和长期维护。

在 GitHub 上赞助 Verbaly

许可证

MIT © Aron Soto · @AronSoto

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。