Rudi kwenye blogu

Django i18n: Mwongozo Kamili wa Kuotomatisha Tafsiri ya Faili za .po

2026-01-28 Dakika 9 za kusoma
Django i18n: Mwongozo Kamili wa Kuotomatisha Tafsiri ya Faili za .po

Ikiwa umewahi kutoa programu ya Django katika lugha zaidi ya moja, unajua utaratibu huu. Unafunga maneno yako katika gettext(), unatekeleza makemessages, unafungua faili ya .po yenye maingizo mamia, na unaanza kutafsiri mstari kwa mstari. Kwa lugha mbili na maneno hamsini, hilo linaweza kuvumilika. Kwa lugha sita na maneno mia tano, ni siku nzima ya kazi ambayo hutaipata tena kamwe.

Mwongozo huu unashughulikia mfumo wa kimataifa (i18n) wa Django kutoka mwanzo hadi mwisho, unaeleza mahali inaposhindwa, na unaonyesha jinsi ya kuautomatisha sehemu ngumu kwa kutumia tafsiri inayoendeshwa na AI.

Mtiririko wa Kazi wa Kawaida wa Django i18n

Mfumo wa i18n uliojengwa ndani ya Django umebuniwa vizuri. Kitanzi cha msingi kinaonekana hivi:

Hatua ya 1: Weka alama kwenye maneno ya kutafsiriwa katika msimbo wako wa Python na templeti:

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>

Hatua ya 2: Toa maneno kwenye faili za .po:

python manage.py makemessages -l de -l fr -l nl

Hii inachunguza msimbo wako wote na kuzalisha faili moja ya .po kwa kila lugha, inayojumuisha kila neno linaloweza kutafsiriwa:

#: myapp/views.py:4
msgid "Welcome back, %(name)s!"
msgstr ""

#: templates/dashboard.html:2
msgid "Account Settings"
msgstr ""

Hatua ya 3: Tafsiri kila msgstr tupu kwa mkono.

Hatua ya 4: Kusanya faili za .po zilizokamilika kuwa faili za binary .mo:

python manage.py compilemessages

Hatua za 1, 2, na 4 ni za haraka. Hatua ya 3 ndiyo mahali ambapo mchakato unavunjika.

Kwa Nini Tafsiri ya Mkono Haipanuki

Programu ya kawaida ya Django ina maneno kati ya 200 na 2,000 yanayoweza kutafsiriwa. Zidisha hilo kwa idadi ya lugha zinazolengwa, na utakuwa unakabiliwa na ahadi kubwa ya muda.

Hii si malalamiko ya kinadharia. Katika mjadala maarufu wa Django Forum, msanidi programu aliripoti kutumia zaidi ya masaa 8 kwa kila faili ya .po akifanya tafsiri za mkono. Mchangiaji mkuu wa Django alielezea kutumia zaidi ya masaa 10 kuingiza tafsiri zilizotumwa na jamii katika toleo moja, hasa kwa mapitio, marekebisho ya muundo, na kurekebisha vishikilia nafasi vilivyovunjika.

Matatizo yanazidi baada ya muda:

Sababu ya msingi ni kwamba tafsiri inachukuliwa kama tukio la mara moja badala ya mchakato wa hatua kwa hatua unaoweza kurudiwa.

Kuautomatisha Tafsiri na AI

Wazo ni rahisi: badala ya binadamu kufungua kila faili ya .po na kujaza thamani za msgstr, zana inasoma faili, inatuma maneno ambayo hayajatafsiriwa kwa modeli ya AI au API ya tafsiri, inaandika matokeo tena, na inahifadhi kila kitu kingine (maoni, muundo wa faili, vishikilia nafasi, aina za wingi).

TranslateBot Django ni kifurushi cha chanzo huria kinachofanya hasa hivi. Kinaunganishwa na mfumo wa amri za usimamizi wa Django, kwa hivyo kinafaa katika mtiririko wa kazi ulio nao tayari.

Usanidi Hatua kwa Hatua

1. Sakinisha Kifurushi

pip install translatebot-django

Au, ikiwa unatumia uv (inapendekezwa):

uv add --dev translatebot-django

Kusakinisha kama utegemezi wa maendeleo ni kwa makusudi. Unahitaji TranslateBot tu wakati wa kuzalisha tafsiri, si wakati wa utekelezaji katika uzalishaji.

2. Ongeza kwa INSTALLED_APPS

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

3. Sanidi Mtoa Huduma wako wa AI

# settings.py
import os

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

TranslateBot inatumia LiteLLM chini ya uso, ambayo inamaanisha unaweza kubadilisha hadi modeli yoyote kati ya 100+ kwa kubadilisha neno moja:

