我如何在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.LANGUAGES
中settings.LANGUAGES
的有效语言
我发现通过谷歌关于这个主题find这些差异并不是很容易,所以这里有待进一步的参考。
只要补充一点,如果你使用django.utils.translation.get_language()
那么你应该记住,如果这段代码将被asynchronous调用(例如作为一个芹菜任务),那么这种方法将无法正常工作,因为它在不同的线程中运行。
您可以阅读系统的locale
以获取语言信息。