Zbudowales aplikacje Django. Dziala, uzytkownicy sie rejestruja i teraz chcesz dotrzec do ludzi, ktorzy nie mowia po angielsku. Problem jest oczywisty w momencie, gdy na niego spojrzysz: framework internacjonalizacji Django jest doskonaly w wyciaganiu tlumaczalnych stringow, ale nie robi absolutnie nic, zeby wypelnic tlumaczenia. Ta czesc lezy po twojej stronie.
Jesli jestes samodzielnym deweloperem lub dwuosobowym zespolem, przepasc miedzy makemessages a w pelni przetlumaczona aplikacja moze wydawac sie ogromna. Przedstawie realistyczne opcje, wyjasnie dlaczego wiekszosc z nich nie sprawdza sie w malych zespolach i pokaze workflow, ktory zamienia tlumaczenie z kilkutygodniowego zadania w dwuminutowa komende.
Tradycyjne opcje (i dlaczego bola)
Opcja 1: Kopiuj-wklej z Google Translate
Najczestsza pierwsza proba. Otwierasz plik .po, kopiujesz kazdy msgid do Google Translate, wklejasz wynik jako msgstr i powtarzasz. Dla kazdego stringa. W kazdym jezyku.
Typowa aplikacja Django ma 200-500 tlumaczalnych stringow. Jesli tlumaczysz na piec jezykow, to 1000-2500 cykli kopiuj-wklej. Nawet jesli kazdy zajmuje tylko 30 sekund, patrzysz na 8-20 godzin bezmyslnej pracy. I to zanim naprawisz bledy formatowania, uszkodzone placeholdery i niespojne terminologie, ktore nieuchronnie sie wkradaja.
Co gorsza, musisz to zrobic ponownie w nastepnym sprincie, gdy dodasz nowe stringi.
Opcja 2: Profesjonalni tlumacze
Profesjonalne tlumaczenie kosztuje zazwyczaj od $0.10 do $0.25 za slowo. Aplikacja Django z 500 stringami o sredniej 8 slow kazdego daje okolo 4000 slow. Przy $0.15/slowo to $600 za jezyk, czyli $3000 za piec jezykow.
Dla startupu finansowanego przez VC to blad zaokraglenia. Dla samodzielnego dewelopera pobierajacego $9/miesiac od uzytkownika, moze pochlanac caly przychod za kwartal.
Opcja 3: Fiverr i platformy freelancerskie
Mozesz znalezc tlumaczy na Fiverr za $20-50 za jezyk. Niektorzy sa naprawde utalentowani. Wielu po prostu wkleja twoj tekst do Google Translate i pobiera od ciebie oplate za ten przywilej. Konczysz z taka sama jakoscia jak w Opcji 1, plus dodatkowa runda komunikacji i tydzien czekania.
Opcja 4: Crowdin, Transifex lub Weblate
Te platformy sa potezne, ale zaprojektowane dla projektow z dedykowanymi zespolami tlumaczy. Koszt konfiguracji (synchronizacja repozytoriow, konfiguracja pamieci tlumaczeń, zarzadzanie dostepem wspolpracownikow) jest przesada, gdy jestes jedyna osoba w projekcie. Miesieczne subskrypcje zaczynaja sie od $30-150/miesiac za platne plany, a nawet darmowe plany wymagaja utrzymywania kolejnej integracji z podmiotem trzecim.
Opcja 5: Wklej wszystko do ChatGPT
To faktycznie dziala zaskakujaco dobrze pod wzgledem jakosci. Wklejasz zawartosc pliku .po do ChatGPT lub Claude, prosisz o tlumaczenia i dostajesz rozsadne wyniki. Problem polega na tym, ze nie skaluje sie. Musisz recznie wyodrebnic nieprzetlumaczone stringi, sformatowac prompt, sparsowac odpowiedz z powrotem do formatu .po i obslugiwac batchowanie, gdy przekraczasz limity kontekstu. Dziala raz. Rozpada sie jako powtarzalny workflow.
Podejscie automatyzacyjne
A gdyby caly krok tlumaczenia byl jedna komenda? To idea stojaca za TranslateBot, open-source'owa komenda zarzadzania Django, ktora czyta twoje pliki .po, wysyla nieprzetlumaczone stringi do dostawcy AI i zapisuje tlumaczenia z powrotem w prawidlowym formacie.
Oto jak to skonfigurowac.
Krok 1: Zainstaluj TranslateBot
uv add --dev translatebot-django
Lub z pip:
pip install translatebot-django
Dodaj do zainstalowanych aplikacji:
# settings.py
INSTALLED_APPS = [
# ...
'translatebot_django',
]
Krok 2: Skonfiguruj dostawce AI
Dodaj dwa ustawienia:
# settings.py
import os
TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"
TranslateBot dziala z OpenAI, Anthropic Claude, Google Gemini i ponad 100 innymi modelami przez LiteLLM. Obsluguje rowniez DeepL jako dedykowany backend tlumaczeniowy.
Krok 3: Utworz TRANSLATING.md (opcjonalne, ale zalecane)
Plik TRANSLATING.md w katalogu glownym projektu daje AI kontekst o twojej aplikacji. To wlasnie odroznia generyczne tlumaczenie maszynowe od tlumaczen, ktore naprawde pasuja do twojego produktu:
# 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
Ten plik jest wysylany wraz z kazdym zapytaniem o tlumaczenie, wiec AI konsekwentnie uzywa odpowiedniego tonu i terminologii.
Krok 4: Przetlumacz
python manage.py makemessages -l de -l fr -l nl -l es -l ja
python manage.py translate
python manage.py compilemessages
Trzy komendy. To wszystko. TranslateBot znajduje wszystkie nieprzetlumaczone stringi we wszystkich twoich plikach .po, tlumaczy je w partiach i zapisuje wyniki z powrotem. Domyslnie tlumaczone sa tylko puste wpisy, wiec ponowne uruchomienie komendy po dodaniu nowych stringow tlumaczy tylko te nowe.
Jak to wyglada w praktyce
Oto realistyczny workflow sprintowy dla samodzielnego dewelopera obslugujacego piec jezykow:
Poniedzialek: Budujesz nowa funkcjonalnosc. Dodajesz kilka nowych tlumaczalnych stringow uzywajac gettext() i {% trans %} w trakcie pracy.
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."))
Przed commitem: Uruchamiasz trzy komendy:
python manage.py makemessages -a --no-obsolete
python manage.py translate
python manage.py compilemessages
Komenda translate wykrywa nowe nieprzetlumaczone wpisy i tlumaczy tylko te. Jesli dodales 5 nowych stringow i obslugjesz 5 jezykow, wykonuje 25 tlumaczen w jednym wywolaniu API. Caly proces trwa mniej niz minute.
Commitujesz kod, szablony i zaktualizowane pliki .po/.mo razem. Tlumaczenia sa czescia normalnego procesu rozwoju, a nie oddzielnym projektem.
Podglad przed commitem
Jesli chcesz zobaczyc tlumaczenia zanim zostana zapisane na dysku, uzyj trybu dry-run:
python manage.py translate --dry-run
To wyswietla kazde tlumaczenie w terminalu bez modyfikowania jakichkolwiek plikow.
Porownanie kosztow
Tu wlasnie automatyzacja staje sie trudna do podwazenia.
| Podejscie | 500 stringow, 5 jezykow | Czas | Koszt cykliczny |
|---|---|---|---|
| Reczne kopiuj-wklej | Za darmo | ~40 godzin | ~8 godz./sprint |
| Profesjonalni tlumacze | ~$3000 | 1-2 tygodnie | ~$600/sprint |
| Tlumacze z Fiverr | ~$100-250 | 3-7 dni | ~$50/sprint |
| Crowdin/Transifex | $30-150/mies. | Konfiguracja: godziny | Ciagle |
| TranslateBot + GPT-4o-mini | ~$0.05 | ~2 minuty | ~$0.01/sprint |
| TranslateBot + DeepL Free | $0 | ~2 minuty | $0 |
Mala do sredniej aplikacja Django z okolo 500 tlumaczalnymi stringami kosztuje zazwyczaj mniej niz $0.01 za jezyk z gpt-4o-mini. Dla wiekszosci projektow jednoosobowych darmowy plan DeepL (500 000 znakow/miesiac) pokrywa wszystko bez zadnych kosztow.
Zeby bylo jasne: tlumaczenia AI nie sa idealne. Tanie tlumaczenia ludzkie tez nie. Roznica polega na tym, ze tlumaczenia AI nie kosztuja prawie nic, przychodza natychmiast i mozna je ponownie uruchomic kiedy chcesz.
Integracja CI: Nigdy nie wysylaj nieprzetlumaczonych stringow
Jeden z najbardziej uzytecznych wzorcow, ktore znalazlem jako samodzielny deweloper, to dodanie sprawdzenia tlumaczen do CI. TranslateBot zawiera komende check_translations, ktora konczy sie bledem, jesli jakikolwiek plik .po ma nieprzetlumaczone lub rozmyte wpisy:
# .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
Jesli dodasz nowy tag {% trans %} w szablonie i zapomnisz uruchomic translate, CI to wylapie:
locale/de/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
locale/fr/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
CommandError: Translation check failed
To zamienia tlumaczenia z czegos, co musisz pamietac, w cos, czego nie mozesz zapomniec.
Praktyczne wskazowki
Zacznij od dwoch lub trzech jezykow. Nie musisz startowac w 15 jezykach pierwszego dnia. Wybierz te, gdzie masz najwiecej uzytkownikow lub najwiekszy rynek docelowy. Niemiecki, francuski i hiszpanski pokrywaja duza czesc rynkow europejskich.
Poproś native speakerow o przeglad krytycznych stringow. Tlumaczenia AI sa wystarczajaco dobre dla wiekszosci tekstu UI, ale naglowek strony glownej i proces onboardingu zasluguja na ludzkie oko. Popros znajomego, uzytkownika lub kogos na forum spolecznosci o poswiecenie 10 minut na przeglad najbardziej widocznych stringow.
Uzyj dry-run przed nadpisaniem. Jesli kiedykolwiek musisz ponownie przetlumaczyc wszystko (na przyklad po zaktualizowaniu TRANSLATING.md z lepszymi wytycznymi terminologicznymi), najpierw zobacz podglad zmian:
python manage.py translate --overwrite --dry-run
Trzymaj TRANSLATING.md w kontroli wersji. To czesc konfiguracji tlumaczen twojego projektu. Gdy zaktualizujesz terminologie lub wytyczne dotyczace tonu, nastepne uruchomienie translate odzwierciedli te zmiany dla nowych stringow.
Tlumacz per aplikacja, gdy to potrzebne. Jesli zmieniles stringi tylko w jednej aplikacji, mozesz ograniczyc zakres tlumaczenia:
python manage.py translate --app billing
Od tygodni do minut
Framework internacjonalizacji Django jest jednym z najlepszych w kazdym frameworku webowym. Narzedzia do makemessages, katalogow locale i compilemessages sa dojrzale i niezawodne. Jedynym brakujacym elementem byl sam krok tlumaczenia. To byl dotychczas drogi i wolny element.
Z TranslateBot workflow staje sie:
- Pisz kod z
gettext()i{% trans %}jak normalnie - Uruchom
makemessages, zeby wyodrebnic stringi - Uruchom
translate, zeby wypelnic tlumaczenia - Uruchom
compilemessages, zeby skompilowac - Commituj wszystko razem
Dla samodzielnego dewelopera oznacza to, ze lokalizacja nie jest juz projektem, ktory planujesz na "kiedys". To cos, co mozesz zrobic dzisiaj, w czasie potrzebnym na zrobienie filizanki kawy.
TranslateBot jest open source i dostepny na PyPI i GitHub. Zainstaluj go, uruchom komende i zobacz swoja aplikacje w nowym jezyku w kilka minut.