Wielojęzyczny interfejs

Wiele aplikacji internetowych posiada wielojęzyczne interfejsy. Django w pełni wspiera wielojęzyczne aplikacje i ich tworzenie.

Tłumaczenia w kodzie pythona

Konieczne jest zaimportowanie odpowiedniej funkcji:
from django.utils.translation import ugettext as _
Django wykorzystuje gettexta poprzez pythonowe biblioteki. By "oznaczyć" jakiś tekst jako do tłumaczenia wystarczy umieścić go w funkcji gettexta, skrótowo oznaczanej jako "_":
_('tekst do przetłumaczenia')
Funkcja ta przyjmuje także zmienne przechowujące łańcuchy. Można także w frazie do tłumaczenia umieszczać "zmienne" np:
output = _('nazywam się %(name)s.') % {'name': zmienna}
Zmienne te nie będą objęte tłumaczeniem.
Pluralizacja jest wspierana przez django ale "domyślnie" nie posiada ona logiki polskiego języka. Co nieco o przeciążaniu pluralize dla szablonów znajdziemy na blogu Jarosława Zabiełło. Pluralizacja w kodzie obsługiwana jest przez ngettext:
from django.utils.translation import ngettext
def hello_world(request, count):
    page = ngettext('there is %(count)d object', 'there are %(count)d objects', count) % {
        'count': count,
    }
    return HttpResponse(page)
Dla języka polskiego trzeba zazwyczaj trzech wersji (1 python, 3 pythony, 5 pythonów). Powyższy ngettext rozróżnia "1" i "więcej niż 1".

Tłumaczenia w szablonach

By mieć dostęp do tagów tłumaczących należy na początku szablonu umieścić:
{% load i18n %}
Do tłumaczeń służy tag "trans":
{% trans "fraza.." %}
Tłumaczenie ze zmiennymi:
{% blocktrans %} To ma wartość {{ value }}.{% endblocktrans %}

Tworzenie plików tłumaczeń

By wygenerować plik gettexta służący do tłumaczenia aplikacji należy skorzystać z narzędzia django znajdującego się w bin/make-messages.py (/usr/lib/python*/site-packages/Django*/bin/ dla Linuksa). Najprościej skopiować plik do katalogu z projektem. By wygenerować plik gettexta wystarczy wykonać polecenie:
make-messages.py -l LOCAL
make-messages.py -l pl
Z tym że:
  • Wykonanie tego polecenia w głównym katalogu projektu wygeneruje plik gettexta dla wszystkich aplikacji i oczekuje katalogu locale w głównym katalogu projektu
  • Wykonanie tego polecenia w katalogu aplikacji wygeneruje plik gettext dla tej aplikacji i oczekuje katalogu locale w katalogu tej aplikacji

By zaktualizować istniejące pliki gettexta o nowe frazy (i zmiany w istniejących) wystarczy wykonać polecenie:
make-messages.py -a
Do generowania plików *mo gotowych do użycia służy plik:
bin/compile-messages.py
Można też skorzystać bezpośrednio z gettexta:
msgfmt django.po -o django.mo
RkBlog

Django, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact