program story

프로그래밍 방식으로 iPhone의 로케일 통화 찾기

inputbox 2021. 1. 9. 09:52
반응형

프로그래밍 방식으로 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

반응형