Bir Django uygulaması geliştirdiniz. Çalışıyor, kullanıcılar kayıt oluyor ve artık İngilizce konuşmayan insanlara ulaşmak istiyorsunuz. Sorun baktığınız an belli oluyor: Django'nun uluslararasılaştırma çerçevesi çevrilebilir dizeleri çıkarmada mükemmel, ama çevirileri doldurmak için kesinlikle hiçbir şey yapmıyor. O kısım size kalmış.
Tek başınıza çalışan bir geliştirici veya iki kişilik bir ekipseniz, makemessages ile tamamen çevrilmiş bir uygulama arasındaki boşluk devasa görünebilir. Gerçekçi seçenekleri inceleyeceğim, çoğunun küçük ekipler için neden işe yaramadığını açıklayacağım ve çeviriyi haftalarca süren bir işten iki dakikalık bir komuta dönüştüren bir iş akışı göstereceğim.
Geleneksel Seçenekler (ve Neden Acı Verici)
Seçenek 1: Google Translate'ten Kopyala-Yapıştır
En yaygın ilk deneme. .po dosyanızı açarsınız, her msgid'yi Google Translate'e kopyalarsınız, sonucu msgstr olarak yapıştırırsınız ve tekrarlarsınız. Her dize için. Her dilde.
Tipik bir Django uygulamasında 200-500 çevrilebilir dize bulunur. Beş dile çeviriyorsanız, bu 1.000-2.500 kopyala-yapıştır döngüsü demektir. Her biri yalnızca 30 saniye sürse bile, 8-20 saatlik monoton işe bakıyorsunuz. Ve bu, biçimleme hatalarını, bozuk yer tutucuları ve kaçınılmaz olarak sızan tutarsız terminolojiyi düzeltmeden önceki hali.
Daha da kötüsü, bir sonraki sprint'te yeni dizeler eklediğinizde hepsini tekrar yapmanız gerekiyor.
Seçenek 2: Profesyonel Çevirmenler
Profesyonel çeviri genellikle kelime başına $0,10 ile $0,25 arasındadır. Ortalama 8 kelimelik 500 dizesi olan bir Django uygulaması yaklaşık 4.000 kelime eder. $0,15/kelime ile bu dil başına $600 veya beş dil için $3.000 demektir.
VC destekli bir startup için bu yuvarlama hatası. Kullanıcı başına aylık $9 alan tek başına çalışan bir geliştirici için, çeyreklik gelirin tamamını yiyebilir.
Seçenek 3: Fiverr ve Freelance Pazaryerleri
Fiverr'da dil başına $20-50'ye çevirmen bulabilirsiniz. Bazıları gerçekten yetenekli. Çoğu metninizi Google Translate'e yapıştırıp bunun için sizden para alıyor. Seçenek 1 ile aynı kaliteyi alırsınız, artı ekstra bir iletişim turu ve bir hafta bekleme.
Seçenek 4: Crowdin, Transifex veya Weblate
Bu platformlar güçlü, ancak özel çeviri ekipleri olan projeler için tasarlanmış. Kurulum yükü (depo senkronizasyonu, çeviri belleği yapılandırma, katkıda bulunan erişimini yönetme) projede tek kişi olduğunuzda aşırı. Ücretli katmanlar için aylık abonelikler $30-150/ay'dan başlıyor ve ücretsiz katmanlar bile başka bir üçüncü taraf entegrasyonu sürdürmenizi gerektiriyor.
Seçenek 5: Her Şeyi ChatGPT'ye Yapıştır
Bu aslında kalite açısından şaşırtıcı derecede iyi çalışıyor. .po dosyanızın içeriğini ChatGPT veya Claude'a yapıştırırsınız, çeviri istersiniz ve makul sonuçlar alırsınız. Sorun ölçeklenmemesi. Çevrilmemiş dizeleri manuel olarak çıkarmanız, istemi biçimlendirmeniz, yanıtı .po formatına geri ayrıştırmanız ve bağlam sınırlarını aştığınızda toplu işlemeyi yönetmeniz gerekiyor. Bir kez çalışır. Tekrarlanabilir bir iş akışı olarak çöker.
Otomasyon Yaklaşımı
Ya tüm çeviri adımı tek bir komut olsaydı? TranslateBot'un arkasındaki fikir bu — .po dosyalarınızı okuyan, çevrilmemiş dizeleri bir AI sağlayıcısına gönderen ve çevirileri doğru formatta geri yazan açık kaynaklı bir Django yönetim komutu.
İşte nasıl kurulacağı.
Adım 1: TranslateBot'u Kurun
uv add --dev translatebot-django
Veya pip ile:
pip install translatebot-django
Yüklü uygulamalarınıza ekleyin:
# settings.py
INSTALLED_APPS = [
# ...
'translatebot_django',
]
Adım 2: AI Sağlayıcınızı Yapılandırın
İki ayar ekleyin:
# settings.py
import os
TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"
TranslateBot OpenAI, Anthropic Claude, Google Gemini ve LiteLLM aracılığıyla 100'den fazla model ile çalışır. Ayrıca özel bir çeviri arka ucu olarak DeepL'i de destekler.
Adım 3: TRANSLATING.md Oluşturun (İsteğe Bağlı ama Önerilen)
Proje kökünüzdeki bir TRANSLATING.md dosyası AI'ya uygulamanız hakkında bağlam sağlar. Genel makine çevirisini ürününüze gerçekten uyan çevirilerden ayıran budur:
# 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
Bu dosya her çeviri isteğiyle birlikte gönderilir, böylece AI tutarlı bir şekilde doğru ton ve terminolojiyi kullanır.
Adım 4: Çevirin
python manage.py makemessages -l de -l fr -l nl -l es -l ja
python manage.py translate
python manage.py compilemessages
Üç komut. Hepsi bu. TranslateBot tüm .po dosyalarınızdaki tüm çevrilmemiş dizeleri bulur, toplu olarak çevirir ve sonuçları geri yazar. Varsayılan olarak yalnızca boş girişler çevrilir, bu yüzden yeni dizeler ekledikten sonra komutu tekrar çalıştırmak yalnızca yenilerini çevirir.
Pratikte Nasıl Görünüyor
İşte beş dili destekleyen tek başına çalışan bir geliştirici için gerçekçi bir sprint iş akışı:
Pazartesi: Yeni bir özellik geliştiriyorsunuz. Geliştirme sırasında gettext() ve {% trans %} kullanarak birkaç yeni çevrilebilir dize ekliyorsunuz.
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."))
Commit'lemeden önce: Üç komut çalıştırıyorsunuz:
python manage.py makemessages -a --no-obsolete
python manage.py translate
python manage.py compilemessages
translate komutu yeni çevrilmemiş girişleri algılar ve yalnızca onları çevirir. 5 yeni dize eklediyseniz ve 5 dili destekliyorsanız, tek bir API çağrısında 25 çeviri yapar. Tüm süreç bir dakikadan az sürer.
Commit'lersiniz kodunuzu, şablonlarınızı ve güncellenmiş .po/.mo dosyalarını birlikte. Çeviriler normal geliştirme akışınızın parçası, ayrı bir proje değil.
Commit'lemeden Önce Önizleme
Çevirileri diske yazılmadan önce görmek istiyorsanız, dry-run modunu kullanın:
python manage.py translate --dry-run
Bu, hiçbir dosyayı değiştirmeden her çeviriyi terminale yazdırır.
Maliyet Karşılaştırması
İşte otomasyona karşı çıkmanın zorlaştığı yer.
| Yaklaşım | 500 dize, 5 dil | Süre | Tekrarlayan maliyet |
|---|---|---|---|
| Manuel kopyala-yapıştır | Ücretsiz | ~40 saat | ~8 saat/sprint |
| Profesyonel çevirmenler | ~$3.000 | 1-2 hafta | ~$600/sprint |
| Fiverr çevirmenleri | ~$100-250 | 3-7 gün | ~$50/sprint |
| Crowdin/Transifex | $30-150/ay | Kurulum: saatler | Sürekli |
| TranslateBot + GPT-4o-mini | ~$0,05 | ~2 dakika | ~$0,01/sprint |
| TranslateBot + DeepL Free | $0 | ~2 dakika | $0 |
Yaklaşık 500 çevrilebilir dizesi olan küçük-orta ölçekli bir Django uygulaması gpt-4o-mini ile genellikle dil başına $0,01'den az maliyete sahiptir. Çoğu solo proje için DeepL'in ücretsiz katmanı (500.000 karakter/ay) her şeyi sıfır maliyetle karşılar.
Açık olalım: AI çevirileri mükemmel değil. Bütçe dostu insan çevirileri de mükemmel değil. Fark şu ki AI çevirileri neredeyse hiçbir şeye mal olmuyor, anında geliyor ve istediğiniz zaman yeniden çalıştırılabiliyor.
CI Entegrasyonu: Asla Çevrilmemiş Dize Göndermeyin
Tek başına çalışan bir geliştirici olarak bulduğum en yararlı kalıplardan biri CI'ya çeviri kontrolü eklemek. TranslateBot, herhangi bir .po dosyasında çevrilmemiş veya bulanık girişler varsa başarısız olan bir check_translations komutu içerir:
# .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
Bir şablona yeni {% trans %} etiketi ekler ve translate çalıştırmayı unutursanız, CI yakalar:
locale/de/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
locale/fr/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
CommandError: Translation check failed
Bu, çevirileri yapmayı hatırlamanız gereken bir şeyden unutamayacağınız bir şeye dönüştürür.
Pratik İpuçları
İki veya üç dille başlayın. İlk gün 15 dilde yayına geçmenize gerek yok. En çok kullanıcınız olan veya en büyük ulaşılabilir pazarınız olan dilleri seçin. Almanca, Fransızca ve İspanyolca Avrupa pazarları için geniş bir alanı kapsar.
Kritik dizeleri ana dili konuşanlara inceletin. AI çevirileri çoğu UI metni için yeterince iyi, ama açılış sayfası başlığınız ve başlangıç akışınız insan gözünü hak ediyor. Bir arkadaşınızdan, kullanıcınızdan veya topluluk forumundaki birinden en görünür dizeleri incelemek için 10 dakika ayırmasını isteyin.
Üzerine yazmadan önce dry-run kullanın. Her şeyi yeniden çevirmeniz gerekirse (örneğin, TRANSLATING.md dosyanızı daha iyi terminoloji yönergeleriyle güncelledikten sonra), önce değişiklikleri önizleyin:
python manage.py translate --overwrite --dry-run
TRANSLATING.md'yi sürüm kontrolünde tutun. Projenizin çeviri yapılandırmasının bir parçası. Terminoloji veya ton yönergelerini güncellediğinizde, bir sonraki translate çalıştırması bu değişiklikleri yeni dizeler için yansıtacaktır.
Gerektiğinde uygulama bazında çevirin. Yalnızca bir uygulamadaki dizeleri değiştirdiyseniz, çeviri kapsamını sınırlayabilirsiniz:
python manage.py translate --app billing
Haftalardan Dakikalara
Django'nun uluslararasılaştırma çerçevesi herhangi bir web çerçevesindeki en iyilerden biri. makemessages, yerel ayar dizinleri ve compilemessages araçları olgun ve güvenilir. Eksik olan tek parça çeviri adımının kendisiydi. O, pahalı ve yavaş kısımdı.
TranslateBot ile iş akışı şöyle olur:
gettext()ve{% trans %}ile her zamanki gibi kod yazın- Dizeleri çıkarmak için
makemessagesçalıştırın - Çevirileri doldurmak için
translateçalıştırın - Derlemek için
compilemessagesçalıştırın - Her şeyi birlikte commit'leyin
Tek başına çalışan bir geliştirici için bu, yerelleştirmenin artık "bir gün" için planladığınız bir proje olmadığı anlamına geliyor. Bugün yapabileceğiniz bir şey, bir fincan kahve hazırlama süresinde.
TranslateBot açık kaynaklıdır ve PyPI ile GitHub'da mevcuttur. Kurun, komutu çalıştırın ve uygulamanızı dakikalar içinde yeni bir dilde görün.