2011-05-30 13 views
38

Użyłem tego kodu dla uzyskania którego kraj iPhone należą do:NSLocale i kraj nazwa

NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 
NSString *country = [locale displayNameForKey: NSLocaleCountryCode value: countryCode]; 

i chcę uzyskać nazwę kraju zawsze w języku angielskim, ale jeśli iPhone jest w każdym innym języku, to zwraca nazwa kraju w tym języku ...

+4

Należy pamiętać, że ustawienia narodowe i język są konfigurowane przez użytkownika. Na przykład rodzimy użytkownik posługujący się językiem angielskim, który nigdy nie opuścił USA, ale akurat uczy się języka włoskiego, może zmienić język i lokalizację w języku na Włochy, a osoba z telefonem ustawionym na język angielski może podróżować za granicę. Jeśli naprawdę chcesz dowiedzieć się, w jakim kraju znajduje się telefon, skorzystaj z funkcji geolokalizacji. –

+0

@ JeremyW.Sherman: Zgoda. Użyj lokalizacji, aby określić sposób lokalizowania treści, nie określaj, gdzie jest użytkownik. – Alan

Odpowiedz

90

Zapytanie angielski locale dla displayName

tak:

NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

NSString *country = [usLocale displayNameForKey: NSLocaleCountryCode value: countryCode]; 
11

Oto nieco kodu dla uzyskania pewnych informacji o dostępnych NSLocale-obiektów w systemie SWIFT, wystarczy umieścić kod do Playground:

func printInEnglish() { 

    // get all available Identifiers 
    let allLocaleIdentifiers : Array<String> = NSLocale.availableLocaleIdentifiers as Array<String> 

    // init an english NSLocale to get the english name of all NSLocale-Objects 
    let englishLocale : NSLocale = NSLocale.init(localeIdentifier : "en_US") 

    // enumerate all available Identifiers 
    for anyLocaleID in allLocaleIdentifiers { 

     // get the english name 
     var theEnglishName : String? = englishLocale.displayName(forKey: NSLocale.Key.identifier, value: anyLocaleID) 
     if theEnglishName == nil {theEnglishName = "no english name available"} 

     // create a NSLocale-Object 
     let anyLocale : NSLocale = NSLocale.init(localeIdentifier : anyLocaleID) 

     // ask for CurrencyCode, CurrencySymbol and CountryCode, ... of the created NSLocale-Object 
     var theCurrencyCode : String? = anyLocale.object(forKey: NSLocale.Key.currencyCode) as? String 
     if theCurrencyCode == nil {theCurrencyCode = "no Currency Code available"} 

     var theCurrencySymbol : String? = anyLocale.object(forKey: NSLocale.Key.currencySymbol) as? String 
     if theCurrencySymbol == nil {theCurrencySymbol = "no currency symbol available"} 

     var theCountryCode : String? = anyLocale.object(forKey: NSLocale.Key.countryCode) as? String 
     if theCountryCode == nil {theCountryCode = "no country code available"} 

     var theLanguageCode : String? = anyLocale.object(forKey: NSLocale.Key.languageCode) as? String 
     if theLanguageCode == nil {theLanguageCode = "no language code available"} 

     // print the result -> see the result in LoggingArea of xCode 
     print("Identifier : \(anyLocaleID)\nName   : \(theEnglishName!)\nCurrencyCode : \(theCurrencyCode!)\nSymbol  : \(theCurrencySymbol!)\nLanguageCode : \(theLanguageCode!)\nCountryCode : \(theCountryCode!)\n----------------------------") 
    } 
} 

printInEnglish() 

uzyskać tego rodzaju informacje (przykład):

You get this kind of information (example):