2012-06-29 62 views
2

我已經爲某些語言設置了翻譯的網址。 django的默認語言 已被設置爲en-US。django翻譯的網址和接受語言標題

如果您要求一個頁面/註冊/與NL-NL作爲接受語言 標題,我得到了404。 我並不期待這種行爲。相反,我希望我將 重定向到/ registratie /,這是對應於我的 Accept-Language標頭的轉換後的url。 當然/註冊/與nl-Nl接受語言標題,作品 罰款,並給我預計200.

我猜這是正常的,因爲它可以得到?

是不是有機會,用戶可能會得到一些網站和 鏈路建立英語語言鏈接,但在問題 用戶有不同的支持語言設置,Accept-Language頭? 在這種情況下,他將被提供404. 他應該被提供或英文(默認)內容或 或被重定向到他的語言,如果支持正確的網址。

如果用戶有不受支持的語言設置,會發生什麼情況? 是否會使用django默認LANGUAGE_CODE,在我的情況下en-US?

有沒有辦法解決這個問題或以另一種更好的方式處理它?

從我的urls.py文件的部分內容,顯示瞭如何已經設置翻譯網址:

url(_(r'^step1/$'), AccountTypeSelectionView.as_view(), name="registration_step1"), 
+0

也許最好不要翻譯網址。 – leoluk

回答

2

我正在野生假設_是ugettext_lazy。

另外如果用戶有不受支持的語言設置會發生什麼?在我的情況下,是否會使用django默認的LANGUAGE_CODE,en-US?

是的,如果沒有設置特定值,ugettext將使用默認值。你可以在django.utils.translation.trans_real的do_translate中看到這種行爲。

ugettext_lazy會發生什麼情況:在查找URL之前,會將其轉換爲用戶的語言,然後針對所有這些內容檢查URL的部分。 (Django使用每線程語言設置,以反映用戶的選擇。)

用戶是否有機會從某個網站獲取鏈接,並且該鏈接是爲英語版本構建的,但有問題的用戶有不同的支持語言設置,Accept-Language頭?在這種情況下,他將被提供404。他應該被提供或英文(默認)內容,或者如果被支持,則被重定向到他的語言的正確url。

嗯,是的,我相信應該是一個支持的功能,但快速查看源代碼使得看起來URL解析將不得不稍微改變以適應此。

你可以做什麼,是使用自定義404錯誤頁面(如簡單地在自定義錯誤的觀點提到here):在你的urls.py

handler404 = 'mysite.views.i18n_retry' 

,並在視圖

from django.utils.translation import override 
from django.core.urlresolvers import resolve 
def i18n_retry(request): 
    for language in settings.LANGUAGES: 
     with override(language, deactivate=True): 
      try: 
       result = resolve(request.path) 
       #here you will know what language the url is in 
       #if it is a supported format 
       #and can do something smart about it 
      except Http404: 
       #Http404 is thrown whenever resolving fails 
       pass 
    #here you should probably return a real 404 

我已經使用了Django 1.4的覆蓋上下文管理器。但是如果沒有,還有更長的路要走。