This is generally not a good practice for communicating with local users. If the device language is set to Chinese, it is that the user wants to read Chinese characters, why do you want to show it in English when he already told you that he wants a Chinese?
In any case, if for some reason you need to force English, you can trick geoCoder, which uses the standard language standardUserDefaults, so that you can do something like this immediately before calling the geoCoder method:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
In this way, geoCoder will provide you with all the information in English.
However, this will change the user settings, so this is the best approach to get them back to where they were:
NSMutableArray *userDefaultLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"]; [self.geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks, NSError* error){ MKPlacemark *placemarker = [placemarks objectAtIndex:0]; NSLog(@"%@",placemarker.locality); }]; [[NSUserDefaults standardUserDefaults] setObject:userDefaultLanguages forKey:@"AppleLanguages"];
As I said, you really need to think about why you need it, but if you really need it, it will work.
source share