валютные проблемы с локалями

В моем приложении правильно отображается символ валюты пользователя с помощью этой строки:

 NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];

И когда я меняю язык своего устройства, символ верен для выбранной страны.

Что я обнаружил, так это то, что денежная стоимость, кажется, остается в фунтах стерлингов?

Итак, у меня есть цена, установленная в iTunes Connect на уровне 1,49 фунтов стерлингов, но когда я изменяю, чтобы сказать, что Германия, отображается 1,49 евро, а не 1,70 евро?

У меня сложилось впечатление, что цена, полученная устройством от iTunes Connect, будет в валюте пользователя, не так ли?

Излишне говорить, что я в панике .... что-нибудь посоветуете, пожалуйста?


person user7865437    schedule 14.07.2011    source источник


Ответы (3)


Если вы не планируете вызывать веб-службу по обмену валюты каждый раз, когда отображаете сумму, вам нужно оставить символ валюты в исходной локали (£). Причина этого в том, что обменные курсы колеблются, что не запрограммировано в API, поэтому цена не будет автоматически обновляться в вашем коде.

Когда пользователь подключается к iTunes напрямую, он увидит правильную цену, потому что Apple уже выполнила конвертацию валюты на своей стороне. Ваш код должен будет выполнять свои собственные преобразования.

person Joe    schedule 14.07.2011
comment
Единственным другим способом получить его автоматически было бы отправить культуру пользователя вместе с запросом магазина iTunes и позволить им преобразовать ее для вас. - person GalacticCowboy; 14.07.2011
comment
Я все еще в замешательстве, так как мне сообщили, что пользователь в Австралии увидел правильную сумму в австралийских долларах, но с символом £, поэтому она выглядела дороже. Точно так же пользователи в Китае снова увидели правильное значение юаня, но снова с символом £, заставляющим их думать, что приложение намного дороже. Получается, когда мое приложение получало цену от iTunes connect, оно конвертировалось? Но поскольку Apple изменила ценовые категории, теперь всегда отображается цена в фунтах стерлингов???? - person user7865437; 15.07.2011
comment
Как вы получаете цену? Вы имеете в виду в App Store или в своем собственном приложении. - person Joe; 15.07.2011

У меня такая цена:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response {

NSArray *a = [NSArray arrayWithArray:response.products];

SKProduct *p = [a count] == 1 ? [a objectAtIndex:0] : nil;


// if we have a product store the price, otherwise 

if (p) {

    NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];

    [self setPriceText:[NSString stringWithFormat:@"%@%@",sym, p.price]];

    [self setProductFound:YES];
}
else {

    [self setPriceText:@"Upgrade product not found"];

    [self setProductFound:NO];        
}

[request release];

}

person user7865437    schedule 14.07.2011

Теперь я узнал, что это правильный способ отображения локализованной цены:

    NSArray *a = [NSArray arrayWithArray:response.products];

SKProduct *p = [a count] == 1 ? [a objectAtIndex:0] : nil;

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];

[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

[numberFormatter setLocale:p.priceLocale];

NSString *formattedString = [numberFormatter stringFromNumber:p.price];

Однако я по-прежнему получаю ту же денежную стоимость независимо от того, какую локаль я установил на устройстве, из того, что я читаю в других сообщениях здесь и в документах Apple, я должен видеть денежную стоимость локали ???

person user7865437    schedule 15.07.2011