返回博客

Django 翻译:独立开发者从数周到数分钟的蜕变

2026-02-11 3 分钟阅读
Django 翻译:独立开发者从数周到数分钟的蜕变

你开发了一个 Django 应用。它运行正常,用户在不断注册,现在你想触达不会说英语的用户。问题一目了然:Django 的国际化框架在提取可翻译字符串方面非常出色,但它完全不会帮你填写翻译内容。这部分需要你自己来做。

如果你是独立开发者或两人小团队,makemessages 和一个完整翻译的应用之间的鸿沟会让人望而却步。我会介绍几种现实可行的方案,解释为什么其中大多数对小团队来说行不通,并展示一种工作流,让翻译从数周的苦差事变成两分钟的命令。

传统方案(以及它们为什么让人头疼)

方案一:从 Google Translate 复制粘贴

最常见的第一次尝试。你打开 .po 文件,把每个 msgid 复制到 Google Translate,再把结果粘贴回 msgstr,然后不断重复。每个字符串都是如此。每种语言都是如此。

一个典型的 Django 应用有 200-500 个可翻译字符串。如果你要翻译成五种语言,那就是 1,000-2,500 次复制粘贴。即使每次只需要 30 秒,你也要花 8-20 个小时做这种令人麻木的工作。而且这还没算上修复格式错误、损坏的占位符和不可避免出现的术语不一致所需的时间。

更糟的是,下一个迭代你添加新字符串时,这一切又要重来一遍。

方案二:专业翻译人员

专业翻译的费用通常是每个单词 $0.10 到 $0.25。一个有 500 个字符串、平均每个 8 个单词的 Django 应用大约有 4,000 个单词。按 $0.15/单词计算,每种语言需要 $600,五种语言就是 $3,000。

对于有风投支持的初创公司,这只是个零头。但对于一个按每位用户 $9/月收费的独立开发者来说,这可能吃掉你一整个季度的收入。

方案三:Fiverr 和自由职业市场

你可以在 Fiverr 上找到每种语言 $20-50 的翻译者。有些人确实技术精湛。但很多人只是把你的文本粘贴到 Google Translate,然后向你收费。你最终得到的质量和方案一一样,还多了一轮沟通和一周的等待。

方案四:Crowdin、Transifex 或 Weblate

这些平台功能强大,但它们是为拥有专门翻译团队的项目设计的。当你是项目中唯一的人时,配置开销(同步仓库、配置翻译记忆库、管理贡献者权限)就显得过于繁重。付费版月费从 $30-150/月起步,即使是免费版也需要你维护又一个第三方集成。

方案五:把所有内容粘贴到 ChatGPT

这在质量方面实际上效果出奇地好。你把 .po 文件内容粘贴到 ChatGPT 或 Claude 中,请求翻译,就能得到合理的结果。问题在于它无法规模化。你必须手动提取未翻译的字符串、格式化提示词、将响应解析回 .po 格式,并在超出上下文限制时处理分批。它能用一次。但作为可重复的工作流就不行了。

自动化方案

如果整个翻译步骤只需一条命令呢?这就是 TranslateBot 背后的理念——一个开源的 Django 管理命令,读取你的 .po 文件,将未翻译的字符串发送给 AI 提供商,然后以正确的格式写回翻译结果。

下面是配置方法。

第一步:安装 TranslateBot

uv add --dev translatebot-django

或者用 pip:

pip install translatebot-django

将其添加到已安装的应用中:

# settings.py
INSTALLED_APPS = [
    # ...
    'translatebot_django',
]

第二步:配置你的 AI 提供商

添加两个设置:

# settings.py
import os

TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"

TranslateBot 支持 OpenAI、Anthropic Claude、Google Gemini,以及通过 LiteLLM 支持的 100 多种其他模型。它还支持 DeepL 作为专用翻译后端。

第三步:创建 TRANSLATING.md(可选但推荐)

在项目根目录下的 TRANSLATING.md 文件为 AI 提供关于你的应用的上下文信息。这正是通用机器翻译和真正适合你产品的翻译之间的区别:

# Translation Context

## About This Project
A personal finance tracker for freelancers. Users track invoices,
expenses, and tax obligations.

## Tone
- Friendly and informal
- Use "du" in German, "tu" in French
- Keep financial terms precise

## Terminology
- "invoice" = "Rechnung" (German), "facture" (French)
- "dashboard" = keep as English loanword in all languages
- "freelancer" = keep as English loanword in German

这个文件会随每次翻译请求一起发送,因此 AI 会始终使用正确的语气和术语。

第四步:翻译

python manage.py makemessages -l de -l fr -l nl -l es -l ja
python manage.py translate
python manage.py compilemessages

三条命令。就这样。TranslateBot 会找到你所有 .po 文件中的所有未翻译字符串,批量翻译它们,然后写回结果。默认情况下只翻译空条目,因此在添加新字符串后再次运行该命令只会翻译新的内容。

