¿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_CODE
cuando 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 = True
para 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 locale
para obtener información sobre el idioma.