तुम्ही जर कधी एकापेक्षा जास्त भाषांमध्ये Django अॅप शिप केली असेल, तर तुम्हाला ही प्रक्रिया माहीत आहे. तुम्ही तुमच्या स्ट्रिंग्स gettext() मध्ये गुंडाळता, makemessages चालवता, शेकडो एंट्रीज असलेली .po फाइल उघडता आणि ओळ दर ओळ अनुवाद सुरू करता. दोन भाषा आणि पन्नास स्ट्रिंग्ससाठी हे सहन करता येण्यासारखे आहे. सहा भाषा आणि पाचशे स्ट्रिंग्ससाठी, हा एक संपूर्ण कामाचा दिवस आहे जो तुम्हाला कधीच परत मिळणार नाही.
हे मार्गदर्शक Django च्या आंतरराष्ट्रीयीकरण (i18n) पाइपलाइनला सुरुवातीपासून शेवटपर्यंत कव्हर करते, कुठे ते अपयशी ठरते हे स्पष्ट करते आणि AI-संचालित अनुवादाने वेदनादायक भाग कसा स्वयंचलित करायचा हे दाखवते.
मानक Django i18n वर्कफ्लो
Django चे बिल्ट-इन i18n सिस्टम चांगले डिझाइन केलेले आहे. कोर लूप असे दिसते:
पायरी 1: तुमच्या Python कोड आणि टेम्पलेट्समध्ये अनुवादासाठी स्ट्रिंग्स चिन्हांकित करा:
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>
पायरी 2: स्ट्रिंग्स .po फाइल्समध्ये काढा:
python manage.py makemessages -l de -l fr -l nl
हे तुमचा संपूर्ण कोडबेस स्कॅन करते आणि प्रति भाषा एक .po फाइल तयार करते, ज्यात प्रत्येक अनुवाद करण्यायोग्य स्ट्रिंग असते:
#: myapp/views.py:4
msgid "Welcome back, %(name)s!"
msgstr ""
#: templates/dashboard.html:2
msgid "Account Settings"
msgstr ""
पायरी 3: प्रत्येक रिकाम्या msgstr चा हाताने अनुवाद करा.
पायरी 4: पूर्ण झालेल्या .po फाइल्स बायनरी .mo फाइल्समध्ये कंपाइल करा:
python manage.py compilemessages
पायऱ्या 1, 2 आणि 4 जलद आहेत. पायरी 3 ही अशी जागा आहे जिथे प्रक्रिया कोसळते.
मॅन्युअल अनुवाद का स्केल होत नाही
एका सामान्य Django अॅप्लिकेशनमध्ये 200 ते 2,000 अनुवाद करण्यायोग्य स्ट्रिंग्स असतात. ते लक्ष्य भाषांच्या संख्येने गुणा करा, आणि तुम्ही एका गंभीर वेळेच्या बांधिलकीकडे पाहत आहात.
ही एक सैद्धांतिक तक्रार नाही. एका प्रसिद्ध Django Forum थ्रेडमध्ये, एका डेव्हलपरने प्रति .po फाइल मॅन्युअल अनुवादासाठी 8+ तास खर्च केल्याचे कळवले. एका Django कोर कॉन्ट्रिब्युटरने एका एकल रिलीझमध्ये समुदायाने सबमिट केलेले अनुवाद समाविष्ट करण्यासाठी 10 तासांपेक्षा जास्त खर्च केल्याचे वर्णन केले, मुख्यतः पुनरावलोकन, फॉर्मेटिंग सुधारणा आणि तुटलेल्या प्लेसहोल्डर्स दुरुस्त करण्यात.
समस्या कालांतराने वाढतात:
- प्लेसहोल्डर्स तुटतात.
Welcome, %(name)s!सारखी स्ट्रिंग Google Translate मध्ये कॉपी करा, आणि तुम्हाला अनेकदाWillkommen, %(Name)s!किंवाBienvenue, %(nom)s!परत मिळेल. ही सूक्ष्म भ्रष्टता रनटाइम क्रॅश कारणीभूत होते. - सुसंगतता विचलित होते. शब्दकोशाशिवाय, "dashboard" एका फाइलमध्ये "Instrumententafel" आणि दुसऱ्यामध्ये "Dashboard" म्हणून अनुवादित होते. तीन महिन्यांनंतर, कोणालाही आठवत नाही कोणते जाणूनबुजून होते.
- स्प्रिंट स्ट्रिंग्स जोडतात. प्रत्येक फीचर ब्रांच नवीन अनुवाद करण्यायोग्य स्ट्रिंग्स जोडते. गेल्या तिमाहीत तुम्ही पूर्ण अनुवादासाठी पैसे दिले असले तरी, आता तुमच्या
.poफाइल्समध्ये 40 अनुवादित नसलेल्या एंट्रीज विखुरलेल्या आहेत. - AI सहाय्यक एकदाच मदत करतात. तुम्ही
.poफाइल ChatGPT किंवा Claude मध्ये पेस्ट करून चांगले परिणाम मिळवू शकता. पण पुढच्या स्प्रिंटमध्ये, 15 नवीन स्ट्रिंग्स आल्यावर, तुम्ही सुरुवातीपासून प्रॉम्प्ट करत आहात, संपूर्ण फाइल पुन्हा अनुवादित करत आहात आणि आधीच असलेल्याशी सुसंगत राहण्याची आशा करत आहात.
मूळ कारण हे आहे की अनुवादाला एक वाढीव, पुनरावृत्ती करण्यायोग्य प्रक्रिया म्हणून नाही तर एक-वेळच्या घटनेसारखे मानले जाते.
AI सह अनुवाद स्वयंचलित करणे
कल्पना सरळ आहे: माणसाने प्रत्येक .po फाइल उघडून msgstr मूल्ये भरण्याऐवजी, एक टूल फाइल वाचतो, अनुवादित नसलेल्या स्ट्रिंग्स AI मॉडेल किंवा अनुवाद API ला पाठवतो, निकाल परत लिहितो, आणि बाकी सर्व काही (टिप्पण्या, फाइल संरचना, प्लेसहोल्डर्स, अनेकवचन रूपे) जतन करतो.
TranslateBot Django हे एक ओपन-सोर्स पॅकेज आहे जे नेमके हेच करते. ते Django च्या मॅनेजमेंट कमांड सिस्टममध्ये प्लग होते, त्यामुळे ते तुमच्या विद्यमान वर्कफ्लोमध्ये बसते.
चरण-दर-चरण सेटअप
1. पॅकेज इन्स्टॉल करा
pip install translatebot-django
किंवा, तुम्ही uv (शिफारस केलेले) वापरत असल्यास:
uv add --dev translatebot-django
डेव्ह डिपेंडन्सी म्हणून इन्स्टॉल करणे जाणूनबुजून आहे. तुम्हाला TranslateBot फक्त अनुवाद तयार करताना आवश्यक आहे, प्रोडक्शनमध्ये रनटाइमला नाही.
2. INSTALLED_APPS मध्ये जोडा
# settings.py
INSTALLED_APPS = [
# ...
"translatebot_django",
]
3. तुमचा AI प्रदाता कॉन्फिगर करा
# settings.py
import os
TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"
TranslateBot अंतर्गत LiteLLM वापरते, याचा अर्थ तुम्ही एक स्ट्रिंग बदलून 100+ मॉडेल्सपैकी कोणत्याहीवर स्विच करू शकता:
| प्रदाता | 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 | त्याऐवजी TRANSLATEBOT_PROVIDER = "deepl" वापरा |
DeepL साठी, एक्स्ट्रा इन्स्टॉल करा: pip install translatebot-django[deepl]. DeepL ची मोफत श्रेणी तुम्हाला दरमहा 500,000 अक्षरे विनामूल्य देते, जे बहुतेक लहान ते मध्यम प्रकल्पांसाठी पुरेसे आहे.
4. तुमच्या भाषा परिभाषित करा
# settings.py
LANGUAGES = [
("en", "English"),
("de", "German"),
("fr", "French"),
("nl", "Dutch"),
("ja", "Japanese"),
]
5. अनुवाद चालवा
python manage.py translate
बस एवढेच. TranslateBot तुमचा प्रकल्प .po फाइल्ससाठी स्कॅन करतो, अनुवादित नसलेल्या एंट्रीज ओळखतो, त्या ऑप्टिमाइज्ड बॅचमध्ये कॉन्फिगर केलेल्या AI मॉडेलला पाठवतो आणि निकाल परत लिहितो. विद्यमान अनुवाद अस्पर्शित राहतात.
एकच भाषा अनुवादित करण्यासाठी:
python manage.py translate --target-lang nl
आउटपुट असे दिसते:
Translating to Dutch (nl)...
Found 42 strings to translate
Translating batch 1/2...
Translating batch 2/2...
Successfully translated 42 strings
6. नेहमीप्रमाणे कंपाइल करा
python manage.py compilemessages
तुमचा पूर्ण वर्कफ्लो आता हा आहे:
python manage.py makemessages -l de -l fr -l nl -l ja
python manage.py translate
python manage.py compilemessages
तीन कमांड्स. प्रत्येक भाषा. प्रत्येक स्प्रिंट.
डिझाइनने वाढीव
पुनरावृत्ती करण्यायोग्य वर्कफ्लोसाठी सर्वात महत्त्वाचे वैशिष्ट्य म्हणजे वाढीव अनुवाद. TranslateBot फक्त त्या एंट्रीजचा अनुवाद करतो जिथे msgstr रिकामा आहे. तुमच्याकडे 500 स्ट्रिंग्स असल्यास आणि या स्प्रिंटमध्ये 15 नवीन असल्यास, फक्त त्या 15 API ला पाठवल्या जातात.
हे व्यावहारिक कारणांसाठी महत्त्वाचे आहे:
- खर्च. तुम्ही फक्त नवीन स्ट्रिंग्ससाठी पैसे देता, संपूर्ण फाइलसाठी नाही.
- वेग. 15 स्ट्रिंग्सचा अनुवाद सेकंदांत होतो, मिनिटांत नाही.
- स्थिरता. तुम्ही आधीच पुनरावलोकन आणि मंजूर केलेले अनुवाद कधीही ओव्हरराइट होत नाहीत (तुम्ही स्पष्टपणे
--overwriteपास केल्याशिवाय).
प्लेसहोल्डर सुरक्षितता
Django अनेक प्लेसहोल्डर फॉरमॅट्स वापरते: %(name)s, %s, %d, {0}, {name}, आणि इनलाइन HTML टॅग्स जसे <strong> किंवा <a href="...">. यापैकी कोणतेही अनुवादात बिघडले तर तुम्हाला रनटाइम एरर किंवा तुटलेला मार्कअप मिळतो.
TranslateBot AI मॉडेलला सर्व प्लेसहोल्डर फॉरमॅट्स जतन करण्याची सूचना देतो आणि आउटपुट प्रमाणित करतो. अशी स्ट्रिंग:
Welcome to %(site_name)s! You have <strong>%(count)d</strong> new messages.
डच भाषेत अशी अनुवादित होते:
Welkom bij %(site_name)s! Je hebt <strong>%(count)d</strong> nieuwe berichten.
प्रत्येक प्लेसहोल्डर अखंड राहतो.
TRANSLATING.md सह गुणवत्ता नियंत्रण
AI मॉडेल्स संदर्भ समजतात तेव्हा चांगले अनुवाद करतात. TranslateBot तुमच्या प्रकल्पाच्या मूळ मध्ये TRANSLATING.md फाइल शोधतो आणि प्रत्येक अनुवाद विनंतीमध्ये तिची सामग्री समाविष्ट करतो.
# 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"
ही फाइल तुमच्या कोडसह व्हर्जन-कंट्रोल्ड आहे, त्यामुळे तुमची संपूर्ण टीम समान अनुवाद संदर्भ शेअर करते. तुम्ही विशेष शब्दावली असलेल्या अॅप्ससाठी प्रति-अॅप TRANSLATING.md फाइल्स देखील ठेवू शकता.
कमिट करण्यापूर्वी पूर्वावलोकन
--dry-run ध्वज कोणतेही API कॉल न करता किंवा फाइल्स न बदलता काय अनुवादित होईल ते नेमके दाखवतो:
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
मोठ्या अनुवाद रनपूर्वी किंवा नवीन टीम सदस्याला API खर्चाची बांधिलकी करण्यापूर्वी कमांड काय करते हे समजून घ्यायचे असताना हे उपयुक्त आहे.
CI/CD एकत्रीकरण
अंमलबजावणीशिवाय अनुवाद जुने होणे अटळ आहे. TranslateBot मध्ये CI पाइपलाइन्ससाठी डिझाइन केलेला check_translations मॅनेजमेंट कमांड समाविष्ट आहे:
# .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
--makemessages ध्वज आधी makemessages -a --no-obsolete चालवतो, तपासण्यापूर्वी .po फाइल्स सध्याचा सोर्स कोड प्रतिबिंबित करतात याची खात्री करतो. कोणतीही एंट्री अनुवादित नसल्यास किंवा अस्पष्ट असल्यास, कमांड कोड 1 ने बाहेर पडतो आणि बिल्ड अपयशी करतो:
locale/de/LC_MESSAGES/django.po: 2 untranslated, 0 fuzzy
locale/nl/LC_MESSAGES/django.po: 0 untranslated, 1 fuzzy
CommandError: Translation check failed
सामान्य डेव्हलपर वर्कफ्लो असा होतो:
- फीचर ब्रांचमध्ये नवीन अनुवाद करण्यायोग्य स्ट्रिंग्स जोडा.
- त्या स्ट्रिंग्स अनुवादित नसल्यामुळे CI अपयशी होतो.
- स्थानिकरित्या
python manage.py translateचालवा. - अद्ययावत
.poफाइल्स कमिट करा. - CI पास होतो.
अनुवाद कधीही शांतपणे सिंक बाहेर जात नाहीत.
डेटाबेस सामग्रीचा अनुवाद
तुमचा अॅप्लिकेशन डेटाबेसमध्ये अनुवाद करण्यायोग्य सामग्री साठवत असल्यास (उत्पादनांची नावे, ब्लॉग पोस्ट शीर्षके, श्रेणी लेबल्स), TranslateBot 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
तीच वाढीव तर्कशास्त्र लागू होते: फक्त ती फील्ड अनुवादित होतात जिथे लक्ष्य भाषेचे मूल्य रिकामे आहे.
खर्च तुलना
सर्वात सामान्य प्रश्नांपैकी एक म्हणजे AI अनुवाद पर्यायांच्या तुलनेत खर्च-प्रभावी आहे का. 5 भाषांमध्ये 500 अनुवाद करण्यायोग्य स्ट्रिंग्स असलेल्या प्रकल्पासाठी अंदाजे तुलना:
| दृष्टिकोन | अंदाजित खर्च | वेळ गुंतवणूक |
|---|---|---|
| मॅन्युअल (डेव्हलपर वेळ) | $0 खिशातून, 20-40+ तास | अत्यंत जास्त |
| व्यावसायिक अनुवाद सेवा | $500-2,000+ | कमी (पण हळू टर्नअराउंड) |
| SaaS लोकलायझेशन प्लॅटफॉर्म | $50-200/महिना | मध्यम |
| TranslateBot + GPT-4o-mini | ~$0.05 (एकदाच) | मिनिटे |
| TranslateBot + DeepL Free | $0 (दरमहा 500k अक्षरांपर्यंत) | मिनिटे |
| TranslateBot + Claude/GPT-4o | ~$0.30 (एकदाच) | मिनिटे |
स्ट्रिंग संख्या आणि लक्ष्य भाषांवर अवलंबून संख्या बदलतात, पण परिमाणाचा फरक सुसंगत आहे. चालू देखभालीसाठी (प्रत्येक स्प्रिंटमध्ये जोडलेल्या 20-50 नवीन स्ट्रिंग्सचा अनुवाद), AI खर्च मूलत: शून्य आहे.
सर्वोत्तम पद्धती
--dry-run ने सुरुवात करा. तुमच्या पहिल्या खऱ्या अनुवाद रनपूर्वी, काय होईल ते पूर्वावलोकन करा. हे आत्मविश्वास वाढवते आणि कॉन्फिगरेशन समस्या लवकर पकडते.
अनुवाद करण्यापूर्वी .po फाइल्स कमिट करा. काही चुकले तर, git checkout तुम्हाला तात्काळ स्वच्छ स्थितीत परत आणते.
पहिल्या दिवसापासून TRANSLATING.md लिहा. तुमच्या प्रकल्पाचे वर्णन आणि काही शब्दावली नियमांसह एक संक्षिप्त फाइल देखील अनुवाद गुणवत्ता मोजता येण्याजोग्या प्रमाणात सुधारते.
CI मध्ये check_translations जोडा. हा एकच चरण सर्वात सामान्य i18n अपयश मोड प्रतिबंधित करतो: अनुवादासाठी चिन्हांकित पण प्रत्यक्षात कधीही अनुवादित न झालेल्या स्ट्रिंग्स.
खर्च कार्यक्षमतेसाठी gpt-4o-mini किंवा DeepL वापरा. अचूकता महत्त्वाची असलेल्या प्रकल्पांसाठी GPT-4o किंवा Claude सारख्या प्रीमियम मॉडेल्स राखून ठेवा, जसे मार्केटिंग कॉपी, कायदेशीर मजकूर किंवा डोमेन-विशिष्ट शब्दावली.
गंभीर स्ट्रिंग्सचे पुनरावलोकन करा. बहुतेक UI मजकुरासाठी AI अनुवाद पुरेसे चांगले आहेत, पण कायदेशीररित्या बंधनकारक, सुरक्षा-गंभीर किंवा उच्च-जोखीम संदर्भात ग्राहक-सामोरा असलेल्या कोणत्याही गोष्टीचे मूळ भाषिकाने पुनरावलोकन करा.
तासांपासून सेकंदांपर्यंत
Django चे i18n फ्रेमवर्क अनुवाद काढण्यात आणि कंपाइल करण्यात उत्कृष्ट आहे. अंतर नेहमीच स्वतः अनुवाद पायरीत होते — अनेक भाषांमध्ये शेकडो msgstr मूल्ये भरण्याचे कंटाळवाणे, चूक होण्याची शक्यता असलेले काम.
TranslateBot हे अंतर भरतो. ते इन्स्टॉल करा, AI प्रदात्याकडे निर्देशित करा आणि एक कमांड चालवा. नवीन स्ट्रिंग्सचा अनुवाद होतो. विद्यमान स्ट्रिंग्स अस्पर्शित राहतात. प्लेसहोल्डर्स अखंड राहतात. CI काहीही चुकले तर पकडतो.
तुमच्या .po फाइल्स एक ओझे राहणे थांबतात आणि बिल्डचा आणखी एक भाग बनतात.
pip install translatebot-django
translatebot.dev वर सुरुवात करा.