Mtoa Huduma Thamani ya 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 Tumia TRANSLATEBOT_PROVIDER = "deepl" badala yake

Kwa DeepL, sakinisha ziada: pip install translatebot-django[deepl]. Ngazi ya bure ya DeepL inakupa herufi 500,000 kwa mwezi bila malipo, ambayo inatosha kwa miradi mingi ya ukubwa mdogo hadi wa kati.

4. Eleza Lugha Zako

# settings.py
LANGUAGES = [
    ("en", "English"),
    ("de", "German"),
    ("fr", "French"),
    ("nl", "Dutch"),
    ("ja", "Japanese"),
]

5. Tekeleza Tafsiri

python manage.py translate

Ndio hivyo tu. TranslateBot inachunguza mradi wako kwa faili za .po, inatambua maingizo ambayo hayajatafsiriwa, inayatuma kwa modeli ya AI iliyosanidiwa katika makundi yaliyoboreshwa, na inaandika matokeo tena. Tafsiri zilizopo hazibadilishwi.

Kutafsiri lugha moja:

python manage.py translate --target-lang nl

Matokeo yanaonekana hivi:

Translating to Dutch (nl)...
Found 42 strings to translate
Translating batch 1/2...
Translating batch 2/2...
Successfully translated 42 strings

6. Kusanya Kama Kawaida

python manage.py compilemessages

Mtiririko wako kamili wa kazi sasa ni:

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

Amri tatu. Kila lugha. Kila sprinti.

Hatua kwa Hatua kwa Muundo

Kipengele muhimu zaidi kwa mtiririko wa kazi unaoweza kurudiwa ni tafsiri ya hatua kwa hatua. TranslateBot inatafsiri tu maingizo ambapo msgstr ni tupu. Ikiwa una maneno 500 na 15 ni mapya sprinti hii, ni hizo 15 tu zinazotumwa kwa API.

Hii ni muhimu kwa sababu za kivitendo:

  1. Gharama. Unalipa tu kwa maneno mapya, si faili nzima.
  2. Kasi. Kutafsiri maneno 15 kunachukua sekunde, si dakika.
  3. Uthabiti. Tafsiri ambazo umeshapitia na kuidhinisha hazibadilishwi kamwe (isipokuwa upitishe --overwrite wazi wazi).

Usalama wa Vishikilia Nafasi

Django inatumia muundo kadhaa wa vishikilia nafasi: %(name)s, %s, %d, {0}, {name}, na tagi za HTML za ndani kama <strong> au <a href="...">. Ikiwa yoyote kati ya haya itaharibika katika tafsiri, utapata makosa ya wakati wa utekelezaji au muundo uliovunjika.

TranslateBot inaelekeza modeli ya AI kuhifadhi muundo wote wa vishikilia nafasi na kuthibitisha matokeo. Neno kama:

Welcome to %(site_name)s! You have <strong>%(count)d</strong> new messages.

Inatafsiriwa kwa Kiholanzi kama:

Welkom bij %(site_name)s! Je hebt <strong>%(count)d</strong> nieuwe berichten.

Kila kishikilia nafasi kinabaki salama.

Kudhibiti Ubora na TRANSLATING.md

Modeli za AI zinatafsiri vizuri zaidi zinapoelewa muktadha. TranslateBot inatafuta faili ya TRANSLATING.md katika mzizi wa mradi wako na kujumuisha maudhui yake katika kila ombi la tafsiri.

# 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"

Faili hii inadhibitiwa na toleo pamoja na msimbo wako, kwa hivyo timu yako yote inashiriki muktadha sawa wa tafsiri. Unaweza pia kuweka faili za TRANSLATING.md kwa kila programu kwa programu zenye istilahi maalum. Moduli ya rekodi za matibabu na moduli ya ankara zinaweza kuwa na kamusi yake yenyewe.

Hakiki Kabla ya Kuwasilisha

Bendera ya --dry-run inaonyesha hasa nini kingetafsiriwa bila kufanya simu yoyote ya API au kurekebisha faili:

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

Hii ni muhimu kabla ya utekelezaji mkubwa wa tafsiri au mwanachama mpya wa timu anapotaka kuelewa amri inafanya nini kabla ya kujitolea kwa gharama za API.

Ushirikiano wa CI/CD

Tafsiri kupitwa na wakati haiwezi kuepukika bila utekelezaji. TranslateBot inajumuisha amri ya usimamizi ya check_translations iliyoundwa kwa mifumo ya 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

Bendera ya --makemessages inatekeleza makemessages -a --no-obsolete kwanza, ikihakikisha faili za .po zinaonyesha msimbo wa chanzo wa sasa kabla ya kuangalia. Ikiwa maingizo yoyote hayajatafsiriwa au ni ya fuzzy, amri inatoka kwa msimbo 1 na kushindwa kwa ujenzi:

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

