簡體   English   中英

如何在函數中更改 django-modeltranslation 中的語言

[英]How to change language in django-modeltranslation in function

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

但是沒有簡單的方法可以手動切換語言。

從閱讀訪問翻譯和翻譯字段

因為使用 modeltranslation 應用程序的重點是翻譯動態內容,所以標記為翻譯的字段在訪問它們時有些特殊。 翻譯字段返回的值取決於當前的語言設置。 “語言設置”是指 Django set_language視圖和相應的get_lang函數。

使用文檔中描述的set_language()不起作用。 得到了:

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

這可能是因為我沒有運行set_language()

問題:如何在基本功能中為django-modeltranslation切換語言?

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

這將適用於視圖以及普通函數。

如果您只想為一次獲取​​更改語言並返回當前語言,您可以使用get_languagedjango.utils.translation

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

也許為時已晚,但您可以在設置文件中添加中間件

中間件 + = ['django.middleware.locale.LocaleMiddleware',]

並且在請求頭中 Key =Accept-Language Value= en,所以現在 Django 將根據請求頭切換語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM