如何在模型或管理员的当前线程中获取当前语言?
Answers:
或者您也可以在您的意见中
要求。LANGUAGE_CODE
django.utils.translation.get_language()
django.utils.translation.get_language()
始终是更好的解决方案。
小心用于获取语言的方法。取决于哪种方法,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
我发现要通过Google在这个主题上找到这些差异并不容易,因此这里有进一步的参考。
django.utils.translation
,不是翻译。提供的链接中存在拼写错误。在摘要中是正确的。
django.utils.translation.get_language()
和之间的差异+1 django.utils.translation.get_language_from_request(request, check_path)
。如果考虑到,你应该使用后者check_path = True
让你的模板将在得到渲染的语言。
只是要补充一点,如果您确实使用了django.utils.translation.get_language()
该代码,则应记住,如果该代码段将被异步调用(例如,作为一个celery任务),则由于该方法在另一个线程中运行,因此该方法将不起作用。