如何在函数中改变django-modeltranslation中的语言

时间:2017-06-30 10:39:38

标签: python django django-i18n django-modeltranslation

我正在使用django-modeltranslation翻译我模型中的某些字段。包装很棒,一切都翻译好了。

但是没有简单的手动切换语言的方法。

阅读Accessing Translated and Translation Fields

  

因为使用模型翻译应用程序的重点是翻译动态内容,所以标记为翻译的字段在访问它们时有些特殊。翻译字段返回的值取决于当前语言设置。 “语言设置”指的是Django set_language视图和相应的get_lang函数。

如文档中所述,使用set_language()并不起作用。得到:

AttributeError: 'str' object has no attribute 'POST'

这可能正在发生,因为我不在视图中运行set_language()

问题:如何在基本功能中切换django-modeltranslation的语言?

2 个答案:

答案 0 :(得分:2)

activate()中有一个名为django.utils.translation的方法非常简单:

>>> from django.utils.translation import activate
>>> activate('en')
>>> Model.objects.first()  # will fetch english version
>>> activate('fr')
>>> Model.objects.first()  # will fetch french version

这将在视图和普通函数中起作用。

如果您只想为一次提取更改语言并返回当前语言,则可以使用get_language中的django.utils.translation

>>> from django.utils.translation import get_language, activate
>>> current_language = get_language()
>>> activate('fr')
>>> Model.object.first()
>>> activate(current_language)

答案 1 :(得分:0)

也许为时已晚,但是您可以在“设置”文件中添加中间件

MIDDLEWARE + = ['django.middleware.locale.LocaleMiddleware',]

在请求标头中,键=接受语言值= zh_, 因此,现在Django将根据请求标头切换语言。