实际操作中的样子

以下是一个独立开发者支持五种语言的真实迭代工作流:

周一:你开发了一个新功能。开发过程中你使用 gettext(){% trans %} 添加了一些新的可翻译字符串。

from django.utils.translation import gettext_lazy as _

class InvoiceView(View):
    def post(self, request):
        # New string added during development
        messages.success(request, _("Invoice sent successfully."))

提交之前:你运行三条命令:

python manage.py makemessages -a --no-obsolete
python manage.py translate
python manage.py compilemessages

translate 命令会检测到新的未翻译条目,并只翻译这些条目。如果你添加了 5 个新字符串并支持 5 种语言,它会在一次 API 调用中完成 25 个翻译。整个过程不到一分钟。

你提交代码、模板和更新后的 .po/.mo 文件。翻译是你正常开发流程的一部分,而不是一个单独的项目。

提交前预览

如果你想在翻译写入磁盘之前先查看它们,使用 dry-run 模式:

python manage.py translate --dry-run

这会将每个翻译打印到终端,而不修改任何文件。

成本对比

这就是自动化让人无法反驳的地方。

方案 500 个字符串,5 种语言 时间 持续成本
手动复制粘贴 免费 ~40 小时 ~8 小时/迭代
专业翻译人员 ~$3,000 1-2 周 ~$600/迭代
Fiverr 翻译者 ~$100-250 3-7 天 ~$50/迭代
Crowdin/Transifex $30-150/月 配置:数小时 持续
TranslateBot + GPT-4o-mini ~$0.05 ~2 分钟 ~$0.01/迭代
TranslateBot + DeepL Free $0 ~2 分钟 $0

一个中小型 Django 应用大约有 500 个可翻译字符串,使用 gpt-4o-mini 每种语言的费用通常不到 $0.01。对于大多数独立项目来说,DeepL 免费版(每月 500,000 字符)可以零成本覆盖所有需求。

需要说明的是:AI 翻译并不完美。低成本的人工翻译也不完美。区别在于 AI 翻译几乎零成本、即时交付,而且可以随时重新运行。

CI 集成:永远不要发布未翻译的字符串

作为独立开发者,我发现最有用的模式之一是在 CI 中添加翻译检查。TranslateBot 包含一个 check_translations 命令,如果任何 .po 文件有未翻译或模糊的条目,它会失败:

# .github/workflows/ci.yml
jobs:
  translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true
      - run: uv python install
      - run: uv sync --frozen
      - name: Install gettext
        run: sudo apt-get update && sudo apt-get install -y --no-install-recommends gettext
      - name: Check translations
        run: uv run python manage.py check_translations --makemessages

如果你在模板中添加了新的 {% trans %} 标签却忘记运行 translate,CI 会发现:

locale/de/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
locale/fr/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
CommandError: Translation check failed

这让翻译从你需要记住去做的事情变成了你不可能忘记的事情。

实用建议

从两三种语言开始。你不需要在第一天就推出 15 种语言。选择你用户最多或最大可触达市场的语言。德语、法语和西班牙语可以覆盖欧洲市场的很大一部分。

让母语者审核关键字符串。AI 翻译对大多数界面文本来说已经足够好,但你的着陆页标题和引导流程值得人工审核。请一位朋友、用户或社区论坛中的人花 10 分钟审核最显眼的字符串。

覆盖前使用 dry-run。如果你需要重新翻译所有内容(例如,在更新 TRANSLATING.md 中的术语指南之后),先预览变更:

python manage.py translate --overwrite --dry-run

将 TRANSLATING.md 纳入版本控制。它是你项目翻译配置的一部分。当你更新术语或语气指南时,下一次 translate 运行会将这些变更反映到所有新字符串中。

需要时按应用翻译。如果你只更改了一个应用中的字符串,可以限定翻译范围:

python manage.py translate --app billing

从数周到数分钟

Django 的国际化框架是所有 Web 框架中最好的之一。makemessages、locale 目录和 compilemessages 的工具链成熟而可靠。唯一缺失的部分就是翻译步骤本身。这曾经是昂贵且缓慢的环节。

使用 TranslateBot,工作流变成了:

  1. 像往常一样使用 gettext(){% trans %} 编写代码
  2. 运行 makemessages 提取字符串
  3. 运行 translate 填写翻译
  4. 运行 compilemessages 编译
  5. 一起提交所有内容

对于独立开发者来说,这意味着本地化不再是你计划"以后再做"的项目。它是你今天就能做的事情,只需要泡一杯咖啡的时间。

TranslateBot 是开源的,可在 PyPIGitHub 上获取。安装它,运行命令,几分钟内就能看到你的应用以新的语言呈现。

停止手动编辑 .po 文件

TranslateBot 使用 AI 自动化 Django 翻译。一条命令,覆盖所有语言,每次翻译仅需几分钱。