3

我有一個我希望國際化的Django應用程序(在Google App Engine上)。如何判斷Django爲什麼忽略Accept-Language頭文件?

settings.py:

USE_I18N = True 
LANGUAGE_CODE = 'en' 

# Restrict supported languages (and JS media generation) 
LANGUAGES = (
    ('en', 'English'), 
    ('fr', 'French'), 
) 

MIDDLEWARE_CLASSES = (
    'ragendja.middleware.ErrorMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    # i18n 
    'django.middleware.locale.LocaleMiddleware', 
    ... 

我已經生成的.po和的.mo文件我在現場/ FR/LC_MESSAGES應用程序(雖然不是在全球範圍內)。

我將我的瀏覽器的Accept-Language標題設置爲「fr」,Django忽略它。當我查看request.LANGUAGE_CODE時,它始終是「en」。

我可以告訴瀏覽器是正確的,因爲我訪問了一些其他i18n知道的網站,它會返回法語。

我如何找到Django認爲我的設置丟失了什麼?

我看到了this question它並沒有幫助我。

我在Google App Engine上使用應用程序引擎補丁1.0.2.2運行Django 1.0。

+0

Django首先查找名爲'django_language'的cookie。您是否嘗試清除Cookie? – 2009-11-01 23:42:11

回答

2

Django以i18n的方式處理某些命令。

首先檢查LANGUAGE_CODE。這是網站的語言,如果沒有其他設置,這是用戶獲得的語言。

其次,由於您已添加LocaleMiddleware,因此它會檢查用戶會話中是否設置了django_language。我會建議清除數據庫中的會話信息或創建一個全新的用戶來嘗試。第三,它檢查是否存在django_language cookie集(或實際上,cookie的名稱由LANGUAGE_COOKIE_NAME定義)。我會建議刪除這個cookie。

第四,它尋找Accept-Language HTTP標頭。哪個是您的瀏覽器設置的地方。

祝您好運!

+0

我很欣賞這個解釋,但是有沒有辦法告訴哪些事實際上是匹配的?我可以完成你所描述的所有歌曲和舞蹈,但仍然不確定是什麼導致了這個問題。 – dfrankow 2009-11-03 16:56:06

+0

我假設你已經清除了會話和cookie,但它仍然不起作用?因爲Django i18n對我來說一直很好,至少在1.0和以上的時候,我從來沒有真正需要進一步調查。 – lemonad 2009-11-03 21:14:12

+2

這是不準確的:'settings.LANGUAGE_CODE'是最後一次檢查:https://github.com/django/django/blob/stable/1.4.x/django/utils/translation/trans_real.py#L366 – 2012-06-04 19:33:38