16

iPhone アプリで、ユーザーが適切な記号 ($、€、₤、¥ など) を使用して金額を入力、表示、保存できるようにしたいと考えています。

NSNumberFormatter は私が必要とするすべてを行いますか? ユーザーがロケールを切り替え、これらの金額 (ドル、円など) が NSDecimalNumbers として格納されるとどうなりますか。安全のために、エントリ時にロケールをキャプチャしてから通貨記号をキャプチャし、それらを NSDecimalNumber ivar とともにインスタンスに保存して、ユーザーが変更した場合にラップを解除して適切に表示できるようにする必要があると思いますアイテムが作成されたときからのロケールは?

申し訳ありませんが、ローカリゼーションの経験がほとんどないので、飛び込む前にいくつかの簡単な指針を期待しています。最後に、iPhone のキーボードの制限を考慮して、この種の入力を処理する方法についての洞察はありますか?

4

1 に答える 1

32

NSNumberFormatter は間違いなく行く方法です! NSNumberFormatter に NSLocale を設定すると、フォーマッタはそのロケールに従って自動的に動作します。数値フォーマッタのデフォルトのロケールは、常にユーザーが選択した地域形式の通貨です。

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.00nl-NL のようにフォーマットされ$ 5,00ます。

于 2009-05-13T13:29:56.207 に答える