Jak mogę uzyskać aktualny język w bieżącym wątku w modelu lub w panelu administracyjnym?
Odpowiedzi:
Szczególnie interesujące są funkcje, django.utils.translation.get_language()
które zwracają język używany w bieżącym wątku. Zobacz dokumentację .
Lub możesz to również uzyskać w swoich poglądach
request.LANGUAGE_CODE
django.utils.translation.get_language()
django.utils.translation.get_language()
to zawsze lepsze rozwiązanie.
Uważaj na metodę, której używasz, aby poznać język . W zależności od metody, Django użyje różnych sposobów i informacji do określenia właściwy język.
Podczas korzystania z django.utils.translation.get_language()
funkcji jest ona połączona z językiem wątku . Przed Django 1.8 zawsze zwracał się, settings.LANGUAGE_CODE
gdy tłumaczenia były wyłączone. Jeśli chcesz ręcznie przesłonić język wątku, możesz użyć funkcji override()
lub activate()
, które nie są nazwane zbyt wyraźnie, ale nadal są przydatne:
from django.utils import translation
with translation.override('fr'):
print(_("Hello")) # <= will be translated inside the with block
translation.activate('fr') # <= will change the language for the whole thread.
# You then have to manually "restore" the language with another activate()
translation.activate('en') # <= change languages manually
Jeśli chcesz, aby django sprawdzało ścieżkę i / lub żądanie (plik cookie języka, ...) , co jest o wiele bardziej powszechne, np. www.example.com/en/<somepath>
Vs www.example.com/fr/<somepath>
, użyj django.utils.translation.get_language_from_request(request, check_path=False)
. Ponadto zawsze zwróci prawidłowy język ustawiony wsettings.LANGUAGES
Nie było łatwo znaleźć te różnice w Google na ten temat, więc tutaj jest dla dalszych informacji.
django.utils.translation
, a nie tłumaczenia. Podany link zawiera błąd ortograficzny. We fragmencie jest poprawne.
django.utils.translation.get_language()
a django.utils.translation.get_language_from_request(request, check_path)
. Jeśli masz na myśli, powinieneś użyć tego drugiego z, check_path = True
aby uzyskać język, w którym twój szablon będzie renderowany.
Wystarczy dodać, że jeśli używasz, to django.utils.translation.get_language()
pamiętaj, że jeśli ta sekcja kodu zostanie wywołana asynchronicznie (np. Jako zadanie selera), to takie podejście nie zadziała, ponieważ działa w innym wątku.
możesz tego użyć
from django.utils import translation
translation.get_language()
Możesz przeczytać locale
informacje o języku w systemie .