apple - Encuentra la moneda local para iPhone programáticamente
iphone se (6)
Quiero averiguar la configuración regional de la moneda en el iPhone del usuario mediante programación. Eso significa que, si el usuario está en la tienda de EE. UU., La configuración regional de la moneda debería ser USD, para Australia, debería ser AUD. Mi propósito de esta tarea es tratar de convertir el precio del artículo que aparece en nuestra aplicación para que coincida casi con el precio que pide el AppStore.
Por ejemplo, si vendemos un video 3 usd, y un australiano quiere comprarlo, entonces debería mostrar 2.8 AUD en la pantalla de mi aplicación. Reducirá el cálculo en el usuario sobre el precio real en su país. ¿Alguien sabe cómo hacerlo?
En la mayoría de los casos, el símbolo de moneda no será suficiente. Por ejemplo, en Alemania escribimos nuestros precios de esta manera: 1,99 € pero la gente en los Estados Unidos usa $ 1.99. Hay tres diferencias en la cadena. El símbolo monetario, la posición del mismo y el separador.
Si quieres hacerlo bien, debes usar un NSNumberFormatter. Se encarga de todas las diferencias entre los formatos de moneda. Y lo hace mucho mejor que tú. Porque lo hace para todas las monedas, no solo para las 4 monedas principales que desea admitir.
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[NSLocale currentLocale]];
NSString *localizedMoneyString = [formatter stringFromNumber:myCurrencyNSNumberObject];
Si desea usar esto para la compra de la aplicación, no puede confiar en la configuración regional actual de los usuarios, ya que es posible usar una cuenta con sede en EE. UU. En un dispositivo con una configuración regional DE (alemana). Y el precio de su artículo (el precio real es de 0,79 € en Alemania) se mostraría como 0,99 € (porque cuesta $ 0,99 en los EE. UU.). Esto estaría mal. Ya tienes un precio localizado en la tienda de aplicaciones, no es necesario que hagas cálculos por tu cuenta.
Y obtienes un precio y un precioLocal para cada uno de tus SKProducts.
Obtendría la cadena de moneda formateada correcta como esta:
SKProduct *product = [self.products objectAtIndex:indexPath.row];
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:product.priceLocale];
currencyString = [formatter stringFromNumber:product.price];
EDITAR: ya que solicitó específicamente el código de moneda.
Puede obtenerlo con NSString *currencyCode = [formatter currencyCode];
Esto le dará el código de moneda según ISO 4217. AUD, USD, EUR y así sucesivamente.
Matthias Bauch responde de manera rápida:
var formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
formatter.locale = product!.priceLocale
var currencyString = "/(formatter.stringFromNumber(product!.price)!)"
Usé el código de abajo en mi aplicación para recuperar el signo de la curiosidad local y encontrar los delimitadores. Te ayudaré,
NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithString:@"50.00"];
NSNumberFormatter *currencyFormat = [[NSNumberFormatter alloc] init];
NSLocale *locale = [NSLocale currentLocale];
[currencyFormat setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormat setLocale:locale];
NSLog(@"Amount with symbol: %@", [currencyFormat stringFromNumber:amount]);//Eg: $50.00
NSLog(@"Current Locale : %@", [locale localeIdentifier]);//Eg: en_US
Gracias.
Utilicé estas claves para extraer símbolos / códigos de moneda de las ubicaciones
NSLocale *theLocale = [NSLocale currentLocale];
NSString *symbol = [theLocale objectForKey:NSLocaleCurrencySymbol];
NSString *code = [theLocale objectForKey:NSLocaleCurrencyCode];
gracias por tu respuesta. Finalmente me di cuenta de que puedo recuperar el precio y el código de moneda directamente de Apple:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSArray *products = response.products;
if (products && products.count != 0) {
product = [products objectAtIndex:0];
[[NSNotificationCenter defaultCenter] postNotificationName:PRICE_UPDATED object:product.LocalizedPrice];
}
// finally release the reqest we alloc/init’ed in requestProUpgradeProductData
[productsRequest release];
}
@implementation SKProduct (LocalizedPrice)
- (NSString *)LocalizedPrice
{
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:self.priceLocale];
NSString *formattedString = [numberFormatter stringFromNumber:self.price];
[numberFormatter release];
return formattedString;
}
@end
create macro first then use it
#define CURRENCY_SYMBOL [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]
NSLog(@"%@ %.2f",CURRENCY_SYMBOL,25.50);