如何在Django中获取当前语言?

117 投票
7 回答
100738 浏览
提问于 2025-04-16 01:59

我怎样才能在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(),它可以返回当前线程中使用的语言。想了解更多,可以查看文档

撰写回答