私のアプリをテストしています。ロケールをドイツに変更する場合を除いて、すべて正常に動作しています。iphoneアプリで通貨をローカライズ
基本的に2つの値を現地通貨で入力すると、計算が行われ、ユーザーは情報を取得します。
ユーザの数値入力はうまく処理されます。つまり、「編集終了」では、メソッドを実行して数値をその相当の現地通貨に変換します。したがって、米国のユーザーが10000を入力すると、$ 10,000.00が返されます。コードは次のとおりです。
- (NSMutableString *) formatTextValueToCurrency: (NSMutableString *) numberString {
NSNumber *aDouble = [NSNumber numberWithFloat: [numberString floatValue]];
NSMutableString *aString = [NSMutableString stringWithCapacity: 20];
NSLocale *theLocale;
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
theLocale = [NSLocale currentLocale];
[currencyStyle setLocale: theLocale];
[aString appendString: [currencyStyle stringFromNumber:aDouble]];
[currencyStyle release];
return aString;
}
しかし、上記の通貨の値を処理してユーザーの情報を取得するときに問題が発生します。つまり、アプリは計算方法に送信するために、$ 10,000.00(または何らかの通貨)から10000を取得する必要があります。コードは次のとおりです。
- (float) getValueFromCurrency: (id) sender {
NSNumber *aDouble = [NSNumber numberWithFloat: 0.0];
UITextField *textField = (UITextField *) sender;
NSMutableString *aString= [NSMutableString stringWithCapacity: 20];
NSLocale *theLocale;
float result;
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
theLocale = [NSLocale currentLocale];
[currencyStyle setLocale: theLocale];
NSLog(@"The locale is %@", currencyStyle.locale.localeIdentifier);
//Above NSLog looks good because it returns de_DE
[aString appendString: textField.text];
//The append from text field to string is good also
aDouble = [currencyStyle numberFromString: aString];
//For some reason, nil is returned
result = [aDouble floatValue];
[currencyStyle release];
return result;
}
何らかの理由で、米国、イギリス、日本、アイルランドのロケールは問題ありません。
ヨーロッパのヨーロッパ諸国は働いていません。
これを修正する方法についてのアドバイスは素晴らしいと思います。