cocoa currency symbols

cocoa - ¿Cómo puedo obtener los símbolos de moneda del código de moneda en iphone?



currency symbols (8)

Basándose en el código de @Mike Abdullah y @Umka, aquí hay algunas funciones en Swift.

func findCodeAndSymbolForAllLocales() { let locales = NSLocale.availableLocaleIdentifiers() for localeId in locales { let locale = NSLocale(localeIdentifier: localeId) if let code = locale.objectForKey(NSLocaleCurrencyCode) as? String, let symbol = locale.objectForKey(NSLocaleCurrencySymbol) { print("/(code) /(symbol)") } } } func findCurrencySymbolByCode(currencyCode:String) -> String? { guard let locale = findLocaleByCurrencyCode(currencyCode) else { print("locale for /(currencyCode) is nil") return nil } return locale.objectForKey(NSLocaleCurrencySymbol) as? String } func findLocaleByCurrencyCode(currencyCode:String) -> NSLocale? { let locales = NSLocale.availableLocaleIdentifiers() var locale:NSLocale? for localeId in locales { locale = NSLocale(localeIdentifier: localeId) if let code = locale!.objectForKey(NSLocaleCurrencyCode) as? String { if code == currencyCode { return locale } } } return locale }

Recibo el código de moneda (Ej .: USD, EUR, INR) de la respuesta del servicio web. Necesito mostrar los símbolos de moneda para el código de moneda correspondiente. Si el código de moneda es USD, necesito mostrar $, si el código de moneda es EUR, necesito mostrar €. ¿Cómo puedo hacer esto? Por favor sugiera alguna idea o código de muestra para hacer esto. Por favor, ayúdame. Gracias por adelantado.


Este código es lo que está buscando, aunque no es muy eficiente debido al bucle para locales. Todavía funciona correctamente para todos los códigos de moneda, no solo para eur o usd. Espero que esto te ayudará.

- (NSLocale *) findLocaleByCurrencyCode:(NSString *)_currencyCode { NSArray *locales = [NSLocale availableLocaleIdentifiers]; NSLocale *locale = nil; for (NSString *localeId in locales) { locale = [[[NSLocale alloc] initWithLocaleIdentifier:localeId] autorelease]; NSString *code = [locale objectForKey:NSLocaleCurrencyCode]; if ([code isEqualToString:_currencyCode]) break; else locale = nil; } return locale; } - (NSString *)findCurrencySymbolByCode:(NSString *)_currencyCode { NSNumberFormatter *fmtr = [[NSNumberFormatter alloc] init]; NSLocale *locale = [self findLocaleByCurrencyCode:_currencyCode]; NSString *currencySymbol; if (locale) [fmtr setLocale:locale]; [fmtr setNumberStyle:NSNumberFormatterCurrencyStyle]; currencySymbol = [fmtr currencySymbol]; [fmtr release]; if (currencySymbol.length > 1) currencySymbol = [currencySymbol substringToIndex:1]; return currencySymbol; }

Úsalo de esta manera:

NSString *currencySymbol = [self findCurrencySymbolByCode:currencyCode];


Este código funciona encanto en mi proyecto. Voy a compartir esto con todos ustedes.

NSString *currencyCode = @"EUR"; NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:currencyCode] autorelease]; NSString *currencySymbol = [NSString stringWithFormat:@"%@",[locale displayNameForKey:NSLocaleCurrencySymbol value:currencyCode]]; NSLog(@"Currency Symbol : %@", currencySymbol);

Gracias.


Rápido

let locale = NSLocale(localeIdentifier: currencyCode) let currencySymbol = locale.displayName(forKey: .currencySymbol, value: currencyCode) ?? currencyCode print("Currency symbol: /(currencySymbol)")


Versión Swift 4

Localización de local por código de moneda:

let localeGBP = Locale .availableIdentifiers .lazy .map { Locale(identifier: $0) } .first { $0.currencyCode == "GBP" } print(localeGBP?.currencySymbol) // £

Formato de moneda

if let locale = localeGBP { let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = locale let result = formatter.string(from: 100000) // £100,000.00 }

Editar:

¿Por qué .lazy ? Sin él, el bucle se ejecutaría sobre todos los identificadores de configuración regional y devolvería el primero que coincida. Eso es alrededor de 700 identificadores, y si el primero es el que desea, desperdició la creación de 699 Locales :) Con .lazy allí, se detiene automáticamente en el primero. En mi caso, reduce el número de veces a través del bucle de 710 a 22 al convertir "GBP". Esto no es importante si solo hace esto una vez, pero si lo hace varias veces (es decir, sobre un conjunto de símbolos), es una forma fácil de obtener un poco más de eficiencia.


NSLocale , NSLocale le dirá el símbolo de moneda utilizado por una configuración regional en particular:

[locale objectForKey:NSLocaleCurrencySymbol];

También te dirá el código de moneda:

[locale objectForKey:NSLocaleCurrencyCode];

Entonces, todo lo que tiene que hacer ahora es buscar la configuración regional que corresponde a un código dado. No hay ningún método incorporado (que yo sepa) para hacer esto directamente, así que recorra todos los locales conocidos y elija el que coincida. La answer @ Umka tiene un buen ejemplo de esto en el método -findLocaleByCurrencyCode: .

Puede optimizar el proceso construyendo su propia tabla de búsqueda, en lugar de iterar a través de todas las configuraciones regionales cada vez. Es posible que deba manejar la posibilidad de códigos de moneda duplicados también, lo que requeriría cierta heurística para decidir cuál es la ubicación más probable.


NSNumberFormatter * formatter = [NSNumberFormatter new]; formatter.numberStyle = NSNumberFormatterCurrencyStyle; NSString * localeIde = [NSLocale localeIdentifierFromComponents:@{NSLocaleCurrencyCode: currencyCode}]; formatter.locale = [NSLocale localeWithLocaleIdentifier:localeIde]; NSString * symbol = formatter.currencySymbol;


NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init]; [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

Esto es para el estilo de moneda de los Estados Unidos.

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; //[numberFormatter setCurrencySymbol:@"Rs"]; [numberFormatter setNumberStyle:@"en_IN"];

Esto es para indio