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

How to change language in django-modeltranslation in function

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

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

来自阅读Accessing Translated and Translation Fields:

Because the whole point of using the modeltranslation app is translating dynamic content, the fields marked for translation are somehow special when it comes to accessing them. The value returned by a translated field is depending on the current language setting. “Language setting” is referring to the Django set_language view and the corresponding get_lang function.

使用文档中描述的 set_language() 无效。得到:

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

这可能是因为我 运行 set_language() 不在视野中。

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

有个方法叫activate() from 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

这将适用于视图和普通函数。

如果您只想为一次提取更改语言并 return 回到当前语言,您可以使用 get_language from django.utils.translation:

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

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

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

并在请求中 header Key =Accept-Language Value= en, 所以现在 Django 将根据请求切换语言基础 header.