2011-02-06 7 views
0

У меня есть приложение Django и встроены некоторые карты Google через v3 api. После недели открытия и игры вокруг все работало нормально, пока ...Django - Интернационализация и Google Maps api v3

Я изменил язык в своем приложении, нажав на флаг в форме, которая отправляет действие в/i18n/setlang /, что и есть Django использует для изменения языка. Теперь появился новый язык, но карт нет. В отладчике Chrome это дает следующее сообщение об ошибке:

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

StaticMapService.GetMapImage 

Ниже приводится содержание заголовка отладчика Chrome для ошибки:

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 

Если установить язык на английский все работает отлично снова ..

Хорошо, так что при загрузке карты нет ничего общего с каким-либо переводом, но я полагаю, что Django изменил что-то, что нарушает запрос 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

Хорошо, возникла основная проблема.

Переменные широты и долготы Django в моей базе данных являются десятичными полями. Когда я передаю их из шаблона в функцию javascript, они передают первую часть десятичной дроби первому аргументу, а вторую часть десятичного слова ко второму аргументу вместо двух отдельных аргументов.

, например ... 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's 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