Anda telah membina aplikasi Django. Ia berfungsi, pengguna mendaftar, dan sekarang anda ingin menjangkau orang yang tidak bertutur dalam bahasa Inggeris. Masalahnya jelas sebaik sahaja anda melihatnya: rangka kerja pengantarabangsaan Django sangat baik dalam mengekstrak rentetan yang boleh diterjemah, tetapi ia tidak melakukan apa-apa untuk mengisi terjemahan. Bahagian itu terletak pada anda.
Jika anda seorang pembangun solo atau pasukan dua orang, jurang antara makemessages dan aplikasi yang diterjemah sepenuhnya boleh terasa amat besar. Saya akan menerangkan pilihan-pilihan yang realistik, menjelaskan mengapa kebanyakannya tidak berkesan untuk pasukan kecil, dan menunjukkan aliran kerja yang mengubah terjemahan dari tugas berminggu-minggu kepada arahan dua minit.
Pilihan Tradisional (dan Mengapa Ia Menyusahkan)
Pilihan 1: Salin-Tampal dari Google Translate
Percubaan pertama yang paling biasa. Anda membuka fail .po, menyalin setiap msgid ke Google Translate, menampal hasilnya sebagai msgstr, dan mengulangi. Untuk setiap rentetan. Dalam setiap bahasa.
Aplikasi Django biasa mempunyai 200-500 rentetan yang boleh diterjemah. Jika anda menterjemah ke lima bahasa, itu bermaksud 1,000-2,500 kitaran salin-tampal. Walaupun setiap satu hanya mengambil masa 30 saat, anda sedang melihat 8-20 jam kerja yang membosankan. Dan itu sebelum anda membetulkan ralat pemformatan, placeholder yang rosak, dan terminologi yang tidak konsisten yang pasti akan masuk.
Lebih buruk, anda perlu melakukannya lagi pada sprint seterusnya apabila menambah rentetan baharu.
Pilihan 2: Penterjemah Profesional
Terjemahan profesional biasanya berharga $0.10 hingga $0.25 setiap perkataan. Aplikasi Django dengan 500 rentetan purata 8 perkataan setiap satu berjumlah kira-kira 4,000 perkataan. Pada $0.15/perkataan, itu $600 setiap bahasa, atau $3,000 untuk lima bahasa.
Untuk syarikat permulaan yang dibiayai VC, itu hanyalah ralat pembundaran. Untuk pembangun solo yang mengenakan caj $9/bulan setiap pengguna, ia boleh menelan keseluruhan hasil anda untuk suku tahun tersebut.
Pilihan 3: Fiverr dan Pasaran Bebas
Anda boleh mencari penterjemah di Fiverr dengan harga $20-50 setiap bahasa. Sesetengah memang berkemahiran. Ramai yang hanya menampal teks anda ke Google Translate dan mengenakan bayaran untuk keistimewaan tersebut. Anda mendapat kualiti yang sama seperti Pilihan 1, ditambah satu lagi perjalanan pergi balik komunikasi dan seminggu menunggu.
Pilihan 4: Crowdin, Transifex, atau Weblate
Platform-platform ini berkuasa, tetapi ia direka untuk projek dengan pasukan terjemahan khusus. Beban persediaan (menyegerakkan repositori, mengkonfigurasi memori terjemahan, mengurus akses penyumbang) adalah berlebihan apabila anda satu-satunya orang dalam projek. Langganan bulanan bermula pada $30-150/bulan untuk peringkat berbayar, dan peringkat percuma pun memerlukan anda menyelenggara satu lagi integrasi pihak ketiga.
Pilihan 5: Tampal Semuanya ke ChatGPT
Ini sebenarnya berfungsi dengan baik dari segi kualiti. Anda menampal kandungan fail .po ke ChatGPT atau Claude, meminta terjemahan, dan mendapat hasil yang munasabah. Masalahnya ialah ia tidak berskala. Anda perlu mengekstrak rentetan yang belum diterjemah secara manual, memformat prompt, mengurai respons kembali ke format .po, dan mengendalikan pengelompokan apabila melebihi had konteks. Ia berfungsi sekali. Ia rosak sebagai aliran kerja yang boleh diulang.
Pendekatan Automasi
Bagaimana jika keseluruhan langkah terjemahan hanyalah satu arahan? Itulah idea di sebalik TranslateBot, arahan pengurusan Django sumber terbuka yang membaca fail .po anda, menghantar rentetan yang belum diterjemah ke penyedia AI, dan menulis terjemahan kembali dalam format yang betul.
Begini cara untuk menyediakannya.
Langkah 1: Pasang TranslateBot
uv add --dev translatebot-django
Atau dengan pip:
pip install translatebot-django
Tambahkan ke aplikasi yang dipasang:
# settings.py
INSTALLED_APPS = [
# ...
'translatebot_django',
]
Langkah 2: Konfigurasikan Penyedia AI Anda
Tambah dua tetapan:
# settings.py
import os
TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"
TranslateBot berfungsi dengan OpenAI, Anthropic Claude, Google Gemini, dan 100+ model lain melalui LiteLLM. Ia juga menyokong DeepL sebagai bahagian belakang terjemahan khusus.
Langkah 3: Cipta TRANSLATING.md (Pilihan tetapi Disyorkan)
Fail TRANSLATING.md di akar projek anda memberikan konteks kepada AI tentang aplikasi anda. Inilah yang membezakan terjemahan mesin generik daripada terjemahan yang benar-benar sesuai dengan produk anda:
# 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
Fail ini dihantar bersama setiap permintaan terjemahan, jadi AI secara konsisten menggunakan nada dan terminologi yang betul.
Langkah 4: Terjemah
python manage.py makemessages -l de -l fr -l nl -l es -l ja
python manage.py translate
python manage.py compilemessages
Tiga arahan. Itu sahaja. TranslateBot mencari semua rentetan yang belum diterjemah merentasi semua fail .po anda, menterjemahnya secara berkumpulan, dan menulis hasilnya kembali. Hanya entri kosong yang diterjemah secara lalai, jadi menjalankan arahan sekali lagi selepas menambah rentetan baharu hanya menterjemah yang baharu.
Bagaimana Ia Kelihatan dalam Amalan
Berikut ialah aliran kerja sprint yang realistik untuk pembangun solo yang menyokong lima bahasa:
Isnin: Anda membina ciri baharu. Anda menambah beberapa rentetan baharu yang boleh diterjemah menggunakan gettext() dan {% trans %} semasa bekerja.
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."))
Sebelum commit: Anda menjalankan tiga arahan:
python manage.py makemessages -a --no-obsolete
python manage.py translate
python manage.py compilemessages
Arahan translate mengesan entri baharu yang belum diterjemah dan hanya menterjemah entri tersebut. Jika anda menambah 5 rentetan baharu dan menyokong 5 bahasa, ia membuat 25 terjemahan dalam satu panggilan API. Keseluruhan proses mengambil masa kurang dari seminit.
Anda commit kod, templat, dan fail .po/.mo yang dikemas kini bersama-sama. Terjemahan adalah sebahagian daripada aliran pembangunan biasa anda, bukan projek berasingan.
Pratonton Sebelum Commit
Jika anda ingin melihat terjemahan sebelum ia ditulis ke cakera, gunakan mod dry-run:
python manage.py translate --dry-run
Ini mencetak setiap terjemahan ke terminal tanpa mengubah sebarang fail.
Perbandingan Kos
Di sinilah automasi menjadi sukar untuk dipertikaikan.
| Pendekatan | 500 rentetan, 5 bahasa | Masa | Kos berulang |
|---|---|---|---|
| Salin-tampal manual | Percuma | ~40 jam | ~8 jam/sprint |
| Penterjemah profesional | ~$3,000 | 1-2 minggu | ~$600/sprint |
| Penterjemah Fiverr | ~$100-250 | 3-7 hari | ~$50/sprint |
| Crowdin/Transifex | $30-150/bulan | Persediaan: jam | Berterusan |
| TranslateBot + GPT-4o-mini | ~$0.05 | ~2 minit | ~$0.01/sprint |
| TranslateBot + DeepL Free | $0 | ~2 minit | $0 |
Aplikasi Django bersaiz kecil hingga sederhana dengan kira-kira 500 rentetan yang boleh diterjemah biasanya berharga kurang dari $0.01 setiap bahasa dengan gpt-4o-mini. Untuk kebanyakan projek solo, peringkat percuma DeepL (500,000 aksara/bulan) meliputi semuanya tanpa kos.
Untuk jelasnya: terjemahan AI tidak sempurna. Terjemahan manusia yang murah juga tidak. Bezanya ialah terjemahan AI hampir tiada kos, tiba serta-merta, dan boleh dijalankan semula bila-bila masa anda mahu.
Integrasi CI: Jangan Sesekali Hantar Rentetan yang Belum Diterjemah
Salah satu corak yang paling berguna yang saya temui sebagai pembangun solo ialah menambah semakan terjemahan pada CI. TranslateBot menyertakan arahan check_translations yang gagal jika mana-mana fail .po mempunyai entri yang belum diterjemah atau kabur:
# .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
Jika anda menambah tag {% trans %} baharu dalam templat dan terlupa menjalankan translate, CI akan menangkapnya:
locale/de/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
locale/fr/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
CommandError: Translation check failed
Ini mengubah terjemahan dari sesuatu yang perlu anda ingat kepada sesuatu yang anda tidak boleh lupa.
Petua Praktikal
Mulakan dengan dua atau tiga bahasa. Anda tidak perlu melancarkan dalam 15 bahasa pada hari pertama. Pilih bahasa di mana anda mempunyai paling ramai pengguna atau pasaran boleh capai yang terbesar. Bahasa Jerman, Perancis, dan Sepanyol meliputi banyak kawasan untuk pasaran Eropah.
Minta penutur asli menyemak rentetan kritikal. Terjemahan AI cukup baik untuk kebanyakan teks UI, tetapi tajuk halaman pendaratan dan aliran pengenalan anda layak mendapat pandangan manusia. Minta rakan, pengguna, atau seseorang dalam forum komuniti untuk meluangkan 10 minit menyemak rentetan yang paling ketara.
Gunakan dry-run sebelum menulis ganti. Jika anda perlu menterjemah semula semuanya (contohnya, selepas mengemas kini TRANSLATING.md dengan garis panduan terminologi yang lebih baik), pratonton perubahan dahulu:
python manage.py translate --overwrite --dry-run
Simpan TRANSLATING.md dalam kawalan versi. Ia adalah sebahagian daripada konfigurasi terjemahan projek anda. Apabila anda mengemas kini terminologi atau garis panduan nada, pelaksanaan translate seterusnya akan mencerminkan perubahan tersebut untuk sebarang rentetan baharu.
Terjemah mengikut aplikasi apabila perlu. Jika anda hanya mengubah rentetan dalam satu aplikasi, anda boleh menghadkan skop terjemahan:
python manage.py translate --app billing
Dari Berminggu-minggu kepada Beberapa Minit
Rangka kerja pengantarabangsaan Django adalah salah satu yang terbaik dalam mana-mana rangka kerja web. Peralatan untuk makemessages, direktori locale, dan compilemessages sudah matang dan boleh dipercayai. Satu-satunya bahagian yang hilang ialah langkah terjemahan itu sendiri. Itu dahulunya bahagian yang mahal dan perlahan.
Dengan TranslateBot, aliran kerja menjadi:
- Tulis kod dengan
gettext()dan{% trans %}seperti biasa - Jalankan
makemessagesuntuk mengekstrak rentetan - Jalankan
translateuntuk mengisi terjemahan - Jalankan
compilemessagesuntuk mengkompil - Commit semuanya bersama
Untuk pembangun solo, ini bermakna penyetempatan bukan lagi projek yang anda rancang untuk "suatu hari nanti." Ia sesuatu yang boleh anda lakukan hari ini, dalam masa yang diperlukan untuk membuat secawan kopi.
TranslateBot adalah sumber terbuka dan tersedia di PyPI dan GitHub. Pasang, jalankan arahan, dan lihat aplikasi anda dalam bahasa baharu dalam beberapa minit.