如何强制在其中反向iOS上的地理编码数据的语言被接收?(How to force language

2019-06-27 12:40发布

当我打电话

geocoder reverseGeocodeLocation:currentLoc completionHandler:

我的语言获得的所有数据(市,县,...)根据区域对iphone设置。

我怎样才能迫使经常可以在英语这个数据?

Answer 1:

你不能强迫从检索到的地理数据的语言CLGeocoderMKReverseGeocoder 。 它将始终是设备的系统语言。 如果你想在英语中的数据,你需要建立自己的地理编码器这是比较容易与实现谷歌地图API 。

这是在谷歌地图API支持的语言电子表格: https://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&gid=1



Answer 2:

对于未来的读者,接受的答案是不正确的(至少没有任何更多)。

UserDefaults.standard.set(["en"], forKey: "AppleLanguages")
gc.reverseGeocodeLocation(loc) {
    print($0 ?? $1!)

    UserDefaults.standard.removeObject(forKey: "AppleLanguages")
    print(UserDefaults.standard.object(forKey: "AppleLanguages") as! [String])
}

调用removeObject(forKey:)因为你要在返回的值重置重要UserDefaults的系统设置。 一些答案,让你从呼叫保持原值UserDefaults.standard.object(forKey: "AppleLanguages")并获得地址后设置,但是,这个停止您的UserDefaults从同步与iOS的“设置”全球语言首选项是应用程序。



Answer 3:

iOS的11有一个新的-reverseGeocode...接受语言环境使用方法:

- (void)reverseGeocodeLocation:(CLLocation *)location preferredLocale:(NSLocale *)locale
    completionHandler:(CLGeocodeCompletionHandler)completionHandler

斯威夫特签名:

func reverseGeocodeLocation(_ location: CLLocation, preferredLocale locale: Locale?, completionHandler: @escaping CLGeocodeCompletionHandler)

把你喜欢的任何语言环境。 这个例子只是利用当前区域

NSLocale *currentLocale = [NSLocale currentLocale];
[self.geocoder reverseGeocodeLocation:self.location preferredLocale:currentLocale
    completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

    // Handle the result or error
}];


Answer 4:

更新斯威夫特4:

只需使用此代码以迫使英国返回的数据:

func fetchCityAndCountry(from location: CLLocation, completion: @escaping (_ locality: String?, _ country:  String?, _ error: Error?) -> ()) {
    CLGeocoder().reverseGeocodeLocation(location, preferredLocale: Locale.init(identifier: "en")) { placemarks, error in
        completion(placemarks?.first?.locality,
                   placemarks?.first?.country,
                   error)
    }
}

您可以更改区域设置标识符将数据转换成其他语言(“CA”,“ES”,“FR”,“德” ......)。

这个函数可以调用,例如,像这样的:

fetchCityAndCountry (from: userLocationCL) { locality, country, error in
   guard let locality = locality, let country = country, error == nil else { return }
   // your code
}

凡userLocationCL是当前用户的位置。



文章来源: How to force language in which reverse geocoding data on iOS is received?