從我的Django文檔閱讀,這是LocaleMiddleware做什麼:Django的國際化與地理位置
LocaleMiddleware試圖通過下面這個算法來確定用戶的語言首選項:
首先,它查找語言前綴在請求的URL中。這是 僅在您的 根URLconf中使用i18n_patterns功能時才執行。請參閱國際化:有關URL模式的更多 有關語言前綴的信息以及如何國際化URL 模式。
如果失敗,它會在當前用戶的 會話中查找django_language鍵。
如果沒有,它會尋找一個cookie。
使用的cookie的名稱由LANGUAGE_COOKIE_NAME 設置設置。 (默認名稱是django_language。)
如果失敗,它將查看Accept-Language HTTP標頭。這個頭文件 由您的瀏覽器發送,並通過優先順序告訴服務器您偏好哪種語言(s)。 Django嘗試使用標題 中的每種語言,直到找到包含可用翻譯的語言。
失敗的是,它使用全局LANGUAGE_CODE設置。
我想讓我的django項目檢測用戶國家並在選擇默認語言時使用它?
如何做到這一點:
我心裏有兩個想法:
寫一個新的中間件要LocaleMiddleware之前在這個中間件執行,如果沒有的cookie LANGUAGE_COOKIE_NAME使用設置它Django的GeoLocation中
更換LocaleMiddleware和,而不是尋找的Accept-Language HTTP標頭使用Django GeoLocation中
您怎麼看?
或者可能還有另一種更簡單的方法?
編輯:我將有一個更改語言的選項,問題是隻有當您第一次打開網站(任何頁面,而不僅僅是首頁)時。我現在正在考慮爲默認網站語言/ bg /(如果沒有這樣的設置)設置django_language,並且還使用國際urls/en /,/ bg /。也必須有語言切換選項。這樣,搜索引擎就沒有問題,我根本不會使用地理定位。
編輯:也有,這裏(保加利亞)這個問題大多數瀏覽器標題設置爲喜歡英語這是不是一個好的選擇:(
我將可以選擇更改語言,問題僅在您第一次打開網站時出現。我現在正在考慮爲默認網站語言/ bg /(如果沒有這樣的設置)設置django_language,並且還使用國際urls/en /,/ bg /。也必須有語言切換選項。這樣,搜索引擎就沒有問題,我根本不會使用地理定位。 – 2013-05-08 08:24:50
也有這個問題,在這裏(在保加利亞)大多數瀏覽器標題設置爲更喜歡英語語言,這不是一個好的選擇:( – 2013-05-08 08:32:41