3

국제화하려는 Django 앱 (Google App Engine에 있음)이 있습니다.Django가 Accept-Language 헤더를 무시하는 이유는 무엇입니까?

settings.py : 나는 (글로벌 수준에서 아니지만) 로케일/FR/LC_MESSAGES 내 앱와 .po 및 .mo 파일을 생성 한

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', 
    ... 

.

브라우저의 Accept-Language 제목을 "fr"로 설정하고 장고는이를 무시합니다. 요청을 볼 때 LANGUAGE_CODE는 항상 'en'입니다.

다른 i18n 인식 사이트를 방문하고 프랑스어를 반환하기 때문에 브라우저가 적절하다고 알릴 수 있습니다.

Django가 내 설정에 대해 누락 된 부분을 찾았습니까?

나는 this question을 보았습니다.

Google App Engine에서 1.0.2.2의 App Engine 패치를 사용하여 Django 1.0을 실행하고 있습니다.

+0

장고는 먼저 'django_language'라는 쿠키를 찾습니다. 쿠키를 지우려고 했습니까? –

답변

2

장고가 i18n과 관련하여 특정 순서를 따르고 있습니다.

먼저 LANGUAGE_CODE을 확인합니다. 이것은 사이트 전체의 언어이며, 다른 언어가 설정되지 않으면 사용자가 얻는 언어입니다.

둘째, LocaleMiddleware을 추가 했으므로 사용자 세션에 django_language이 설정되어 있는지 확인합니다. 나는 DB에서 세션 정보를 지우거나 시도 할 완전히 새로운 사용자를 만드는 것이 좋습니다.

세 번째로 django_language 쿠키 세트가 있는지 확인합니다 (실제로 쿠키 이름은 LANGUAGE_COOKIE_NAME으로 정의됩니다). 이 쿠키를 삭제하는 것이 좋습니다.

넷째, Accept-Language HTTP 헤더를 찾습니다. 어느 곳에서 브라우저 설정이 제공됩니까?

행운을 빈다!

+0

그 설명을 고맙게 생각하지만 그 중 실제로 일치하는 것이 무엇인지 알 수있는 방법이 있습니까? 나는 당신이 묘사 한 모든 노래와 춤을 할 수 있으며 여전히 그 이슈를 일으키는 것이 무엇인지 확신 할 수 없습니다. – dfrankow

+0

세션과 쿠키를 모두 지운 것으로 가정하고 여전히 작동하지 않습니까? Django i18n이 적어도 1.0 이상에서는 항상 저에게 잘 작동했기 때문에 실제로는 더 이상 조사하지 않았습니다. – lemonad

+2

정확하지 않습니다. 'settings.LANGUAGE_CODE'가 마지막으로 확인됩니다. https://github.com/django/django/blob/stable/1.4.x/django/utils/translation/trans_real.py#L366 –

관련 문제