Comment puis-je obtenir la langue actuelle dans le thread actuel dans un modèle ou dans l'administrateur?
Les fonctions particulièrement intéressantes sont Django.utils.translation.get_language()
qui retourne la langue utilisée dans le thread courant. Voir documentation .
Ou vous pouvez également obtenir cela dans vos vues
request.LANGUAGE_CODE
Faites attention à la méthode que vous utilisez pour obtenir la langue . Selon la méthode, Django utilisera différentes manières et informations pour déterminer la bonne langue à utiliser.
Lorsque vous utilisez la fonction Django.utils.translation.get_language()
, elle est liée à la langue du thread . Avant Django 1.8, il renvoyait toujours settings.LANGUAGE_CODE
Lorsque les traductions étaient désactivées. Si vous souhaitez remplacer manuellement la langue du thread, vous pouvez utiliser la fonction override()
ou activate()
fonctions, qui n'est pas très explicitement nommé, mais bien, toujours utile:
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
Si vous voulez que Django vérifie le chemin et/ou demande (cookie de langue, ...) , qui est beaucoup plus courant, par exemple www.example.com/en/<somepath>
vs www.example.com/fr/<somepath>
, utilisez Django.utils.translation.get_language_from_request(request, check_path=False)
. De plus, il renverra toujours une langue valide définie dans settings.LANGUAGES
Je n'ai pas trouvé très facile de trouver ces différences via Google à ce sujet, alors voici pour plus de référence.
Juste pour ajouter que si vous utilisez Django.utils.translation.get_language()
, vous devez garder à l'esprit que si cette section de code sera appelée de manière asynchrone (par exemple en tant que tâche céleri), cette approche ne fonctionnera pas car elle s'exécute dans un fil différent.
vous pouvez l'utiliser
from Django.utils import translation
translation.get_language()