프로그래밍 방식으로 iPhone의 로케일 통화 찾기
프로그래밍 방식으로 사용자의 iPhone에서 통화 로케일을 찾고 싶습니다. 즉, 사용자가 미국 스토어에있는 경우 통화 로케일은 USD, 호주의 경우 AUD 여야합니다. 이 작업의 목적은 앱에 나열된 항목 가격을 AppStore가 요청하는 가격과 거의 일치하도록 변환하는 것입니다.
예를 들어, 우리가 3 달러짜리 동영상을 팔고 호주인이 그것을 사고 싶어한다면 앱 화면에 2.8 AUD를 표시해야합니다. 그것은 그의 나라의 실제 가격보다 사용자의 계산을 줄일 것입니다. 아무도 그것을하는 방법을 알고 있습니까?
대부분의 경우 통화 기호로는 충분하지 않습니다. 예를 들어 독일에서는 가격을 1,99 €와 같이 작성하지만 미국에서는 $ 1.99를 사용합니다. 문자열에는 세 가지 차이점이 있습니다. 통화 기호, 위치 및 구분 기호입니다.
제대로하려면 NSNumberFormatter를 사용해야합니다. 통화 형식 간의 모든 차이점을 처리합니다. 그리고 그것은 당신보다 훨씬 낫습니다. 지원하려는 4 가지 주요 통화뿐만 아니라 모든 통화에 대해 수행하기 때문입니다.
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[NSLocale currentLocale]];
NSString *localizedMoneyString = [formatter stringFromNumber:myCurrencyNSNumberObject];
앱 내 구매에 이것을 사용하려면 DE (독일어) 로케일을 사용하는 장치에서 미국 기반 계정을 사용할 수 있기 때문에 사용자의 현재 로케일에 의존 할 수 없습니다. 아이템의 가격 (실제 가격은 독일에서 0,79 €)은 0,99 €로 표시됩니다 (미국에서는 $ 0.99이므로). 이것은 잘못된 것입니다. 앱 스토어에서 이미 현지화 된 가격을 받으므로 직접 계산할 필요가 없습니다.
그리고 각 SKProducts에 대한 가격과 priceLocale을 얻습니다.
다음과 같이 올바른 형식의 통화 문자열을 얻을 수 있습니다.
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];
편집 : 특별히 통화 코드를 요청했기 때문에.
당신은 그것을 얻을 수 있습니다 NSString *currencyCode = [formatter currencyCode];
이것은 당신에게 ISO 4217에 따라 통화 코드를 제공합니다. AUD, USD, EUR 등.
이 키를 사용하여 로케일에서 통화 기호 / 코드를 추출했습니다.
NSLocale *theLocale = [NSLocale currentLocale];
NSString *symbol = [theLocale objectForKey:NSLocaleCurrencySymbol];
NSString *code = [theLocale objectForKey:NSLocaleCurrencyCode];
내 앱에서 아래 코드를 사용하여 지역 통화 기호를 검색하고 구분 기호를 찾았습니다. 내가 당신을 도울 것입니다,
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
감사.
create macro first then use it
#define CURRENCY_SYMBOL [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]
NSLog(@"%@ %.2f",CURRENCY_SYMBOL,25.50);
Matthias Bauch는 신속하게 답변합니다.
var formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
formatter.locale = product!.priceLocale
var currencyString = "\(formatter.stringFromNumber(product!.price)!)"
답변 해 주셔서 감사합니다. 마침내 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
참조 URL : https://stackoverflow.com/questions/5036971/find-locale-currency-for-iphone-programmatically
'program story' 카테고리의 다른 글
Javascript 변경 날짜를 (dd / mm / yyyy) 형식으로 (0) | 2021.01.09 |
---|---|
파이썬에서 산점도에 선을 과도하게 그리는 방법은 무엇입니까? (0) | 2021.01.09 |
부울 배열의 모든 값이 참인지 확인하는 가장 우아한 방법은 무엇입니까? (0) | 2021.01.09 |
Maven- 현재 프로젝트 및 플러그인 그룹에서 접두사 'spring-boot'에 대한 플러그인을 찾을 수 없습니다. (0) | 2021.01.09 |
MAC의 Chrome 개발자 도구에서 필터링 된 메시지를 숨김 해제하는 방법 (0) | 2021.01.09 |