25

我的 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]];
    }
}
4

4 回答 4

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"

于 2013-12-26T17:04:28.180 回答
3

Swift 4、iOS 11的解决方案

您可以通过设置参数强制以所选语言环境获取地理编码结果: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")
    }
})
于 2019-01-25T23:36:09.890 回答
1

Mattt Thompson一篇关于使用 AddressBookUI.framework 中的方法来本地化他的站点NSHipster上的地址的精彩文章。他还在 github 上有一个格式化库,其中包含一个用于执行此类本地化的类,该类使用他描述的 AddressBookUI.framework 方法。

于 2012-12-01T20:39:57.683 回答
0

从 iOS11 开始,Apple 为我们提供了另一个 API,可以设置 locale 来打印本地化语言。

- (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));
于 2018-09-12T02:51:26.390 回答