[英]How to change language in django-modeltranslation in function
I am using django-modeltranslation
for translation some fields in my models.我正在使用
django-modeltranslation
来翻译模型中的某些字段。 The package works great, everything is translated.这个包很好用,一切都被翻译了。
But there is no easy method to switch language manually.但是没有简单的方法可以手动切换语言。
From reading 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.
因为使用 modeltranslation 应用程序的重点是翻译动态内容,所以标记为翻译的字段在访问它们时有些特殊。 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 correspondingget_lang
function.“语言设置”是指 Django
set_language
视图和相应的get_lang
函数。
Using set_language()
as it described in documentation doesn't work.使用文档中描述的
set_language()
不起作用。 Got:得到了:
AttributeError: 'str' object has no attribute 'POST'
This is probably happening because i run set_language()
not in view.这可能是因为我没有运行
set_language()
。
The question : How i can switch language for django-modeltranslation
in basic function?问题:如何在基本功能中为
django-modeltranslation
切换语言?
There is a method called activate()
from django.utils.translation
which is super simple: django.utils.translation
有一个名为activate()
的方法,它非常简单:
>>> from django.utils.translation import activate
>>> activate('en')
>>> Model.objects.first() # will fetch english version
>>> activate('fr')
>>> Model.objects.first() # will fetch french version
This will work in views as well as plain functions.这将适用于视图以及普通函数。
If you want to change language just for one fetch and return back to current language you can use get_language
from django.utils.translation
:如果您只想为一次获取更改语言并返回当前语言,您可以使用
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)
Maybe It's too late but you can add middleware in Settings file也许为时已晚,但您可以在设置文件中添加中间件
MIDDLEWARE + = [ 'django.middleware.locale.LocaleMiddleware',]
中间件 + = ['django.middleware.locale.LocaleMiddleware',]
And in request header Key =Accept-Language Value= en, So now Django will switch the language base on the request header.并且在请求头中 Key =Accept-Language Value= en,所以现在 Django 将根据请求头切换语言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.