بلاگ پر واپس جائیں

Django i18n: .po فائل ترجمے کو خودکار بنانے کی مکمل گائیڈ

2026-01-28 11 منٹ پڑھنے کا وقت
Django i18n: .po فائل ترجمے کو خودکار بنانے کی مکمل گائیڈ

اگر آپ نے کبھی ایک سے زیادہ زبانوں میں 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 گھنٹوں سے زیادہ لگے، زیادہ تر جائزے، فارمیٹنگ کی اصلاح، اور ٹوٹے ہوئے پلیس ہولڈرز کی مرمت میں۔

مسائل وقت کے ساتھ بڑھتے ہیں:

بنیادی وجہ یہ ہے کہ ترجمے کو ایک بار کے واقعے کی بجائے ایک بتدریج، دہرانے کے قابل عمل کے طور پر دیکھا جاتا ہے۔

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
Google 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 کو بھیجی جاتی ہیں۔

یہ عملی وجوہات کی بنا پر اہم ہے:

  1. لاگت۔ آپ صرف نئی سٹرنگز کے لیے ادائیگی کرتے ہیں، پوری فائل کے لیے نہیں۔
  2. رفتار۔ 15 سٹرنگز کا ترجمہ سیکنڈوں میں ہوتا ہے، منٹوں میں نہیں۔
  3. استحکام۔ وہ ترجمے جن کا آپ نے پہلے سے جائزہ لیا اور منظور کیا ہے وہ کبھی اوور رائٹ نہیں ہوتے (جب تک آپ واضح طور پر --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

عام ڈویلپر ورک فلو یہ بن جاتا ہے:

  1. فیچر برانچ میں نئی قابل ترجمہ سٹرنگز شامل کریں۔
  2. CI ناکام ہوتا ہے کیونکہ وہ سٹرنگز غیر مترجم ہیں۔
  3. مقامی طور پر python manage.py translate چلائیں۔
  4. اپ ڈیٹ شدہ .po فائلیں کمٹ کریں۔
  5. 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 (ماہانہ 500 ہزار حروف تک) منٹ
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 جیسے پریمیم ماڈلز ان پروجیکٹس کے لیے رکھیں جہاں درستگی اہمیت رکھتی ہے، جیسے مارکیٹنگ کاپی، قانونی متن، یا ڈومین کی مخصوص اصطلاحات۔

اہم سٹرنگز کا جائزہ لیں۔ AI ترجمے زیادہ تر UI متن کے لیے کافی اچھے ہیں، لیکن قانونی طور پر پابند، حفاظت کے لیے اہم، یا اعلی خطرے کے سیاق و سباق میں صارف کو نظر آنے والے کسی بھی مواد کا مقامی بولنے والے سے جائزہ لیں۔

گھنٹوں سے سیکنڈوں تک

Django کا i18n فریم ورک ترجمے نکالنے اور کمپائل کرنے میں بہترین ہے۔ خلا ہمیشہ خود ترجمے کے مرحلے میں رہا ہے — متعدد زبانوں میں سینکڑوں msgstr اقدار بھرنے کا تھکا دینے والا، غلطی کا شکار کام۔

TranslateBot اس خلا کو پُر کرتا ہے۔ اسے انسٹال کریں، AI فراہم کنندہ کی طرف اشارہ کریں، اور ایک کمانڈ چلائیں۔ نئی سٹرنگز ترجمہ ہو جاتی ہیں۔ موجودہ سٹرنگز اچھوتی رہتی ہیں۔ پلیس ہولڈرز بالکل محفوظ رہتے ہیں۔ CI جو کچھ بھی چھوٹ جائے اسے پکڑتا ہے۔

آپ کی .po فائلیں بوجھ بننا بند کر دیتی ہیں اور بلڈ کا ایک عام حصہ بن جاتی ہیں۔

pip install translatebot-django

translatebot.dev پر شروع کریں۔

.po فائلوں کو دستی طور پر ترمیم کرنا بند کریں

TranslateBot، AI کے ساتھ Django ترجمے خودکار بناتا ہے۔ ایک کمانڈ، تمام زبانیں، فی ترجمہ چند پیسے۔