2010-08-12 3 views
3

내 장고 프로젝트의 국제화를 위해 장고의 i18n을 사용하고 있습니다. 이 예에서와 같은 형태의 템플릿 언어를 설정하는 대신 사용하기 위해i18n으로 장고 국제화 : jQuery를 사용하여 템플릿에서 언어 선택


:

<form action="{{site_url}}i18n/setlang/" method="post"> 
    <input name="next" type="hidden" value="" /> 
    <select name="language"> 
     {% for language in languages %} 
     <option value="{{language.0}}">{{language.1}}</option> 
     {% endfor %} 
    </select> 
    <input type="submit" value="Ok" /> 
    </form> 

내가 간단한 일반 텍스트 링크를 사용하고 싶습니다; 이 같은 :

var languageLink = $('#language-choser > a'); 

languageLink.click(function(e){ 
    var languageURL = languageLink.attr('href'); 
    var languageNow = languageLink.text(); 
    var lang = (languageNow=='English') ? 'en' : 'es'; 
    $.post(languageURL, {next: "", language:lang}); 
}); 

이 기능은 파이어 폭스하지만 크롬에서 작동합니다 :

{% for language in languages %} 
    {% ifnotequal language.0 lang %} 
    <a href="{{site_url}}i18n/setlang/" >{{language.1}}</a>{% else %}{{language.1}} 
    {% endifnotequal %} 
    ... 
{% endfor %} 

이전 템플릿 조각을 주셔서 그의 작품, 나는 다음과 같은 jQuery를 기능을 만들었 않는 단순히 것 언어를 변경하지 않고 페이지를 다시로드하십시오.

누군가 나에게 무엇이 잘못되었다고 말할 수 있습니까? 나는 길을 찾지 않고 오랫동안 놀고 있었어.


편집 그것이 캐싱 문제가 될 수 있다고 본다. 내 클릭 기능에서 캐시 된 페이지를 정리해야합니다. 그러나 어떻게? 아니면 전체 사이트에 대한 브라우저 캐싱을 비활성화해야합니까? 나는 그렇게 생각하지 않는다 ...

답변

0

핸들러 함수의 시작 부분에 디버그 명령문 (console.log(), 심지어는 alert()도 포함)을 추가하여 전혀 호출되지 않도록한다. 클릭 핸들러를 document.ready() 핸들러에 추가하고 있습니까?

또한 $.post 함수는 AJAX POST를 수행하지만 페이지를 새로 고치지 않으므로 아무 일도 일어나지 않을 수도 있습니다. Firebug/Chrome 개발자 도구를 사용하여 발신 요청을 검토하여 확인하십시오.

click() 처리기가 명시 적으로 값을 반환하도록 할 수도 있습니다. true는 클릭 처리를 계속하고, false는 중지를 의미합니다. 어쩌면 그것이 문제의 근본 원인 일 수 있습니다. Firefox에서 처리기는 때때로 true을 반환하므로 링크를 따라 가며 Chrome에서는 false을 반환하지만 POST는 실행되지만 링크는 따라 가지 않습니다.

+0

예, 클릭 핸들러는 document.ready() 핸들러에 있습니다. 저는 Firebug와 DevTools를 사용하고 있습니다. 몇 가지 로그를 추가하려고했습니다. 함수가 호출되고 오른쪽 변수 값으로 끝날 때까지 실행됩니다. 클릭 후 페이지는 Firefox에서 선택한 언어로 새로 고침되지만 크롬은 이전과 같은 언어로 표시됩니다. – dolma33