Обратное геокодирование для возврата результатов только на английском языке?

Используя приведенный ниже код, я запрашиваю обратное геокодирование для текущей координаты.
Все отлично работает, кроме случаев, когда устройство настроено на другой язык, чем английский.
Пример: если языком устройства является итальянский, а я нахожусь в Италии, результатом для страны будет "Италия" вместо "Италия".

Как я могу заставить результаты быть только на английском языке, независимо от языка устройства?

CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
[geoCoder reverseGeocodeLocation:myCurrentLocation completionHandler:^(NSArray *placemarks, NSError *error) {

    for (CLPlacemark * placemark in placemarks) {

        [locationController setLastKnownCountry:[placemark country]];
    }
}];

Спасибо.

3 ответа

Решение

Вы должны использовать класс NSLocale, который управляет информацией на каждом языке. Затем для окончательного перевода вы должны заставить язык быть на английском языке:

CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
[geoCoder reverseGeocodeLocation:myCurrentLocation completionHandler:^(NSArray *placemarks, NSError *error) {

    for (CLPlacemark * placemark in placemarks) {
         //Obtains the country code, that is the same whatever language you are working with (US, ES, IT ...)
         NSString *countryCode = [placemark ISOcountryCode];
         //Obtains a locale identifier. This will handle every language
         NSString *identifier = [NSLocale localeIdentifierFromComponents: [NSDictionary dictionaryWithObject: countryCode forKey: NSLocaleCountryCode]];
         //Obtains the country name from the locale BUT IN ENGLISH (you can set it as "en_UK" also)
         NSString *country = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] displayNameForKey: NSLocaleIdentifier value:identifier];

        //Continues your code
        [locationController setLastKnownCountry:country];
    }
}];

Это работает с iOS 11 API: reverseGeocodeLocation (_: предпочитаемыйЛокаль: завершение Handler:)

К сожалению, мне нужно поддерживать другие версии iOS, и изменение UserDefaults не чувствует себя хорошо и не работает для меня:-(

Вы можете попробовать приведенный ниже код, чтобы извлечь название страны из метки, которая будет показывать результат только на английском языке независимо от названия округа

- (void)findAddress:(CLLocationDegrees)latitude with:(CLLocationDegrees)longitude
{
    CLLocation *location =[[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"Finding address");
        if (error) {
            NSLog(@"Error %@", error.description);
        } else {
            NSLog(@"%@",[placemarks valueForKey:@"country"]);
        }
    }];
}
Другие вопросы по тегам