2012-11-13 15 views
6

मैं सीएलजीकोडर का उपयोग करता हूं ताकि सीएलएलोकेशन को अक्षांश/अक्षांश से नामों के नाम पर स्थानांतरित किया जा सके। यह बढ़िया काम करता है। लेकिन अभी भी एक चीज मुझे परेशान करती है। जब मैं अंग्रेजी, नीचे दिए गए कोड का परिणाम के लिए डिवाइस भाषा सेट: चेंगदू:CLPlacemark.locality, डिवाइस भाषा अलग होने पर मूल्य परिवर्तन

- (void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
     fromLocation:(CLLocation *)oldLocation{ 
     /* We received the new location */ 
     NSLog(@"Latitude = %f", newLocation.coordinate.latitude); 
     NSLog(@"Longitude = %f", newLocation.coordinate.longitude); 
     [self.geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks, NSError* error){ 
      MKPlacemark *placemarker = [placemarks objectAtIndex:0]; 
      NSLog(@"%@",placemarker.locality); 
     }]; 
     [self.locationManager stopUpdatingLocation]; 

}

की तरह, अंग्रेजी में प्रदर्शित किया जाता है।

जब मैं चीनी के लिए उपकरण की भाषा बदलने के लिए,

placemarker.locality 

एक चीनी चरित्र मान देता है।

लेकिन मैं वास्तव में क्या चाहता हूं कि यह हमेशा एक अंग्रेजी चरित्र मूल्य (कोई चीनी चरित्र मूल्य) वापस नहीं करेगा। मुझे लगता है कि यह लोकेल से संबंधित कुछ है। क्या कोई इसमे मेरी मदद कर सकता है? धन्यवाद।

उत्तर

13

आमतौर पर, उपयोगकर्ता स्थानीय लोगों के साथ गड़बड़ करना एक अच्छा अभ्यास नहीं है। यदि डिवाइस भाषा चीनी पर सेट की गई है क्योंकि उपयोगकर्ता चीनी अक्षरों को पढ़ना चाहता है, तो आप उसे अंग्रेजी में क्यों दिखाना चाहते हैं जब उसने आपको पहले ही बताया था कि वह चीनी चाहते हैं?

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"]; 

इस तरह:

वैसे भी, अगर किसी भी कारण से आप अंग्रेजी के लिए मजबूर करने की जरूरत है, तो आप जियोकोडर जो standardUserDefaults पहले भाषा का उपयोग आप कुछ इस तरह कर सकते हैं तो बस जियोकोडर विधि कॉल करने से पहले चाल कर सकते हैं , geoCoder आपको अंग्रेजी में सभी जानकारी देगा।

बहरहाल, यह वे कहाँ थे करने के लिए वापस उपयोगकर्ता प्राथमिकताएं नहीं बदल जाएगा तो यह एक सबसे अच्छा तरीका है उन्हें देने के लिए:

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"]; 

जैसा कि मैंने कहा, क्या तुम सच में लगता है कि आप इस आवश्यकता चाहिए, लेकिन यदि आप वास्तव में इसकी ज़रूरत है, यह काम करेगा।

+1

इस समाधान का प्रयास किया लेकिन यह आईओएस 9 पर काम नहीं करता है या सिम्युलेटर की वजह से है। अगर किसी को किसी भी कामकाज के बारे में पता है तो मुझे बताएं। –

+0

यह मेरे लिए भी काम नहीं करता है .. @ मोहम्मद आश्राफुलबीर क्या आपके पास इस पर कोई अपडेट है? – Akshay

+0

@ अक्षय मेरे पक्ष से कोई अपडेट नहीं –

4

मैं एक अच्छा समाधान

NSString *country = placemark.ISOcountryCode; 

यह सटीक देश कोई फर्क नहीं पड़ता अपने स्थान है वापस आ जाएगी पाया। उदाहरण के लिए देश @ "यूएस" के बजाय @ "यूएस" होगा