Обратное геокодирование для возврата результатов только на английском языке?
Используя приведенный ниже код, я запрашиваю обратное геокодирование для текущей координаты.
Все отлично работает, кроме случаев, когда устройство настроено на другой язык, чем английский.
Пример: если языком устройства является итальянский, а я нахожусь в Италии, результатом для страны будет "Италия" вместо "Италия".
Как я могу заставить результаты быть только на английском языке, независимо от языка устройства?
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"]);
}
}];
}