2011-02-06 6 views
0

장고 앱이 있고 v3 API를 통해 일부 Google지도를 통합했습니다. 일주일에 한 번 발견하고 놀 때까지 모든 것이 정상적으로 작동했습니다 ...Django - 국제화 및 Google지도 api v3

/i18n/setlang /에 작업을 게시하는 양식의 플래그를 클릭하여 언어를 변경했습니다. Django는 언어를 변경하는 데 사용합니다. 이제 새로운 언어가 나타나지만지도는 그렇지 않습니다. 오류의 크롬 디버거 헤더 내용

Failed to load resource: the server responded with a status of 400 (Bad Request) 

StaticMapService.GetMapImage 

은 다음과 같다 : 크롬 디버거에서는 다음과 같은 오류를주고 내가 영어로 다시 언어를 설정하면

1. 
     Request URL: 
     http://maps.googleapis.com/maps/api/js/StaticMapService.GetMapImage?1m2&1iNaN&2iNaN&2e2&3u8&4m2&1uNaN&2uNaN&5m3&1e3&2b1&5sen-US&token=128748 
    2. 
     Request Method: 
     GET 
    3. 
     Status Code: 
     [400 Bad Request] 
     400 Bad Request 
    4. Request Headers 
     1. 
      Referer: 
      http://127.0.0.1:8000/uns/uns_cities_form/Mu%C4%9Fla/ 
     2. 
      User-Agent: 
      Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3 
    5. Query String Parameters 
     1. 
      1m2: 
     2. 
      1iNaN: 
     3. 
      2iNaN: 
     4. 
      2e2: 
     5. 
      3u8: 
     6. 
      4m2: 
     7. 
      1uNaN: 
     8. 
      2uNaN: 
     9. 
      5m3: 
     10. 
      1e3: 
     11. 
      2b1: 
     12. 
      5sen-US: 
     13. 
      token: 
      128748 
    6. Response Headers 
     1. 
      Content-Length: 
      1350 
     2. 
      Content-Type: 
      text/html; charset=UTF-8 
     3. 
      Date: 
      Sun, 06 Feb 2011 20:29:59 GMT 
     4. 
      Server: 
      staticmap 
     5. 
      X-XSS-Protection: 
      1; mode=block 

모두가 다시 잘 작동은 ..

지도를로드하는 동안 어떤 번역 작업과도 관련이 없지만 장고가 뭔가 변경되었거나 Http 요청을 방해하는 기타 요소가 있음을 알았습니다. 솔직히 말해서 무엇이 있는지 전혀 모릅니다. 계속. 다음은 옵션과지도에 대한 호출

//Map Options 
myOptions = 
{ 
    zoom: 8, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.HYBRID, 
    streetViewControl: false, 
    mapTypeControl: true, 
    mapTypeControlOptions: { 
    style: google.maps.MapTypeControlStyle.DROPDOWN_MENU 
    }, 
} 

//Create the map 
map = new google.maps.Map(elem,myOptions); 

사람이 건너가 있거나 사람이 발생 될 수 있습니다 무엇에 대한 몇 가지 빛을 던질 수있다?

+0

언어를 바꿀 때 이상한 소리가 들리니? –

답변

2

좋아요, 핵심 문제가 있습니다.

내 데이터베이스의 장고 위도 및 경도 변수는 십진수 필드입니다. 템플릿에서 자바 스크립트 함수로 전달하면 십진법의 첫 번째 부분을 첫 번째 인수로 전달하고 두 번째 부분은 두 번째 인수로 전달하는 대신 두 번째 인수로 전달합니다. 이상한 것은 기본 언어가 영어 인 경우이 발생하지 않는다는 것입니다 그러나 예를 들어

... 36.620556은

나 '... 다음

onclick='showmap({{city.0.0.latitude}},{{city.0.0.longitude}});' 

The function for showmap header is 

showmap(lat,lng) 
{... 
However, lat and lan come out as follows 
lat = 36 and lan = 620556 

의 위도입니다 ... 좀 더 연주하고 내가 찾을 수 있는지 것이다

해결책 : 라이너가 문제였다 현지화 제안했다으로

. 필자는 소수점으로 쉼표를 사용하고 있었으므로 쉼표를 점으로 대체하는 빠른 템플리트 태그를 작성했습니다.

def fixlatlan(Object): 
    o = str(Object) 
    o = o.replace(",", ".") 
    return o 

register.filter('fixlatlan', fixlatlan) 
2

Django의 Format Localization으로 인한 것으로 의심됩니다.

When using Django's formatting system, dates and numbers on templates will be displayed using the format specified for the current locale. Two users accessing the same content, but in different language, will see date and number fields formatted in different ways, depending on the format for their current locale.

언어에 따라 구분자로 도트 또는 쉼표를 사용할 수 있습니다. 이는 소수점 구분 기호가 쉼표이기 때문에 2 개의 매개 변수 대신 4 개의 매개 변수가 있음을 의미 할 수 있습니다.

floatformat을 적용하면 이러한 일이 발생하지 않도록 할 수 있습니다.

{{ city.0.0.latitude|floatformat:6 }},{{ city.0.0.longitude|floatformat:6 }} 
+0

흠, 물론입니다. 이 특별한 로케일은 터키이고 나는 분리 기호로 도트를 사용한다고 생각합니다 ... 저 사람을 잘 다뤘습니다! – Chez

+0

사실, 다른 점은 죄송합니다. 쉼표를 사용합니다 ...그리고 floatformat는 작동하지 않으므로, 빠른 템플릿 태그를 써서 소수점을 문자열로 변환하고 쉼표를 점으로 바꿨습니다. 솔루션을 가리켜 주셔서 다시 한번 감사드립니다. – Chez

관련 문제