我正在使用Google的Place API自动填充用户输入的城市名称(网页)。加载API时将语言(pt-BR)作为参数传递,文本框正在以葡萄牙语正确填充,但是当执行方法getPlace()时,它将以英语返回结果(country和administrative_area_level_1)。
我不确定问题是Google API,它们是葡萄牙语的翻译还是我错过的。我试图加载它通过西班牙语(es),英语(en)和意大利语(它)作为语言的参数并按预期工作。
以下是我的加载方式:
<script src="https://maps.googleapis.com/maps/api/js?key=[myapikey]&signed_in=true&libraries=places&callback=initAutocomplete&language=pt-BR" async defer></script>
...以及我如何根据Google的示例代码获得结果:
// Get the place details from the autocomplete object.
var place = autocomplete.getPlace();
我也使用反向地理编码API传递place_id,问题是相同的(C#代码)。
var apikey = "[myserverapikey]";
var requestUri = string.Format("https://maps.googleapis.com/maps/api/geocode/json?place_id={0}&key={1}", place_id, apikey);
var idiomas = new string[] {"pt-BR", "es", "en-us", "it"};
string responseContent = string.Empty;
foreach (var idioma in idiomas)
{
HttpWebRequest request = WebRequest.Create(requestUri) as HttpWebRequest;
request.Headers.Add(HttpRequestHeader.AcceptLanguage, idioma);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
StreamReader reader = new StreamReader(response.GetResponseStream());
var jsontext = reader.ReadToEnd().Trim();
responseContent += jsontext;
var json = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(jsontext);
}
return Json(responseContent, JsonRequestBehavior.AllowGet);
我查看过文档并支持pt-BR:Google API Supported Languages
答案 0 :(得分:0)
巴西葡萄牙语的语言代码是&#34; pt_BR&#34;而不是&#34; pt-BR&#34;所以将链接更改为:
<script src="https://maps.googleapis.com/maps/api/js?key=[myapikey]&signed_in=true&libraries=places&callback=initAutocomplete&language=pt_BR" async defer></script> >
事实证明,我错了......无论是pt-BR还是pt_BR工作。
getPlace不会根据语言返回结果,这是Google地图中的现有错误: https://code.google.com/p/gmaps-api-issues/issues/detail?id=7891
一个hacky解决方案是读取自动完成输入,因为它被转换为指定的语言。如果您使用自动填充搜索框,则可以在其输入文本框中查询,它只有一种输入类型的文本..因此您可以执行以下操作以获取指定语言的完整地址:
$("input:text").val()
这将为您提供完整的地址,之后您将需要解析字符串以获取城市,州,国家/地区信息。