一篇作品,两种语言

一种既能让作者只关注原稿、又把每份翻译当成完整独立页面的内容模型。

发布于
2026年6月3日
更新于
2026年8月2日
阅读进度
2 分钟
标签
cms, systems, engineering
Read the English version

从作品开始,而不是从数据库行开始

一篇双语文章是一份思想作品的两种完整表达。两个页面拥有共同身份,但任何一页都不应该变成装着许多半翻译字段的袋子。

字段 共享或本地化 用途
Slug 共享 跨语言保持稳定身份
Language 每页独立 当前正文的语言
Origin Language 共享 作者实际写作时使用的语言
Title 与 Summary 本地化 面向读者的 metadata
Status 每页独立 独立控制发布
Other Version Relation 连接两个完整页面

公开查询应该刻意保持严格:

type Locale = 'en' | 'zh'

async function findPublishedArticle(locale: Locale, slug: string) {
  return repository.find({
    language: locale,
    slug,
    status: 'Published',
  })
}

Relation 可以帮助界面展示“阅读另一语言”,但不能改变当前 URL 所请求的内容。

编辑流程

  • 先完成原语言页面。
  • 用同一 Slug 创建另一语言页面。
  • 两页填写相同的 Origin Language。
  • 建立双向 relation。
  • 分别检查两种语言的标题、摘要和链接。
  • 独立决定每一页何时发布。

写作视图

只显示 Language 与 Origin Language 相同的页面,作者看到的是每篇手写作品的一行。

发布视图

显示所有语言页面、relation、状态和日期,让缺失或未完成的翻译保持可见。


将来增加日语时,应该创建第三个完整 locale 页面,而不是继续往原有数据库行里塞更多语言列。

Bojin Li

写软件、系统,以及那些还没定型的部分。