Pregunta Obtener el código de país del nombre del país en IOS


Estoy recuperando el nombre de un país de un servidor en inglés. Por ejemplo, "España"

Lo que quiero hacer es, suponiendo que el nombre del país va a estar escrito en inglés, obtener el código de país.

¿Que debería hacer? He encontrado que obtener el nombre del país del código de país es bastante fácil, pero no tengo idea de cómo hacer la operación opuesta.

Muchas gracias.


19
2017-10-01 10:48


origen


Respuestas:


Jef's responder ayudado aquí, con pequeñas adiciones.

NSArray *countryCodes = [NSLocale ISOCountryCodes];
NSMutableArray *countries = [NSMutableArray arrayWithCapacity:[countryCodes count]];

for (NSString *countryCode in countryCodes)
{
    NSString *identifier = [NSLocale localeIdentifierFromComponents: [NSDictionary dictionaryWithObject: countryCode forKey: NSLocaleCountryCode]];
    NSString *country = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"] displayNameForKey: NSLocaleIdentifier value: identifier];
    [countries addObject: country];
}

NSDictionary *codeForCountryDictionary = [[NSDictionary alloc] initWithObjects:countryCodes forKeys:countries];

Ahora vaya a 'codeForCountryDictionary' con el nombre del país para el que necesita el código, por ejemplo,

NSLog(@"%@",[codeForCountryDictionary objectForKey:@"Spain"]);

arrojaría el resultado como 'ES', que es el código de país de 2 letras para España.


29
2017-11-30 09:39



En Swift usarás este código

extension NSLocale {
    class func locales1(countryName1 : String) -> String {
        var locales : String = ""
        for localeCode in NSLocale.ISOCountryCodes() {
            let countryName = NSLocale.systemLocale().displayNameForKey(NSLocaleCountryCode, value: localeCode)!
            if countryName1.lowercaseString == countryName.lowercaseString {
                return localeCode as! String
            }
        }
        return locales
    }


}

Obtenga los datos:

strP2countrycode = NSLocale.locales1("PASS_COUNTRYNAME")

3
2017-08-19 10:59



UN Swift 4 versión actualizada de @Daxesh Nagar solución:

private func locale(for fullCountryName : String) -> String {
    var locales : String = ""
    for localeCode in NSLocale.isoCountryCodes {
        let identifier = NSLocale(localeIdentifier: localeCode)
        let countryName = identifier.displayName(forKey: NSLocale.Key.countryCode, value: localeCode)
        if fullCountryName.lowercased() == countryName?.lowercased() {
            return localeCode as! String
        }
    }
    return locales
}

Para esta entrada como fullCountryName

"Reino Unido"

Devolverá el código de país de la siguiente manera

"GB"

Espero que les ayude chicos!


3
2018-02-14 15:28



En swift 3 solo puedes usar

let currentLocale = NSLocale.current
var countries = NSLocale.isoCountryCodes
currentLocale.localizedString(forRegionCode: countries.first!)

2
2017-09-12 14:36



Usando swift 3 (algunas de las respuestas anteriores faltan una pieza)

extension NSLocale {
class func locales1(countryName1 : String) -> String {
    let locales : String = ""
    for localeCode in NSLocale.isoCountryCodes {
        let countryName = (Locale.current as NSLocale).displayName(forKey: .countryCode, value: localeCode)
        if countryName1.lowercased() == countryName?.lowercased() {
            return localeCode
        }
    }
    return locales
}
}

1
2018-02-10 17:02



Mi versión compacta incluye la solución para comparar solo con la versión en inglés de los nombres de países.

extension NSLocale
{
    class func localeForCountry(countryName : String) -> String?
    {
        return NSLocale.ISOCountryCodes().first{self.countryNameFromLocaleCode($0 as! String) == countryName} as? String
    }

    private class func countryNameFromLocaleCode(localeCode : String) -> String
    {
        return NSLocale(localeIdentifier: "en_UK").displayNameForKey(NSLocaleCountryCode, value: localeCode) ?? ""
    }
}

1
2017-09-09 00:11



Swift 3.0:

Obteniendo el código del país y el nombre del país como NS Dictionary-

let countryCodes: [AnyObject] = NSLocale.isoCountryCodes as [AnyObject]

        let countries: NSMutableArray = NSMutableArray(capacity: countryCodes.count)

        for countryCode in countryCodes {
            let identifier: String = NSLocale.localeIdentifier(fromComponents: NSDictionary(object: countryCode, forKey: NSLocale.Key.countryCode as NSCopying) as! [String : String])
            let country: String = NSLocale(localeIdentifier: "en_US").displayName(forKey: NSLocale.Key.identifier, value: identifier)!
            countries.add(country)
        }
        let codeForCountryDictionary: [NSObject : AnyObject] = NSDictionary(objects: countryCodes, forKeys: countries as! [NSCopying]) as [NSObject : AnyObject]

        print(codeForCountryDictionary)

1
2017-07-14 11:24



aquí está el código de Daxesh Negar en swift 3

    extension NSLocale {
    class func locales1(countryName1 : String) -> String {
        let locales : String = ""
        for localeCode in NSLocale.isoCountryCodes {
            let countryName = Locale.current.regionCode
            if countryName1.lowercased() == countryName?.lowercased() {
                return localeCode
            }
        }
        return locales
    }
}

0
2017-10-06 18:35



Esta es la forma de hacerlo en Swift 4.0 (también funciona en Swift 3.2).

NSLocale.isoCountryCodes.forEach { (code) in
    print(code)
    let name = NSLocale(localeIdentifier: "zh_CN").displayName(forKey: NSLocale.Key.countryCode, value: code)
    print(name)
}

0
2017-11-10 10:11



Entonces esta solución funciona bien en rápida 4 tomada de los comentarios anteriores ...

extension NSLocale {
   struct Locale {
    let countryCode: String
    let countryName: String
   }

  class func locales() -> [Locale] {

    var locales = [Locale]()

    for localeCode in NSLocale.isoCountryCodes {
        let identifier = NSLocale(localeIdentifier: localeCode)
        let countryName = identifier.displayName(forKey: NSLocale.Key.countryCode, value: localeCode)!
        let countryCode = localeCode
        let locale = Locale(countryCode: countryCode, countryName: countryName)
        locales.append(locale)
    }

    return locales.sorted{$0.countryName.localizedCaseInsensitiveCompare($1.countryName) == ComparisonResult.orderedAscending}
 }
}

¡disfrutar!


0
2018-02-15 21:32