2017-12-26 7 views
0

다른 지원되는 언어에 대해 동일한보기를 사용하고 싶습니다. 예를 들어 기본 언어와 영어가 있습니다. 내 주요 URL을에서장고에서 여러 언어를 처리하기위한 여러 개의보기에 대한 하나의보기

가 내 게시물의 응용 프로그램의 URL을 파일은 다음과 같이

url(r'^posts/', include('posts.urls')),  #for default language 
url(r'^en/posts/', include('posts.urls')), #for english 

입니다

:

url(r'^newpost/$', views.PostFormView.as_view(), name='add'), 
url(r'^favorite/$', views.favorite, name='favorite'), 

때문에, 예를 들어, www.mysite.com/posts/add 모두와 www.mysite.com/en/posts/add는 PostFormView와 동일한보기로 보내고 url에 "/ en /"이 포함되어 있는지 여부에 따라 올바른 언어로 콘텐츠를 보냅니다.

그러나 문제는 리디렉션 또는 리버스 보내기가 항상 기본 언어로 전송된다는 것입니다. 예를 들어 'posts : add'는 url(r'^en/posts/', include('posts.urls'))

전에 두 개의 다른 URL에 대해 동일한보기를 사용할 수있는 방법이 있기 때문에 항상 "www.mysite.com/posts/add"로 보냅니다. 또는 여러 언어 웹 사이트를 어떻게 처리 할 수 ​​있습니까? 지원되는 모든 언어로 모든 앱을 복제해야합니까?

+0

다른 언어로 다른 URL을 사용하는 대신 Django의 [국제화 및 현지화] (https://docs.djangoproject.com/en/2.0/topics/i18n/) 기능을 살펴 보았습니까? – ubadub

+0

@ubadub + 1, Django는 원래 이것을 지원했습니다. – Ykh

+0

i18n urls 섹션의 문서는 [여기]입니다 (https://docs.djangoproject.com/en/2.1/topics/i18n/translation/#module-django.conf.urls.i18n) – Ykh

답변

1

이 긴 될 수 있으며,이 모든 것을 다루 쉬운 일이 아닙니다하지만 난 내가 할 수있는만큼 충당하기 위해 노력 할게요 :

1 - 사용 장고 국제화 및 현지화 :

장고가있다을 다중 언어 웹 사이트를위한 내장 기능 :

Internationalization and localization

2 - 다른 GET 요청을 하나의 URL을 사용 :

귀하의 URL에 GET 요청을 추가 할 수 있습니다 : site.com/posts?lang=en. 그리고 귀하의 견해로 이것을 시도하십시오 :

language = request.GET.get('lang') 

다음이 언어에 맞는 템플릿을 전달하십시오.

예 :

LANG_LIST = ['en', 'fa', 'fr'] 
if language.lower() in LANG_LIST: 
    template = '{}/posts/post.html'.format(language.lower()) 
else: 
    template = 'en/posts/post.html' 

또는 다른 언어 텍스트와 하나의 템플릿을 사용하고 단지 템플릿 언어를 전달하고이 결정할 수 있습니다.

참고 : GET 요청 없이도 언어를 검색 할 수 있도록 세션에 사용자 언어를 추가해야합니다.

여기 세션에 대한 문서입니다 :

How to use sessions | Django documentation | Django

또한 당신은 프로필을 사용자에게 언어를 추가하고 거기에서 언어를 검색 할 수 있습니다. 프로필 언어와 사용자 세션을 모두 사용하는 것이 좋습니다.

3 - 다른 URL (길) :

정말 다 언어 웹 사이트를 처리하는이 방법의 팬이 아니지만, 당신이 정말로 여기에 다음이 방법을 수행해야하는 경우가 이동 : URL이 posts_en, posts_fr을 lile 등을 위해 오른쪽 페이지 URL로 리디렉션 할 수 있습니다

  • 당신은 다른 이름이 필요합니다.
  • 보기에서 페이지 URL을 가져 와서 사용하는 언어를 확인해야합니다. 다음과 같이 할 수 있습니다 : request.path.split('/').
  • 그럼 당신은 언어를 확인하고 바로 옵션 #처럼 렌더링 할 템플릿을 결정해야합니다 2

난 당신이 함께 가야한다고 생각하지 않도록 여러 언어를 처리 이런 식으로 너무 많은 문제가있을 수 있습니다 다른 두 가지 옵션 중 하나.

+0

나는 두 번째 방법. 그러나 또 다른 질문이 있습니다. 어떻게하면이 경우보기로 리디렉션하거나 역순으로 할 수 있으며 '? lang = en'을 URL에 추가 할 수 있습니까? 예 : 리디렉션 (게시물 : 추가) www.mysite.com/posts/newpost/?lang=en – A2maridz

+0

@ A2maridz 글쎄, 세션 도움이되었습니다. 세션이 있는지 확인하고 거기에 언어가 있는지 확인해야합니다. 원하는 언어를 찾았습니까? 그렇지 않으면 그냥 기본값을 사용하십시오. 기본적으로 사용자가 기본 언어를 변경할 때마다 선택한 언어를 세션에 추가하기 만하면 이후 요청에서 'lang'GET 요청이 필요하지 않습니다. – Navid2zp

+0

알았어, 됐어! 세션에 대해 읽어 보겠습니다. 감사 – A2maridz

관련 문제