我的iphone应用程序应该根据用户的经度和经度来解析地址。 reverseGeocodeLocation工作正常,但结果是英文。
有没有办法将结果本地化为其他语言?
无法在苹果或其他任何地方找到有关它的任何信息。
我使用的代码是:
CLGeocoder *geocoder = [[[CLGeocoder alloc] init] autorelease];
CLLocation *location = [[[CLLocation alloc]
initWithLatitude:coord.latitude longitude:coord.longitude] autorelease];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");
if (error){
NSLog(@"Geocode failed with error: %@", error);
[self displayError:error];
return;
}
if(placemarks && placemarks.count > 0)
{
//do something
CLPlacemark *topResult = [placemarks objectAtIndex:0];
NSString *addressTxt = [NSString stringWithFormat:@"%@ %@,%@ %@",
[topResult subThoroughfare],[topResult thoroughfare],
[topResult locality], [topResult administrativeArea]];
}
}
答案 0 :(得分:12)
我找到了如何本地化国家名称,也许它会有所帮助:
CLPlacemark *placemark;
NSString *identifier = [NSLocale localeIdentifierFromComponents: [NSDictionary dictionaryWithObject: placemark.ISOcountryCode forKey: NSLocaleCountryCode]];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *country = [usLocale displayNameForKey: NSLocaleIdentifier value: identifier];
插入任何国家/地区ID而不是@“en_US”
答案 1 :(得分:1)
Mattt Thompson使用AddressBookUI.framework中的方法对本地化其网站writeup上的地址有一个很好的NSHipster。他还在github上有一个formatting library,其中包含一个用于进行此类本地化的类,该类使用他描述的AddressBookUI.framework方法。
答案 2 :(得分:1)
iOS 4的Swift 4解决方案
您可以通过设置参数 preferredLocale: Locale.init(identifier: "en_US")
来强制以选定的语言环境获得地理编码结果。
CLGeocoder().reverseGeocodeLocation(location, preferredLocale: Locale.init(identifier: "en_US"), completionHandler: {(placemarks, error) -> Void in
print(location)
if error != nil {
print("Reverse geocoder failed with error" + error!.localizedDescription)
return
}
if placemarks!.count > 0 {
let pm = placemarks![0]
print(pm.administrativeArea!, pm.locality!)
}
else {
print("Problem with the data received from geocoder")
}
})
答案 3 :(得分:0)
从iOS11开始,苹果为我们提供了另一个API,可以将语言环境设置为打印本地化语言。
- (void)reverseGeocodeLocation:(CLLocation *)location preferredLocale:(nullable NSLocale *)locale
completionHandler:(CLGeocodeCompletionHandler)completionHandler API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));