Yen sampeyan wis tau ngirim aplikasi Django nganggo luwih saka siji basa, sampeyan mesthi ngerti prosese. Sampeyan mbungkus string ing gettext(), mbukak makemessages, mbukak file .po kang isi atusan entri, lan miwiti nerjemahake baris mbaka baris. Kanggo rong basa lan seket string, isih bisa ditampa. Kanggo enem basa lan limang atus string, iku dina kerja kebak sing ora bakal bali maneh.
Pandhuan iki njelaske pipeline internasionalisasi (i18n) Django saka wiwitan nganti rampung, nerangake ngendi sing dadi masalah, lan nuduhake carane ngotomatisasi bagian sing paling angel nganggo terjemahan sing didhukung AI.
Alur Kerja Standar Django i18n
Sistem i18n bawaan Django dirancang kanthi apik. Loop utamane kaya ngene:
Langkah 1: Tandai string kanggo terjemahan ing kode Python lan template:
from django.utils.translation import gettext as _
def dashboard(request):
welcome = _("Welcome back, %(name)s!") % {"name": request.user.first_name}
return render(request, "dashboard.html", {"welcome": welcome})
{% load i18n %}
<h1>{% trans "Account Settings" %}</h1>
<p>{% blocktrans %}You have {{ count }} unread messages.{% endblocktrans %}</p>
Langkah 2: Ekstrak string menyang file .po:
python manage.py makemessages -l de -l fr -l nl
Iki mindhai kabeh kode lan ngasilake siji file .po saben basa, sing ngemot kabeh string sing bisa diterjemahake:
#: myapp/views.py:4
msgid "Welcome back, %(name)s!"
msgstr ""
#: templates/dashboard.html:2
msgid "Account Settings"
msgstr ""
Langkah 3: Terjemahake saben msgstr sing kosong kanthi manual.
Langkah 4: Kompilasi file .po sing wis rampung dadi file biner .mo:
python manage.py compilemessages
Langkah 1, 2, lan 4 cepet. Langkah 3 sing dadi masalah.
Kenapa Terjemahan Manual Ora Bisa Diskala
Aplikasi Django biasa duwe sekitar 200 nganti 2.000 string sing bisa diterjemahake. Kalekne karo jumlah basa target, lan sampeyan bakal ngadhepi komitmen wektu sing serius.
Iki dudu keluhan teoritis. Ing thread Django Forum sing kondhang, sawijining pengembang nglaporake ngentekake 8+ jam saben file .po kanggo terjemahan manual. Kontributor inti Django nerangake ngentekake luwih saka 10 jam kanggo nggabungake terjemahan sing dikirim komunitas menyang siji rilis, biasane kanggo review, koreksi format, lan ndandani placeholder sing rusak.
Masalahe tambah akeh suwe-suwe:
- Placeholder rusak. Salin string kaya
Welcome, %(name)s!menyang Google Translate, lan sampeyan bakal entukWillkommen, %(Name)s!utawaBienvenue, %(nom)s!. Kerusakan halus kasebut nyebabake crash runtime. - Konsistensi ilang. Tanpa glosarium, "dashboard" diterjemahake dadi "Instrumententafel" ing siji file lan "Dashboard" ing file liyane. Telung sasi mengko, ora ana sing kelingan endi sing disengaja.
- Sprint nambah string. Saben feature branch nambah string anyar sing bisa diterjemahake. Sanajan sampeyan wis mbayar terjemahan lengkap kuartal kepungkur, saiki ana 40 entri sing durung diterjemahake ing file
.po. - Asisten AI mbantu pisan. Sampeyan bisa nempel file
.pomenyang ChatGPT utawa Claude lan entuk asil sing apik. Nanging sprint sabanjure, nalika 15 string anyar muncul, sampeyan nggawe prompt saka nol, nerjemahake kabeh file maneh, lan ngarep-arep tetep konsisten karo sing wis ana.
Penyebab utamane yaiku terjemahan dianggep minangka acara siji wektu tinimbang proses tambahan lan bisa diulang.
Ngotomatisasi Terjemahan nganggo AI
Idene langsung: tinimbang manungsa mbukak saben file .po lan ngisi nilai msgstr, alat maca file, ngirim string sing durung diterjemahake menyang model AI utawa API terjemahan, nulis asile bali, lan njaga kabeh liyane (komentar, struktur file, placeholder, bentuk jamak).
TranslateBot Django yaiku paket open-source sing nindakake persis iki. Nyambung menyang sistem management command Django, dadi cocog karo alur kerja sing wis ana.
Setup Langkah demi Langkah
1. Instal Paket
pip install translatebot-django
Utawa, yen nganggo uv (dianjurake):
uv add --dev translatebot-django
Nginstal minangka dev dependency iku disengaja. TranslateBot mung dibutuhake nalika nggawe terjemahan, ora ing runtime produksi.
2. Tambahake menyang INSTALLED_APPS
# settings.py
INSTALLED_APPS = [
# ...
"translatebot_django",
]
3. Konfigurasi Penyedia AI
# settings.py
import os
TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"
TranslateBot nggunakake LiteLLM ing njero, tegese sampeyan bisa ngganti model apa wae saka 100+ kanthi ngganti siji string:
| Penyedia | Nilai TRANSLATEBOT_MODEL |
|---|---|
| OpenAI | gpt-4o-mini, gpt-4o |
| Anthropic | claude-sonnet-4-5-20250929 |
gemini/gemini-2.5-flash |
|
| Azure OpenAI | azure/gpt-4o-mini |
| DeepL | Gunakake TRANSLATEBOT_PROVIDER = "deepl" minangka gantinya |
Kanggo DeepL, instal ekstra: pip install translatebot-django[deepl]. Tingkat gratis DeepL menehi 500.000 karakter saben wulan tanpa biaya, sing cukup kanggo proyek cilik nganti sedeng.
4. Tentukake Basa
# settings.py
LANGUAGES = [
("en", "English"),
("de", "German"),
("fr", "French"),
("nl", "Dutch"),
("ja", "Japanese"),
]
5. Jalanake Terjemahan
python manage.py translate
Wis. TranslateBot mindhai proyek kanggo file .po, ngenali entri sing durung diterjemahake, ngirim menyang model AI sing dikonfigurasi ing batch sing dioptimalake, lan nulis asile. Terjemahan sing wis ana ora diowahi.
Kanggo nerjemahake siji basa:
python manage.py translate --target-lang nl
Output katon kaya ngene:
Translating to Dutch (nl)...
Found 42 strings to translate
Translating batch 1/2...
Translating batch 2/2...
Successfully translated 42 strings
6. Kompilasi Kaya Biasa
python manage.py compilemessages
Alur kerja lengkap saiki:
python manage.py makemessages -l de -l fr -l nl -l ja
python manage.py translate
python manage.py compilemessages
Telung perintah. Saben basa. Saben sprint.
Inkremental Miturut Desain
Fitur paling penting kanggo alur kerja sing bisa diulang yaiku terjemahan inkremental. TranslateBot mung nerjemahake entri sing msgstr kosong. Yen duwe 500 string lan 15 anyar ing sprint iki, mung 15 kasebut sing dikirim menyang API.
Iki penting kanggo alasan praktis:
- Biaya. Sampeyan mung mbayar kanggo string anyar, ora kabeh file.
- Kecepatan. Nerjemahake 15 string butuh detik, ora menit.
- Stabilitas. Terjemahan sing wis ditinjau lan disetujui ora bakal ditimpa (kajaba sampeyan kanthi jelas nggunakake
--overwrite).
Keamanan Placeholder
Django nggunakake sawetara format placeholder: %(name)s, %s, %d, {0}, {name}, lan tag HTML inline kaya <strong> utawa <a href="...">. Yen salah sijine rusak ing terjemahan, sampeyan entuk kesalahan runtime utawa markup rusak.
TranslateBot menehi instruksi menyang model AI kanggo njaga kabeh format placeholder lan validasi output. String kaya:
Welcome to %(site_name)s! You have <strong>%(count)d</strong> new messages.
Diterjemahake menyang basa Walanda dadi:
Welkom bij %(site_name)s! Je hebt <strong>%(count)d</strong> nieuwe berichten.
Saben placeholder tetep utuh.
Ngontrol Kualitas nganggo TRANSLATING.md
Model AI nerjemahake luwih apik nalika ngerti konteks. TranslateBot nggoleki file TRANSLATING.md ing root proyek lan nyakup isine ing saben panjalukan terjemahan.
# Translation Context
## About This Project
A B2B project management tool for construction companies.
## Terminology
- "project" means a construction project, not a software project
- "plan" means a building plan/blueprint, not a subscription plan
- Keep "Gantt chart" as-is in all languages
## Tone
- German: use formal "Sie" form (business context)
- French: use formal "vous" form
- Dutch: use informal "je" form
## Do Not Translate
- Brand name: "BuildFlow"
- Feature names: "SmartSchedule", "CostTracker"
File iki dikontrol versi bebarengan karo kode, dadi kabeh tim nggunakake konteks terjemahan sing padha. Sampeyan uga bisa nyelehake file TRANSLATING.md saben app kanggo app sing duwe terminologi khusus. Modul rekam medis lan modul tagihan bisa duwe glosarium dhewe-dhewe.
Pratinjau Sadurunge Commit
Flag --dry-run nuduhake persis apa sing bakal diterjemahake tanpa nindakake panggilan API utawa ngowahi file:
python manage.py translate --target-lang fr --dry-run
Found 15 untranslated entries
Dry run mode: skipping LLM translation
Would translate 'Welcome to our site'
Would translate 'Hello, %(name)s!'
...
Dry run complete: 15 entries would be translated
Iki migunani sadurunge terjemahan gedhe utawa nalika ngenalake anggota tim anyar sing pengin ngerti apa sing ditindakake perintah kasebut sadurunge komitmen menyang biaya API.
Integrasi CI/CD
Terjemahan sing dadi lawas ora bisa dihindari tanpa penegakan. TranslateBot ngemot management command check_translations sing dirancang kanggo pipeline CI:
# .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
Flag --makemessages mbukak makemessages -a --no-obsolete dhisik, njamin file .po nggambarake kode sumber saiki sadurunge mriksa. Yen ana entri sing durung diterjemahake utawa fuzzy, perintah metu kanthi kode 1 lan gagalake build:
locale/de/LC_MESSAGES/django.po: 2 untranslated, 0 fuzzy
locale/nl/LC_MESSAGES/django.po: 0 untranslated, 1 fuzzy
CommandError: Translation check failed
Alur kerja pengembang biasa dadi:
- Nambah string anyar sing bisa diterjemahake ing feature branch.
- CI gagal amarga string kasebut durung diterjemahake.
- Mbukak
python manage.py translateing lokal. - Commit file
.posing wis dianyari. - CI lolos.
Terjemahan ora bakal ilang sinkronisasi tanpa ketahuan.
Nerjemahake Konten Database
Yen aplikasi nyimpen konten sing bisa diterjemahake ing database (jeneng produk, judul posting blog, label kategori), TranslateBot uga terintegrasi karo django-modeltranslation:
pip install translatebot-django[modeltranslation]
# Translate all registered model fields
python manage.py translate --target-lang de --models
# Translate specific models only
python manage.py translate --target-lang de --models Product Category
Logika inkremental sing padha diterapake: mung kolom sing nilai basa target kosong sing diterjemahake.
Perbandingan Biaya
Salah siji pitakonan paling umum yaiku apa terjemahan AI iku hemat biaya dibandhingake alternatif. Iki perbandingan kasar kanggo proyek kanthi 500 string sing bisa diterjemahake ing 5 basa:
| Pendekatan | Perkiraan Biaya | Investasi Wektu |
|---|---|---|
| Manual (wektu pengembang) | $0 saka kanthong, 20-40+ jam | Dhuwur banget |
| Layanan terjemahan profesional | $500-2.000+ | Rendah (nanging suwe) |
| Platform lokalisasi SaaS | $50-200/wulan | Sedeng |
| TranslateBot + GPT-4o-mini | ~$0,05 (siji wektu) | Menit |
| TranslateBot + DeepL Free | $0 (nganti 500k karakter/wulan) | Menit |
| TranslateBot + Claude/GPT-4o | ~$0,30 (siji wektu) | Menit |
Angkane owah gumantung jumlah string lan basa target, nanging bedane orde besaran tetep konsisten. Kanggo pangopènan sing terus-terusan (nerjemahake 20-50 string anyar sing ditambahake saben sprint), biaya AI praktis nol.
Praktik Paling Apik
Mulai nganggo --dry-run. Sadurunge terjemahan nyata pisanan, pratinjau apa sing bakal kelakon. Iki mbangun kepercayaan lan nemokake masalah konfigurasi luwih awal.
Commit file .po sadurunge nerjemahake. Yen ana masalah, git checkout langsung mbalekake menyang kahanan resik.
Tulis TRANSLATING.md saka dina pisanan. Sanajan file cekak kanthi deskripsi proyek lan sawetara aturan terminologi bisa ningkatake kualitas terjemahan kanthi signifikan.
Tambahake check_translations menyang CI. Langkah siji iki nyegah mode kegagalan i18n sing paling umum: string sing ditandhani kanggo terjemahan nanging ora tau diterjemahake.
Gunakake gpt-4o-mini utawa DeepL kanggo efisiensi biaya. Simpen model premium kaya GPT-4o utawa Claude kanggo proyek sing butuh presisi, kaya salinan pemasaran, teks hukum, utawa terminologi khusus domain.
Tinjau string kritis. Terjemahan AI cukup apik kanggo teks UI biasa, nanging kanggo sing mengikat sacara hukum, kritis kanggo keamanan, utawa ngadhepi pelanggan ing konteks taruhan dhuwur, minta penutur asli ninjau.
Saka Jam menyang Detik
Framework i18n Django unggul ing ngekstrak lan ngompilasi terjemahan. Kesenjangane mesthi ana ing langkah terjemahan dhewe, kerja sing mboseni lan rawan kesalahan kanggo ngisi atusan nilai msgstr ing pirang-pirang basa.
TranslateBot nutup kesenjangan kasebut. Instal, arahake menyang penyedia AI, lan jalanake siji perintah. String anyar diterjemahake. String sing wis ana ora diowahi. Placeholder tetep utuh. CI nangkep apa wae sing lolos.
File .po sampeyan ora dadi beban maneh lan dadi bagian biasa saka build.
pip install translatebot-django
Mulai ing translatebot.dev.