Правильный символ местной валюты для покупки приложения

При покупке в приложении я хочу, чтобы символ местной валюты явно соответствовал местной валюте пользователей. Безопасно ли использовать NSLocaleCurrencySymbol в качестве основного источника обнаружения того, где находится пользователь. Вот часть моего кода:

         NSLocale *theLocale = [NSLocale currentLocale];
     NSString *symbol = [theLocale objectForKey:NSLocaleCurrencySymbol];
     NSString *cost = [NSString stringWithFormat:@"%@",product.price];

По умолчанию правильный формат региона автоматически выполняется в международных настройках на каждом устройстве, когда пользователь покупает устройство iOS ??


person pete    schedule 12.04.2014    source источник


Ответы (4)


Вы хотите использовать NSNumberFormatter< /а>:

Цель-C

NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:product.priceLocale]; 
NSString *cost = [formatter stringFromNumber:product.price];

Свифт

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.locale = product.priceLocale
let cost = formatter.stringFromNumber(product.price)

Это затем отформатирует валюту с правильной десятичной дробью, разделителем и символом валюты.

person Rich    schedule 12.04.2014
comment
Есть ли способ проверить это, потому что, если я изменяю международные настройки на своем iphone, моя покупка в приложении всегда показывает символ валюты Великобритании (£) ?? - person pete; 12.04.2014
comment
Он использует локаль (и, следовательно, валюту) SKProduct, а не устройства, поэтому вы фактически его тестируете :) - person Rich; 12.04.2014
comment
Итак, есть ли способ проверить символ валюты? - person pete; 12.04.2014
comment
Вы тестируете его таким образом, как если бы вы изменили международные настройки, и это не меняет символ валюты, с которым он работает. Я полагаю, вы могли бы найти международную настройку, в которой есть валюта, в которой также используются фунты, а затем пользовательский интерфейс может отображать GBP вместо этого, поскольку отображение £ может сбить пользователей с толку. Например, доллары США и австралийские доллары. - person Rich; 12.04.2014
comment
Хорошая идея - Спасибо, Рич. - person pete; 12.04.2014
comment
Создайте тестовую учетную запись в другом магазине (вы можете указать страну при открытии тестовой учетной записи). таким образом, вы могли видеть, в порядке ли валюта. - person shannoga; 12.04.2014
comment
@Богатый ! Спасибо за публикацию. Быстрый вопрос, это всегда будет возвращать окончательную цену + символ (0,99 $, 1,99 $) и т. д. цена + символ? - person Roi Mulia; 27.04.2016
comment
@RoiMulia да будет - person Rich; 27.04.2016

Обновлен до Swift 3.0 и как расширение SKProduct:

import StoreKit

extension SKProduct {
    func getLocalizedPrice()->String{
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        formatter.locale = self.priceLocale
        if let formated = formatter.string(from: self.price) {
            return formated
        } else {
            return "\(self.price)"
        }
    }
}
person Janusz Chudzynski    schedule 30.08.2016
comment
Хороший ответ. Просто имейте в виду, что метод форматирования string(from: Number) возвращает необязательный параметр, поэтому вам нужно либо указать String? в качестве типа возвращаемого значения, либо принудительно развернуть перед возвратом. - person Andy Ibanez; 14.05.2017

Вам не нужно этого делать, SKProduct поставляется с локальным хранилищем пользователя, вы можете использовать -

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:product.priceLocale];
NSString *formattedString = [numberFormatter stringFromNumber:product.price];

Смотри сюда -

Документы Apple

person shannoga    schedule 12.04.2014
comment
спасибо за вашу помощь - но какой бы региональный формат я ни установил на своем iPhone, он всегда выходит как моя местная валюта (£). Например, на моем iPhone, если я устанавливаю формат региона как США, когда я проверяю покупку в приложении, он все равно показывает £ (фунты), а не доллары США ?? - person pete; 12.04.2014
comment
Да, потому что формат SKProduct задается страной App Store, в которой зарегистрирован пользователь. Если вы попытаетесь установить местную цену самостоятельно, вы представите пользователям неправильную цену. Вы должны проверить это, открыв тестовую учетную запись в другом магазине приложений и проверив валюту. - person shannoga; 12.04.2014

В быстром

var currency_format = NSNumberFormatter()
currency_format.numberStyle = NSNumberFormatterStyle.CurrencyStyle
currency_format.locale = validProduct.priceLocale
mylabel.text = currency_format.stringFromNumber(validProduct.price)
person tock    schedule 09.12.2014