Google Geocode指定英文仍返回本地语言短名称问题咨询
为什么Google Geocode返回的短名称是泰语,如何强制返回英文?
问题原因
首先得明确Google Geocoding API里两个核心地址字段的逻辑差异:
long_name:这个字段完全受你指定的language参数控制,你能拿到英文长名称,说明language=en已经正常生效了。short_name:这个字段存储的是地址组件的官方标准化缩写/代码,它的取值通常遵循当地行政机构的规定,或是ISO这类国际通用标准,并不受language参数直接影响。
比如你查询的宋卡府(Songkhla),在泰国本地行政体系里可能有官方的泰文缩写,API会优先返回这个官方标识,哪怕你指定了英文语言参数。而国家层面的短名称如果出现泰语,大概率是因为该地区没有对应的国际通用英文缩写(不过正常情况下,国家的short_name应该是ISO 3166代码,比如泰国是TH,可能你的响应属于特殊场景)。
解决办法
遗憾的是,Google Geocoding API并没有提供直接强制short_name返回英文的参数,但可以通过以下两种方式优化:
结合
region参数辅助偏向:
在请求里额外添加region=us(或其他英语国家的ISO代码),示例请求如下:https://maps.googleapis.com/maps/api/geocode/xml?address=Soi%2072%2C%20Songkhla%2C%20Thailand&sensor=false&language=en®ion=us这个参数会让API优先返回偏向指定区域的解析结果,有时候能促使API返回英文的短名称,但无法100%保证,取决于该地区是否存在官方认可的英文缩写。
自行映射转换:
如果上述方法无效,你可以预先维护一份泰国行政区域的泰文缩写与英文名称/缩写的映射表,拿到API响应后,对short_name字段做替换处理。比如提前收集宋卡府的泰文缩写对应Songkhla,泰国的泰文短名称对应TH或Thailand,这样就能确保最终展示的是英文内容。
另外,注意你请求URL里的%C2%A0(不间断空格),虽然不影响language参数的生效,但建议替换成普通空格的编码%20,避免潜在的解析问题。
内容的提问来源于stack exchange,提问作者Ruina
相关产品推荐
相关产品推荐

