Scribe

面向多语言 MDX 站点的 Git 化 CMS

英语内容作为 MDX 文件存在于代码库中。AI 翻译作为 SQLite 文件与它们并排存放。Zod 负责验证两者,带类型的运行时在构建时读取所有内容。无需 CMS 服务器,在请求时也没有网络延迟。

pnpm add scribe-cms zod better-sqlite3

工作原理

  1. 1

    定义 Schema

    内容类型即 Zod Schema。你可指定哪些字段需要翻译,哪些仅保留英语,以及文档之间如何相互引用。

    // scribe.config.ts
    defineContentType({
      id: "blog",
      path: "/blog/{slug}",
      slugStrategy: "localized",
      schema: z.object({
        title: field.translatable(z.string().min(1)),
        description: field.translatable(z.string().min(50)),
        author: field.relation("author"),
        heroImage: field.structural(z.string().optional()),
      }),
    });
  2. 2

    编写内容

    每篇文档对应一个 MDX 文件,直接提交至代码库。文件名即英语的 Slug,而 Frontmatter 则会根据 Schema 进行验证。

    ---
    title: "Hello, world"
    description: "A first post that says hello to the world."
    author: jane
    publishedAt: "2026-01-15"
    ---
    
    The body is MDX. **Markdown** and <Components /> both work.
  3. 3

    增量翻译

    待翻译内容会被哈希化,因此只有缺失或过期的页面才会发送至 Gemini,并通过 Batch API 享受半价 Token 优惠。提示词针对创译进行过优化,产出的文案读起来就像用目标语言原生创作的一样。输出结果在存储前会被解析为 MDX,如果响应有误只会让当前运行失败,而绝不会搞挂你的网站。

    export GEMINI_API_KEY=...
    
    npx scribe translate --locale fr de --dry-run   # show the worklist
    npx scribe translate --locale fr de             # translate, validate, store
    git add .scribe/store.sqlite                    # translations live in git
  4. 4

    类型安全的读取

    运行时将从配置中推断文档类型。列表、查询、关联、hreflang 备用链接及站点地图条目等返回时都自带完整类型。

    const scribe = createScribe(config);
    
    const posts = scribe.blog.list("fr");                  // BlogDoc[]
    const { document } = scribe.blog.resolve(slug, "fr");  // EN fallback built in
    const author = scribe.blog.related(document!, "author"); // AuthorDoc
    const hreflang = scribe.blog.alternates(document!);

功能特性

增量式翻译

翻译与英语源文的哈希值绑定。只需修改一个段落,系统便仅对该文档重新翻译,试运行功能还能提前为你预估成本。

如同原生母语般流畅

专为创译打造的提示词:以母语级文案的口吻重建地道表达,坚决摒弃逐字死板翻译。

入库前验证

每份翻译在入库前不仅会当作 MDX 进行解析,还会再度接受 Zod Schema 的校验。就算大模型出错也仅会导致命令失败,而绝不会影响线上生产环境。

端到端类型安全

Zod Schema、推断出来的文档类型,通通不需要代码生成。关系返回时已解引用且类型完备。

内联占位符 (Inline tokens)

直接在正文中嵌入链接、素材和不可译字符串。只需修改一次占位符,所有语言版本即可瞬间同步更新,毫无重新翻译之需。

内置 SEO 优化

全面支持 hreflang、带 x-default 的站点地图、Canonical 标签、noindex、JSON 重定向规则及本地化降级链。

一切皆在 Git 中

MDX 文件加上一个提交的 SQLite 库。快照功能会记录每份翻译的源文,scribe 历史记录则会为你展示清晰的时间线。

无服务器负担

所有数据均在构建时从磁盘读取,完美兼容 Next.js、Astro 或任何 Node 技术栈。配合本地 Studio 更能让你快速浏览、搜索并一目了然地掌握翻译进度。

AI 优先的底层架构

Agent 能用处理代码的同款工具去读取并编辑 MDX,每一次更改都会生成差异比对供你审查。大模型和内容之间没有任何复杂的 API 隔阂。

开源构建

scribe-cms 采用 MIT 协议并在 GitHub 上进行开发。本站正是基于它搭建而成。此处的每一页均由 scribe 驱动,背后是一个承载十种语言的受控 SQLite 库。欢迎阅读源码、提交 Issue 或发起 Pull Request。

面向多语言 MDX 站点的 Git 化 CMS