Hoe kan ik de huidige taal in Django krijgen?

Hoe kan ik de huidige taal in de huidige thread in een model of in de admin krijgen?


Antwoord 1, autoriteit 100%

Functies van bijzonder belang zijn django.utils.translation.get_language()die de taal teruggeeft die in de huidige thread wordt gebruikt. Zie documentatie.


Antwoord 2, autoriteit 65%

Of u kunt dit ook in uw weergaven krijgen

request.LANGUAGE_CODE

Antwoord 3, autoriteit 28%

Let op de methode die je gebruikt om de taal te krijgen. Afhankelijk van welke methode, zal Django verschillende manieren en informatie gebruiken om bepalende juiste taal die moet worden gebruikt.

Als je de functie django.utils.translation.get_language()gebruikt, is deze gekoppeld aan de thread-taal. Vóór Django 1.8 keerde het altijd settings.LANGUAGE_CODEterug als vertalingen waren uitgeschakeld. Als je de threadtaal handmatig wilt overschrijven, kun je de functies override()of activate()gebruiken, die niet erg expliciet worden genoemd, maar goed, nog steeds handig:

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

Als je wilt dat django het pad en/of verzoek (taalcookie, …)controleert, wat veel vaker voorkomt, b.v. www.example.com/en/<somepath>vs www.example.com/fr/<somepath>, gebruik django.utils.translation.get_language_from_request(request, check_path=False). Het zal ook altijd een geldige taal teruggeven die is ingesteld in settings.LANGUAGES

Ik vond het niet erg gemakkelijk om deze verschillen via Google over dit onderwerp te vinden, dus hier is het voor verdere referentie.


Antwoord 4, autoriteit 6%

Om toe te voegen dat als je django.utils.translation.get_language()gebruikt, je er rekening mee moet houden dat als dat gedeelte van de code asynchroon wordt aangeroepen (bijvoorbeeld als een selderijtaak) dan zal deze aanpak niet werken omdat het in een andere thread draait.


Antwoord 5

Je kunt de localevan het systeem lezen voor taal informatie.


Antwoord 6

U kunt deze sjabloontagsgebruiken in de sjabloontaal van Django:

{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
Current language code: {{ LANGUAGE_CODE }}<br>
{% get_current_language_bidi as LANGUAGE_BIDI %}
{% if LANGUAGE_BIDI %}RTL <br>{% endif %}
{% get_language_info for LANGUAGE_CODE as lang %}
Language code: {{ lang.code }}<br>
Name of language: {{ lang.name_local }}<br>
Name in English: {{ lang.name }}<br>
Bi-directional: {{ lang.bidi }}
Name in the active language: {{ lang.name_translated }}

Other episodes