2009-06-26 11 views
2

Ich teste meine App. Alles funktioniert gut, außer wenn ich die Standorte nach Deutschland ändere.Lokalisierung von Währungen in iPhone App

Im Grunde geben Sie 2 Werte in Ihrer lokalen Währung ein, eine Berechnung geschieht und der Benutzer erhält Informationen zurück.

Benutzer numerische Eingaben werden gut verarbeitet. Das heißt, bei "Editing Did End" wird eine Methode ausgeführt, die die Zahl in die entsprechende äquivalente Währung in der lokalen Währung umwandelt. Wenn US-Nutzer 10000 eingeben, erhalten sie $ 10.000,00 zurück. Hier ist der Code:

- (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; 

} 

jedoch ein Problem tritt auf, wenn ich die oben genannten Währungswerte verarbeiten will den Benutzer seine/ihre Informationen zu erhalten. Das heißt, die App muss jetzt 10000 von 10.000,00 (oder in welcher Währung) erhalten, um sie in die Berechnungsmethode zu senden. Hier ist der Code:

- (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; 
} 

Aus irgendeinem Grund sind die US, UK, Japanisch und Irish Locales in Ordnung.

Kontinentaleuropäische Länder funktionieren nicht.

Jeder Ratschlag, wie man das beheben könnte, wäre großartig.

Antwort

2

Angesichts der Code funktioniert für die USA, Großbritannien, Japan und Irland, aber nicht Festland Europa (Deutschland) Ich würde überprüfen, wie Sie die Tausende und den Dezimaltrenner behandeln.

Das heißt, in den Ländern, die für Ihren Code arbeiten, ist das Tausendertrennzeichen das Komma und die Dezimalstelle ist der Punkt (Punkt). Also 10000 Dollar und 50 Cent wären 10.000,50.

Auf dem europäischen Festland (Deutschland usw.) ist der Tausendertrenner der Punkt (Punkt) und der Dezimaltrenner ist das Komma. So ist der obige Wert in Deutschland wäre 10.000,50

NSNumberFormatter hat zwei Methoden, die Sie vielleicht wollen, betrachten: -

  • (NSString *) currencyDecimalSeparator
  • (NSString *) currencyGroupingSeparator

Sie können eine Liste der Länder in WIKI (http://en.wikipedia.org/wiki/Decimal_separator) für jedes der Formate finden und testen, ob Ihr Problem nur für eine Gruppe ist oder nicht.

Ich hoffe, dass hilft.

Cheers,

Kevin