Wie kann ich die aktuelle Sprache im aktuellen Thread in einem Modell oder im Administrator abrufen?
python
django
internationalization
diegueus9
quelle
quelle
Antworten:
Von besonderem Interesse sind Funktionen,
django.utils.translation.get_language()
die die im aktuellen Thread verwendete Sprache zurückgeben. Siehe Dokumentation .quelle
Oder Sie können dies auch in Ihren Ansichten erhalten
quelle
django.utils.translation.get_language()
django.utils.translation.get_language()
ist immer eine bessere Lösung.Achten Sie auf die Methode, mit der Sie die Sprache erhalten . Abhängig von der Methode verwendet Django verschiedene Methoden und Informationen, um die richtige Sprache zu bestimmen .
Wenn Sie die
django.utils.translation.get_language()
Funktion verwenden, ist sie mit der Thread- Sprache verknüpft . Vor Django 1.8 wurde es immer zurückgegeben,settings.LANGUAGE_CODE
wenn Übersetzungen deaktiviert waren. Wenn Sie die Thread-Sprache manuell überschreiben möchten, können Sie die Funktionenoverride()
oderactivate()
verwenden, die nicht sehr explizit benannt, aber dennoch nützlich sind:Wenn Sie möchten, dass Django den Pfad und / oder die Anforderung überprüft (Sprachcookie, ...) , was viel häufiger vorkommt, z . B.
www.example.com/en/<somepath>
vswww.example.com/fr/<somepath>
, verwenden Siedjango.utils.translation.get_language_from_request(request, check_path=False)
. Außerdem wird immer eine gültige Sprache zurückgegebensettings.LANGUAGES
Ich fand es nicht sehr einfach, diese Unterschiede über Google zu diesem Thema zu finden, daher dient sie hier als weitere Referenz.
quelle
django.utils.translation
, dass dies keine Übersetzungen sind. Der bereitgestellte Link enthält einen Rechtschreibfehler. Im Snippet ist es richtig.django.utils.translation.get_language()
unddjango.utils.translation.get_language_from_request(request, check_path)
. Wenn Sie dies sehen, sollten Sie Letzteres verwendencheck_path = True
, um die Sprache zu erhalten, in der Ihre Vorlage gerendert wird.Um dies hinzuzufügen,
django.utils.translation.get_language()
sollten Sie berücksichtigen, dass dieser Ansatz nicht funktioniert, wenn dieser Codeabschnitt asynchron aufgerufen wird (z. B. als Sellerie-Aufgabe), da er in einem anderen Thread ausgeführt wird.quelle
Sie können dies verwenden
quelle
Sie können die Systeminformationen lesen
locale
.quelle