Come posso ottenere la lingua corrente nel thread corrente in un modello o nell'amministratore?
Risposte:
Le funzioni di particolare interesse sono django.utils.translation.get_language()
che restituiscono la lingua utilizzata nel thread corrente. Vedere la documentazione .
Oppure puoi anche ottenere questo nelle tue visualizzazioni
request.LANGUAGE_CODE
django.utils.translation.get_language()
django.utils.translation.get_language()
sia sempre una soluzione migliore.
Fai attenzione al metodo che usi per ottenere la lingua . A seconda del metodo, Django utilizzerà modi e informazioni diversi per determinare la lingua giusta da usare.
Quando si utilizza la django.utils.translation.get_language()
funzione, è collegata alla lingua del thread . Prima di Django 1.8, veniva sempre restituito settings.LANGUAGE_CODE
quando le traduzioni erano disabilitate. Se vuoi sovrascrivere manualmente il linguaggio del thread, puoi usare le funzioni override()
o activate()
, che non è molto esplicitamente chiamato, ma beh, ancora 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
Se vuoi che django controlli il percorso e / o la richiesta (cookie della lingua, ...) , che è molto più comune ad es. www.example.com/en/<somepath>
Vs www.example.com/fr/<somepath>
, usa django.utils.translation.get_language_from_request(request, check_path=False)
. Inoltre, restituirà sempre una lingua valida impostata insettings.LANGUAGES
Non ho trovato molto facile trovare queste differenze tramite Google su questo argomento, quindi eccolo qui per ulteriore riferimento.
django.utils.translation
, non le traduzioni. C'è un errore di ortografia nel collegamento fornito. Nello snippet è corretto.
django.utils.translation.get_language()
e django.utils.translation.get_language_from_request(request, check_path)
. Se in vista, dovresti usare quest'ultimo con check_path = True
per ottenere la lingua in cui verrà visualizzato il tuo modello.
Solo per aggiungere che, se si utilizza, django.utils.translation.get_language()
è necessario tenere presente che se quella sezione di codice verrà chiamata in modo asincrono (ad esempio come attività di sedano), questo approccio non funzionerà perché viene eseguito in un thread diverso.
puoi usare questo
from django.utils import translation
translation.get_language()
È possibile leggere le locale
informazioni sulla lingua del sistema .