Wielojęzyczny interfejs w Django

Coraz częściej przygotowujemy serwisy, które z założenia mają byc dostepne w różnych językach.
Ostatnio pisałem przy okazji pewnego projektu instrukcję prostej "internacjonalizacji". Oto ona:
Krok 1
W pliku settings.py należy upewnić się, że USE_I18N jest ustawione na True (tak jest domyślnie)
Następnie należy dodać klasę LocaleMiddleware do MIDDLEWARE_CLASSES, np.:

MIDDLEWARE_CLASSES = (
    "Django.middleware.common.CommonMiddleware",
    "Django.contrib.sessions.middleware.SessionMiddleware",
    "Django.contrib.auth.middleware.AuthenticationMiddleware",
    "Django.middleware.locale.LocaleMiddleware",
)

Należy pamiętać, że kolejność klas middleware ma znaczenie.

Krok 2
Należy dodać klucze do tłumaczenia szablonów. Każdy szablon, który powinien wspierać tłumaczenie musi załadować bibliotekę i18n. Osiąga się to za pomocą znacznika {% load i18n %}.
Każdy tekst, który ma być przetłumaczony powinien znaleźć się wewnątrz tagu {%trans "…" %}.
Przykład prostego szablonu przystosowanego do tłumaczenia:

{% load i18n %}
{% trans "Ten napis będzie przetłumaczony" %}

Krok 3
Należy utworzyć pliki językowe. Ten krok zależy od używanego systemu operacyjnego. Zostanie omówione postępowanie w systemie Linux. Co do systemu Windows stosuje się powszechnie dostępne i omówione w internecie narzędzia jak np. poEdit.

Na serwerze linuksowym należy przejść do głównego katalogu projektu i wykonać polecenia:

mkdir locale
python manage.py makemessages -l en
python manage.py makemessages -l pl

(zakładając, że aplikacja ma obsługiwać język polski i angielski)

Po pomyślnym wykonaniu tych poleceń pliki językowe znajdują się w <główny_katalog_projektu>/locale/<język>/ LC_MESSAGE/django.po, można je edytować i dodawać tłumaczenia dla poszczególnych łańcuchów. Po zakończeniu edycji należy je skompilować do plików .mo poleceniem

python manage.py compilemessages

Tłumaczenie powinno już działać poprawnie.