我如何在django中获得当前语言?

时间:2010-07-28 20:01:16

标签: python django internationalization

如何在模型或管理员的当前线程中获取当前语言?

6 个答案:

答案 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了解语言信息。