我如何在Django中获得当前的语言?

如何在模型或pipe理中的当前线程中获取当前语言?

特别感兴趣的函数是django.utils.translation.get_language() ,它返回当前线程中使用的语言。 见文件 。

或者你也可以在你的意见中得到这个

  request.LANGUAGE_CODE 

小心你用来获取语言的方法 。 根据哪种方法,Django将使用不同的方式和信息来确定正确的语言。

当使用django.utils.translation.get_language()函数时,它被链接到线程语言。 在Django 1.8之前,当翻译被禁用时,它总是返回settings.LANGUAGE_CODE 。 如果你想手动覆盖线程语言,你可以使用override()或者activate()函数,这个函数没有明确的名字,但是仍然有用:

 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 

如果您想让django检查path和/或请求(语言cookie,…) ,这是比较常见的,例如www.example.com/en/<somepath> vs www.example.com/fr/<somepath> ,使用django.utils.translation.get_language_from_request(request, check_path=False) 。 此外,它将始终返回settings.LANGUAGESsettings.LANGUAGES的有效语言

我发现通过谷歌关于这个主题find这些差异并不是很容易,所以这里有待进一步的参考。

只要补充一点,如果你使用django.utils.translation.get_language()那么你应该记住,如果这段代码将被asynchronous调用(例如作为一个芹菜任务),那么这种方法将无法正常工作,因为它在不同的线程中运行。

您可以阅读系统的locale以获取语言信息。