django는 브라우저 헤더에서 웹 사이트의 기본 언어를 먼저 선택한 다음 설정에서 가능한 선택 항목과 일치하는 경우 해당 언어로 페이지를 표시합니다.django 로케일이보기간에 작동하는 방식
사용자가 로그온 한 후 &을 해당 언어로 변경하려고합니다. 사용자의 기본 설정을 위해 양식을 제공했습니다. 로그온시 해당 언어의 defaultSettings
모델에서 기본 언어가 선택됩니다. 그리고 내가하고있는 일은 다음과 같습니다.
d = DefaultSettings.objects.filter(user = request.user)
if len(d) > 0 and d[0].has_default_language:
from django.utils import translation
translation.activate(d[0].default_language)
request.LANGUAGE_CODE = translation.get_language()
그리고 "잘못된"언어로 된 페이지가 있습니다.
내가 물어 봅니다. 왜죠? 나는 그 코드를 스스로 만들지 않았다. 정말 같은 일을해야합니까 - 모든 예 middleware
에 요청/응답을 수정하기 때문에 나는 다음 예
- Detect the language & django locale-url
- https://github.com/Torte/django-urli18n/blob/master/urli18n/middleware.py
- https://github.com/divio/django-cms/blob/develop/cms/middleware/multilingual.py
에서있어? Django
은 요청간에 언어를 재설정하고 각 요청 후에 다시 "추측"하려고합니까?
한 번 설정하는 나의 방법은 왜 작동하지 않습니까?
앨런
업데이트 (신 드리 Guðmundsson에서) 첫번째 응답 후 : 내가 로그 검사 할 때
if form.is_valid ():
if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
redirect_to = settings.LOGIN_REDIRECT_URL
if not form.cleaned_data [ 'remember_me' ]:
request.session.set_expiry (0)
from django.contrib.auth import login
login (request, form.get_user ())
if request.session.test_cookie_worked ():
request.session.delete_test_cookie ()
set_lang_to_user_default_language(request)
response = HttpResponseRedirect (redirect_to)
d = DefaultSettings.objects.filter(user = request.user)
if len(d) > 0 and d[0].has_default_language:
from django.utils import translation
translation.activate(d[0].default_language)
logger.debug(translation.get_language())
request.LANGUAGE_CODE = translation.get_language()
if hasattr(request, 'session'):
logger.debug('set django_language')
request.session['django_language'] = translation.get_language()
else:
logger.debug('set response cookie')
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, translation.get_language())
return response
, 나는 참조 :
DEBUG 2011-09-01 09:08:13,379 et
DEBUG 2011-09-01 09:08:13,379 set django_language
을하지만 다음보기에서 템플릿을 검사 할 때, 내가 {{ LANGUAGE_CODE }}
을 인쇄 한 다음 'en'이 아닌 '012'을 표시합니다.
갱신 2 :이보기를 처리 한 후 발생하는 사실은 무엇을
: 내용은 내가 1 {{ LANGUAGE_CODE }}
후 이동 2 페이지 영어 에서 '엉을'이다 '엉' 1 페이지이보기가 리디렉션 {{언어 코드}}이다 콘텐츠는 에스토니아어입니다. 2 번째 {{LANGUAGE_CODE}}이 (가) 'en'이고 3 번째 페이지가 'en'이고 콘텐츠가 영어로되어 있으며 다시 영어로 유지됩니다.
그래서 "올바른"언어로 페이지를 유지하려면 내 middleware
을 만들어야 만합니다 ... 내 질문은 - 왜?
갱신 3은 :
LANGUAGES = (
('et', gettext('Estonian')),
('en', gettext('English')),
('ru', gettext('Russian')),
('lv', gettext('Latvian')),
('lt', gettext('Lithuanian')),
('fi', gettext('Finnish')),
)
그러나 추가 조사 후 내가 해결 방법을 찾은 것 같아요 : 내 언어 설정은 같다. 이 프로젝트에서 django-cms
을 사용하고 cms.middleware.multilingual.MultilingualURLMiddleware를 끄고 위에서 설명한 문제를 경험했습니다. 다시 켜면 모든 것이 잘 작동합니다. 그러나 middleware
이 켜져 있고 각 매개 변수에 필요한 매개 변수를 넣기 때문에 정상적으로 작동합니다.
내가 처음에 질문 한 내용은 작동 방식입니다. 그리고 나중에 WHY라는 질문을했습니다. 자, 생각해 봅니다. 문제는 - 실제로 각각의 언어를 설정해야만합니까 request/response
middleware
과 같은 코드를 사용하고 middlewares
과 같이 할 수 있습니까?
로그인 후 첫 페이지의'request'Session [ 'django_language']'값은 무엇입니까? –
'en'- 브라우저 언어가 영어이므로 내 브라우저에서 가져옵니다. –
@ Zayatss; 당신의'settings.LANGUAGES'는 어떻게 배치 되었습니까? 'et'가 거기에 없다면 django는 브라우저의 언어를 사용하게됩니다. 'settings.LANGUAGES'는 튜플의 튜플이어야합니다. ((lang_code, lang_name), ...)'[this] (https://code.djangoproject.com/browser/django/trunk/django/utils/)를 참조하십시오. 번역/trans_real.py # L366) 더 나은 설명을 ... –