Поиск языковой валюты для iphone программно
Я хочу, чтобы узнать языковой стандарт на пользовательском iphone программно. Это означает, что если пользователь находится в US Store, валюта должна быть USD, для Австралии - AUD. Моя цель этой задачи - попытаться конвертировать цену товара, указанную в нашем приложении, в соответствие с ценой, которую запрашивает AppStore.
Например, если мы продаем видео 3 доллара США, а австралиец хочет его купить, тогда я должен показать 2,8 AUD на экране своего приложения. Это уменьшит расчет в пользователе по реальной цене в его стране. Кто-нибудь знает, как это сделать?
Ответы
Ответ 1
В большинстве случаев символа валюты будет недостаточно. Например, в Германии мы пишем наши цены следующим образом: 1,99 €, но люди в США используют 1,99 доллара США. В строке есть три отличия. Символ валюты, его положение и разделитель.
Если вы хотите сделать это правильно, вы должны использовать NSNumberFormatter. Он заботится обо всех различиях между форматами валют. И это намного лучше, чем вы. Потому что он делает это для всех валют, а не только для 4 основных валют, которые вы хотите поддержать.
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[NSLocale currentLocale]];
NSString *localizedMoneyString = [formatter stringFromNumber:myCurrencyNSNumberObject];
Если вы хотите использовать это для покупки приложения, вы не можете полагаться на текущую локаль пользователей, потому что можно использовать учетную запись в США на устройстве с немецким языковым стандартом. И цена вашего товара (фактическая цена 0,79 € в Германии) будет показывать как 0,99 € (потому что она стоит 0,99 доллара США). Это было бы неправильно. Вы получаете локализованную цену уже из магазина приложений, вам не нужно делать расчеты самостоятельно.
И вы получаете цену и priceLocale для каждого из ваших SKProducts.
Вы получите правильную форматированную строку валюты следующим образом:
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];
EDIT: поскольку вы специально запросили код валюты.
Вы можете получить его с помощью NSString *currencyCode = [formatter currencyCode];
. Это даст вам код валюты в соответствии с ISO 4217. AUD, USD, EUR и так далее.
Ответ 2
Я использовал эти ключи для извлечения символов/кодов валюты из локалей
NSLocale *theLocale = [NSLocale currentLocale];
NSString *symbol = [theLocale objectForKey:NSLocaleCurrencySymbol];
NSString *code = [theLocale objectForKey:NSLocaleCurrencyCode];
Ответ 3
Я использовал ниже код в своем приложении для извлечения локального знака curreny и поиска разделителей. Я помогу вам,
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
Спасибо.
Ответ 4
create macro first then use it
#define CURRENCY_SYMBOL [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]
NSLog(@"%@ %.2f",CURRENCY_SYMBOL,25.50);
Ответ 5
Маттиас Баух отвечает быстрым:
var formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
formatter.locale = product!.priceLocale
var currencyString = "\(formatter.stringFromNumber(product!.price)!)"
Ответ 6
спасибо за ваш ответ. Я наконец понял, что я могу получить цену и код валюты прямо из 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