如何在模型或管理员的当前线程中获取当前语言?
答案 0 :(得分:116)
特别感兴趣的函数是django.utils.translation.get_language()
,它返回当前线程中使用的语言。请参阅documentation。
答案 1 :(得分:76)
或者你也可以在你的观点中得到这个
request.LANGUAGE_CODE
答案 2 :(得分:29)
请注意用于获取语言的方法。根据哪种方法,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>
vs www.example.com/fr/<somepath>
,请使用django.utils.translation.get_language_from_request(request, check_path=False)
。此外,它始终会返回settings.LANGUAGES
我发现通过谷歌找到关于这个主题的这些差异并不是那么容易,所以这里有待进一步参考。
答案 3 :(得分:7)
只是要补充一点,如果你确实使用django.utils.translation.get_language()
那么你应该记住,如果这段代码将被异步调用(例如作为芹菜任务),那么这种方法将因为它运行而无法工作在一个不同的主题。
答案 4 :(得分:1)
你可以用这个
from django.utils import translation
translation.get_language()
答案 5 :(得分:-1)
您可以阅读系统的locale
了解语言信息。