Kiedy używamy gettext_lazy a kiedy gettext w Django

Django posiada wiele funkcji pomocnych przy tłumaczeniu aplikacji. Jedną z nich jest funkcja gettext oraz jej „leniwy” odpowiednik w postaci gettext_lazy.

gettext używamy w:

  • Widokach
  • Funkcjach które są uruchamiane podczas obsługi request’a

gettext_lazy używamy w:

  • Formularzach
  • Modelach
  • W plikach konfiguracyjnych aplikacji (apps.py)

Dlaczego to tak ważne?

Ponieważ Django jest uruchamiane raz, przez co, jeśli użyjemy gettext w modelu – np. Jako nazwy/etykiety pola, to ta wartość zostanie załadowana na starcie i nigdy się nie zmieni.

Dlaczego tak się dzieje?

Wersja „leniwa” zwróci treść (przetłumaczony stringa), w momencie w którym będzie on wyświetlany, natomiast „podstawowa wersja”, zwraca wartość przetłumaczoną natychmiast. Dlatego jeśli użyjemy funkcji niewłaściwie, zawsze dostaniemy wartość w domyślnej wersji językowej.


Istnieją starsze wersje tych funkcji, mianowicie ugettext i ugettext_lazy, natomiast od Django w wersji 3.0 są one oznaczone jako przestarzałe. Przedrostek „u” oznaczał odniesienie do wersji unicode.


Photo by Pankaj Patel on Unsplash