Verbaly

io.github.AronSoto由 GitHub 帳號 AronSoto 發布v0.80.0更新於 Nov 7, 2026

i18n for coding agents: extract, check and translate an app's text, with drafts a person approves

已驗證STDIO僅桌面知識與記憶開發者工具

概覽

AI 產生的概覽

Verbaly 的 MCP 伺服器:讓編碼代理擷取、檢查並起草應用程式文字的翻譯,草稿需人工核准。

可以做什麼
  • 在專案中執行 i18n 流程:擷取文字、檢查缺漏或損壞的翻譯、產生翻譯草稿
  • 以資源形式讀取專案的 Verbaly 設定與翻譯詞條檔
  • 處理純 JSON、XLIFF、CSV、gettext PO 以及 Android/iOS 匯出格式的詞條
  • 機器翻譯維持草稿狀態,等待人工核准
適用情境
當代理需要在 React、Vue、Svelte、Next.js、Nuxt、SvelteKit、Astro 或純 HTML 應用程式中新增或維護多語文字,並希望在編碼工作階段內完成擷取、檢查與翻譯起草時使用。
執行需求
以本機 stdio 程序執行,通常透過 npx 啟動 @verbaly/mcp 這個 npm 套件,因此需要 Node.js 以及下載該套件的網路存取。它作用於已用 Verbaly(編譯器、設定與詞條檔)初始化的專案。未宣告驗證、環境變數或請求標頭。
安裝前請注意
此伺服器可能把翻譯草稿寫入專案的詞條檔,提交前應檢查變更。機器翻譯的核准刻意不列為工具,必須由人透過命令列或 Studio 核准。翻譯草稿可能涉及把文字傳送給翻譯服務。專案處於 0.x 階段,API 可能在小版本之間變動。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Verbaly,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Verbaly]

Write your text in the code. Ship it in every language.

An i18n compiler and a tiny runtime for React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro and plain HTML.
No key files to keep in sync, params typed from the text, and a CI gate that stops broken translations.

[npm version] [CI] [coverage] [Socket supply chain security] [OpenSSF Scorecard] [published with npm provenance] [3.35KB gzip runtime] [zero runtime dependencies] [TypeScript] [MIT]

[On the left, a component that writes t`Welcome back, ${name}`, t`You have ${count} new messages` and t`Open inbox`. On the right, the same page in a browser switching from English to Spanish to Portuguese. Below, the four steps: write, extract, translate, check.]

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

The idea

Most i18n tools ask you to invent a key for every sentence, write it in a file per language and keep the files in step with the code by hand. Verbaly turns that around:

tsx
// with key files: name it, write it in en.json, es.json, pt.json, keep them in synct('dashboard.welcome_back', { name });
// with Verbaly: write the sentence where it is usedt`Welcome back, ${name}`;
// and the compiler writes a stable key and a typed call for yout('ESsQIvlA', { name });

The runtime that ships is 3.35 KB gzip with zero dependencies, measured on every release by a gate in this repo (pnpm --filter verbaly size).

Quick start

bash
pnpm add verbaly @verbaly/vitepnpm add -D @verbaly/compiler   # the verbaly command: init, extract, checknpx verbaly init
ts
// vite.config.tsimport verbaly from '@verbaly/vite';
export default { plugins: [verbaly()] };
ts
// anywhere in your app: extracted and typed on saveimport { t, setLocale } from 'verbaly/app';
t`Hello ${name}`;await setLocale('es'); // loads only the Spanish module

verbaly/app is your project's own module: the plugin writes it from your config, with your languages and catalogs already in it. Next.js, Nuxt, SvelteKit and Astro have their own one-line setup: pick yours in the row above, or read the full docs at https://verbaly-web.vercel.app/docs.

Why Verbaly

✍️ No key files

You write the sentence. The compiler names it and keeps every language file in step with your code.

🧷 Typed from the text

{name}, plurals, currency and dates come from the message itself, so a wrong or missing param fails to compile.

🛑 Broken ones never ship

verbaly check catches a missing translation, and one that lost a {param}, a tag or a plural case, in plain words.

🪶 Small and fast

Zero dependencies, one module per language, and a hot path benchmarked against i18next on every release.

🔄 Any workflow

Plain JSON, XLIFF, CSV and gettext PO for translators, Android and iOS exports, and AI drafts a person approves.

🤖 Agent ready

An MCP server, an Agent Skill and llms.txt, with drafts an agent can write but never approve.

Review translations in a panel

bash
npx verbaly-studio

[Verbaly Studio: an overview that says five things are waiting, one translation that breaks the site, two missing messages and two machine translations nobody has read, with the languages and the last commits to the catalogs]

Studio serves your project over localhost: what is missing, what is broken, what a machine wrote and where each text lives in your code. Your JSON files are the database and git is the history, a save runs the same validations as verbaly check, and it never edits your source text.

How it compares

Verbalyi18nextLinguiParaglidetypesafe-i18n
Type-safe keys & params✅ inferred from textplugin/manualpartial✅✅
Runtime size (gzip)3.35KB, zero deps13.6KB (19.0 +react)2.2KB (3.3 +react)compiled1.2KB
Setup1 Vite pluginheavy configmacros + Babel/SWCinlang projectgenerator
Key maintenancenone, extractedby handextract → compile stepby handby hand
Dynamic / CMS content✅ real runtime path✅✅⚠️ weak✅
Plain HTML (no framework)✅ DOM interpreter❌❌❌❌
Missing-translation gate✅ fails CI onlyruntime warningCI step✅❌
Broken-translation gate✅ fails CI only❌❌❌❌
Catalog formatplain JSONJSONPO/JSONinlang formatTS files

Sizes are min+gzip of each library's main entry with React external, measured with the same method on 2026-10-15.

Coding agents

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

The MCP server gives your agent the whole cycle as tools, with structured output and resources to read your config and catalogs. Machine translations stay drafts until a person approves them (verbaly review --approve, or Studio): approving is deliberately not a tool. The Agent Skill teaches the write, extract, check and translate cycle (npx degit AronSoto/verbaly/skills/verbaly .claude/skills/verbaly), and the docs publish llms.txt.

Packages

PackageWhat it is
verbalyThe runtime: t, Intl formats, locale helpers and the DOM interpreter
@verbaly/compilerExtraction, typed codegen, the gate and the verbaly command
@verbaly/vite · @verbaly/unpluginBundler plugins: Vite, and webpack, Rollup, esbuild and Rspack
@verbaly/react · @verbaly/vue · @verbaly/svelteFramework adapters: hooks or composables plus <Trans>
@verbaly/next · @verbaly/nuxt · @verbaly/sveltekitServer rendering: the language per request, hydration with no flash
@verbaly/astroAstro integration: .astro extraction and a static build per language
@verbaly/mcpMCP server: the translation cycle as tools for an agent
@verbaly/studioThe local review panel above

All of them share one version number, and every release is published from CI with npm provenance.

Editor: see the text behind a key on hover

Generated keys are hashes, so t('a1B2c3D4') in a diff tells you nothing. The i18n-ally extension shows the real text inline once you point it at your catalogs. Two files, no Verbaly config changes:

.vscode/settings.json

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

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

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

keystyle has to match your catalogs: flat for dotted keys, nested for groups. Use the extension for reading, not writing: its extract and rename actions assume you own the keys, and here the compiler does.

Development

bash
pnpm installpnpm build      # tsdown: ESM + CJS + .d.tspnpm test       # each package's suitepnpm typecheckpnpm --filter verbaly bench   # the hot path against i18next

Verbaly is 0.x: the API can still change between minor versions, and every change is in the changelog. Contributions are welcome: see CONTRIBUTING.md.

Feedback

  • Something broke or surprised you: open a bug. A minimal snippet is enough.
  • Something felt like friction: tell us what. The roadmap follows real use.
  • It just works: a star or a mention helps others find it.

Sponsor

Verbaly is MIT-licensed, dependency-free and built independently. If it saves you time, sponsoring it funds the road to 1.0: more integrations, faster releases and long-term maintenance.

[Sponsor Verbaly on GitHub]

License

MIT © Aron Soto · @AronSoto

來源:README.md,提交 7e8018c

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

4
  1. v0.80.0最新Nov 7, 2026
  2. v0.79.0Nov 3, 2026
  3. v0.78.0Nov 1, 2026
  4. v0.77.0Nov 1, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分