Локализуйте валюту для iPhone - PullRequest
16 голосов
/ 13 мая 2009

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

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

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

1 Ответ

32 голосов
/ 13 мая 2009

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 это $ 5,00.

...