Bali menyang blog

Django i18n: Pandhuan Lengkap kanggo Ngotomatisasi Terjemahan File .po

2026-01-28 9 menit maca
Django i18n: Pandhuan Lengkap kanggo Ngotomatisasi Terjemahan File .po

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:

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
Google 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:

  1. Biaya. Sampeyan mung mbayar kanggo string anyar, ora kabeh file.
  2. Kecepatan. Nerjemahake 15 string butuh detik, ora menit.
  3. 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:

  1. Nambah string anyar sing bisa diterjemahake ing feature branch.
  2. CI gagal amarga string kasebut durung diterjemahake.
  3. Mbukak python manage.py translate ing lokal.
  4. Commit file .po sing wis dianyari.
  5. 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.

Mandheg nyunting file .po kanthi manual

TranslateBot ngotomatisasi terjemahan Django nganggo AI. Siji printah, kabeh basa sampeyan, murah banget saben terjemahan.