2013-08-19 70 views
2

我遇到了一個相當奇怪的情況:後端開發人員要求我強制將執行地理定位返回的城市名稱設置爲特定語言?例如,無論iOS的語言如何,它都會返回哥本哈根而不是哥本哈根。我在網上找不到關於此的任何內容。您的幫助將不勝感激。謝謝iOS Force地理位置以特定語言返回城市名稱

+0

我對這個問題有點困惑。您是否試圖將地理編碼反轉到一個位置(即給定位置,以特定語言獲取該城市名稱的位置)? –

+0

類似的東西。我試圖對地址進行地理編碼,並使核心位置框架以特定語言向我返回城市。但是從我所看到的框架使用語言環境語言以用戶在他的手機上設置的語言返回城市。我只是需要它在例如丹麥語,無論用戶在他的ios上設置了什麼語言 – alex

回答

2

不確定這是否是最好和最安全的解決方案,但您可以臨時更改區域設置,同時進行反向地理代碼調用,然後在完成後重置它。

NSArray *defaultLanguages = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"]; 
NSArray *languages = [NSArray arrayWithObject:@"da"]; 
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
CLLocation *location = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude]; 
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { 
     CLPlacemark *placemark = placemarks[0]; 
     NSString *danish = placemark.country; 
     [[NSUserDefaults standardUserDefaults] setObject:defaultLanguages forKey:@"AppleLanguages"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
}]; 
+1

我們在這裏補充一點,提出的解決方案有一個非常糟糕的錯誤:它有效地將語言存儲在應用程序域中,因此覆蓋系統中Apple語言的任何進一步變化(例如,當用戶將iOS設備的語言更改爲其他值 - 因爲結果應用程序UI將不考慮這些語言更改)。讓我建議使用'[[NSUserDefaults standardUserDefaults] removeObjectForKey:@「AppleLanguages」]'來恢復覆蓋。 –

+0

@GrigoryEntin是的,我剛纔提到你可能想在重新設置地理區域時使用地理編碼,但不能傷害強調不這樣做的危害。謝謝 –

+0

嗯,我不確定我是否正確理解你。問題是你的解決方案中的[[NSUserDefaults standardUserDefaults] setObject:defaultLanguages forKey:@「AppleLanguages」](完成處理程序中)不會在完成時重設區域設置。它有效地將defaultLanguage的當前值存儲在應用程序域中,而不是刪除自定義域。因此,如果AppleLanguages的系統寬度值發生更改,它將不會反映在應用程序默認值中,因爲它將被存儲值覆蓋(不再與當前/系統範圍的值匹配)。 –

相關問題