verificacion - Obtenga el código de país del nombre del país en iOS
se enviaron demasiados codigos iphone (10)
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
}
}
Estoy recuperando un nombre de país de un servidor en inglés. Por ejemplo, "España"
Lo que quiero hacer es que, asumiendo que el nombre del país se escribirá en inglés, obtenga el código del país.
¿Qué tengo que hacer? He encontrado que obtener el nombre del país desde el código de país es bastante fácil, pero no tengo idea de cómo hacer la operación opuesta.
Muchas gracias.
Así que esta solución funciona bien en swift 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!
En Swift 3 solo puedes usar
let currentLocale = NSLocale.current
var countries = NSLocale.isoCountryCodes
currentLocale.localizedString(forRegionCode: countries.first!)
En el Swift utilizará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
}
}
Obtener los datos:
strP2countrycode = NSLocale.locales1("PASS_COUNTRYNAME")
Esto es cómo hacer esto 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)
}
La answer de Jef ayudó aquí, con ligeras 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 través de ''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.
Mi versión compacta incluye la solución para hacer coincidir solo con la versión de nombres de países en inglés.
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) ?? ""
}
}
Una versión actualizada de Swift 4 de la solución @Daxesh Nagar :
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 del país de la siguiente manera
"GB"
Espero les ayude chicos!
Usando swift 3 (a algunas de las respuestas anteriores les falta 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
}
}
Swift 3.0:
Obtener el código de país y el nombre del país como Diccionario de NS
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)