आपने एक Django ऐप बनाया। यह काम कर रहा है, उपयोगकर्ता साइन अप कर रहे हैं, और अब आप उन लोगों तक पहुँचना चाहते हैं जो अंग्रेज़ी नहीं बोलते। समस्या जैसे ही आप इसे देखते हैं, स्पष्ट हो जाती है: Django का अंतर्राष्ट्रीयकरण फ्रेमवर्क अनुवाद योग्य स्ट्रिंग्स को निकालने में उत्कृष्ट है, लेकिन अनुवाद भरने के लिए यह कुछ नहीं करता। वह हिस्सा आपको खुद करना होता है।
यदि आप एक अकेले डेवलपर हैं या दो लोगों की टीम हैं, तो makemessages और पूरी तरह अनुवादित ऐप के बीच का अंतर बहुत बड़ा लग सकता है। मैं यथार्थवादी विकल्पों के बारे में बताऊँगा, समझाऊँगा कि उनमें से अधिकांश छोटी टीमों के लिए क्यों काम नहीं करते, और एक ऐसा वर्कफ़्लो दिखाऊँगा जो अनुवाद को कई हफ़्तों के काम से बदलकर दो मिनट का कमांड बना देता है।
पारंपरिक विकल्प (और ये क्यों तकलीफ़देह हैं)
विकल्प 1: Google Translate से कॉपी-पेस्ट
सबसे आम पहला प्रयास। आप अपनी .po फ़ाइल खोलते हैं, हर msgid को Google Translate में कॉपी करते हैं, परिणाम को msgstr में वापस पेस्ट करते हैं, और दोहराते हैं। हर स्ट्रिंग के लिए। हर भाषा में।
एक सामान्य Django ऐप में 200-500 अनुवाद योग्य स्ट्रिंग्स होती हैं। यदि आप पाँच भाषाओं में अनुवाद कर रहे हैं, तो यह 1,000-2,500 कॉपी-पेस्ट चक्र हैं। भले ही हर एक में केवल 30 सेकंड लगें, आप 8-20 घंटे के उबाऊ काम की बात कर रहे हैं। और यह फ़ॉर्मेटिंग त्रुटियों, टूटे हुए प्लेसहोल्डर्स और अनिवार्य रूप से आने वाली असंगत शब्दावली को ठीक करने से पहले की बात है।
और भी बुरा, अगले स्प्रिंट में जब आप नई स्ट्रिंग्स जोड़ते हैं तो यह सब फिर से करना होता है।
विकल्प 2: पेशेवर अनुवादक
पेशेवर अनुवाद की कीमत आमतौर पर $0.10 से $0.25 प्रति शब्द होती है। 500 स्ट्रिंग्स वाला Django ऐप जिसमें औसतन 8 शब्द प्रति स्ट्रिंग हैं, लगभग 4,000 शब्द बनते हैं। $0.15/शब्द पर, यह प्रति भाषा $600 है, या पाँच भाषाओं के लिए $3,000।
VC-फंडेड स्टार्टअप के लिए यह मामूली रकम है। लेकिन $9/माह प्रति उपयोगकर्ता चार्ज करने वाले अकेले डेवलपर के लिए, यह आपकी पूरी तिमाही की आय खा सकता है।
विकल्प 3: Fiverr और फ्रीलांस मार्केटप्लेस
आप Fiverr पर $20-50 प्रति भाषा में अनुवादक पा सकते हैं। कुछ वाकई कुशल होते हैं। कई बस आपके टेक्स्ट को Google Translate में पेस्ट करके आपसे पैसे ले रहे होते हैं। आपको विकल्प 1 जैसी ही गुणवत्ता मिलती है, साथ ही संवाद का एक अतिरिक्त दौर और एक सप्ताह का इंतज़ार।
विकल्प 4: Crowdin, Transifex, या Weblate
ये प्लेटफ़ॉर्म शक्तिशाली हैं, लेकिन ये समर्पित अनुवाद टीमों वाले प्रोजेक्ट्स के लिए बने हैं। सेटअप ओवरहेड (रिपॉज़िटरी सिंक करना, ट्रांसलेशन मेमोरी कॉन्फ़िगर करना, कंट्रीब्यूटर एक्सेस प्रबंधित करना) तब ज़रूरत से ज़्यादा है जब प्रोजेक्ट पर सिर्फ़ आप अकेले हैं। पेड टियर की मासिक सदस्यता $30-150/माह से शुरू होती है, और मुफ़्त टियर में भी आपको एक और थर्ड-पार्टी इंटीग्रेशन बनाए रखना होता है।
विकल्प 5: सब कुछ ChatGPT में पेस्ट करें
गुणवत्ता के मामले में यह आश्चर्यजनक रूप से अच्छा काम करता है। आप अपनी .po फ़ाइल की सामग्री ChatGPT या Claude में पेस्ट करते हैं, अनुवाद माँगते हैं, और उचित परिणाम पाते हैं। समस्या यह है कि यह स्केल नहीं करता। आपको मैन्युअल रूप से अनुवादित न की गई स्ट्रिंग्स निकालनी होती हैं, प्रॉम्प्ट फ़ॉर्मेट करना होता है, रिस्पॉन्स को .po फ़ॉर्मेट में पार्स करना होता है, और कॉन्टेक्स्ट लिमिट पार होने पर बैचिंग संभालनी होती है। यह एक बार काम करता है। दोहराए जाने योग्य वर्कफ़्लो के रूप में यह टूट जाता है।
ऑटोमेशन दृष्टिकोण
क्या हो अगर पूरा अनुवाद चरण एक ही कमांड हो? यही TranslateBot के पीछे का विचार है — एक ओपन-सोर्स Django मैनेजमेंट कमांड जो आपकी .po फ़ाइलें पढ़ता है, अनुवादित न की गई स्ट्रिंग्स को AI प्रोवाइडर को भेजता है, और सही फ़ॉर्मेट में अनुवाद वापस लिखता है।
इसे सेट अप करने का तरीका यह है।
चरण 1: TranslateBot इंस्टॉल करें
uv add --dev translatebot-django
या pip से:
pip install translatebot-django
इसे अपने installed apps में जोड़ें:
# settings.py
INSTALLED_APPS = [
# ...
'translatebot_django',
]
चरण 2: अपना AI प्रोवाइडर कॉन्फ़िगर करें
दो सेटिंग्स जोड़ें:
# settings.py
import os
TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"
TranslateBot OpenAI, Anthropic Claude, Google Gemini, और LiteLLM के ज़रिए 100+ अन्य मॉडल के साथ काम करता है। यह एक समर्पित अनुवाद बैकएंड के रूप में DeepL का भी समर्थन करता है।
चरण 3: TRANSLATING.md बनाएँ (वैकल्पिक लेकिन अनुशंसित)
आपके प्रोजेक्ट रूट में TRANSLATING.md फ़ाइल AI को आपके एप्लिकेशन के बारे में संदर्भ देती है। यही सामान्य मशीन अनुवाद और वास्तव में आपके उत्पाद के अनुकूल अनुवाद के बीच का अंतर है:
# Translation Context
## About This Project
A personal finance tracker for freelancers. Users track invoices,
expenses, and tax obligations.
## Tone
- Friendly and informal
- Use "du" in German, "tu" in French
- Keep financial terms precise
## Terminology
- "invoice" = "Rechnung" (German), "facture" (French)
- "dashboard" = keep as English loanword in all languages
- "freelancer" = keep as English loanword in German
यह फ़ाइल हर अनुवाद अनुरोध के साथ भेजी जाती है, इसलिए AI लगातार सही टोन और शब्दावली का उपयोग करता है।
चरण 4: अनुवाद करें
python manage.py makemessages -l de -l fr -l nl -l es -l ja
python manage.py translate
python manage.py compilemessages
तीन कमांड। बस इतना ही। TranslateBot आपकी सभी .po फ़ाइलों में सभी अनुवादित न की गई स्ट्रिंग्स ढूँढता है, उन्हें बैचों में अनुवाद करता है, और परिणाम वापस लिखता है। डिफ़ॉल्ट रूप से केवल खाली एंट्रीज़ का अनुवाद किया जाता है, इसलिए नई स्ट्रिंग्स जोड़ने के बाद कमांड फिर से चलाने पर केवल नई स्ट्रिंग्स का अनुवाद होता है।
व्यवहार में यह कैसा दिखता है
यहाँ पाँच भाषाओं का समर्थन करने वाले अकेले डेवलपर के लिए एक यथार्थवादी स्प्रिंट वर्कफ़्लो है:
सोमवार: आप एक नई सुविधा बनाते हैं। विकास के दौरान आप gettext() और {% trans %} का उपयोग करके कुछ नई अनुवाद योग्य स्ट्रिंग्स जोड़ते हैं।
from django.utils.translation import gettext_lazy as _
class InvoiceView(View):
def post(self, request):
# New string added during development
messages.success(request, _("Invoice sent successfully."))
कमिट करने से पहले: आप तीन कमांड चलाते हैं:
python manage.py makemessages -a --no-obsolete
python manage.py translate
python manage.py compilemessages
translate कमांड नई अनुवादित न की गई एंट्रीज़ का पता लगाता है और केवल उनका अनुवाद करता है। यदि आपने 5 नई स्ट्रिंग्स जोड़ीं और 5 भाषाओं का समर्थन करते हैं, तो यह एक ही API कॉल में 25 अनुवाद करता है। पूरी प्रक्रिया में एक मिनट से कम समय लगता है।
आप कमिट करते हैं अपना कोड, टेम्प्लेट्स, और अपडेटेड .po/.mo फ़ाइलें एक साथ। अनुवाद आपके सामान्य विकास प्रवाह का हिस्सा हैं, अलग प्रोजेक्ट नहीं।
कमिट करने से पहले पूर्वावलोकन
यदि आप डिस्क पर लिखे जाने से पहले अनुवाद देखना चाहते हैं, तो dry-run मोड का उपयोग करें:
python manage.py translate --dry-run
यह बिना किसी फ़ाइल को संशोधित किए हर अनुवाद को टर्मिनल पर प्रिंट करता है।
लागत तुलना
यहाँ ऑटोमेशन के खिलाफ़ बहस करना मुश्किल हो जाता है।
| दृष्टिकोण | 500 स्ट्रिंग्स, 5 भाषाएँ | समय | आवर्ती लागत |
|---|---|---|---|
| मैन्युअल कॉपी-पेस्ट | मुफ़्त | ~40 घंटे | ~8 घंटे/स्प्रिंट |
| पेशेवर अनुवादक | ~$3,000 | 1-2 सप्ताह | ~$600/स्प्रिंट |
| Fiverr अनुवादक | ~$100-250 | 3-7 दिन | ~$50/स्प्रिंट |
| Crowdin/Transifex | $30-150/माह | सेटअप: घंटे | चालू |
| TranslateBot + GPT-4o-mini | ~$0.05 | ~2 मिनट | ~$0.01/स्प्रिंट |
| TranslateBot + DeepL Free | $0 | ~2 मिनट | $0 |
लगभग 500 अनुवाद योग्य स्ट्रिंग्स वाले एक छोटे से मध्यम Django ऐप की कीमत gpt-4o-mini के साथ आमतौर पर प्रति भाषा $0.01 से कम होती है। अधिकांश सोलो प्रोजेक्ट्स के लिए, DeepL का मुफ़्त टियर (500,000 कैरेक्टर/माह) शून्य लागत पर सब कुछ कवर करता है।
स्पष्ट रूप से कहें तो: AI अनुवाद परिपूर्ण नहीं हैं। बजट मानव अनुवाद भी परिपूर्ण नहीं हैं। अंतर यह है कि AI अनुवाद लगभग शून्य लागत के हैं, तुरंत मिलते हैं, और जब चाहें फिर से चलाए जा सकते हैं।
CI इंटीग्रेशन: कभी भी अनुवादित न की गई स्ट्रिंग्स शिप न करें
एक अकेले डेवलपर के रूप में मैंने जो सबसे उपयोगी पैटर्न पाया है, वह है CI में अनुवाद जाँच जोड़ना। TranslateBot में एक check_translations कमांड शामिल है जो विफल हो जाता है यदि किसी .po फ़ाइल में अनुवादित न की गई या फ़ज़ी एंट्रीज़ हैं:
# .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
यदि आप किसी टेम्प्लेट में नया {% trans %} टैग जोड़ते हैं और translate चलाना भूल जाते हैं, तो CI इसे पकड़ लेगा:
locale/de/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
locale/fr/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
CommandError: Translation check failed
यह अनुवाद को कुछ ऐसा बना देता है जो आपको याद रखना होता था, उसकी जगह कुछ ऐसा जो आप भूल नहीं सकते।
व्यावहारिक सुझाव
दो या तीन भाषाओं से शुरू करें। आपको पहले दिन 15 भाषाओं में लॉन्च करने की ज़रूरत नहीं है। वो चुनें जहाँ आपके सबसे ज़्यादा उपयोगकर्ता हैं या सबसे बड़ा बाज़ार है। जर्मन, फ़्रेंच और स्पेनिश यूरोपीय बाज़ारों के लिए काफ़ी क्षेत्र कवर करती हैं।
मूल भाषी लोगों से महत्वपूर्ण स्ट्रिंग्स की समीक्षा करवाएँ। अधिकांश UI टेक्स्ट के लिए AI अनुवाद काफ़ी अच्छे हैं, लेकिन आपके लैंडिंग पेज की हेडलाइन और ऑनबोर्डिंग फ़्लो पर मानवीय नज़र होनी चाहिए। किसी मित्र, उपयोगकर्ता, या सामुदायिक फ़ोरम में किसी से 10 मिनट सबसे दिखने वाली स्ट्रिंग्स की समीक्षा करने के लिए कहें।
ओवरराइट करने से पहले dry-run का उपयोग करें। यदि आपको कभी सब कुछ फिर से अनुवाद करने की ज़रूरत है (उदाहरण के लिए, TRANSLATING.md में बेहतर शब्दावली दिशानिर्देशों को अपडेट करने के बाद), पहले परिवर्तनों का पूर्वावलोकन करें:
python manage.py translate --overwrite --dry-run
TRANSLATING.md को वर्शन कंट्रोल में रखें। यह आपके प्रोजेक्ट के अनुवाद कॉन्फ़िगरेशन का हिस्सा है। जब आप शब्दावली या टोन दिशानिर्देश अपडेट करते हैं, तो अगला translate रन उन परिवर्तनों को किसी भी नई स्ट्रिंग्स के लिए दर्शाएगा।
ज़रूरत पड़ने पर ऐप के अनुसार अनुवाद करें। यदि आपने केवल एक ऐप में स्ट्रिंग्स बदली हैं, तो आप अनुवाद को सीमित कर सकते हैं:
python manage.py translate --app billing
हफ़्तों से मिनटों तक
Django का अंतर्राष्ट्रीयकरण फ्रेमवर्क किसी भी वेब फ्रेमवर्क में सर्वश्रेष्ठ में से एक है। makemessages, locale डायरेक्टरीज़ और compilemessages का टूलिंग परिपक्व और विश्वसनीय है। बस एक हिस्सा गायब था — अनुवाद चरण ही। वह महँगा और धीमा हिस्सा हुआ करता था।
TranslateBot के साथ, वर्कफ़्लो यह बन जाता है:
- सामान्य रूप से
gettext()और{% trans %}के साथ कोड लिखें - स्ट्रिंग्स निकालने के लिए
makemessagesचलाएँ - अनुवाद भरने के लिए
translateचलाएँ - कंपाइल करने के लिए
compilemessagesचलाएँ - सब कुछ एक साथ कमिट करें
एक अकेले डेवलपर के लिए, इसका मतलब है कि स्थानीयकरण अब "किसी दिन" के लिए योजना बनाई जाने वाली चीज़ नहीं है। यह कुछ ऐसा है जो आप आज कर सकते हैं, एक कप कॉफ़ी बनाने में लगने वाले समय में।
TranslateBot ओपन सोर्स है और PyPI और GitHub पर उपलब्ध है। इसे इंस्टॉल करें, कमांड चलाएँ, और मिनटों में अपने ऐप को नई भाषा में देखें।