【问题标题】:Google Place API in portugueseGoogle Place API 葡萄牙语
【发布时间】:2016-01-15 18:21:52
【问题描述】:

我正在使用 Google 的 Place API 来自动完成用户输入的城市名称(网页)。加载 API 时将语言 (pt-BR) 作为参数传递,并且文本框以葡萄牙语正确填写,但是当方法 getPlace() 执行时,它会以英语返回结果(国家和行政区域级别_1)。

我不确定问题出在 Google API、他们的葡萄牙语翻译还是我错过的东西上。我尝试加载它传递西班牙语(es)、英语(en)和意大利语(it)作为语言参数并按预期工作。

这是我的加载方式:

<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

【问题讨论】:

  • 链接的答案说当翻译不可用时会发生这种情况,但这不是我的情况,因为文本框在 pt-BR 中正确填写。这很奇怪,但可能取决于 Google 的数据结构。

标签: google-places-api google-geocoding-api


【解决方案1】:

巴西葡萄牙语的语言代码是“pt_BR”而不是“pt-BR”,因此将链接更改为:

<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 不根据语言返回结果,这是谷歌地图中的一个现有错误: https://code.google.com/p/gmaps-api-issues/issues/detail?id=7891

一个 hacky 解决方案是读取自动完成输入,因为它已转换为指定的语言。如果您使用自动完成搜索框,您可以在其输入文本框上进行查询,它只有一种输入类型的文本。因此您可以执行以下操作以获取指定语言的完整地址:

$("input:text").val()

这将为您提供完整地址,之后您必须解析字符串以获取城市、州、国家/地区信息。

【讨论】:

  • 感谢您的回答,但文档说这是 pt-BR。无论如何,我尝试了您的建议,但也没有用。支持的语言:developers.google.com/maps/faq#languagesupport
  • hmm.. 我明白了.. 不幸的是.. 这是谷歌地图中的一个错误.. : code.google.com/p/gmaps-api-issues/issues/detail?id=7891
  • 嘿,看看 hacky 解决方案,它可能对你有用
  • 再次感谢!我已经尝试过了,但 Google Places API 没有一致的显示名称返回模式。例如:它返回“São Paulo - SP, Brasil”,使用破折号分隔城市名称(São Paulo)和行政区(SP),但如果我搜索 New York,它使用逗号(“New York, Nova Iorque , Estados Unidos”)。如果我搜索 Nova Iorque,它会返回没有行政区域的“Nova Iorque, Estados Unidos”。对 NYC 的两次搜索都返回相同的 place_id。
  • 在上述所有情况下选择语言都有充分的理由,请参阅*.com/questions/33520686/… 的更多详细信息(和示例) ─ Places Autocomplete API 是一个例外:返回的术语将匹配用户输入。