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:
- Vishikilia nafasi vinavunjika. Nakili neno kama
Welcome, %(name)s!kwenye Google Translate, na mara nyingi utapataWillkommen, %(Name)s!auBienvenue, %(nom)s!. Uharibifu huu wa hila husababisha kushindwa wakati wa utekelezaji. - Uthabiti unapotea. Bila kamusi ya maneno, "dashboard" inatafsiriwa kama "Instrumententafel" katika faili moja na "Dashboard" katika nyingine. Miezi mitatu baadaye, hakuna anayekumbuka ipi ilikuwa ya makusudi.
- Sprinti zinaongeza maneno. Kila tawi la kipengele linaongeza maneno mapya yanayoweza kutafsiriwa. Hata kama ulilipia tafsiri kamili robo ya mwisho, sasa una maingizo 40 ambayo hayajatafsiriwa yaliyotawanyika kwenye faili zako za
.po. - Wasaidizi wa AI wanasaidia mara moja. Unaweza kubandika faili ya
.pokwenye ChatGPT au Claude na kupata matokeo mazuri. Lakini sprinti inayofuata, maneno 15 mapya yanapotokea, unaandika maelekezo kutoka mwanzo, unatafsiri tena faili nzima, na unatumai itabaki thabiti na yaliyokuwepo tayari.
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 |
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:
- Gharama. Unalipa tu kwa maneno mapya, si faili nzima.
- Kasi. Kutafsiri maneno 15 kunachukua sekunde, si dakika.
- Uthabiti. Tafsiri ambazo umeshapitia na kuidhinisha hazibadilishwi kamwe (isipokuwa upitishe
--overwritewazi 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:
- Ongeza maneno mapya yanayoweza kutafsiriwa katika tawi la kipengele.
- CI inashindwa kwa sababu maneno hayo hayajatafsiriwa.
- Tekeleza
python manage.py translatendani ya mashine. - Wasilisha faili za
.pozilizosasishwa. - 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.