如何在Django中获取当前语言?
我怎样才能在Django中获取当前的语言设置?
7 个回答
48
使用获取语言的方法时要小心。因为不同的方法,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检查路径和/或请求(语言cookie等),这在实际中更常见,比如 www.example.com/en/<somepath>
和 www.example.com/fr/<somepath>
,可以使用 django.utils.translation.get_language_from_request(request, check_path=False)
。这样,它总是会返回在 settings.LANGUAGES
中设置的有效语言。
我发现通过谷歌查找这些差异并不容易,所以在这里做个记录以备后用。
112
或者你也可以在你的视图中获取这个
request.LANGUAGE_CODE
174
这里提到的一个特别有用的功能是 django.utils.translation.get_language()
,它可以返回当前线程中使用的语言。想了解更多,可以查看文档。