2017-03-02 93 views
1

settings.pyDjango如何在i18n_patterns中設置默認語言?

from django.utils.translation import ugettext_lazy as _ 
LANGUAGE_CODE = 'hi' 
# list of activated languages 
LANGUAGES = (
    ('hi', _('Hindi')), 
    ('en', _('English')), 
) 

urls.py

urlpatterns += i18n_patterns(
    url(r'^', include('howdy.urls')), 
    url(r'^', include('accounts.urls')), 
    url(r'^admin/', admin.site.urls), 
    url(r'^i18n/', include('django.conf.urls.i18n')), 
    url(r'^accounts/', include('allauth.urls')) 
) 

中間件

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'debug_toolbar.middleware.DebugToolbarMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
] 

所以我在這裏設置默認爲"hi",但每當我打URL [私人模式]不附加任何語言,它的URL重定向爲「en」,而不是「hi」。我在這裏錯過了什麼使它默認指向「hi」語言?

+0

什麼是「URL [私人模式]」? – Udi

+0

@udi,我以「隱身」模式打開瀏覽器,以確保網站重新打開。 –

回答

1

您使用的是LocaleMiddleware?請參閱:How Django discovers language preference

LocaleMiddleware試圖通過 來確定用戶的語言首選項這種算法如下:

  • 首先,它會在請求的URL的語言前綴。這是 僅在您的 根URLconf中使用i18n_patterns功能時才執行。請參閱國際化:有關URL模式的更多 有關語言前綴的信息以及如何國際化URL 模式。

  • 如果失敗,它將在當前的 用戶會話中查找LANGUAGE_SESSION_KEY項。

  • 如果失敗,它會查找cookie。 使用的cookie的名稱由LANGUAGE_COOKIE_NAME 設置設置。 (默認名稱是django_language。)

  • 如果失敗,它將查看Accept-Language HTTP標頭。這個頭文件 由您的瀏覽器發送,並通過優先順序告訴服務器您偏好哪種語言(s)。 Django嘗試使用標題 中的每種語言,直到找到包含可用翻譯的語言。

  • 失敗的是,它使用全局LANGUAGE_CODE設置。

+0

是的,我正在使用它,我編輯了我的答案,請看看 –