Jak mogę uzyskać aktualny język w bieżącym wątku w modelu lub w panelu administracyjnym?
python
django
internationalization
diegueus9
źródło
źródło
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ę .źródło
Lub możesz to również uzyskać w swoich poglądach
źródło
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ć funkcjioverride()
lubactivate()
, 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>
Vswww.example.com/fr/<somepath>
, użyjdjango.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.
źródło
django.utils.translation
, a nie tłumaczenia. Podany link zawiera błąd ortograficzny. We fragmencie jest poprawne.django.utils.translation.get_language()
adjango.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.źródło
możesz tego użyć
from django.utils import translation translation.get_language()
źródło
Możesz przeczytać
locale
informacje o języku w systemie .źródło