2010-07-28 93 views

回答

97

特別感興趣的功能是django.utils.translation.get_language(),它返回當前線程中使用的語言。見documentation

+0

鏈接現在被破壞,應該是[this one](https://docs.djangoproject.com/es/1.9/ref/utils/#django.utils.translation.get_language)。 – LostMyGlasses 2016-03-03 11:47:14

+1

注意事項:*如果翻譯暫時停用(通過deactivate_all()或當None傳遞到override()時,則返回None。在Django 1.8之前,get_language()在停用翻譯時總是返回LANGUAGE_CODE * – Pieter 2017-01-03 13:11:54

0

您可以閱讀系統的locale獲取語言信息。

+5

您的主題爲-3,但我認爲這個問題很模糊 - 「我的網絡的當前語言」。猜測這不意味着你的錯誤意味着操作系統。 – mikemaccana 2011-10-25 12:34:45

68

或者你也可以在你的觀點得到這個

request.LANGUAGE_CODE
+5

我投票贊成(由於某種原因從-1開始)。請注意以下內容(來自http://docs.djangoproject.com/en/dev/topics/i18n/deployment/#how-django-discovers-language-preference),使用靜態(無中間件)轉換,語言處於設置.LANGUAGE_CODE,而動態(中間件)翻譯,它在request.LANGUAGE_CODE。「 – 2010-12-01 18:10:12

+3

該鏈接已死亡,我沒有理由不使用上述文檔接受的解決方案:'django.utils.translation.get_language()' – qris 2014-04-02 13:52:44

+2

嘗試在例如模型中獲得語言是不可能的,如果沒有請求,我認爲''''''''''''''''''''''''''''''''''''總是一個更好的解決方案 – Hussam 2015-09-15 11:38:41

7

我想補充的是,如果你使用django.utils.translation.get_language(),那麼你應該記住,如果該代碼段將被異步調用(例如,作爲芹菜任務),那麼這種方法將不會工作,因爲它運行在不同的線程中。

+2

這裏明顯的做法是通過語言作爲任務參數ter,然後用翻譯設置語言。激活(語言) – xyzman 2015-06-02 12:49:42

21

請注意您使用語言的方法。根據哪種方法,Django將使用不同的方式和信息來確定使用正確的語言。

當使用django.utils.translation.get_language()函數時,它鏈接到線程語言。在Django 1.8之前,當翻譯被禁用時,它總是返回settings.LANGUAGE_CODE。如果你想手動覆蓋線程的語言,你可以使用override()activate()功能,這是不是很明確點名,但好,還是有用的:

from django.utils import translation 

with translation.override('fr'): 
    print(_("Hello")) # <= will be translated inside the with block 

translation.activate('fr') # <= will change the language for the whole thread. 
# You then have to manually "restore" the language with another activate() 
translation.activate('en') # <= change languages manually 

如果你想Django的檢查路徑和/或請求(語言cookie,...),這是很常見的例如www.example.com/en/<somepath> vs www.example.com/fr/<somepath>,使用django.utils.translation.get_language_from_request(request, check_path=False)。此外,它總是會返回一個有效的語言集settings.LANGUAGES

我發現它不是很容易通過谷歌關於這個主題找到這些差異,所以在這裏它是進一步的參考。

+0

請注意,它是'django.utils.translation',而不是翻譯。所提供的鏈接中存在拼寫錯誤。在代碼片段中是正確的。 – J0ANMM 2017-06-13 06:43:10

+0

@ J0ANMM:謝謝,修正;) – achedeuzot 2017-06-13 10:50:05

+1

+1爲'django.utils.translation.get_language()'和'django.utils.translation.get_language_from_request(request,check_path)'之間的區別。如果在視圖中,你應該使用'check_path = True'來獲取模板將被渲染的語言。 – 2017-07-25 06:29:41

相關問題