Подтвердить что ты не робот

Локализовать валюту для iPhone

Я хочу, чтобы мое приложение iPhone позволяло вводить, отображать и хранить суммы в валюте, используя для этого соответствующий символ ($, €, ₤, ¥ и т.д.).

Будет ли NSNumberFormatter делать все, что мне нужно? Что происходит, когда пользователь переключает свою локаль, и эти суммы (доллары, иены и т.д.) Сохраняются как NSDecimalNumbers. Я полагаю, что для того, чтобы быть в безопасности, необходимо как-то захватить локаль во время ввода, а затем символ валюты и сохранить их в моем экземпляре вместе с NSDecimalNumber ivar, чтобы они могли быть развернуты и отображены соответствующим образом по дороге, если пользователь изменит их локаль с момента создания элемента?

Извините, у меня мало опыта локализации, так что надеюсь на пару быстрых указателей перед погружением. Наконец, любое понимание того, как вы обрабатываете такой вход, учитывая ограничения на клавиатуру iPhone?

4b9b3361

Ответ 1

NSNumberFormatter - это, безусловно, путь! Вы можете установить NSLocale на NSNumberFormatter, форматтер будет автоматически вести себя в соответствии с этой локалью. Языковой стандарт по умолчанию для форматирования чисел всегда является валютой для выбранного региона региона.

NSDecimalNumber *someAmount = [NSDecimalNumber decimalNumberWithString:@"5.00"];

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSLog(@"%@", [currencyFormatter stringFromNumber:someAmount]);

Это будет регистрировать сумму "5,00" в соответствии с форматом региона по умолчанию для пользователей. Если вы хотите изменить валюту, которую вы можете установить:

NSLocale *aLocale = [[NSLocale alloc] initWithLocaleIdentifier: "nl-NL"]
[currencyFormatter setLocale:aLocale];

который выберет валюту по умолчанию для этой локали.

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

currencyFormatter.currencyCode = @"USD"
currencyFormatter.internationalCurrencySymbol = @"$"
currencyFormatter.currencySymbol = @"$"

В en-US это будет отформатировано как $5.00 в nl-NL it $ 5,00.