2011-05-30 6 views
38

Я использовал этот код для получения какой страны iPhone принадлежит:NSLocale и название страны

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

, и я хочу, чтобы получить название страны всегда на английском языке, но если iPhone в любом другом языке, она возвращает название страны на этом языке ...

+4

Обратите внимание, что язык и язык настраиваются пользователем. Например, аборигенный англоязычный пользователь, который никогда не покидал США, но так уж получается, что изучение итальянского языка может изменить их язык и локали iPhone в Италию, а кто-то со своим телефоном, установленным на американский английский, может выехать за границу. Если вы действительно хотите узнать, в какой стране находится телефон, используйте геолокацию. –

+0

@ JeremyW.Sherman: Согласен. Используйте локаль, чтобы определить, как локализовать ваш контент, а не определять, где находится пользователь. – Alan

ответ

90

Запрос на английском локаль для DISPLAYNAME

так:

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

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

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

Вот немного кода для получения некоторой информации о доступных NSLocale-объектах в SWIFT, Просто поместите код в 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() 

Вы получите этот вид информации (пример):

You get this kind of information (example):

Смежные вопросы