Mtiririko wa kazi wa kawaida wa msanidi programu unakuwa:

  1. Ongeza maneno mapya yanayoweza kutafsiriwa katika tawi la kipengele.
  2. CI inashindwa kwa sababu maneno hayo hayajatafsiriwa.
  3. Tekeleza python manage.py translate ndani ya mashine.
  4. Wasilisha faili za .po zilizosasishwa.
  5. CI inapita.

Tafsiri hazipotei kimya kimya kamwe.

Kutafsiri Maudhui ya Hifadhidata

Ikiwa programu yako inahifadhi maudhui yanayoweza kutafsiriwa katika hifadhidata (majina ya bidhaa, vichwa vya machapisho ya blogu, lebo za kategoria), TranslateBot pia inaunganishwa na 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

Mantiki sawa ya hatua kwa hatua inatumika: ni sehemu tu ambapo thamani ya lugha inayolengwa ni tupu ndizo zinazotafsiriwa.

Ulinganisho wa Gharama

Moja ya maswali ya kawaida zaidi ni kama tafsiri ya AI ina ufanisi wa gharama ikilinganishwa na mbadala. Hapa kuna ulinganisho wa jumla kwa mradi wenye maneno 500 yanayoweza kutafsiriwa katika lugha 5:

Mbinu Gharama Inayokadiriwa Uwekezaji wa Muda
Mkono (muda wa msanidi) $0 kutoka mfukoni, masaa 20-40+ Juu sana
Huduma ya tafsiri ya kitaalamu $500-2,000+ Chini (lakini polepole)
Jukwaa la ujanibishaji la SaaS $50-200/mwezi Wastani
TranslateBot + GPT-4o-mini ~$0.05 (mara moja) Dakika
TranslateBot + DeepL Free $0 (hadi herufi 500k/mwezi) Dakika
TranslateBot + Claude/GPT-4o ~$0.30 (mara moja) Dakika

Nambari zinabadilika kulingana na idadi ya maneno na lugha zinazolengwa, lakini tofauti ya kiwango cha ukubwa ni thabiti. Kwa matengenezo yanayoendelea (kutafsiri maneno 20-50 mapya yanayoongezwa kila sprinti), gharama ya AI ni sifuri kimsingi.

Mazoea Bora

Anza na --dry-run. Kabla ya utekelezaji wako wa kwanza wa tafsiri halisi, hakiki kitakachofanyika. Hii inajengea imani na kunasa matatizo ya usanidi mapema.

Wasilisha faili za .po kabla ya kutafsiri. Ikiwa kitu kitaharibika, git checkout inakurudisha katika hali safi mara moja.

Andika TRANSLATING.md kutoka siku ya kwanza. Hata faili fupi yenye maelezo ya mradi wako na sheria chache za istilahi inaboresha ubora wa tafsiri kwa kiwango kinachopimika.

Ongeza check_translations kwa CI. Hatua hii moja inazuia hali ya kawaida zaidi ya kushindwa kwa i18n: maneno yaliyowekwa alama ya kutafsiriwa lakini hayakutafsiriwa kamwe.

Tumia gpt-4o-mini au DeepL kwa ufanisi wa gharama. Hifadhi modeli za premium kama GPT-4o au Claude kwa miradi ambapo usahihi ni muhimu, kama nakala za masoko, maandishi ya kisheria, au istilahi maalum za uwanja.

Pitia maneno muhimu. Tafsiri za AI ni nzuri vya kutosha kwa maandishi mengi ya UI, lakini mzungumzaji asili apitie chochote kinachofunga kisheria, muhimu kwa usalama, au kinachokabiliana na mteja katika muktadha wa hatari kubwa.

Kutoka Masaa hadi Sekunde

Mfumo wa i18n wa Django ni bora katika kutoa na kukusanya tafsiri. Pengo limekuwa daima katika hatua ya tafsiri yenyewe, kazi ya kuchosha na yenye makosa ya kujaza mamia ya thamani za msgstr katika lugha nyingi.

TranslateBot inafunga pengo hilo. Isakinishe, ielekeze kwa mtoa huduma wa AI, na utekeleze amri moja. Maneno mapya yanatafsiriwa. Maneno yaliyopo yanabaki bila kubadilishwa. Vishikilia nafasi vinabaki salama. CI inashika chochote kinachopita.

Faili zako za .po zinaacha kuwa mzigo na kuwa sehemu nyingine tu ya ujenzi.

pip install translatebot-django

Anza kwenye translatebot.dev.

Acha kuhariri faili za .po kwa mkono

TranslateBot inafanya tafsiri za Django kiotomatiki kwa AI. Amri moja, lugha zako zote, senti chache kwa kila tafsiri.