আপনি একটি Django অ্যাপ তৈরি করেছেন। এটি কাজ করছে, ব্যবহারকারীরা সাইন আপ করছে, এবং এখন আপনি এমন মানুষদের কাছে পৌঁছাতে চান যারা ইংরেজি বলেন না। সমস্যাটি দেখামাত্রই স্পষ্ট: Django-র আন্তর্জাতিকীকরণ ফ্রেমওয়ার্ক অনুবাদযোগ্য স্ট্রিং এক্সট্র্যাক্ট করতে চমৎকার, কিন্তু অনুবাদ পূরণ করতে এটি একেবারে কিছুই করে না। সেই অংশটি আপনাকেই করতে হবে।
আপনি যদি একজন একক ডেভেলপার বা দুই জনের টিম হন, makemessages এবং সম্পূর্ণ অনুবাদিত অ্যাপের মধ্যে ফারাকটি বিশাল মনে হতে পারে। আমি বাস্তবসম্মত বিকল্পগুলো নিয়ে আলোচনা করব, ব্যাখ্যা করব কেন বেশিরভাগই ছোট টিমের জন্য কাজ করে না, এবং একটি ওয়ার্কফ্লো দেখাব যা অনুবাদকে কয়েক সপ্তাহের কাজ থেকে দুই মিনিটের কমান্ডে পরিণত করে।
প্রচলিত বিকল্পগুলো (এবং কেন এগুলো কষ্টদায়ক)
বিকল্প ১: Google Translate থেকে কপি-পেস্ট
সবচেয়ে সাধারণ প্রথম প্রচেষ্টা। আপনি .po ফাইল খোলেন, প্রতিটি msgid Google Translate-এ কপি করেন, ফলাফল msgstr হিসেবে পেস্ট করেন, এবং পুনরাবৃত্তি করেন। প্রতিটি স্ট্রিংয়ের জন্য। প্রতিটি ভাষায়।
একটি সাধারণ Django অ্যাপে ২০০-৫০০টি অনুবাদযোগ্য স্ট্রিং থাকে। আপনি যদি পাঁচটি ভাষায় অনুবাদ করেন, তাহলে সেটা ১,০০০-২,৫০০ কপি-পেস্ট চক্র। প্রতিটিতে মাত্র ৩০ সেকেন্ড লাগলেও, আপনি ৮-২০ ঘণ্টা একঘেয়ে কাজের কথা বলছেন। এবং সেটা ফরম্যাটিং ত্রুটি, ভাঙা প্লেসহোল্ডার, এবং অনিবার্যভাবে ঢুকে পড়া অসঙ্গত পরিভাষা ঠিক করার আগের কথা।
আরও খারাপ, পরবর্তী স্প্রিন্টে নতুন স্ট্রিং যোগ করলে আবার এটা করতে হবে।
বিকল্প ২: পেশাদার অনুবাদক
পেশাদার অনুবাদের খরচ সাধারণত প্রতি শব্দে $০.১০ থেকে $০.২৫। ৫০০টি স্ট্রিং সহ একটি Django অ্যাপ যেখানে প্রতিটিতে গড়ে ৮ শব্দ, মোট প্রায় ৪,০০০ শব্দ হয়। $০.১৫/শব্দে, প্রতি ভাষায় $৬০০, বা পাঁচ ভাষার জন্য $৩,০০০।
VC-ফান্ডেড স্টার্টআপের জন্য এটি নগণ্য। কিন্তু প্রতি ব্যবহারকারী $৯/মাস চার্জ করা একক ডেভেলপারের জন্য, এটি পুরো ত্রৈমাসিকের আয় গ্রাস করতে পারে।
বিকল্প ৩: Fiverr এবং ফ্রিল্যান্স মার্কেটপ্লেস
Fiverr-এ প্রতি ভাষায় $২০-৫০-তে অনুবাদক পাওয়া যায়। কেউ কেউ সত্যিই দক্ষ। অনেকে শুধু আপনার টেক্সট Google Translate-এ পেস্ট করে আপনার কাছ থেকে টাকা নেয়। শেষ পর্যন্ত বিকল্প ১-এর মতোই মান পান, সাথে অতিরিক্ত একটি যোগাযোগের রাউন্ড এবং এক সপ্তাহ অপেক্ষা।
বিকল্প ৪: Crowdin, Transifex, বা Weblate
এই প্ল্যাটফর্মগুলো শক্তিশালী, তবে এগুলো নিবেদিত অনুবাদ টিম সহ প্রকল্পের জন্য তৈরি। সেটআপ ওভারহেড (রিপোজিটরি সিঙ্ক, ট্রান্সলেশন মেমরি কনফিগারেশন, কন্ট্রিবিউটর অ্যাক্সেস ম্যানেজমেন্ট) প্রকল্পে আপনি একমাত্র ব্যক্তি হলে অতিরিক্ত। পেইড টিয়ারে মাসিক সাবস্ক্রিপশন $৩০-১৫০/মাস থেকে শুরু, এবং ফ্রি টিয়ারেও আরেকটি থার্ড-পার্টি ইন্টিগ্রেশন বজায় রাখতে হয়।
বিকল্প ৫: সবকিছু ChatGPT-তে পেস্ট করুন
গুণমানের দিক থেকে এটি আশ্চর্যজনকভাবে ভালো কাজ করে। আপনি .po ফাইলের বিষয়বস্তু ChatGPT বা Claude-এ পেস্ট করেন, অনুবাদ চান, এবং যুক্তিসঙ্গত ফলাফল পান। সমস্যা হলো এটি স্কেল করে না। আপনাকে ম্যানুয়ালি অনুবাদ না হওয়া স্ট্রিং এক্সট্র্যাক্ট করতে হয়, প্রম্পট ফরম্যাট করতে হয়, রেসপন্স .po ফরম্যাটে পার্স করতে হয়, এবং কনটেক্সট লিমিট অতিক্রম করলে ব্যাচিং হ্যান্ডেল করতে হয়। এটি একবার কাজ করে। পুনরাবৃত্তিযোগ্য ওয়ার্কফ্লো হিসেবে ভেঙে পড়ে।
অটোমেশন পদ্ধতি
যদি সম্পূর্ণ অনুবাদ ধাপটি একটি মাত্র কমান্ড হতো? এটিই TranslateBot-এর পিছনের ধারণা — একটি ওপেন-সোর্স Django ম্যানেজমেন্ট কমান্ড যা আপনার .po ফাইল পড়ে, অনুবাদ না হওয়া স্ট্রিং AI প্রোভাইডারে পাঠায়, এবং সঠিক ফরম্যাটে অনুবাদ লিখে দেয়।
এটি সেট আপ করার উপায় এখানে।
ধাপ ১: TranslateBot ইনস্টল করুন
uv add --dev translatebot-django
অথবা pip দিয়ে:
pip install translatebot-django
আপনার installed apps-এ যোগ করুন:
# settings.py
INSTALLED_APPS = [
# ...
'translatebot_django',
]
ধাপ ২: আপনার 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-এর মাধ্যমে ১০০+ অন্যান্য মডেল-এর সাথে কাজ করে। এটি একটি নিবেদিত অনুবাদ ব্যাকএন্ড হিসেবে DeepL-ও সমর্থন করে।
ধাপ ৩: 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 ধারাবাহিকভাবে সঠিক টোন এবং পরিভাষা ব্যবহার করে।
ধাপ ৪: অনুবাদ করুন
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 কমান্ড নতুন অনুবাদ না হওয়া এন্ট্রি শনাক্ত করে এবং শুধু সেগুলোই অনুবাদ করে। আপনি ৫টি নতুন স্ট্রিং যোগ করলে এবং ৫টি ভাষা সমর্থন করলে, এটি একটি মাত্র API কলে ২৫টি অনুবাদ করে। পুরো প্রক্রিয়াটি এক মিনিটেরও কম সময় নেয়।
আপনি কমিট করেন আপনার কোড, টেমপ্লেট, এবং আপডেট হওয়া .po/.mo ফাইল একসাথে। অনুবাদ আপনার স্বাভাবিক ডেভেলপমেন্ট ফ্লো-র অংশ, আলাদা প্রকল্প নয়।
কমিট করার আগে প্রিভিউ
আপনি যদি ডিস্কে লেখার আগে অনুবাদ দেখতে চান, dry-run মোড ব্যবহার করুন:
python manage.py translate --dry-run
এটি কোনো ফাইল পরিবর্তন না করে প্রতিটি অনুবাদ টার্মিনালে প্রিন্ট করে।
খরচ তুলনা
এখানেই অটোমেশনের বিপক্ষে যুক্তি দেওয়া কঠিন হয়ে যায়।
| পদ্ধতি | ৫০০ স্ট্রিং, ৫ ভাষা | সময় | পুনরাবৃত্ত খরচ |
|---|---|---|---|
| ম্যানুয়াল কপি-পেস্ট | বিনামূল্যে | ~৪০ ঘণ্টা | ~৮ ঘণ্টা/স্প্রিন্ট |
| পেশাদার অনুবাদক | ~$৩,০০০ | ১-২ সপ্তাহ | ~$৬০০/স্প্রিন্ট |
| Fiverr অনুবাদক | ~$১০০-২৫০ | ৩-৭ দিন | ~$৫০/স্প্রিন্ট |
| Crowdin/Transifex | $৩০-১৫০/মাস | সেটআপ: ঘণ্টা | চলমান |
| TranslateBot + GPT-4o-mini | ~$০.০৫ | ~২ মিনিট | ~$০.০১/স্প্রিন্ট |
| TranslateBot + DeepL Free | $০ | ~২ মিনিট | $০ |
প্রায় ৫০০টি অনুবাদযোগ্য স্ট্রিং সহ একটি ছোট থেকে মাঝারি Django অ্যাপের খরচ gpt-4o-mini দিয়ে সাধারণত প্রতি ভাষায় $০.০১-এর কম। বেশিরভাগ একক প্রকল্পের জন্য, DeepL-এর ফ্রি টিয়ার (৫০০,০০০ অক্ষর/মাস) শূন্য খরচে সবকিছু কভার করে।
স্পষ্ট করে বলি: AI অনুবাদ নিখুঁত নয়। বাজেট মানব অনুবাদও নিখুঁত নয়। পার্থক্য হলো AI অনুবাদে প্রায় কিছুই খরচ হয় না, তাৎক্ষণিকভাবে পাওয়া যায়, এবং যখন খুশি পুনরায় চালানো যায়।
CI ইন্টিগ্রেশন: কখনো অনুবাদ না হওয়া স্ট্রিং শিপ করবেন না
একক ডেভেলপার হিসেবে আমি যে সবচেয়ে দরকারি প্যাটার্ন খুঁজে পেয়েছি তা হলো CI-তে অনুবাদ চেক যোগ করা। TranslateBot-এ একটি check_translations কমান্ড আছে যা কোনো .po ফাইলে অনুবাদ না হওয়া বা fuzzy এন্ট্রি থাকলে ব্যর্থ হয়:
# .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
এটি অনুবাদকে এমন কিছু থেকে রূপান্তরিত করে যা আপনাকে মনে রাখতে হয়, এমন কিছুতে যা আপনি ভুলতে পারবেন না।
ব্যবহারিক পরামর্শ
দুই বা তিনটি ভাষা দিয়ে শুরু করুন। প্রথম দিনেই ১৫টি ভাষায় লঞ্চ করার দরকার নেই। যেখানে আপনার সবচেয়ে বেশি ব্যবহারকারী বা সবচেয়ে বড় বাজার, সেগুলো বেছে নিন। জার্মান, ফরাসি এবং স্প্যানিশ ইউরোপীয় বাজারের অনেকটা কভার করে।
নেটিভ স্পিকারদের দিয়ে গুরুত্বপূর্ণ স্ট্রিং রিভিউ করান। বেশিরভাগ UI টেক্সটের জন্য AI অনুবাদ যথেষ্ট ভালো, কিন্তু আপনার ল্যান্ডিং পেজের শিরোনাম এবং অনবোর্ডিং ফ্লো-তে মানুষের চোখ দরকার। একজন বন্ধু, ব্যবহারকারী, বা কমিউনিটি ফোরামের কাউকে সবচেয়ে দৃশ্যমান স্ট্রিংগুলো ১০ মিনিট রিভিউ করতে বলুন।
ওভাররাইট করার আগে 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-এ পাওয়া যায়। ইনস্টল করুন, কমান্ড চালান, এবং মিনিটের মধ্যে আপনার অ্যাপ নতুন ভাষায় দেখুন।