简体   繁体   English

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

[英]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 corresponding get_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_languagedjango.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.

相关问题 django-modeltranslation:如何知道该值是否用给定语言定义? - django-modeltranslation : how to know if the value is defined in a given language? 使用 django-modeltranslation 进行语言独立查询 - language independent query with django-modeltranslation 如何结合django-modeltranslation和django-reversion应用程序? - How to combine django-modeltranslation and django-reversion apps? 如何使用 django-modeltranslation 向模板添加翻译字段? - How to add translation fields to templates using django-modeltranslation? 是否可以在admin之外使用django-modeltranslation? - Is it possible to use django-modeltranslation outside of admin? django-modeltranslation从模型中删除文本 - django-modeltranslation removes text from models 结合使用 Django-modeltranslation 与 PostgreSQL SearchVector - Using Django-modeltranslation in combination with PostgreSQL SearchVector django-modeltranslation导致django无法访问数据库 - django-modeltranslation causes django unable to access database 在Django-Oscar中使用Django-ModelTranslation,但“未检测到新的可翻译字段” - Using Django-ModelTranslation with Django-Oscar, but “No new translatable fields detected” 您应该如何处理使用 django-modeltranslation 翻译的原始字段? - What are you supposed to do with the original field that you translate with django-modeltranslation?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM