2015-02-01 6 views
0

이것은 분명히 이미 논의 된 주제이지만 분명히 Google과 StackOverflow에서 찾은 답변에 어려움을 겪고 있습니다.Django 웹 사이트 다국어

여러 언어를 사용할 수 있도록 모델을 구현 했으므로 완벽하게 작동합니다. 내 문제는 웹 사이트의 사용자가 스스로 언어를 영구적으로 변경할 수 있도록 허용하는 것입니다.

사용자가 클릭하여 언어를 변경할 수있는 상단 메뉴 막대에 언어 플래그가 있습니다. 그런 다음/setlanguage/de를 열고 de는 언어를 엽니 다. en 등등.

리디렉션이 작동하지 않는 이유는 요청에 어떤 변수도 설정할 수 없기 때문입니다.

그러나 실제로는 하나의 페이지 만 가지고 있으므로 사용자를 "/"로 리디렉션하면됩니다. 내 번역은 URL에서 다른 슬러그도 지원합니다.

url(r'^show/(?P<slug>[-\w]+)', views.show, name='show'), 

나는 "/ 페이지/사용하기 쉬운"또는 "/ 페이지/einfach-ZU-bedinen는"같은 페이지를 얻을 수있는 아약스 요청을 할 수 있도록.

정말 사용자 컴퓨터에 쿠키를 설정하고 싶지 않습니다. 나는 PHP 배경에서 왔는데, 나는 장고에서 약간 다르게 작동하는 세션을 처리한다고 가정한다. 요청 당 기준보다는 전역 적으로 사용 가능할 것으로 기대할 수 있겠는가?

세션을 사용하지 않고 소스 코드를 클러스터링하지 않고 선택한 언어로 페이지를 다시로드하기위한 해결 방법이 있습니까?

답변

0

django set_language보기에 내장 기능을 사용하지 않는 이유는 무엇입니까?

https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#set-language-redirect-view

또한 :

try: 
    if 'language' in request.session: 
     pass 

이 그대로 수행 아무것도 지점거야. 랭이 일을 사용할 수 있는지 확인

:

if lang not in list(Language.objects.all().values_list('code').distinct()): 

는 데이터베이스에서 모든 언어를 가져 오는 당신 때문에 때마다 잘되지 않습니다. 더 나은 시나리오는 다음과 같습니다.

if Language.objects.filter(code=lang): 

데이터베이스 대신 settings.py 파일에 사용 가능한 언어를 넣는 것을 고려하십시오. 정말로 데이터베이스에 저장하고 싶다면 어쨌든 settings.LANGUAGES으로 동기화하십시오. 따라서 장고에 내장 된 모든 모듈과 타사 모듈을 활용할 수 있습니다.

+0

고마워요! 이것은 매우 유용한 정보입니다. 첫 번째 코드 스 니펫의 경우 요청 문제로 인해 KeyError 때문에 오류 페이지가 표시되어이 문제를 해결할 수 있습니다. 두 번째 코드 조각 : 나는 사용자 입력을 신뢰하지 않으며 악의적 일 수 있으므로 데이터베이스 쿼리에 넣지는 않습니다. 나는 DJango가 SQL Injection을 처리한다는 것을 알고 있지만 어떻게 든 그것을 신뢰하지 않습니다. 나는 당신의 성과 관심사를 보았습니다! 그리고 나는 그 해결책에 만족하지 못했다는 것에 동의한다. 나는 그것이 설정 파일이라고 생각한다! – Richard

+0

우선, PHP에서 django로 전환하는 경우 원시 SQL (전체 문 또는 파편)을 사용하지 않는 한 SQL 주입에 대해 잊어 버리십시오. ORM이 처리하므로 다시는 안됩니다. 둘째 : 첫 번째 스 니펫은 실제로 아무 것도하지 않습니다.'if X in Y : '연산자를 사용하면 key가 있는지 검사하기 때문에 KeyError를 던지지 않습니다. 그래서 당신은 다시 두 번 무언가를하고 있습니다. – GwynBleidD

+0

좋습니다. 도와 줘서 고마워! 나는 그것을 고칠 것이고 그런 넌센스를 다시는 만들어 내지 않을 것이다 :) – Richard