2016-11-07 178 views
0

所以,我是新來的迅速和我從目前的緯度和長期向城市名稱和國家做出的轉換,它工作正常,這樣的:如何在CLLocationManager中強制默認語言爲英語?

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
{ 
    if didFindLocation == false 
    { 
     didFindLocation = true 
     locationManager.stopUpdatingLocation() 
     userLocation = locations[0] 
     long = userLocation.coordinate.longitude; 
     lat = userLocation.coordinate.latitude; 
     print("\(lat),\(long)") 
     converLocationToCity() 
    } 
} 

func converLocationToCity() 
{ 
    let geoCoder = CLGeocoder() 
    userLocation = CLLocation(latitude: self.lat, longitude: self.long) 
    geoCoder.reverseGeocodeLocation(userLocation, completionHandler: 
    { 
     (placemarks, error) -> Void in 
     var placeMark: CLPlacemark! 
     placeMark = placemarks?[0] 
     if let city = placeMark.addressDictionary!["State"] as? String 
     { 
      self.city = city as String 
     } else 
     { 
      self.city = "" 
     } 
     if let country = placeMark.addressDictionary!["Country"] as? String 
     { 
      self.country = country as String 
     } else 
     { 
      self.country = "" 
     } 
     self.currentCity.name = ("\(self.city), \(self.country)" as String) 
     print("\(self.currentCity.name)") 
     self.fetchWeather.performCurrentWeatherFetch(forSelectedCity: self.currentCity.name) 
     DispatchQueue.main.async() 
      { 
      (self.superview as! UICollectionView).reloadData() 
     } 
    }) 
} 

但是,當設備設置爲其他語言,俄語爲例如它會以俄文字符返回城市名稱和國家,但我需要它只能是英文,請有人提供一些想法或建議?謝謝!

+0

http://stackoverflow.com/questions/25144508/reverse-geocoding-to-return-results-only-in-english –

+0

毫米它似乎是我需要的,但它在Objective中,我是新編程和swift,所以我嘗試了40分鐘已經無法管理它... –

回答

0

這裏是我的解決方案 在獲取位置數據我改變`UserDefaults.standard.set([「基地」],forKey:「AppleLanguages」)」

有一次我收到了詞典的英語我刪除對象

UserDefaults.standard.removeObject(forKey: "AppleLanguages")

然後設置applelanguage到默認值

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let userLocation:CLLocation = locations[0] as CLLocation 
    // Call stopUpdatingLocation() to stop listening for location updates, 
    // other wise this function will be called every time when user location changes. 

    // manager.stopUpdatingLocation() 
    print("user latitude = \(userLocation.coordinate.latitude)") 
    print("user longitude = \(userLocation.coordinate.longitude)") 

    let geoCoder = CLGeocoder() 
    let location = CLLocation(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude) 
    //location.accessibilityLanguage = "en-US" 
    UserDefaults.standard.set(["base"], forKey: "AppleLanguages") 
    geoCoder.reverseGeocodeLocation(location, completionHandler: { placemarks, error in 
     guard let addressDict = placemarks?[0].addressDictionary else { 
      return 
     } 
     print(addressDict) 
     // Print each key-value pair in a new row 
     addressDict.forEach { print($0) } 

     // Print fully formatted address 
     if let formattedAddress = addressDict["FormattedAddressLines"] as? [String] { 
      print(formattedAddress.joined(separator: ", ")) 
     } 

     // Access each element manually 
     if let locationName = addressDict["Name"] as? String { 
      print(locationName) 
     } 
     if let street = addressDict["Thoroughfare"] as? String { 
      print(street) 
     } 
     var myCity:String = "" 
     if let city = addressDict["City"] as? String { 
      print(city) 
      if(city != ""){ 
       myCity = city 
      } 
     } 
     if let zip = addressDict["ZIP"] as? String { 
      print(zip) 
     } 
     var myCountry:String = "" 
     if let country = addressDict["Country"] as? String { 
      print(country) 
      if(country != ""){ 
       myCountry = country 
      } 
      MyGenericFunctions.sharedInstance.saveCountry(country: country) 
     } 
     manager.stopUpdatingLocation() 

     if(myCity != "" && myCountry != "" && self.isCurrLocAPICalled != true){ 
      print("API Called") 
      self.isCurrLocAPICalled = true 
      self.callLocationSearch(strCity: myCity, strCountry: myCountry) 
      UserDefaults.standard.removeObject(forKey: "AppleLanguages") 
     } 

    }) 

    //manager.stopUpdatingLocation() 
}