当我打电话
geocoder reverseGeocodeLocation:currentLoc completionHandler:
我的语言获得的所有数据(市,县,...)根据区域对iphone设置。
我怎样才能迫使经常可以在英语这个数据?
当我打电话
geocoder reverseGeocodeLocation:currentLoc completionHandler:
我的语言获得的所有数据(市,县,...)根据区域对iphone设置。
我怎样才能迫使经常可以在英语这个数据?
你不能强迫从检索到的地理数据的语言CLGeocoder
或MKReverseGeocoder
。 它将始终是设备的系统语言。 如果你想在英语中的数据,你需要建立自己的地理编码器这是比较容易与实现谷歌地图API 。
这是在谷歌地图API支持的语言电子表格: https://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&gid=1
对于未来的读者,接受的答案是不正确的(至少没有任何更多)。
UserDefaults.standard.set(["en"], forKey: "AppleLanguages")
gc.reverseGeocodeLocation(loc) {
print($0 ?? $1!)
UserDefaults.standard.removeObject(forKey: "AppleLanguages")
print(UserDefaults.standard.object(forKey: "AppleLanguages") as! [String])
}
调用removeObject(forKey:)
因为你要在返回的值重置重要UserDefaults
的系统设置。 一些答案,让你从呼叫保持原值UserDefaults.standard.object(forKey: "AppleLanguages")
并获得地址后设置,但是,这个停止您的UserDefaults
从同步与iOS的“设置”全球语言首选项是应用程序。
iOS的11有一个新的-reverseGeocode...
接受语言环境使用方法:
- (void)reverseGeocodeLocation:(CLLocation *)location preferredLocale:(NSLocale *)locale
completionHandler:(CLGeocodeCompletionHandler)completionHandler
斯威夫特签名:
func reverseGeocodeLocation(_ location: CLLocation, preferredLocale locale: Locale?, completionHandler: @escaping CLGeocodeCompletionHandler)
把你喜欢的任何语言环境。 这个例子只是利用当前区域
NSLocale *currentLocale = [NSLocale currentLocale];
[self.geocoder reverseGeocodeLocation:self.location preferredLocale:currentLocale
completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
// Handle the result or error
}];
更新斯威夫特4:
只需使用此代码以迫使英国返回的数据:
func fetchCityAndCountry(from location: CLLocation, completion: @escaping (_ locality: String?, _ country: String?, _ error: Error?) -> ()) {
CLGeocoder().reverseGeocodeLocation(location, preferredLocale: Locale.init(identifier: "en")) { placemarks, error in
completion(placemarks?.first?.locality,
placemarks?.first?.country,
error)
}
}
您可以更改区域设置标识符将数据转换成其他语言(“CA”,“ES”,“FR”,“德” ......)。
这个函数可以调用,例如,像这样的:
fetchCityAndCountry (from: userLocationCL) { locality, country, error in
guard let locality = locality, let country = country, error == nil else { return }
// your code
}
凡userLocationCL是当前用户的位置。