¿Cómo puedo obtener el idioma actual en el hilo actual en un modelo o en el administrador?
Respuestas:
Las funciones de particular interés son las django.utils.translation.get_language()que devuelven el lenguaje utilizado en el hilo actual. Ver documentación .
O también puede obtener esto en sus vistas
request.LANGUAGE_CODE
django.utils.translation.get_language()
django.utils.translation.get_language()siempre es una mejor solución.
Tenga cuidado con el método que utiliza para obtener el idioma . Dependiendo de qué método, Django usará diferentes formas e información para determinar el idioma correcto a usar.
Al usar la django.utils.translation.get_language()función, está vinculada al idioma del hilo . Antes de Django 1.8, siempre regresaba settings.LANGUAGE_CODEcuando las traducciones estaban deshabilitadas. Si desea anular manualmente el lenguaje del hilo, puede usar las funciones override()o activate(), que no tienen un nombre muy explícito, pero bueno, siguen siendo útiles:
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 desea que django verifique la ruta y / o la solicitud (cookie de idioma, ...) , que es mucho más común, por ejemplo , www.example.com/en/<somepath>vs www.example.com/fr/<somepath>, use django.utils.translation.get_language_from_request(request, check_path=False). Además, siempre devolverá un idioma válido establecido ensettings.LANGUAGES
No me resultó muy fácil encontrar estas diferencias a través de Google sobre este tema, así que aquí está para mayor referencia.
django.utils.translation, no traducciones. Hay un error ortográfico en el enlace proporcionado. En el fragmento es correcto.
django.utils.translation.get_language()y django.utils.translation.get_language_from_request(request, check_path). Si está a la vista, debe usar este último con check_path = Truepara obtener el idioma en el que se renderizará su plantilla.
Solo para agregar que, si lo usa django.utils.translation.get_language(), debe tener en cuenta que si esa sección de código se llamará de forma asincrónica (por ejemplo, como una tarea de apio), entonces este enfoque no funcionará debido a que se ejecuta en un hilo diferente.
puedes usar esto
from django.utils import translation
translation.get_language()
Puede leer el sistema localepara obtener información sobre el idioma.